yun's blog for NLP & NLU

6. 학습 관련 기술들

매개변수 갱신

신경망의 학습 목적은 손실 함수 값을 최대한 낮추는 매개변수를 찾는 것이다. 이는 다시 말하면 매개변수의 최적값을 찾는 것이고, 최적화(optimization)에 해당한다.

앞에서 미니 배치에 매개변수의 기울기로 미분을 사용하는 확률적 경사 하강법(SGD)을 알아보았다.

01

SGD 방식은 단순하고 구현이 쉽지만 비효율적인 경우도 있다. 비등방성 함수(방향에 따라 성질, 기울기가 달라지는 함수)에서는 SGD의 탐색경로가 비효율적이다.

02

이러한 단점을 개선해주는 방법으로 모멘텀, AdaGrad, Adam 방법이 있다.

모멘텀

03

모멘텀은 v라는 속도에 해당하는 변수를 사용하는 방식으로 기울기 방향으로 힘을 받아 물체가 가속되는 물리 법칙을 적용한 방식이다.

04

SGD와 비교해서 지그재그의 정도가 덜한것을 알 수 있는데, x축 방향 힘이 작지만 방향이 바뀌지 않기 때문에 점점 가속을 하기 때문이다.

AdaGrad

신경망 학습에서 학습률은 너무 작으면 학습이 너무 오래 걸리고 너무 크면 값이 발산해버릴 수 있는, 상당히 중요한 파라미터이다.

학습률 감소(Learning rate decay)란 학습률을 크게 시작해서 점점 학습률을 줄여 나가는 방식인데, 기계학습에서 자주 쓰인다.

AdaGrad 방식에서는 학습률을 각각의 매개변수에 맞춤형으로 만들어주는 Adaptive 방식이다.

05

식에서 h는 기존 기울기를 제곱해서 더해준 값이고, h의 제곱근의 역수를 곱해 학습률을 조정하는데, 매개변수 원소 중 많이 움직인 원소의 학습률이 낮아지는 방식이다.

06

AdaGrad의 단점은 학습이 진행될수록 갱신강도가 약해져서 어느 순간부터 갱신이 안될 수 있다는 점인데, 이를 개선해서 지수이동평균 방식을 사용하여 과거의 기울이는 덜 반영하고 최근 정보는 더 크게 반영하는 방법을 RMSProp 방법이라고 한다.

Adam

Adam 방식은 모멘텀과 AdaGrad를 융합한 모델로 효율적이고, 하이퍼 파라미터의 편향 보정 또한 진행된다고 한다. (논문을 보면 더 자세히 나온다고 하는데, 다음에 다른 교재를 공부할 때 기회가 되면 원리를 이해해보기로 하자.)

07

SGD, 모멘텀, AdaGrad, Adam 모두 장단점이 있고, 각각의 문제에 따라, 하이퍼 파라미터에 따라 성능이 다르기 때문에 해결하려는 문제에 대해 여러가지로 시도해보는 것이 좋다.

가중치의 초기값

신경망 학습에서 또 중요한 것은 가중치의 초기값이다.

가중치 감소란 가중치 매개변수의 값이 작아지도록 학습하여 과적합을 방지하는 방법이다. 이 때 가중치가 작게 하기 위해 모든 가중치 값을 0으로 초기화하면 어떻게 될까?

가중치가 모두 0이면 전파시 같은 값들이 다음 계층으로 전파되기 때문에 갱신을 해도 값이 그대로이다.

이런 일을 방지하기 위해 초기값을 무작위로 설정해주는 것이 좋다.

은닉층의 활성화 값을 가지고 분포에서 중요한 정보를 얻을 수 있다.

