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 |