항상 양수이거나 항상 음수이므로 항상 입력된 gradient와 같은 부호 → W는 모두 같은 방향으로만 움직일 것
그러면 gradient 업데이트가 효율적이지 않다.
문제점3 : exp()로 인해 계산 비용이 크다.
Activation Functions : tanh
zero-centered 문제는 해결되었으나, saturation 문제는 여전히 해결되지 않았다.
Activation Functions : ReLU
x가 양수이면 saturation되지 않는다.
계산 효율이 좋다. (약 6배)
문제점1 : ReLU는 더이상 zero-centered가 아니다.
문제점2 : x가 음수이면 gradient가 0이되어 gradient의 절반을 죽여 dead ReLU 현상을 겪을 수 있다.
leaky ReLU : negative regime에서 더이상 0이 아니고 dead ReLU 현상이 없다.
PReLU : negative space에서 기울기가 있는데, 이때 기울기는 alpha라는 파라미터로 결정되어 활성함수가 더 유연하다고 할 수 있다.
Data Preprocessing
대표적인 전처리 과정 : zero-mean → normalize
전처리를 하는 이유 : 모든 차원이 동일한 범위 안에 있게 해주어 모든 동든한 contribute
이미지의 경우 스케일이 어느정도 맞춰져 있어 zero-centering만 해준다.
평균값은 전체 학습 데이터로 계산하고 test데이터에도 동일하게 적용
RGB별로 각각 평균내는 경우도 있다.
Weight Initialization
모든 파라미터를 0으로 설정한다면 모든 뉴런이 똑같은 일을 해서 출력과 gradient가 서로 같을 것이다. 따라서 모든 뉴런이 같은 방식으로 업데이트 된다.
초기화 문제를 해결하는 방법 1 : 임의의 작은 값으로 초기화하는 것
초기 W를 표준정규분포에서 샘플링한다.
출력값이 점점 0에 가까워지고 결론적으로 입력값이 0에 수렴
초기화 문제를 해결하는 방법 2 : 좀 더 큰 값으로 초기화하는 것(Xavier Initialization)
standard gaussian으로 뽑은 값을 입력값으로 스케일링 해준다.
입력값이 작으면 더 작은 값으로 나눠 입력값보다는 조금 더 큰 값을 얻어 입출력의 분산을 맞춘다.
ReLU를 사용하면 뉴런 중 절반이 없어지므로 값이 너무 작아지므로 /2를 통해 절반이 없어졌다는 사실을 고려하도록 하여 작동시키면 쓸만하다.
Batch Normalization
강제로 레이어의 출력을 unit gaussian으로 만든다.
Batch단위로 한 레이어에 입력으로 들어오는 모든 값을 계산한 평균과 분산을 이용해 정규화함으로써 구현
평균과 분산을 상수로 가지고 있으면 언제든 미분이 가능하고 Backpropogation이 가능하다.
Batch당 N개의 학습 데이터가 있고, 각 데이터가 D차원이라 할 때, 각 차원별로 평균을 구해주고 한 Batch내에서 모두 계산해 Normalize하고 FC나 Conv Layer 직후에 넣어준다. Conv Layer는 같은 Activation Map의 같은 채널 요소들은 같이 정규화해준다.
문제점 : normalization을 통해 입력이 tanh의 linear한 영역에만 존재하도록 강제하면 saturation은 일어나지 않는다.
해결 : saturatiaon을 조절하자 scaling 연산을 추가한다.
Babysitting the Learning Process
데이터 전처리
아키텍쳐 선택
네트워크 초기화
초기 loss 체크
soft max라면 로그 체크, 이후 regularization term 추가후 loss 증가 체크
데이터 일부만 학습시켜보기
regularization 사용 x
epoch마다 loss 내려가는지 확인, train accuracy 증가 확인
learning rate 정하기
regulaization 후 learning rate 찾기
learning rate가 작으면 gradient 업데이트가 충분히 일어나지 않아 loss가 잘 줄지 않는다.
보통 e-3 e-5 사이 사용
Hyperparameter Optimization
cross-valindation은 training set으로 학습시키고 validation set으로 평가하는 방식
coarse stage: epoch 몇번으로 좋은지 아닌지 판단가능
넓은 범위에서 값을 골라낸다.
fine stage: 범위는 더 좁게, 학습은 좀 더 길게
학습하는 동안 cost 변화를 보고 이전 cost보다 더 커지면 잘못하는 중인 것이다.
Cost가 빠르게 오르면 loop를 멈추고 다른 Hyperparameter 선택
하이퍼 파라미터 최적화시에는 learning rate가 gradient와 곱해지므로 log scale로 값을 주는 것이 좋다.
gird search : 하이퍼 파라미터를 고정도니 값과 간격으로 샘플링 ←이것보단 random search가 더 좋다.
loss curve : 어떤 learning rate가 좋은지 알 수 있다.
loss가 발산하면 learning rate가 높은 것이고, 너무 평평하면 낮은것
가파르게 내려가다가 정체기가 생기는 것도 learning rate가 높다는 의미
최적의 learning rate는 비교적 가파르게 내려가면서도 지속적이어야 한다.
평평하다가 갑자기 가파르게 내려가면 초기화 문제
train_acc와 va_acc가 큰 차이를 보인다면 overfitting 가능성 있음 → regularization의 강도 높이기