예시로 활성화 함수로 시그모이드 함수를 사용하고 각 층의 뉴런이 100개인 5계층 신경망을 무작위로 초기화하여 입력 데이터를 1000개 입력해줄 때 표준편차가 1인 정규 분포 값으로 초기화 하는 경우 출력이 0과 1에 집중되는데, 출력이 0과 1에 가까워지면 미분값이 0에 가까워지는 시그모이드 함수의 특성 때문에 기울기값이 갱신을 거칠때마다 점점 작아지다가 사라진다. 이러한 문제를 기울기 소실(gradient vanishing) 문제라고 한다.

표준편차를 0.01로 바꾸어 다시 초기화해보면 출력값이 0.5 부근에 집중되어 출력되는데 이 경우 기울기 소실 문제는 발생하지 않으나, 다수의 뉴런이 같은 값을 출력하면 뉴런을 1개 쓰는 것과 차이가 없다. 즉, 표현력이 제한된다.

각 층의 활성화 값은 고루 분포되는게 좋은데, 값이 치우치면 기울기 소실 문제나 표현력 제한 문제로 학습이 잘 이뤄지지 않을 수 있기 때문이다.

Xavier 초기값은 사비에르와 요수아 벤지오가 권장하는 가중치 초기값이자 일반적인 딥러닝 프레임워크들이 표준으로 사용하는 초기값인데 앞 계층의 노드의 갯수가 n개이면 표준편차가 1/√ n인 분포를 사용한다. Xavier 초기값을 넣어주고 실행을 한 결과를 보면 이전에 1이나 0.05의 표준편차를 사용하는 것 보다 더 고루 분포된다. 이 때, sigmoid 대신 tanh(쌍곡선) 함수를 활성화 함수로 사용하면 데이터가 더 고루 분포되는데, sigmoid와 tanh는 비슷한 형태를 띄고 있지만 tanh는 원점 대칭 함수이고, 활성화 함수로는 원점 대칭 함수가 더 바람직하다고 알려져 있다고 한다.

Xavier 초기값은 활성화 함수가 선형(sigmoid, tanh)이라는 전제로 효과적이다. ReLU를 사용할 때에는 He(히) 초기값을 사용하는데, 이는 앞 계층의 노드가 n개 일 때 표준편차가 √ (2/n) 인 정규분포를 사용한다.

배치 정규화

배치 정규화를 통해 각 층에 활성화 값이 적당히 퍼지게 할 수 있다.

배치 정규화로 얻을 수 있는 효과는 다음과 같다.

  1. 학습을 빨리 진행할 수 있다.
  2. 초기값에 크게 의존하지 않는다.
  3. 오버피팅을 억제한다.

배치 정규화의 목적은 활성화 값을 적당히 분포 시키는 것으로 학습 시 미니배치를 단위로 정규화를 하는데, 데이터 분포의 평균이 0, 분산이 1이 되도록 정규화를 한다.

08

이러한 정규화 계층은 활성화 함수 앞 또는 뒤에 삽입한다.

또한, 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대와 이동 변환을 수행하는데, 다음과 같은 식에서 학습을 통해 감마와 베타 값을 조정해 나간다.

09

이 과정을 계산 그래프로 나타내면 다음과 같다.

10

결론적으로 배치 정규화의 효과는 학습 속도가 높아지고 초기값의 영향을 덜 받는다는 것이다.

오버피팅

오버 피팅이란 신경망이 훈련 데이터에만 지나치게 학습되어서 새로 들어온 데이터에 제대로 대응을 하지 못하는 상태를 말한다.

오버 피팅은 매개변수가 많고 표현력이 높은 모델인 경우, 그리고 훈련 데이터가 적은 경우 자주 발생한다.

이를 방지하기 위한 방법으로 가중치 감소와 드롭 아웃 방법이 있다.

가중치 감소

가중치 감소는 큰 가중치에 대해 그에 상응하는 큰 패널티를 부과하는 방식인데 예를 들면 손실함수 값에 가중치의 크기를 더해주는 등의 방식이다.

