Study/AI

[AI] 다양한 최적화 방법

motti 2023. 3. 26. 17:20
반응형

실제로는 최적화에 한학기를 써야할 정도로 방대한 내용이지만 다양한 최적화 방법에 대해 간단하게만 찍먹해보자

경사하강법


  • 미분을 반복하여 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
    • 정규화시키는 것. 활용하면 성능을 올리는데 좋음
                                          •  
본 내용은 네이버 커넥트 재단의 교육 컨텐츠를 참고하였습니다.
 
반응형