딥러닝 오차 역전파
딥러닝은 학습데이터를 가지고 예측결과를
추론하는 알고리즘이다. 입력값은 기울기
a와 절편 b값이다.
딥러닝은 실제데이터와 차이는 부분을 오차로
규정하고, 가중치와 절편을 임의로 조정하면서
오차가 가장작은 부분, 오차 그래프에서 미분이
0이 되는 지점까지 학습을 수행하고 결과를
도출한다.
문제는 퍼셉트론이 다층으로 쌓이면서 가중치와
바이어스의 수정값도 복잡해진다는 것이다.
층이 많아지면서 출력층에서 은닉층, 그리고
입력층으로 가중치+바이어스 수정값을 조정
하는데 이를 역으로 방향이 간다고 해서
오차 역전파(back propagation)라 부른다.
오차 역전파가 수행되는 도식은 다음과 같다.
1. 환경 변수 지정
입력값, 타깃 결과값, 학습률, 데이터셋을
먼저 정의한다.
2. 신경망 실행
초기값을 입력해서 입력층, 은닉층, 결과층을
거쳐 결과값을 출력해낸다.
3. 결과비교
실제값과 예측값을 비교한다. 당연히 오차가
발생하는 것을 확인하게 된다.
4. 역전파 실행
오차를 줄이기 위해 출력층, 은닉층 순서로
가중치와 바이어스를 수정한다.
5. 결과 출력
오차가 가장 줄어드는 방향으로 가중치,
바이어스를 수정하고 결과를 출력해낸다.
활성화 함수 Activation Function
가중치를 수정하는 과정은 미분을 사용한다.
오차 그래프를 확인하면 2차 함수의 형태를
가지고 있다. 오차가 가장 줄어드는 부분은
그래프의 가장 밑부분, 즉 미분이 0이 되는
지점이다.
딥러닝은 반복적인 가중치 조정으로 미분이
0이 되는 지점을 찾아간다. 이를 경사 하강법
(GradientDecent) 이다.
다중 퍼셉트론의 문제는 퍼셉트론이 중첩되기
시작하면서 활성화 함수로 사용된 시그모이드
함수 때문이다.
시그모이드 함수는 0과 1을 판별하는 함수기
때문에, 시그모이드 함수가 계속 중첩된다면
기울기가 점점 0에 수렴하게 되고, 가중치를
수정하기에 충분한 기울기가 없어지는 현상,
기울기 소실(vanishing gradient) 문제가
발생하게 된다.
이 문제를 해결하는 방법은 시그모이드 함수가
아닌 다른 활성화 함수를 사용하는 방법밖에
없다.
그 중 제프리 힌튼 교수가 제안한 활성화 함수인
렐루(ReLU)는 시그모이드 함수를 대체해서
가장 많이 사용되는 활성화 함수가 된다.
렐루(ReLU)는 x가 0보다 작을 때는 모든 값을
0으로 처리하고, 0보다 큰 값은 x를 그대로 사용하는
간단한 로직을 통해 기울기 소실 문제를 해결한다.
더 나아가서
기울기 소실 문제를 해결 했으니 다중 퍼셉트론의
환경에서 오차를 줄여나가는 것은 해결이 되었다.
여기서 또다른 문제점이 발생하는데 바로 속도의
문제다.
출력값과 실제값을 비교해서 오차가 발생하면,
가중치를 조정해야 하는데, 이 층이 많아지기
시작하면서 계산 속도가 현저히 떨어지는 현상이
발생하기 시작한다.
확률적 경사 하강법(Stochastic Gradient Descent, SGD)
SGD는 전체 데이터를 사용하지 않는다.
랜덤하게 추출된 일부 데이터를 이용해서
가중치를 업데이트 하게 되고, 최적화 과정을
진행한다.
모멘텀(Momentum)
가중치를 조정함에 있어서 +가 되고 -가 되는
과정이 반복되면 지그재그 형태의 수정값이
발생하게 되고 이 또한 속도 저하의 주범이 된다.
모멘텀은 같은 바향으로 일정한 비율만
수정되게 하는 방법이다. 즉 지그재그가 아닌
가중치 수정값이 일정방향으로 광성의 효과를
기대할 수 있게 한다.
속도는 비약적으로 빨라지기 시작하고,
결과값은 점점 정확도를 올려가기 시작한다.
아담(Adam)
모멘텀, 알엠에스프롭을 합친 고급 경사하강법이다.
정확도와 보폭의 크기를 개선하였고, 가장 최근에
개발된 방법이다. 현재 가장 많이 사용되고 있는
고급 경사 하강법이다.
더 읽을거리
'Programming > MachineLearning' 카테고리의 다른 글
딥러닝 과적합 문제 해결하기(feat 광석 판별하기) (0) | 2021.12.16 |
---|---|
딥러닝 다중 분류 모델 Multi Classfication 설계하기 (feat 아이리스 품종 분류하는 모델 설계하기) (0) | 2021.12.16 |
딥러닝 실제 모델 만드는 방법 딥러닝 코드 구현해보기 이항 분류 keras 모듈 이용하기 (feat 인디언 당뇨병 문제) (0) | 2021.12.15 |
딥러닝 핵심 개념 신경망 10분만에 이해하기 (0) | 2021.12.15 |
딥러닝 로지스틱 회귀 알고리즘 10분만에 이해하기 (0) | 2021.12.15 |
딥러닝 머신러닝 인공지능 경사 하강법 10분만에 이해하기 쫄지마 딥러닝 (0) | 2021.12.15 |
댓글