[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 6. 학습 관련 기술들

매개변수 갱신

  • 신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이며, 이러한 최적값을 찾는 것을 최적화(Optimization)이라고 한다.
  • 하지만 매개변수 공간은 매우 넓고 복잡해서 최적의 솔루션을 찾는 것은 어렵다.
  • 지금까지 최적의 매개변수 값을 찾는 단서로 매개변수의 기울기(미분)을 이용했다.
  • 이것이 확률적 경사 하강법(SGD)이다.
  • SGD와는 다른 최적화 기법을 알아보자.

확률적 경사 하강법(SGD)

  • \(W ⬅ W - \eta \frac{\partial L}{\partial W}\)
    • 위에서 W는 갱신할 가중치 매개변수이고 미분값은 W에 대한 손실 함수의 기울기이다. 에타는 학습률을 의미한다.
    • ⬅는 우변의 값을 좌변의 값으로 갱신한다는 의미이다.
  • Optimizer는 ‘최적화를 행하는 자’라는 뜻의 단어이다. 위의 갱신을 Optimizer가 담당한다.

SGD의 단점

  • \(f(x,y) = \frac{1}{20} * x^2 + y^2\) 함수를 그려보자

  • 위 함수의 기울기를 그려보면 다음과 같다.

  • 이 기울기는 y 축 방향은 크고 x축 방향은 작다는 것이 특징이다. 말하자면 y축 방향은 가파른데 x축 방향은 완만한 것이다. 또한 최솟값이 되는 장소는 0,0 이지만 대부분의 기울기는 0,0 을 가리키지 않는다. 위의 함수에 SGD를 적용하면 다음과 같아진다.

  • 상당히 비효율적인 지그재그 움직임을 보여준다.
  • SGD의 단점은 비등방성(anisotropy) 함수(방향에 따라 성질, 즉 여기에서는 기울기가 달라지는 함수)에서는 탐색 경로가 비효율적이라는 것.
  • 이를 개선하기 위해 모멘텀, AdaGrad, Adam 등등의 방법이 나왔다.

모멘텀

  • 모멘텀은 운동량을 뜻하는 단어로 물리와 관계가 있다. 수식은 다음과 같다.
  • \(\displaylines{V ⬅ \alpha V - \eta \frac{\partial L}{\partial W} \\ W ⬅ W + V}\)
  • V 라는 새로운 변수가 나오는데 이는 물리에서 말하는 속도에 해당한다.
  • 또 \(\alpha V\) 항은 물체가 아무런 힘을 받지 않을 때 서서히 하강시키는 역할을 한다. (알파는 0.9 등으로 설정)
  • 물리에서의 지면 마찰이나 공기 저항에 해당한다.
  • 모멘텀에 의한 최적화 갱신 경로는 다음과 같다.

  • 그림에서 보듯 갱신 경로는 공이 바닥을 구르듯 움직인다. SGD와 비교하면 ‘지그재그 정도’가 덜한 것을 알 수 있다.
  • 이는 x 축의 힘은 아주 작지만 방향은 변하지 않아서 한 방향으로 일정하게 가속하기 때문
  • 반면 y축의 힘은 크지만 위아래로 번갈아 받아서 상충하여 y축 방향의 속도는 안정적이지 않다.
  • 전체적으로는 SGD보다 x축 방향으로 빠르게 다가가 지그재그 움직임이 줄어든다.

 AdaGrad

  • 신경망 학습에서는 학습률 Learning Rate가 중요한데, 이 값이 너무 작으면 학습 시간이 길어지고 반대로 너무 크면 발산하여 학습이 제대로 이뤄지지 않는다.
  • 이 학습률을 정하는 효과적 기술로 학습률 감소(Learning rate decay)가 있다.
  • 이를 더욱 발전 시킨 것이 AdaGrad 이다.
  • AdaGrad는 개별 매개변수에 적응적(Adaptive)으로 학습률을 조정한다.

  • 새로운 h 변수는 기존 기울기 값을 제곱하여 계속 더해준다.
  • 그리고 매개변수를 갱신할 때 \(1/\sqrt{h}\)를 곱해주어 학습률을 조정한다.
  • 매개변수의 원소 중에서 많이 움직인 원소는 학습률이 낮아진다는 뜻인데, 다시 말해 학습률 감소가 매개변수의 원소마다 다르게 적용됨을 뜻한다.
AdaGrad는 과거의 기울기를 제곱하여 계속 더해나간다. 그래서 학습을 진행할수록 갱신 강도가 약해진다. 실제로 무한히 계속 학습한다면 어느 순간 갱신량이 0이 되어 전혀 갱신되지 않는다. 이 문제를 개선 기법으로서 RMSProp이라는 방법이 있다. RMSProp은 과거의 모든 기울기를 균일하게 더해가는 것이 아니라, 먼 과거의 기울기는 서서히 잊고 새로운 기울길 정보를 크게 반영한다. 이를 지수이동평균이라 하여, 과거 기울기의 반영 규모를
기하급수적으로 감소 시킨다.

  • AdaGrad의 갱신 경로를 보면 최솟값을 향해 효율적으로 움직이는 것을 알 수 있다. y축 방향은 기울기가 커서 처음에는 크게 움지이지만, 그 큰 움직임에 비례해 갱신 정도도 큰 폭으로 작아지도록 조정된다. 그래서 y축 방향으로 갱신 강도가 빠르게 약해지고, 지그재그 움직임이 줄어든다.

Adam

  • 모멘텀 + AdaGrad 방식의 이점을 조합하고 하이퍼 파라미터의 ‘편향 보정’이 진행되는 방식
  • 밑딥에는 설명이 없어서..

https://velog.io/@yookyungkho/딥러닝-옵티마이저-정복기부제-CS231n-Lecture7-Review

  • Adam 갱신 과정도 그릇 바닥을 구르듯 움직인다. 모멘텀과 비슷한 패턴인데 모멘텀 때보다 공의 좌우 흔들림이 적다.

가중치의 초기값

  • 신경망 학습에서 특히 중요한 것이 가중치의 초기값이다. 가중치의 초기값에 따라 신경망 학습의 성패가 갈리는 일이 자주 있다.

초기값을 0으로 하면?

  • 오버피팅을 억제해 범용 성능을 높이는 테크닉인 가중치 감소(weight decay) 기법에 대해 알아보자
  • 가중치 감소는 간단히 말해 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 가중치 값을 작게 하여 오버피팅이 일어나지 않게 하는 것.
  • 가중치의 초기값을 0으로 하면 학습이 올바로 이뤄지지 않는다.(정확히는 모두 같은 값으로 설정하면 안됨)
  • 그 이유는 바로 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문이다.
  • (곱셈 노드의 역전파에서 w1과 w2를 단순히 교환하여 흘려보내는 것을 생각해보면..)

은닉층의 활성화값 분포

  • 은닉층의 활성화값(활성화 함수의 출력 데이터)의 분포를 관찰하면 중요한 정보를 얻을 수 있다.
  • 5개 레이어, 뉴런 100개, 1000개 데이터를 정규분포로 무작위로 생성하여 5층 신경망에 흘리고, 활성화 함수로 시그모이드를 사용했을 경우의 활성화 값 분포
    • 가중치를 표준편차가 1인 정규분포로 초기화할 때의 각 층의 활성화값 분포(학습하지 않았다는 것에 주의)

  • 각 층의 활성화 값들이 0과 1에 치우쳐 분포되어 있다. 여기에서 사용한 시그모이드 함수는 그 출력이 0 또는 1에 가까워지면 그 미분은 0에 다가간다. 그래서 데이터가 0과 1에 치우쳐 분포하면 역전파의 기울기 값이 점점 작아지다가 사라지게 된다. 이것이 기울기 소실(gradient vanishing) 문제이다.
  • 이번에는 가중치의 표준편차를 0.01로 바꿔 같은 실험을 해보자.(학습하지 않았다는 것에 주의)

  • 이번에는 0.5 부근에 집중됨을 알 수 있다. 기울기 소실 문제는 일어나지 않았지만 활성화 값들이 치우쳐졌다는 것은 표현력 관점에서는 문제가 있다는 것이다.
  • 사비에르 글로로트와 요슈아 벤지오 논문에서 권하는 가중치 초기값인 Xavier 초기값을 써보자
    • Xavier에선 각 층의 활성화 값들을 광범위하게 분포시킬 목적으로 가중치의 적절한 분포를 찾고자 한다.
    • 그리고 앞 계층의 노드가 n개라면 표준편차가 \(1/\sqrt(n)\)인 분포를 사용하면 되다는 결론을 이끌었다.
    • 층이 깊어지면서 형태가 다소 일그러지지만, 앞에서 본 방식보다는 확실히 넓게 분포됨을 알 수 있다.
      (sigmoid 대신 tanh를 이용하면 오른쪽으로 갈수록 일그러지는 현상을 막을 수 있음)

ReLU를 사용할 때의 가중치 초기값

  • Xavier 초기값은 활성화 함수가 선형인 것을 전제로 이끈 결과이다.
  • sigmoid와 tanh는 좌우 대칭이라 중앙 부근이 선형인 함수로 볼 수 있다. 따라서 Xavier가 적당하다.
  • 반면 ReLU를 이용할 때는 이에 특화된 He 초기값(Kaiming He)를 사용하는 것을 권장한다.
  • He 초기값은 앞 계층의 노드가 n개일 때, 표준편차가 \(\sqrt{2/(n)}\)인 정규분포를 사용한다.
  • ReLU는 음의 영역이 0이라서 더 넓게 분포시키기 위해 2배의 계수가 필요하다고 해석 할 수 있다.
  • 활성화 함수로 ReLU를 사용한 경우의 가중치 초기값에 따른 활성화값 분포 변화

표준편차가 0.01인 정규분포를 가중치 초기값으로 사용한 경우
Xavier 초기값
He 초기값

  • 결과를 보면 std=0.01일 때의 각 층의 활성화 값들은 아주 작은 값들인데, 이는 신경망의 기울기 또한 매우 작아진다는 것을 의미하며 실제로 학습이 거의 이뤄지지 않을 수 있다.
  • Xavier 초기값 결과는 층이 깊어지면서 치우침이 조금씩 커지고 학습할 때 기울기 소실 문제를 일으킬 가능성이 있다.
  • He 초기값모든 층에서 균일하게 분포되었으며 층이 깊어져도 분포가 균일하게 유지되기 때문에 역전파 때도 적절한 값이 나올 것으로 기대 할 수 있다.

배치 정규화

  • 초기값 설정을 통해 활성화값 분포를 퍼뜨릴 수 있으나, 이를 강제로 퍼뜨리는 방법이 있다. 이것이 바로 배치 정규화 이다

배치 정규화 알고리즘

  • 2015년에 제안된 알고리즘
  • 배치 정규화가 주목 받는 이유
    • 학습을 빨리 진행할 수 있다(학습 속도 개선)
    • 초기값에 크게 의존하지 않는다.
    • 오버피팅을 억제한다(드롭아웃 등의 필요성 감소)
  • 배치 정규화를 사용한 신경망의 예

Transformer에서는 Batch Norm 대신 Layer Norm이 쓰였음
CV에서는 BN을 많이 쓰고, NLP에서는 LN을 많이 쓰는듯(링크)
  • BN은 미니배치를 단위로 정규화 한다. 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화 함

epsilon은 0으로 나눠지는 사태를 막기위한 장치

  • 또한 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대(Scale)와 이동(shift)변환을 수행한다.

  • \(\gamma\)가 확대를, \(\beta\)가 이동을 담당한다. \(\gamma=1 \) , \(\beta=0\) 에서 시작함 학습하면서 적합한 값으로 조정해간다.
  • 배치 정규화의 계산 그래프(상세설명)

  • 배치 정규화의 효과

W 값에 따른 Accuracy 결과. 실선=배치 정규화 O, 점선=배치 정규화 X

바른 학습을 위해

  • 기계학습에서는 오버피팅이 되는 문제가 많다. 오버피팅이란 신경망이 훈련데이터에 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 것을 말한다.

 

오버피팅

  • 오버피팅은 주로 다음의 두 경우에 일어난다.
    • 매개변수가 많고 표현력이 높은 모델
    • 훈련 데이터가 적음
  • 오버피팅 예시

학습 데이터에 대해서는 정확도 100%이지만 평가 데이터에 대해서는 정확도가 향상되지 않음

가중치 감소

  • 오버피팅 억제용으로 가중치 감소(weight decay)가 있다.
  • 큰 가중치에 대해서는 그에 상응하는 큰 페널티를 부과하여 오버피팅을 억제하는 방법
  • 가중치의 제곱 노름(L2 Norm)을 손실 함수에 더하게 되면 가중치가 커지는 것을 억제할 수 있다.

  • L2 노름은 각 원소의 제곱들을 더한 것에 해당한다.
    • \(L2 = \sqrt{w^2_1+w^2_2+...+w^2_n}\)
      (Regularization으로만 표현하는줄 알았는데, 가중치 감소라고도 표현하는구나)

드롭아웃

  • 신경망 모델이 복잡해지면 가중치 감소만으로는 대응하기 어려워진다. 이럴 때는 흔히 드롭아웃 이라는 기법을 사용한다.
  • 드롭아웃은 뉴런을 임의로 삭제하면서 학습하는 방법이다. 학습 때 은닉층의 뉴런을 무작위로 훈련에서 제외한다. 시험 때는 모든 뉴런을 사용한다. 단, 시험 때는 각 뉴런의 출력에 훈련 때 삭제한 비율을 곱하여 출력한다.

  • 드롭아웃의 효과

드랍아웃 적용 전(좌) 적용 후(우)

  • 드랍아웃은 앙상블 학습과 유사한 방식이다. 드랍아웃이 학습 때 무작위로 뉴런을 삭제하게 되면 매번 새로운 모델을 학습시키는 효과를 낼 수 있기 때문이다.

적절한 하이퍼파라미터 값 찾기

  • 신경망에서는 하이퍼파라미터가 다수 등장한다. 예를 들어 각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등이다.
  • 하이퍼파라미터 값을 적절히 설정하지 않으면 모델의 성능이 크게 떨어진다.
  • 검증 데이터를 활용하여 최적의 하이퍼파라미터를 찾는 것이 좋다.
    • 데이터를 학습/평가 데이터 외에 검증용으로 따로 분리해서 하이퍼파라미터의 성능을 평가 한다.
  • 하이퍼파라미터의 범위를 대략적으로 지정 한 뒤, 검등 데이터를 통해 반복적으로 정확도를 평가하면서 하이퍼 파라미터의 범위를 좁혀나가는 것이 좋다.

정리

  • 매개변수 갱신 방법에는 SGD 외에도, 모멘텀, AdaGrad, Adam등이 있다.
  • 가중치 초기값을 정하는 방법은 올바른 학습을 하는 데 매우 중요하다.
  • 가중치의 초기값으로는 Xavier, He 등이 효과적이다.
  • 배치 정규화를 이용하면 학습을 빠르게 진행할 수 있으며 초기값에 영향을 덜 받게 된다.
  • 오버피팅을 억제하는 정규화 기술로는 가중치 감소(Regularization)와 드랍아웃이 있다.
  • 하이퍼파라미터 값 탐색은 최적 값이 존재할 법한 범위를 점차 좁히면서 하는 것이 효과적이다.