반응형

출처 : 밑바닥부터 시작하는 딥러닝

가중치 매개변수의 최적값을 탐색하는 최적화 방법 , 가중치 매개변수 초깃값, 하이퍼파라미터 설정 방법등 , 

오버피팅의 대응책인 가중치 감소와 드롭아웃 등의 정규화 방법 

 

6.1 매개변수 갱신

신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이다.

최적화 optimization :  매개변수의 최적값을 찾는 문제

 

확률적 경사 하강법 SGD 는 매개변수의 기울기를 이용하여 매개변수를 갱신하는 최적화의 한 가지 방법

 

6.1.1 모험가 이야기

기울기를 단서로 

SGD의 전략은 가장 크게 기울어진 방향으로 가자는 것이다.

 

6.1.2 확률적 경사 하강법 SGD

W는 갱신할 가중치 매개변수,  ∂L/∂W은 W에 대한 손실 함수의 기울기

η 는 학습률

 

6.1.3 SGD의 단점

SGD는 단순하고 구현도 쉽지만 문제에 따라서 비효율적일 때가 있습니다. 

최솟값이 되는 장소는 (0, 0) 이지만 기울기 대부분은 (0, 0) 방향을 가리키 지 않고 있습니다.

SGD의 단점: 비등방성 anisotropy 함 수에서 탐색 경로가 비효율적(방향에 따라 성질, 즉 여기에서는 기울기가 달라지는 함수)

 

SGC의 이런한 단점을 개선해주는 모멘텀, AdaGrad, Adam이라는 세가지 방법

 

6.1.4 모멘텀 Momentum

Momentum운 운동량을 뜻하는 단어로 , 물리와 관계가 있습니다.

W는 갱신할 가중치 매개변수,  ∂L/∂W은 W에 대한 손실 함수의 기울기

η 는 학습률

sgc와 차이점은 속도가 추가 된다.

velocity :기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙 이용

항은 속도가 차츰 감소 되도록 하는 역할 ( = 0.9 등의 값 )

V 는 속도 velocity

 

SGD와 비교하여 지그재그의 정도가 덜하다.

x축의 힘은 아주 작지만 방향은 변하지 않아서 한 방향으로 일정하게 가속하기 때문입니다.

y축의 힘은 크지만 위아래로 번갈아 받아서 상충하여 y축 방향의 속도는 안정적이지 않습니다.

 

6.1.5 AdaGrad

신경망 학습에서는 학습률 값이 중요하다.

너무 작으면 학습시간이 길어지고 너무 크면 발산하여 학습이 제대로 안됨

학습률을 정하는 효과적 기술로 학습률 감소 learning rate decay 가 있음

처음에는 크게 학습하다가 조금씩 작게 학습한다는 예기로 , 실제 신경망 학습에 자주 쓰입니다.

AdaGrad - adaptive + gradient :각각의 매개변수에 적응적으로 학습률을 조정하면서 학습을 진행
각각의 매개변수에 '맞춤형' 값을 만들어줍니다.

 

h는 기존 기울기값을 제곱하여 계속 더해줌

      기호는 행렬의 원소별 곱셈을 의미

 

h는 기존 기울기 값을 제곱하여 계속 더해줍니다.

그리고 매개변수를 갱신할 때

을 곱해 학습률을 조정

 

매개변수의 원소 중에서 많이 움직인(크게 갱신된)원소는 학습률이 낮아진다는 뜻인데 , 다시 말해 학습률 감소가 매개변수의 원소마다 다르게 적용됨을 뜻하죠

 

 

RMSProp 과거의 모든 기울기를 균일하게 더해가는 것이 아니라, 먼 과거의 기울기는 서서히 잊고 새로운 기울기 정볼를 크게 반영합니다. 이를 지수이동평균Exponentail Moving Average , EMA 이라 하여 , 과거 기울기의 반영 규모를 기하급수적으로 감소시킵니다.

 

1e-7 => 대부분의 딥러닝 프레임워크에서는 이 값도 인수로 설정할 수 있습니다.

 

 

최솟값을 향해 효율적으로 움직이는 것을 알 수 있음

y축 방향은 기울기가 커서 처음에는 크게 움직이지만, 그 큰 움직임에 비례해 갱신 정도도 큰 폭으로 작아지도록 조정됩니다.

 Y 축 방향으로 갱신 속도가 빠르게 약해지고 , 지그재그 움직임이 줄어듭니다.

 

6.1.6 Adam

Adam = AdaGrad + Momentum

모멘텀은 공이 그릇 바닥을 구르는 듯한 움직임을 보였습니다. 

AdaGrad는 매개변수의 원소마다 적응적으로 갱신 정도를 조정했습니다.

 

이 두개 융합:

하이퍼파라미터의 '편향 보정'이 진행된다는 점도 Adam의 특징입니다.

대체적으로 Adam을 많이 사용

 

Adam 갱신 과정도 그릇 바다을 구르듯 움직입니다. 모멘텀과 비슷한 패턴인데 , 모멘텀 떄보다 공의 좌우 흔들림이 적습니다. 이는 학습의 갱신 강도를 적응적으로 조정해서 얻는 혜택입니다.

 

