가중치 매개변수의 최적값을 탐색하는 최적화 방법 , 가중치 매개변수 초깃값, 하이퍼파라미터 설정 방법등 ,
오버피팅의 대응책인 가중치 감소와 드롭아웃 등의 정규화 방법
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일 떄의 각층의 활성화 값들은 아주 작은 값들입니다.
신경망에 작은 데이터가 흐른다는 것은 역전파 때 가중치의 기울기 역시 작 아진다는 것이며 실제로도 학습이 거의 이뤄지지 않음