밑바닥부터 시작하는 딥러닝 - 6장

Jajuna_99·2022년 9월 11일
0

6장 학습 관련 기술들

물론 우리가 학습하는데 관련 기술들이 아니라, 딥러닝 학습에 관련된 기술들을 챕터이겠다. ^오^

매개변수 갱신

신경망의 학습 목표는 손실 함수의 값을 가능한 최대한 낮추는 매개변수를 찾는 것이다. -> 다시말해 최적의 매개변수를 찾는 것이 목표이고, 이를 최적화(optimization)이라 한다.

SGD
최적의 매개변수 값을 찾는 방법으로 매개변수의 기울기(미분)를 이용했고, 확률적 경사 하강법(stochastic gradient descent, SGD)을 채택했었다.

  • 매개변수의 기울기를 구해, 기울어진 방향으로 매개변수 값을 갱신하는 일을 계속해서 반복해서 최적의 값에 다가가는 방법. -> 단순하다.

  • 수식과 의사코드(수도코드)는 p.191에 있다.

  • 하지만 SGD는 특정 문제(비등방성 함수, anisotropy)에서 (기울기 탐색 경로가)비효율적이다는 문제점이 생긴다.

모맨텀, Momentum

  • 기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙을 나타내는 수식을 응용해서 만든 최적화 방법.

  • 기울기의 수식과 의사코드(수도코드), 시각화된 그래프는 p.195에 있다.

AdaGrad

  • 학습률을 정하는 효과적 기술로 학습률 감소(learning rate decay)가 있다. -> 학습을 진행하면서 학습률을 점차 줄여가는 방법
    • 학습률을 서서히 낮추는 간단한 방법으로 매개변수 '전체'의 학습률 값을 일괄적으로 낮추는 것이다. -> 이 방법의 발전된 형태가 AdaGrad이다.
  • 수식과 의사코드(수도코드)는 p.197에 있다.

Adam

  • 공이 그릇 바닥(작가님이 그릇 바닥이라는 표현을 쓴다.) 구르는 듯한 움직임의 momentum과 매개변수의 원소마다 적응적으록 갱신 정도를 조정하는 방법의 AdaGrad 융합한 형태가 Adam이다.

  • 의사코드(수도코드), 시각화된 그래프는 p.200에 있다.

이 외에 각각의 기법들을 시각화해보고 비교해보면서 절대적으로 '올바른' 최적화 방법은 없고 문제들마다 최적화 방법이 다르다고 말한다.

가중치의 초깃값

가중치 감소, weight decay

  • 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. -> 가중치 값을 작게하면 오버치팅이 일어나지 않게 된다.
    • 가중치를 모두 0으로 만들면 순전파 가중치가 0이기 때문에 층수와 상관없이 모두 같은 값이 전달된다.

위에 이유들 때문에 가중치 초깃값은 무작위로 설정해야 한다.

  • 표준편차가 1인 정규분포와 0.01인 신경망으로 활성화값들의 분포를 관찰하는 실험을 했는데 각각 기울기 소실(gradient vanishing)문제와 표현력 제한 문제가 생긴다. (p.204)

Xavier 초깃값

  • 앞 계층의 노드가 n개라면 표준편차가 (1/n)^1/2 인 분포를 사용하는 초깃값 (p.206) 앞에 실험들보다 활성화 값들이 넓게 분포 됐다. -> 활성화 함수가 선형인 것이 전제이다.

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)

  • 이 하이퍼파라미터 값 최적화의 핵심은 '최적 값이 존재하는 범위를 조금씩 줄여가는 것이다.'

    • 범위를 조금씩 줄이려면 우선 대략적인 범위를 설정하고 그 범위에서 무작위로 하이퍼파라미터 값을 골라내 후(샘플링) 후, 그 값으로 정확도를 평가하는 것이다.
    • '대략적으로' 지정하는 것이 효과적이다. 시간이 매우 오래 걸리기 때문에 학습을 위한 에폭을 작게 하여, 1회 평가에 걸리는 시간을 단축하는 것도 효과적이다.

하이퍼파이미터 최적화 프로세스

  • 0단계 : 하이퍼파라미터 값의 범위를 설정
  • 1단계 : 설정된 범위에서 하이퍼파라미터의 값을 무작위로 추출
  • 2단계 : 1단계에서 샘플링한 하이퍼파라미터 값을 사용하여 학습, 검증 데이터로 정확도를 평가 (에폭은 작게 설정)
  • 3단계 : 1단계와 2단계를 특정 횟수(100회 등) 반복, 정확도의 결과를 관찰하고 하이퍼파라미터의 범위를 좁힌다.

이에 대한 수학적 정리가 베이즈 정리(Baysian optimization)이다.

하이퍼파라미터 최적화하기 구현 코드는 (p.225)에 있다.

요약

이 챕터는 신경망 학습에 도움이 되는 여러 기술들을 소개한다. (어지럽다) 하지만 직관적인 설명을 위주로 하고 깊게 파고 들지는 않는다. 다행히 그럴때마다 정보 출처들(논문, 수업, 블로그 등)을 남겨 따로 공부할 수 있게 해놨다.

이 챕터에서는 "새로운 기술들 실험은 이렇게 하는거야." 라는 느낌을 받았다.

이 챕터에서 소개된 논문들을 읽어보고 리뷰 해봐야겠다. (하고 싶다.)

profile
Learning bunch, mostly computer and language

0개의 댓글