오차 역전파(back propagation)
- 다층 퍼셉트론에서의 최적화 과정
- 오차 역전파의 단계
- 임의의 초기 가중치를 준 뒤 결과(y)를 계산
- 계산 결과와 우리가 원하는 값 사이 오차 계산
- 경사 하강법을 이용해 바로 앞 가중치를 오차가 작아지는 방향(미분값이 0으로 근사하는 방향)으로 업데이트
- 위의 과정을 더 이상 오차가 줄어들지 않을 때까지 반복
입력된 실제 값과 다층 퍼셉트론의 계산 결과를 비교하여 가중치를 역전파 방식으로 수정해가는 과정
1. 환경 변수 지정: 입력값, 결과값이 포함된 데이터셋, 학습률, 활성화 함수, 가중치 등
2. 신경망 실행: 초깃값을 입력하여 결과값이 나오게 함
3. 결과값과 실제값 비교: 오차 측정
4. 결과 출력
다층 퍼셉트론의 문제점
기울기 소실(vanishing gradient): 다층 퍼셉트론에서 활성화 함수로 시그모이드 함수를 사용할 경우 시그모이드 함수를 계속 미분함에 따라 값이 점차 0에 가까워진다. 즉, 층을 거쳐 갈수록 기울기가 사라져 가중치를 수정하기 어려워진다.
해결
활성화 함수로 시그모이드 함수가 아닌 다른 함수를 사용
활성화 함수의 종류
시그모이드
하이퍼볼릭 탄젠트
렐루
x 가 0보다 크기만 하면 미분값이 0이됨
소프트플러스
경사하강법의 단점
경사하강법은 가중치를 정확하게 찾아가지만 한번 업데이트 할때마다 전체 데이터를 미분해야 하므로 계산량이 많다.
이를 보완하고자 고급 경사 하강법의 등장
고오급 경사 하강법의 종류
고급 경사 하강법 | 개요 | 효과 | 케라스 사용법 |
확률적 경사 하강법(Stochastic Gradient Descent, SGD) | 경사 하강법의 단점 보완 전체 데이터를 사용하는 것이 아닌 랜덤하게 추출한 일부 데이터만 사용 |
더 빠르고 자주 업데이트 가능 | keras.optimizers.SGD(lr=0.1) |
모멘텀 SGD | 경사 하강법에 탄력을 더해주는 것 경사 하강법과 마찬가지로 매번 기울기를 구하지만 이를 통해 오차를 수정하기 전 앞 수정값과 방향을 참고하여 같은 방향으로 일정한 비율만 수정되게 함. 수정 방향의 지그재그 현상이 줄어들고, 이전 이동값을 고려하여 일정 비율만큼 다음 값을 결정하므로 관성의 효과 |
정확도 개선 | 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) eplison값은 그대로 사용 권장 lr(학습률)만 조정 |
알엠에스프록(RMSProp) | 아다그리드의 보폭 민감도 보완 | 보폭 크기 개선 | keras.optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=1e-08, dexay=0.0) |
아담(Adam) | 모멘텀 + 알엠에스프롭 현재 가장 많이 사용 |
정확도와 보폭 크기 개선 | keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0) |
'AI Theory > key concept of AI' 카테고리의 다른 글
JSON (0) | 2022.07.19 |
---|---|
API와 웹 크롤링 (0) | 2022.07.18 |
[모두의딥러닝] 퍼셉트론 (0) | 2022.07.17 |
[모두의 딥러닝] 선형 회귀와 로지스틱 회귀 (0) | 2022.07.08 |
[파이썬으로 캐글뽀개기] 캐글에서 사용되는 머신러닝 알고리즘 (0) | 2022.07.04 |