물론 우리가 학습하는데 관련 기술들이 아니라, 딥러닝 학습에 관련된 기술들을 챕터이겠다. ^오^
신경망의 학습 목표는 손실 함수의 값을 가능한 최대한 낮추는 매개변수를 찾는 것이다. -> 다시말해 최적의 매개변수를 찾는 것이 목표이고, 이를 최적화(optimization)이라 한다.
SGD
최적의 매개변수 값을 찾는 방법으로 매개변수의 기울기(미분)를 이용했고, 확률적 경사 하강법(stochastic gradient descent, SGD)을 채택했었다.
매개변수의 기울기를 구해, 기울어진 방향으로 매개변수 값을 갱신하는 일을 계속해서 반복해서 최적의 값에 다가가는 방법. -> 단순하다.
수식과 의사코드(수도코드)는 p.191에 있다.
하지만 SGD는 특정 문제(비등방성 함수, anisotropy)에서 (기울기 탐색 경로가)비효율적이다는 문제점이 생긴다.
모맨텀, Momentum
기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙을 나타내는 수식을 응용해서 만든 최적화 방법.
기울기의 수식과 의사코드(수도코드), 시각화된 그래프는 p.195에 있다.
AdaGrad
Adam
공이 그릇 바닥(작가님이 그릇 바닥이라는 표현을 쓴다.) 구르는 듯한 움직임의 momentum과 매개변수의 원소마다 적응적으록 갱신 정도를 조정하는 방법의 AdaGrad 융합한 형태가 Adam이다.
의사코드(수도코드), 시각화된 그래프는 p.200에 있다.
이 외에 각각의 기법들을 시각화해보고 비교해보면서 절대적으로 '올바른' 최적화 방법은 없고 문제들마다 최적화 방법이 다르다고 말한다.
가중치 감소, weight decay
위에 이유들 때문에 가중치 초깃값은 무작위로 설정해야 한다.
Xavier 초깃값
He 초깃값
앞 계층의 노드가 n개라면 표준편차가 (2/n)^1/2 인 분포를 사용하는 초깃값 (p.207) ReLU는 음의 영역이 0이라서 더 넓게 분포시키기 위해 Xavier 초깃값보다 2배의 계수가 필요하다고 볼 수 있다.
이후 MNIST 데이터셋으로 가중치 초깃값들을 비교하는 실험을 해본다. (p.209)
각 층이 활성화를 적당히 퍼뜨리도록 강제해보자는 아이디어에서 나온 기법이 배치 정규화(batch normalization)이다.
배치 정규화는
배치 정규화의 예시와 수식은 (p.211)에 있다.
오버피팅, over fitting
신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태
(p.216)에 데이터 시각화를 통해 일부러 오버피팅되도록 학습시킨 다음 오버피팅의 예시를 보여준다.
가중치 감소, weight decay
원래 오버피팅은 가중치 매개변수의 값이 커서 발생하는 경우가 많기 때문에 가중치를 감소시키는 방법! (위에서 설명했다.)
하이퍼파라미터를 조정해 가중치를 통제하는 방법에 대해 설명하고 (p.218)에 결과를 시각화해서 보여준다.
드롭아웃, dropout
신경망 모델이 복잡해지면 가중치 감소만으로 대응하기 어려워진다. -> 이럴 때 드롭아웃을 이용하자.
드로아웃의 개념은 뉴련을 무작위로 선택해 삭제하여 신호 전달을 차단한다.
(p.220)에 의사코드와 시각화된 결과값들이 있다.
기계 학습의 앙상블 학습(ensemble learning)에 대해서도 약간 설명해준다. (p.221)
하이퍼파라키터는, 각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등 설정이 필요한 변수들을 얘기한다. 이런 값들은 당연히 중요하고 최적의 값을 찾는 방법 또한 알아야 하겠다.
여태껏 훈련 데이터와 시험 데이터를 사용해 학습 했었는데, 하이퍼파라미터 성능을 평가할 떄는 시험 데이터를 사용하면 안된다. (시험 데이터에 오버피팅 되기 때문에)
그래서 검증 데이터(validation data)를 따로 만들어 사용한다. (훈련 데이터 중 20% 정도 분리 해서 만든다.) (코드 p.223)
이 하이퍼파라미터 값 최적화의 핵심은 '최적 값이 존재하는 범위를 조금씩 줄여가는 것이다.'
하이퍼파이미터 최적화 프로세스
이에 대한 수학적 정리가 베이즈 정리(Baysian optimization)이다.
하이퍼파라미터 최적화하기 구현 코드는 (p.225)에 있다.
이 챕터는 신경망 학습에 도움이 되는 여러 기술들을 소개한다. (어지럽다) 하지만 직관적인 설명을 위주로 하고 깊게 파고 들지는 않는다. 다행히 그럴때마다 정보 출처들(논문, 수업, 블로그 등)을 남겨 따로 공부할 수 있게 해놨다.
이 챕터에서는 "새로운 기술들 실험은 이렇게 하는거야." 라는 느낌을 받았다.
이 챕터에서 소개된 논문들을 읽어보고 리뷰 해봐야겠다. (하고 싶다.)