- 최적화(optimization)
- 신경망 학습의 목적은 손실 함수의 값을 가능한 작게 만드는 매개변수를 찾는 것으로, 이를 '최적화'라고 함.
- 앞에서 최적의 매개변수 값을 찾기 위해 매개변수의 기울기를 구해 기울어진 방향으로 매개변수 값을 업데이트 하였으며, 이를 '확률적 경사 하강법(SGD)'이라고 하였음.
- 이와 같은 SGD는 단순하고 구현이 쉽지만 탐색 경로가 비효율적일 때가 있음.
- SGD의 단점을 보완한 최적화 방법: 모멘텀, AdaGrad, Adam
- 모멘텀: SGD와 비교하면 최적화하는 과정에서 '지그재그 정도'가 덜해 효율적으로 최적값을 찾는다고 할 수 있음.
- AdaGrad: 학습률이 처음에는 크다가 점점 작아지는 방법임.
- Adam: 모멘텀과 AdaGrad의 두 기법을 융합한 방법임.
- 이와 같이 최적화 방법은 SGD, 모멘텀, AdaGrad, Adam 등이 알려져 있으며, 학습 상황에서 항상 뛰어난 기법이 아직까지는 없어 다양한 방법을 시도해보는 것이 중요함.
- 가중치의 초깃값
- 신경망 학습에서 가중치의 초깃값은 결과에 많은 영향을 미치므로 중요함.
- 가중치 매개변수의 값을 작게 설정하면 오버피팅이 일어나지 않는다는 장점이 있음.
- 그러나 가중치의 초깃값을 0으로 설정하거나 모든 가중치를 같은 값으로 설정할 경우 오차역전파법에서 모든 가중치의 값이 똑같게 업데이트되는 문제가 있어 초기값은 랜덤하게 설정해 줄 필요가 있음.
- 이때 표준편차가 1인 정규분포를 이용하여 초기값을 설정해주면 각 층의 활성화값들이 0과 1에 치우쳐 분포하게 되며, 시그모이드 함수는 출력이 0 또는 1에 가까워지면 그 미분이 0에 가깝게 됨.
- 이와 같이 데이터가 0과 1에 치우쳐 분포하게 되면 역전파의 기울기 값이 점점 작아지다가 사라지는 기울기 소실(gradient vanishing)문제가 발생함.
- 이를 해결하기 위해 표준편차가 0.01인 정규분포를 이용하여 초기값을 설정해주면 0과 1에 치우치지는 않지만 0.5 정도의 값이 많이 나타나게 됨.
- 이와 같이 활성화 값이 치우치면 다수의 뉴런이 거의 같은 값을 출력하게 되므로 여러 개의 뉴런을 사용하는 것이 의미가 없어짐.
- 여러 선행연구에서 권장하는 가중치의 초기값이 존재하는데 그 중 사비에르 글로로트와 오슈아 벤지오의 논문에서 권장하는 Xavier 초깃값은 아래와 같음.
- 이 논문에서는 앞 계층의 노드가 n개 이면 표준편차가 1/sqrt(n)인 정규분포를 이용하여 초기값을 설정하는 것을 권장하고 있음.
- 실제 데이터에 이를 적용해보면 층이 깊어질수록 활성화 값의 분포가 정규분포에서 다소 일그러지지만, 활성화 값이 치우치지 않는다는 것을 확인할 수 있음.
(참고)
- 위에서 Xavier 초깃값을 사용할 경우 층이 깊어질수록 활성화 값의 분포가 정규분포에서 일그러지는데 이와 같은 현상은 활성화함수로 sigmoid 함수 대신 tanh 함수를 활용하여 해결가능함.
- 여기서 활성화 함수는 tanh와 같이 원점에서 대칭인 함수를 쓰는 것이 바람직하다는 것을 알 수 있음.
- 카이밍 히는 활성화 함수로 ReLU를 사용할 경우 가중치의 초기값은 표준편차가 sqrt(2/n)인 정규분포를 이용하는 권장하고 있으며, 이는 ReLU는 음의 영역이 0이기 때문에 더 넓게 분포시키기 위함이라고 해석할 수 있음.
- 배치 정규화(Batch Normalization)
- 배치 정규화는 이름에서 알 수 있듯이 미니배치 단위로 데이터의 분포가 평균이 0, 표준편차가 1이 되도록 정규화하는 것을 말함.
- 배치 정규화를 사용하면 학습 속도를 개선할 수 있으며, 초기값의 영향과 오버피팅으로부터 자유로울 수 있음.
- 오버피팅(Overfitting)
- 오버피팅은 신경망이 훈련 데이터에만 지나치게 적응되어 다른 데이터에는 제대로 대응하지 못하는 상태를 말함.
- 기계학습은 새로운 데이터가 주어지더라도 높은 성능을 보이는 모델이 중요하므로 오버피팅을 억제하는 기술이 중요함.
- 오버피팅은 매개변수가 많거나 훈련데이터가 적은 경우에 주로 나타남.
- 오버피팅을 줄이기 위한 방법으로는 '가중치 감소(weight decay)'가 있으며, 이는 학습 과정에서 큰 가중치에 대해 큰 페널티를 부과하는 것임.
- 예를 들면, 가중치의 제곱 노름(L2)과 같은 값을 손실함수에 더해 가중치가 커지는 것을 억제할 수 있음.
- 위에서 설명한 가중치 감소의 경우 신경망 모델이 복잡해지면 대응이 어려워지며, 이와 같은 상황에는 드롭아웃(dropout) 기법을 이용할 수 있음.
- 드롭아웃은 뉴런을 임의로 삭제하면서 학습하는 방법으로 training 상황에서는 랜덤하게 뉴런을 선택해 삭제하고, test 상황에서는 모든 뉴런에 신호를 전달함.
- 하이퍼파라미터 설정
- 신경망에서는 '각 층의 뉴런 수', '배치 크기', '매개변수 업데이트 시 학습률'과 '가중치 감소' 등의 하이퍼 파라미터가 존재하며, 이러한 하이퍼파라미터의 설정은 모델의 성능에 많은 영향을 미침.
- 하이퍼파라미터를 조정하기 위해서는 training data, test data가 아닌 검증 데이터(validation data)를 이용할 필요가 있음.
- 신경망의 하이퍼파라미터 최적화에서는 그리드 서치(grid search)와 같은 규칙적인 탐색보다는 랜덤하게 탐색하는 것이 좋은 결과를 나타낸다고 알려져있음.
출처: 사이토 고키, 「밑바닥부터 시작하는 딥러닝」, 한빛미디어(2017), p189-p226.
'딥러닝 기초' 카테고리의 다른 글
[김기현의 딥러닝을 활용한 자연어처리] 딥러닝 환경 구축 (1) | 2023.05.11 |
---|---|
[밑바닥부터 시작하는 딥러닝] 오차역전파 (0) | 2022.09.22 |
[밑바닥부터 시작하는 딥러닝] 신경망에서 학습 (0) | 2022.09.18 |
[밑바닥부터 시작하는 딥러닝] 신경망 (1) | 2022.09.04 |
[밑바닥부터 시작하는 딥러닝] 퍼셉트론 (1) | 2022.09.03 |