본문 바로가기

Deep Learning

2. 학습관련 기술들

매개변수 갱신 방법

ㅁ SGD ( Stochastic Gradient Descent )



SGD 는 손실함수의 기울기 값 ( Weight's Gradient ) 를 구하고 New Weight = Weight - lr * ( Weight's Gradient ) 를 해주는 것입니다. ( 여기서 lr 이란 learning rate 의 약자입니다. ) 보통 설명할 때 언덕에서 각 방향으로 한발짝씩 내 딛어 보고 줄어드는 쪽으로 계속 걸어간다라는 비유를 많이 하죠 :)




ㅁ 모멘텀 ( Momentum )

Momentum 방식은 말 그대로 Gradient Descent를 통해 이동하는 과정에 일종의 ‘관성’을 주는 것이다. 현재 Gradient를 통해 이동하는 방향과는 별개로, 과거에 이동했던 방식을 기억하면서 그 방향으로 일정 정도를 추가적으로 이동하는 방식이다. 수식으로 표현하면 다음과 같다. vtvt를 time step t에서의 이동 벡터라고 할 때, 다음과 같은 식으로 이동을 표현할 수 있다.

Momentum 방식은 SGD가 Oscilation 현상을 겪을 때 더욱 빛을 발한다. 다음과 같이 SGD가 Oscilation을 겪고 있는 상황을 살펴보자.



현재 SGD는 중앙의 최적점으로 이동해야하는 상황인데, 한번의 step에서 움직일 수 있는 step size는 한계가 있으므로 이러한 oscilation 현상이 일어날 때는 좌우로 계속 진동하면서 이동에 난항을 겪게 된다.

그러나 Momentum 방식을 사용할 경우 다음과 같이 자주 이동하는 방향에 관성이 걸리게 되고, 진동을 하더라도 중앙으로 가는 방향에 힘을 얻기 때문에 SGD에 비해 상대적으로 빠르게 이동할 수 있다.



이외에도 AdaGrad, Adam, Adadelta 등등의 방법이 있다.


참고 : http://shuuki4.github.io/deep%20learning/2016/05/20/Gradient-Descent-Algorithm-Overview.html





가중치의 초기값

ㅁ W 을 전부 0 또는 전부 같은 값으로 두지 말아라!

오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문입니다. 예를들어 2층 신경망에서 첫번째와 두번째 층의 가중치가 0이라고 가정하면, 순전파 때는 입력층의 가중치가 0이기 때문에 두번째 층의 뉴런에 모두 같은 값이 전달됩니다. 두 번째 층의 모든 뉴런에 같은 값이 입력된다는 것은 역전파 때 두 번째 층의 모든 뉴런에 같은 값이 입력된다는 것은 역전파 때 두 번째 층의 가중치가 모두 똑같이 갱신된다.


ㅁ 은닉층에서의 활성값 분포를 고르게 하라

은닉층의 활성값이 0이나 1로 너무 쏠릴 경우 학습이 제대로 되지 않을수 있다. 이러한 문제를 기울기 소실(gradient vanishing) 이라 부른다. 분포를 고르게 주기 위해 초깃값을 잘 주는 방법이 있고 가장 보편적인 방법이 Xavier 초깃값 그리고 Relu 를 이용할 때는 He 초깃값을 쓰라고 권장합니다.







배치 정규화

ㅁ 목적

  • 학습을 빨리 진행할수 있다 (학습 속도 개선 )
  • Weight 초깃값에 크게 의존하지 않는다
  • 오버피팅을 억제한다
배치 정규화란 각 층의 Activation Function 의 출력값을 적당히 퍼뜨리도록 강제하는 것을 의미한다. 





바른 학습을 위해

ㅁ 오버 피팅

너무 과도하게 데이터에 대해 모델을 learning을 한 경우를 의미한다. 훈련데이터에만 너무너무 과도하게 맞춰진 모델을 일컫는데, 정작 새로운 데이터에 대해서는 하나도 못맞추는 경우이다. 오버피팅은 주로 다음의 두 경우에 일어난다.
  • 매개변수가 많고 표현력이 높은 모델
  • 훈련 데이터가 적음


ㅁ 가중치 감소 ( Weight Decay )

오버피팅 억제를 위한 방법 중 하나로, 큰 가중치에 대해서는 그에 상응하는 페널티를 부과하는 것이다. 예를 들면 제곱 법칙으로 ( L2 법칙)을 손실함수에서 더해줍니다.
왜 더하는지는 아래 링크를 참조하면 잘 나와 있습니다.

weight\;decay\;L2 = \displaystyle\sum\limits_{i}\theta_i^2

여기서 세타(theta)의 값은 coefficents of the weight matrix이다.

간단하게 정리하면 원래는


인데, L2를 적용하면




해서 W 높을 수록 알파(α) 에 비례하여 큰W 의 비중이 줄어든다. Caffe 에서는 이를 람다(λ) 로 정의하드라 ㅎㅎ 그리고 L2 말고도 L1 이라는 방식도 존재한다.

ㅁ 드롭 아웃


학습시에 은닉층의 Neuron 을 무작위로 날린다. 그래서 학습시 forward propagation 시 날릴 뉴런에 대해서는 0 값을 전달한다. 단, 시험때는 각 뉴런의 출력에 훈련 때 삭제한 비율을 곱하여 출력한다.



ㅁ 데이터 종류

 - 훈련 데이터 : 매개변수 학습용
 - 검증 데이터 : 하이퍼파라미터 성능 평가용
 - 시험 데이터 : 신경망의 전체 성능 평가용

3 종류의 데이터는 서로 중복되서는 안된다. 예를 들면 훈련데이터를 검증데이터나 시험데이터로 써서는 안된다는 것이다.

ㅁ 하이퍼 파라미터 최적화시에...

 - 직관에 의존하라
 - 그리드 서치 같은 규칙적 탐색보단 무작위 샘플링 탐색이 더 좋은 결과를 나타낸다 함.
 - 범위도 0.001 에서 1000 사이와 같이 '10의 거듭제곱' 단위로 지정함.




'Deep Learning' 카테고리의 다른 글

4. RNN  (0) 2017.05.30
3. CNN  (0) 2017.05.26
1. 오차역전파법 ( Backpropagation )  (0) 2017.05.14
0. 딥러닝 기초지식  (0) 2017.05.12