Activation Functions : Sigmoid

- 입력 값이 크면 sigmoid의 출력은 1에 가깝다.
- 값이 작으면 0에 가까움
- firing rate를 Saturation 시키는 것으로 해석할 수 있음.
- 문제점1 : Saturation은 gradient를 없앤다.
- X가 -10이면(음의 큰 값이면) gradient는 0
- X가 0이면 잘 동작
- X가 10이면(양의큰 값이면) gradient를 죽여 잘 동작하지 않음
- 문제점2 : sigmoid의 출력이 zero centered하지 않다는 것
- 입력이 항상 양수이면 가중치랑 곱해지고 활성함수를 통과
- 항상 양수이거나 항상 음수이므로 항상 입력된 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의 강도 높이기
- gap이 없다면 아직 overfitting하지 않았고 capacity를 높일 여유있다.
'데이터 > 딥러닝' 카테고리의 다른 글
CS231n_Lecture8:Deep Learning Software (0) | 2022.11.15 |
---|---|
CS231n_Lecture7:Training Neural Networks (0) | 2022.11.08 |
CS231n_Lecture5:Convolutional Neural Networks (0) | 2022.11.01 |
CS231n_Lecture4:Introduction to Neural Networks (0) | 2022.11.01 |
CS231n_Lecture3:Loss Functions and Optimization (0) | 2022.09.20 |