일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MBTI성격유형
- 비전공자파이썬
- 파이썬수업
- 미국디리스킹
- 셀레니움
- 패스트캠퍼스수강후기
- 파이썬기초
- 패스트캠퍼스후기
- 파이썬독학
- MBTI
- 파이썬문법
- 암호화폐
- 파이썬온라인수업
- 파이썬배우기
- 파이썬 인강
- 광교카페
- 스크래핑
- swift문법
- MBTI성격검사
- 파이썬강의후기
- 파이썬강의
- 노르웨이기준금리
- 스위스기준금리
- 파이썬인강
- 파이썬독학하기
- 파이썬클래스
- 중국수출통제
- 순천여행
- SQL
- 비트코인
- Today
- Total
이제 데이터 공부 안하는 블로그
신경망 학습 최적화 방법 Optimization 본문
* 제가 공부하기 위해 만든 자료입니다. 혹시 틀린 부분이 있다면 댓글로 알려주시면 수정하겠습니다.
딥러닝에서 최적화(Optimization)란 학습 모델의 손실함수(loss function)의 최소값을 찾아가는 과정을 말한다. 이 과정에서 최적화된 하이퍼 파라미터의 값을 찾는 것이 목표인데, 딱 떨어지는 답이 없기 때문에 다양한 시도를 통해 최적의 조합을 찾아가야한다.
앞에서 가중치 파라미터들을 Optimize 하기 위해서 경사하강법(Gradient Descent)을 사용했다.
Gradient Descent 경사하강법
Gradient Descent(경사하강법)은 오차함수의 낮은 지점을 찾아가는 최적화 방법이다. 가중치의 기울기를 구해서 손실함수(loss funtion)를 줄이는 방향으로 업데이트 해나간다. 여기서 손실함수(loss funtion)은 지금 현재의 가중치에서 '틀린 정도'를 알려주는 함수라고 생각하면 된다.
가중치를 업데이트 하는 과정
- 현 지점의 기울기(Gradient)를 통해 이동할 방향을 구한다.(오차함수를 현재 위치에서 미분함으로써 방향을 구함-(?))
- 한 스텝마다 이동하는 발자국의 보폭을 학습률(leargning rate)로 정의한다. (학습률은 한 번 학습시에 학습하는 양을 의미)
- 에러를 낮추는 방향으로 정해진 학습률(leargning rate)을 곱해서 가중치(weight)를 이동시킨다.
- 경사가 가장 낮은 지점(오차함수가 낮은 지점)을 찾을 때까지 위의 과정을 계속 반복한다.
위의 과정으로 경사하강법(Gradient Descent)는 모든 데이터를 계산하여 최적의 한 스텝을 찾아 앞으로 나아간다. 모든 데이터를 계산하기 때문에 학습시간이 굉장히 오래 걸린다는 단점이 있다. 이 단점을 보완하기 위해서 나온 것이 확률적 경사하강법(Stochastic Gradient Descent )이다.
Stochastic Gradient Descent 확률적 경사하강법
경사하강법처럼 모든 데이터를 사용하지 않고 데이터를 작은 단위(Mini-batch)로 잘라서 학습시키기 때문에 훨씬 속도가 빠르다.
위의 사진에서와 같이 훈련 데이터를 무작위로 작은 사이즈(mini-batch)로 추출해서 학습시킨다.
위의 사진에서 볼 수 있는 것처럼 확률적 경사하강법(Stochastic Gradient Descent)은 최적의 방향을 찾아가는 과정이 조금 뒤죽박죽이긴 하지만 경사하강법보다는 훨씬 빠르게 최적의 값을 찾을 수 있다.
* 주의할 점은 한 걸음 나아가는 보폭인 학습률(learning rate)을 너무 크게 작게 설정하면 학습시간이 너무 오래 걸리고, 너무 크게 설정하면 우리가 원하는 최적의 값인 global minima를 찾지 못하는 문제점이 있어서 적절한 학습률을 설정해야 한다는 것이다.
Momentum 모멘텀
관성의 법칙을 이용해 최적화하는 방법이다. 속도가 크게 나올수록 기울기가 크게 업데이트 된다. 진행중인 방향으로 관성을 더해 지역 최소점(Local minimum)에 빠지지 않도록 한다.
AdaGrad
Adagrad의 경우 squared gradient(기울기 제곱)에 반비례하도록 학습률을 조정하는데, 이는 기울기가 가파를수록 조금만 이동하고, 완만할 수록 조금 더 이동하게 함으로써 변동을 줄이는 효과가 있다. 무엇보다 행렬곱 연산을 통해 가중치마다 다른 학습률을 적용한다는 점에서 더욱 정교한 최적화가 가능해진다. (출처 : )
단점은 기울기가 0인 부근에서는 학습이 느려져서 local minima에 빠지게 될 수 있다. 그 문제를 해결하고자 나온 것이 RMSProp 이다.
RMSProp
AdaGrad의 업그레이드 버전인데 보폭을 줄이되 이전 기울기 변화의 맥락을 살핀다. a가 너무 작아져서 학습이 안되는 것을 방지해준다.
Adam
Momentum + AdaGrad의 장점을 합쳐서 만든 기법이다. 방향과 보폭 둘 다 적절하게 조절해준다. 대부분의 상황에서 결과가 잘 나오는 편이라 잘 모를 때는 Adam을 쓰도록 하자.
'딥러닝' 카테고리의 다른 글
분산 표현(Distributed representation) (0) | 2021.08.18 |
---|---|
자연어처리(NLP, Natural Language Processing) (0) | 2021.08.17 |
과적합을 막기 위한 방법 - Early Stopping, Weight Decay, Weight Constraints, Dropout (0) | 2021.08.11 |
역전파(EBack Propagation), 경사하강법, 손실함수 (0) | 2021.08.11 |
인공신경망(Artificial Neural Networks) 과 퍼셉트론(Perceptron) (0) | 2021.08.09 |