ML/모두의 딥러닝

9장) 신경망에서 딥러닝으로

busy맨 2023. 7. 10. 16:22

1. 기울기 소실 문제와 활성화 함수

  • 오차 역전파는 출력층으로부터 하나씩 앞으로 되돌아가며 각 층의 가중치를 수정하는 방법
  • 층이 늘어나면 역전파를 통해 전달되는 기울기의 값이 점점 작아져 맨 처음 층까지 전달되지 않는
    기울기 소실(vanishing gradient)문제 발생

기울기 소실 문제 발생

  • 이는 활성화 함수로 사용된 시그모이드 함수의 특성 때문
  • 시그모이드 함수의 미분값 최대치는 0.3인데 1보다 작으므로 계속 곱하면 0에 수렴
  • 따라서 여러 층을 거칠수록 기울기가 사라져 가중치를 수정하기 어려워짐

시그모이드의 미분

 

※시그모이드 대체 함수

여러 활성화 함수의 도입

  • 하이퍼볼릭 탄젠트 함수(tanh)
    • 시그모이드 함수의 범위를 -1에서 1까지로 확장한 개념
    • 미분한 값의 범위가 함께 확장됨
    • 여전히 1보다 작은 값이 존재하므로 기울기 소실 문제 해결 X
  • 렐루 함수(ReLU)
    • 시그모이드 함수의 대안으로 떠오르며 현재 가장 많이 사용되는 활성화 함수
    • x가 0보다 작을 때는 모든 값을 0으로 처리, x가 0보다 큰 값은 x를 그대로 사용
    • 0보다 큰 x 미분 시, 모든 x에 대한 미분 값이 1
    • 여러 은닉층을 거치며 곱해지더라도 사라지지 않으므로 기울기 소실 문제 해결
  • 소프트플러스 함수(softplus)
    • ReLU함수를 변형하여 0이 되는 순간을 완화

 

2. 고급 경사 하강법

1) 확률적 경사 하강법(Stochastic Gradient Descent, SGD)

  • 경사 하강법의 단점: 불필요하게 많은 계산량은 속도를 낮추고, 최적 해를 찾기 전에 최적화 과정이 중단될 수 있음
  • 확률적 경사 하강법은 경사 하강법의 단점을 보완한 방법
  • 전체 데이터를 사용하는 것이 아니라, 랜덤하게 추출한 일부 데이터를 사용
    • 일부 데이터만 사용하므로 더 빠르게, 더 자주 업데이트 하는 것이 가능
  • 속도가 확연히 빠르고 최적 해에 근사한 값을 찾아내 경사 하강법의 대안으로 사용

경사 하강법과 확률적 경사 하강법의 차이

2) 모멘텀(momentum)

  • 모멘텀 확률적 경사 하강법
    • 경사 하강법에 탄력을 더해 주는 것
  • 매번 기울기를 구해 오차를 수정하기 전 바로 앞 수정 값과 방향을 참고해 같은 방향으로 일정한 비율만 수정되게 하는 방법
  • 수정 방향이 양수 방향으로 한번, 음수 방향으로 한 번 지그재그로 일어나는 형상이 줄고,
    이전 이동 값을 고려하여 일정 비율만큼 다음 값을 결정하므로 관성의 효과를 냄

모멘텀

 

3) 고급 경사 하강법과 케라스 사용법

고급 경사 하강법 개요 효과 케라스 사용법
확률적 경사 하강법(SGD) 랜덤하게 추출한 일부 데이터를 사용해 더 빨리, 자주 업데이트를 하게 하는 것 속도 개선 keras.optimizers.SGD(lr=0.1)
케라스 최적화 함수를 이용
모멘텀(Momentum) 관성의 방향을 고려해 진동과 폭을 줄이는 효과 정확도 개선 keras.optimizers.SGD(lr=0.1, momentum=0.9)
모멘텀 계수를 추가
네스테로프 모멘텀(NAG) 모멘텀이 이동시킬 방향으로 미리 이동해서 기울기를 계산, 불필요한 이동을 줄이는 효과  정확도 개선 keras.optimizers.SGD(lr=0.1, momentum=0.9, nesterov=True)
네스테로프 옵션을 추가
아다그라드(Adagrad) 변수의 업데이트가 잦으면 학습률을 적게 하여 이동 보폭을 조절하는 방법 보폭 크기 개선 keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
아다그라드 함수 사용
*lr만 조정
알엠에스프롭(RMSProp) 아다그라드의 보폭 민감도를 보완한 방법 보폭 크기 개선 keras.optimizers.RMSprop(lr=0.001, epsilon=1e-08,decay=0.0)
알엠에스프롭 함수 사용
아담(Adam) 모멘텀과 알엠에스프롭을 합친 방법 정확도와 보폭 크기 개선 keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
아담 함수 사용

고급 경사 하강법의 변천

  • 아담(Adam)이 현재 가장 많이 사용되는 고급 경사 하강법

'ML > 모두의 딥러닝' 카테고리의 다른 글

11장) 데이터 다루기  (0) 2023.07.11
10장) 모델 설계하기  (0) 2023.07.10
8장) 오차 역전파  (0) 2023.07.10
7장) 다층 퍼셉트론  (0) 2023.07.10
6장) 퍼셉트론  (0) 2023.07.10