반응형
실제로는 최적화에 한학기를 써야할 정도로 방대한 내용이지만 다양한 최적화 방법에 대해 간단하게만 찍먹해보자
경사하강법
- 미분을 반복하여 local minimum(국소적 최소점)을 찾는 것
Genealization(일반화)
- 학습을 반복시키면 학습데이터에 대한 에러가 줄어든다
- 하지만, train error가 0이 된다고 성능이 좋아진다고 할 수 없다. 왜냐면 test error가 어느 순간부터 증가하기 때문
- 따라서, generalization gap이 증가하면 성능이 떨어진다고 볼 수 있다.
Underfitting vs Overfitting
- 학습데이터에서 잘 동작하지만 테스트데이터에서 잘 동작하지 않는 것이 오버피팅
- 네트워크가 너무 간단하거나 데이터가 너무 적어서 제대로 학습데이터에서도 동작안하면 언더피팅
Cross-validation
- 데이터에서 학습데이터와 검증데이터를 나누는 방법
- 만개의 데이터가 있으면 2천개씩 데이터를 나누고 4개의 파트로 학습하고 1개의 파트로 검증해본다. 이를 5개의 파트를 각각 검증해보고 평균 성능을 측정
- 실제로 cv를 해서 최적의 하이퍼파라미터를 찾고 실제로 테스트데이터를 예측할때는 학습데이터 전부를 적용해서 학습한다.
- 테스트데이터로 학습하지 않는 이유: 말 그대로 치팅! 결과를 알고 결과를 예측하는 것
Bias and Varinace
- 분산이 낮다는건 입력에 대해 출력이 비슷하다, 반대는 입력에 대해 출력이 다양하다
- 편향이 낮다는건 실제 원하는 타켓에 비슷하다. 반대는 원하는 타켓과 다르다.
- trade-off란 분산을 줄이면 편향이 늘어나고 그 반대도 성립할 가능성!이 크다는 것이다.
Bootstrapping
- 학습데이터중에서 일부만 사용하여 여러개의 모델을 만든다. 이런 여러 모델들의 일관성을 찾아낼려고 부트스트랩을 사용한다.
Bagging vs Boosting
- 배깅 또한 학습데이터를 쪼개 여러개의 랜덤 sampling 모델을 만들고 여러 모델들의 평균을 내겠다.(부트스트랩을 이용한 것)
- 앙상블이라고 불리는데 하나의 모델에 모든 데이터를 적용하는 것보다 성능이 좋을때가 많다.
- 부스팅은 데이터를 시퀀셜하게 만들고 데이터를 학습하고 예측을 잘 못하는 데이터에 대해서만 가중치를 부여하여 다시 모델을 만들고 이런 weak model을 합쳐서 하나의 strong model을 만드는 것
Grading Descent 종류
- Stochastic gradinet descent
- single sample로부터 gradient를 계산, 업데이트하는 방식
- Mini-batch gradient descent : 대부분의 딥러닝에 활용하는 방식
- data의 subset으로부터 gradinet를 계산, 업데이트하는 방식
- Batch gradient descent
- 전체 data로부터 gradinet를 계산, 업데이트하는 방식
최적화를 할떄 Batch-size Matters를 고려해야한다!
- 배치사이즈를 줄이면 일반화 성능이 더 좋아진다.
- flat minimum이 sharp minimum보다 test function에서 더 오차가 적게 작용된다.
- 배치사이즈가 너무 크면 sharp minimum에 수렴하게 된다
다양한 최적화 방법
- (Stochastic) Gradient descent
- leaning_rate를 잘 잡는게 중요함. 너무 크면 학습을 제대로 못하고 너무 작으면 아예 못한다.
- Momentum
- 베타라는 하이퍼파라미터를 통해 모멘텀이 포함된 경사하강법을 사용
- 한번 흘러간 방향을 어느정도 유지시켜줘서 잘 학습을 시켜줌(관성을 이용)
- Nesterov Accelerated Gradient
- lookaged gradient를 사용(a라는 정보가 있으면 거기서의 gradient를 계산해보고 지금 어디로 이동할지 고려)
- conversion ratio가 빠르다는 장점이 있다.
- Adagrad
- 이때까지 파라미터가 얼마나 변화했는지를 고려(많이 변화한 파라미터는 적게, 적게 변화한 파라미터는 크게)
- Adadelta
- Adagrad가 가지는 분모가 자꾸 커지는 단점을 보완
- learning rate가 없음
- RMSprop(자주사용!)
- gradient squres에 e를 더해주고 stepsize를 추가
Adam(제일 무난하고 잘됨)
- RMSprop에 momentum을 같이 사용
Regularization
일반화를 잘 해줄 수 있게 정규화 시키는 것. 학습데이터뿐만 아니라 테스트데이터에도 잘 적용할 수 있게!
- Early Stopping
- training error와 validation error의 차이인 loss가 줄어들다가 어느 순간 늘어난다면 멈춘다.
- Parameter Norm Penalty
- 네트워크의 파라미터를 크기관점에서 작게하는 것
- Data Augmentation
- 더 많은 데이터를 사용하는 것이 모델학습에 제일 좋음. 하지만 데이터가 없다면?
- 데이터의 라벨을 변화시키지않는 한도 내에서 데이터를 살짝 변화시키는 것
- 하지만 데이터의 성질을 잘 고려해야함
- Noise Robustness
- 노이즈를 집어 넣는 것. 테스트데이터에서 잘 작용 될때도 있음.
- Label Smoothing
- 2개의 이미지를 섞어서 label도 섞어버리는 것
- 성능이 많이 올라감
- Dropout
- 뉴런의 가중치를 0으로 바꾸는 것
- 좀 더 Robust해진다고 생각하며 성능도 올라감
- Batch Normalization
- 정규화시키는 것. 활용하면 성능을 올리는데 좋음
-
- 정규화시키는 것. 활용하면 성능을 올리는데 좋음
본 내용은 네이버 커넥트 재단의 교육 컨텐츠를 참고하였습니다.
반응형
'Study > AI' 카테고리의 다른 글
[AI] Collaborative Filltering(협업필터링) (0) | 2023.04.02 |
---|---|
[AI] 추천시스템 기초 (0) | 2023.04.02 |
[AI] Recurrent Neural Networks(RNN) (0) | 2023.03.26 |
[AI] Convolutional Neural Networks(CNN) (0) | 2023.03.26 |
[Pytorch] 모듈과 데이터셋 + 데이터로더 (0) | 2023.03.19 |