가중치를 W라 하면 L2 norm에 따른 가중치 감소는 1/2λW^2가 되는데, λ는 정규화의 세기를 조절하는 하이퍼 파라미터로 크게 설정할 수록 가중치에 대한 패널티가 커진다. 1/2은 1/2λW^2의 미분 결과인 λW를 조정하는 상수이다.

가중치 감소를 위해 가중치 각각의 손실 함수에 1/2λW^2을 더해주는데, 기울기를 구할 때에는 앞에서 구한 오차역전파법의 결과에 λW(미분 값)을 더한다.

직관적으로 큰 가중치에 더 큰 패널티를 부과한다는게 잘 이해가 안가는데 더 찾아보거나 다음 책을 공부할 때 더 알아보도록 하자.

드롭아웃

신경망 모델이 많이 복잡해지면 가중치 감소로도 오버피팅을 방지하기 어려울 수 있다. 이런 경우 드롭아웃 기법을 사용한다. 드롭아웃은 뉴런을 임의로 삭제하면서 학습을 하는 방식을 말하는데, 훈련 시에는 은닉층의 뉴런을 무작위로 골라 삭제를 하고, test시에는 각 뉴런의 출력에 삭제를 하지 않은 비율을 곱해 출력을 한다.

dropout을 사용하면 표현력을 높이면서도 오버피팅을 억제할 수 있다.

기계학습에서는 앙상블 학습이라고 여러 모델의 출력을 평균 내서 추론하는 방식을 자주 사용하는데, 앙상블 학습은 드롭아웃과 유사한 점이 있다. 드롭아웃이 학습 때 뉴런을 무작위로 삭제하는 행위를 매번 다른 모델을 학습하는 것으로 생각할 수 있기 때문이다.

즉, 드롭아웃이 앙상블 학습과 같은 효과를 하나의 네트워크로 구현한 것이라고 생각할 수 있다.

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

하이퍼 파라미터는 각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률, 가중치 감소 등 학습에 직접적으로 연관된 변수들을 말한다.

검증 데이터

훈련데이터와 시험데이터 중 시험 데이터는 오버피팅의 여부와 범용 성능을 평가하는 데에 쓰인다. 하이퍼 파라미터 성능을 평가할 때에는 시험 데이터(test data)를 사용하지 않는 것이 좋은데, 하이퍼 파라미터가 test data에 대해 오버피팅이 될 수 있기 때문이다.

그래서 하이퍼 파라미터 조정을 위해서 검증 데이터를 사용한다.

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

하이퍼 파라미터 최적화

하이퍼 파라미터의 최적화는 일단 최적값이 존재하는 범위를 조금씩 줄여나가는 방식으로 진행된다. 대략적인 범위(0.001 ~ 1000)를 설정하고 그 범위에서 무작위로 하이퍼 파라미터를 샘플링해서 정확도를 평가하는 방식을 반복해서 최적값의 범위를 좁혀 나가는데, 하이퍼 파라미터 최적화는 매우 오래 걸리기 때문에 학습 epoch 수를 작게 해서 1회 평가에 걸리는 시간을 줄이는게 효과적이다.

간단한 하이퍼 파라미터 최적화 방법은 다음과 같다.

  1. 하이퍼 파라미터 값의 범위를 조정한다.
  2. 설정된 범위에서 하이퍼 파라미터 값을 무작위로 추출한다.
  3. 2에서 샘플링한 하이퍼 파라미터 값으로 학습, 검증 데이터로 정확도를 평가하는데, 이 때 epoch 수를 크지 않게 잡는다.
  4. 2,3 단계를 반복하여 결과에 따라 하이퍼 파라미터의 범위를 좁힌다.

범위가 어느정도 좁아지면 범위에서 값을 하나 고른다.

다른 하이퍼 파라미터 최적화 방식으로는 베이즈 최적화 방식 등이 있다.

참고로, 하이퍼 파라미터 tool에는 nni(microsoft), Optuna 등이 있다.