6.1.7 어떤 갱신 방법을 이용할 것인가?

모든 문제에서 항상 뛰어난 기법이라는 것은 (아직까진) 없습니다. 

요즘에는 Adam을 많이 사용합니다.

 

6.1.8 MNIST 데이터셋으로 본 갱신 방법 비교

SGR의  학습 속도가 가장 느리군요 .

나머지 세 기법의 진도는 비슷한데 , 잘 보면 AdaGrad가 조금 더 빠른 것입니다.

주의 할 점은 하이퍼파라미터인 학습률과 신경망의 구조(층 기피 등) 에 따라 결과가 달라진다

 

6.2 가중치의 초깃값

성패가 가르는 중요한 요인

 

6.2.1 초깃값을 0으로 하면 ?

오버피팅을 억제해 법용 성능을 높이는 테크닉인 가중치 감소 weight decay 기법

가중치 감소는 간단히 말하자면 가중치 매개변수의 값이 작아지도록 학습하는 방법입니다.

가중치 값을 작게 하여 오버피팅이 일어나지 않게 하는 것이죠 .

 

가중치를 작게 만들고 싶으면 초깃값도 최대한 작은 값에서 시작하는 것이 정공법이죠 .

 

실제로 가중치 초깃값을 0으로 하면 학습이 올바로 이뤄지지 않습니다.

 

이유는 : 바로 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 떄문입니다.

 

6.2.2 은닉층의 활성화값 분포 

은닉층의 할성화(활성화 함수의 출력 데이터)의 분포를 관찰하면 중요한 정보를 얻을 수 있다.

 

데이터가 0과 1에 치우쳐 분포하게 되면 역전파의 기울기 값이 점점 작아지다가 사라집니다. 

이것이 기울기 소실 gradient vanishing이라 알려진 문제입니다. 

층을 깊게 하는 딥러닝에서는 기울기 소실은 더 심각한 문제가 될 수 있습니다.

 

활성화값들이 치우치면 표현력을 제한한 다는 관점에서 문제가 됩니다.

Xavier 초깃값 : 일반적인 딥러닝 프레임워크들이 표준적으로 이용하고 있습니다.

Xavier 초깃값을 사용하면 앞 층에 노드가 많을 수록 대상 노드의 초깃값으로 설정하는 가중치가 좁게 됩니다. 

층이 깊어지면서 형태가 다소 일그러지지만 앞의 방식보다는 확실히 넓게 분포됨을 알 수 있습니다.

 

tanh()의 사용

분포를 좀 더 개선하기 위해 tanh() 사용할 수 있음

사용하면 말끔한 종 모양으로 분포됩니다.

 

6.2.3 ReLU를 사용할 떄의 가중치 초깃값

Sigmoid 함수와 tanh 함수는 둘 다 중앙부근에서 선형인 함수이기에 Xavier 초깃값이 적당합니다.

반면 , ReLU는 음의 영역이 0이기에 더 넓게 분포시키기 위해 2배의 계수가 필요

ReLU에 특화된 초깃값: He 초깃값

 

STD=0.01일 떄의 각층의 활성화 값들은 아주 작은 값들입니다.

신경망에 작은 데이터가 흐른다는 것은 역전파 때 가중치의 기울기 역시 작 아진다는 것이며 실제로도 학습이 거의 이뤄지지 않음

 

Xavier 초깃값 결과는 깊어지면서 치우침이 조금씩 커집니다

실제로 층이 깊어지면 활성화값들의 치우침도 커지고 , 학습할 떄 '기울기 소실'문제를 일으킵니다.

 

마지막으로 He초깃값은 모든 층에서 균일하게 분포되었습니다.

층이 깊어져도 분포가 균일하게 유지되기에 역전파 때도 적절한 값이 나올 것으로 기대할 수 있습니다.

 

6.2.4 MNIST 데이터셋으로 본 가중치 초깃값 비교

 

std=0.01일 때는 학습이 전혀 이뤄지지 않습니다.앞서 활성화값이 분포에서 본 것처럼 순전파 때 너무 작은 값(0 근처로 밀집한 데이터)이 흐르기 때문입니다. 그로 인해 역전파 때의 기울기도 작아져 가중치가 거의 갱신되지 않는 것이죠 

반대로 Xavier와 He 초깃값의 경우는 순조롭게 이뤄지고 있습니다. 다만 학습 진도는 He초깃값 쪽이 더 빠르군요.

 

6.3 배치 정규화

각층이 활성화를 적당히 퍼뜨리도록 '강제'

 

6.3.1 배치 정규화 Batch Normalization 알고리즘

 

배치 정규화가 주목받는 이유:

학습을 빨리 진행할 수 있다. (학습 속도 개선)

초깃값에 크게 의존하지 않는다.(골치 아픈 초깃값 선택 장애여 안녕 !)

오버피팅을 억제한다. (드롭아웃 등의 필요성 감소)

 

