model.compile(loss='mse', optimizer='adam')
딥러닝을 최적화 하여 훈련 시킬때에 사용되는 optimizer 알고리즘을 알아봅니다.
Optimizer
딥러닝 모델을 학습 시키면서 어떻게 최적값을 찾을까요.
최적화에 사용되는 알고리즘들을 알아 보고 왜 adam 을 자주 사용하는 지 알아봅니다.
1. Gradient Descent (GD)
: 기울기의 최솟값을 찾는다
딥러닝 학습을 한다는거 쉽게 생각하면 미분을 계속해서 최적의 가중치와 편향값을 찾아내는것입니다.
Gradient Descent는 이런 미분하는 과정에서 함수의 기울기(즉, gradient)를 이용하여 x의 값을 어디로 옮겼을 때 함수가 최소값을 찾는지 알아보는 방법입니다.
이 방법에는 문제점이 있습니다.
1. 극소값(local minimum)에 도달할 수 있다는 것이 증명되었으나 전체 최소값(global minimum) 으로 갈 수 있다는 보장은 없음
2. 훈련속도가 느림
그러면 어떻게 이 문제점을 어떻게 해결할까요?
2. Momentum
앞서 말한 GD의 문제를 해결하기 위해 보편적으로 사용되는 방법입니다.
관성(momentum)을 적용하여 변수가 가던 방향으로 계속 가도록 속도(velocity)를 추가한 것입니다.
global minimal에 이르기 전에 기울기가 0이 되는 local minimal에 빠지는 것을 방지합니다.
하지만 이 방법에도 문제점은 또 있습니다.
관성이 붙어서 진짜 최솟값을 놓치면?
3. AdaGrad
: 아다그라드
Momentum은 gradient의 방향에 초점을 두었다면, AdaGrad는 step size에 초점을 둡니다.
학습을 많이 하면 중간에 이르러서 멈추게 됩니다. 이미 학습이 많이 된 변수는 학습을 느리게, 학습이 아직 덜 된 드물게 등장한 변수라면 학습을 더 빨리 훈련합니다.
이 방식은 학습이 오래 진행이 될 경우 step size가 너무 작아져서 거의 움직이지 않는 상태가 됩니다.
4. RMSProp
: Root Mean Square Propatation
Adagrad의 계산식에 지수 가중 이동 평균(Exponentially weighted average)를 사용하여 최신 기울기들이
더 크게 반영되도록 합니다.
5. Adam
: Adaptive Moment Estimation
RMSProp과 Momentum 방식을 융합한 알고리즘 입니다.
모멘텀의 속도가 빠르다는 장점을 이용하여 Momentum과 유사하게 지금까지 계산한 기울기의 지수 평균을 저장하며,
RMSProp과 유사하게 기울기의 제곱값의 지수 평균을 저장합니다.
이 때문에 가장 많은 경우에서 쓰이는 알고리즘은 ADAM 입니다.
Overfitting 과 Early Stopping
최적화를 수행하여 어떤 값이 주어져도 잘 예측을 할 수 있는 모델을 만들 수 있습니다.
만약 이 모델이 너무 예민해서 학습시킬때는 말을 잘 알아먹었지만 다른 값을 넣는다고 완전 이상한 결과를 만들어내면 어떻게 될까요
Overfitting
과적합은 모델이 학습 데이터에 너무 과도하게 적합화되어 새로운 데이터에 대한 예측 성능이 저하되는 현상입니다.
다시 말해 모델이 학습 데이터에만 맞추어져 새로운 데이터에 대해 일반화(generalization) 능력이 부족하게 되는 것입니다.
이를 해결하기 위해서 중간에 drop-out할 필요가 있습니다.
Early Stopping
과적합을 방지하기 위한 방법 중 하나입니다.
학습 중 모델의 성능을 모니터링하다가 성능은 계속해서 향상되지만 검증 데이터에 대한 성능은 향상되지 않거나 감소하는 지점에서 학습을 조기 종료합니다.
일반적으로, 학습 데이터와 검증 데이터를 나누어 학습하면서 적용됩니다.
케라스 콜백에서는 단 2줄로 사용 가능합니다.
코드 사용예시
sci-kit의 기본 키트인 california_hosing data를 불러와
회귀분석을 통해 california의 집값을 예측하는 딥러닝 학습 예제 입니다.
500회로 설정한 학습 횟수 중 153번째 학습 중 earlystopping을 하여 학습을 종료 시켰습니다.
best epoch는 53이라고 하네요 어떤 loss 값이 나왔을까요
감시할 변수 val_loss 에서 earlystopping은 0.6261이라는 가장 낮은 loss값을 찾은것을 확인할 수 있습니다.
컴파일에는 조건, 계산식
훈련에는 제한
fit에는 감시할 변수를 넣습니다.
'TIL' 카테고리의 다른 글
소프트웨어와 웹애플리케이션 (0) | 2023.05.22 |
---|---|
[AI] 딥러닝 CNN 모델 3주 13일차 (4) | 2023.05.11 |
[AI] 딥러닝 용어 정리 3주 11일차-1 (4) | 2023.05.09 |
[AI] 파이썬 딥러닝 기초 3주 10일차-4 (1) | 2023.05.09 |
[AI] 딥러닝 공부를 위한 기초 파이썬 3주 10일차-3 (1) | 2023.05.08 |