각 층에서의 활성화 값이 적당히 분포되도록 조정하는 것입니다.

데이터 분포를 정규화하는 배치 정규화 계층을 신경망에 삽입합니다.

 

학습 시 미니배치를 단위로 정규화함

구체적으로는 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화

 

배치 정규화 개층마다 이 정규화된 데이터에 고유한 확대와 이동 변환을 수행합니다.

 

6.2.3 배치 정규화의 효과

MNIST 데이터셋을 사용하여 배치 정규화 계층을 사용할 때와 사용하지 않을 때의 학습 속도를 실험

결과: 배치 정규화가 학습을 빨리 진전시키고 있습니다. 

 

거의 모든 경우에 배치 정규화를 사용할 때 학습이 빠르다.

 

 

6.4 바른 학습을 위해

기계학습에서는 오버피팅이 문제가 되는 일이 많음

오버피팅이란 신경망이 훈련 데이터에 지나치게 적응되어 그 외의 데이터에 대한 적응력이 떨어지는 상태 

아직 보지 못한 데이터를 바르게 식별하는 모델이 바람직

 

6.4.1 오버피팅 Overfitting

오버피팅이 주로 일어나는 경우

매개변수가 많고 표현력이 높은 모델

훈련 데이터가 적음

 

 

6.4.2 가중치 감소

오버피팅을 억제하기 위한 방법  가중치 감소 Weight decay

학습 과정에서 큰 가중치에 대해 상응하는 큰 페널티 부과하여 오버피팅을 억제하는 방법입니다.

오버피팅이 가중치 매개변수의 값이 커서 발생하는 경우가 많기 때문이죠 .

 

신경망 학습의 목적은 손실 함수의 값을 줄이는 것입니다.

가중치의 제곱 L2 norm을 손실 함수에 더하면 가중치가 커지는 것을 억제

L2 norm: 각 원소의 제곱들을 더한 것

 

가중치의 기울기를 구하는 계산에서 그동안의 오차 역전파법에 따른 결과에 λW를 더함

λ람다는 정규화의 세기를 조절하는 하이퍼파라미터

 

λ = 0.1로 가중치 감소를 적용한 결과

훈련 데이터와 시험 데이터에 대한 정확도에는 여전히 차이가 있지만 가중 치 감소를 이용하지 않은 결과와 비교했을 때 차이가 줄어들었음

오버피팅이 억제되었다는 의미

 

6.4.3 드롭아웃 Dropout

오버피팅을 억제하기 위해 뉴런을 임의로 삭제하면서 학습하는 방법입니다.

훈련 때는 은닉층의 뉴런을 무작위로 골라 삭제합니다. 삭제된 뉴런은 신호를 전달하지 않게됩니다.

 

예측 때는 모든 뉴런을 사용하되 각 뉴런의 출력에 훈련 때 삭제 비율을 곱 하여 출력

학습 시와 비슷한 출력을 위함

 

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

하이퍼파라미터 : 신경망 층의 갯수, 층의 뉴런 수, 배치 크기, 학습률, 드롭아웃 비율 등

적절한 값을 설정하지 않으면 모델의 성능이 크게 떨어지기도 함

많은 시행착오가 필요하다.

 

6.5.1 검증 데이터 

검증 데이터 Validation Dataset

훈련데이터로는 학습을 하고 , 시험 데이터로는 범용 성능을 평가했죠 . 

검증 데이터 하이퍼파라미터 조정용 데이터를 일반적으로 검증 데이터라고 부릅니다.

 

데이터셋에 따라서는 training, validation, test set을 미리 분리해서 제공되 는 것도 있음

 

6.5.2 하이퍼파라미터 최적화

하이퍼파라미터의 '최적 값'이 존재하는 범위를 조금씩 줄여가는 것입니다.

우선 대략적인 범위를 설정하고

그 범위에서 무작위로 하이퍼파라미터 값을 골라낸 후, 그 값으로 정확도 평가

정확도를 잘 살피면서 이를 반복하여 최적 값의 범위를 좁혀가는 것입니다.

 

하이퍼파라미터의 범위는 '대략적'으로 지정하는 것이 효과적입니다.

하이퍼파라미터를 최적화 할 때는 딥러닝 학습에는 오랜 시간 걸릴 수 있기에 나쁠 듯한 값은 일찍 포기하는 것이 좋습니다.

그래서 학습을 위한 에폭을 작게 하여 1회 평가 시간을 단축하는 것이 효과적입니다. 

 

6.5.3 하이퍼파라미터 최적화 구현하기

학습률과 가중치 감소 계수를 탐색하는 문제

 

잘 될 것 같은 값의 범위를 관찰한 후에 범위를 좁혀서 더 높은 성능을 내는 하이퍼파라미터 탐색

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

07-2. 합성곱 신경망(cnn)  (0) 2020.12.09
07-1. 합성곱 신경망(cnn)  (0) 2020.11.19
05. 오차역전파법  (0) 2020.10.16
04. 신경망 학습  (0) 2020.09.25
03. 신경망  (0) 2020.09.23

+ Recent posts