본문 바로가기
Deep Learning

[cs231] SGD, SGD 모멘텀, AdaGrad, Adam 7강

by 우직한 사람 2024. 4. 29.
반응형

Lecture7 Traning Neural Networks

Contents

Fancier optimization

Regularization

Transfer Learning(전이학습)

SGD 방식의 문제

  • SGD는 학습률이 고정되어있어 최적화가 비효율적임
  • 학습률이 변화할 수 있다면 처음에 큰 폭으로 이동하다가 최적해에 가까워질 수록 이동폭을 줄여서 안정적으로 수렴가능
  • 학습률이 변화할 수 있다면 처음에 큰 폭으로 이동하다가 최적해에 가까워질 수록 이동 폭을 줄여서 안정적으로 수렴할 수 있음
  • SGD는 결국 local minima와 saddle point에 빠지기 쉽다(위 local minima, 아래 saddle point)
  • 경사가 완만하면 큰 폭으로 이동하는게 좋고, 경사가 가파를 때 천천히 이동하는게 좋음

SGD Momentum

  • SGD 모멘텀은 기존 SGD에서 관성을 주어 느린 학습 속도와 협곡과 안장점을 만났을 때 학습이 안되는 문제, 거친 표면(일관적이지 않은 학습)에서 진동하는 문제를 해결한 최적화 알고리즘
  • 그레디언트 벡터는 현재 위치에서 가장 가파른 방향
  • 속도 벡터는 현재 이동속도
  • SGD 모멘텀은 현재 속도 벡터 + 그레디언트 벡터를 더해서 다음 위치를 정함
  • 다음 속도는 현재속도와 마찰계수와 곱한 후 그레디언트를 더해서 계산(p = 마찰계수로 0.9~0.99로 지정)

오버슈팅 문제

  • 경사가 가파른 경우 빠른 속도로 내려오다가 최소 지점을 만나면 그레디언트는 순간적으로 작아지지만, 속도가 여전히 커서 최소 지점을 지나는 현상
  • 최소 지점이 평지 위에 있으면 오버슈팅 발생 x
  • 최소 지점 주변 경사가 가파른 경우 속도가 커서 오버슈팅이 발생할 수 있음
  • 해결방법 : 최적 해 주변을 평평하게 만들어 주는 정규화 기법 사용

네스테로프 모멘텀

  • SGD 모멘텀과 동일하게 진행 속도에 관성을 줌, 오버 슈팅을 막기 위해 현재 속도로 한 걸음 미리 가보고 오버슈팅이 된 만큼 다시 내리막길로 내려감
  • 한걸음 미리 갔을 때 높이 올라간 만큼 다시 내려오도록 그레디언트 교정

오버슈팅 억제

관성이 커지더라도 오버 슈팅이 될지 미리 살펴보고 교정 → 오버슈팅 억제

한계점

  • Netserov는 Convex 최적화에서는 뛰어난 성능을 보임
  • NN은 non-Convex 그래프가 더 많다. 따라서 일반적으로 다른 최적화 알고리즘 사용

AdaGrad

  • AdaGrad는 손실 함수의 곡면의 변화에 따라 적응적으로 학습률을 정하는 알고리즘
  • 손실 함수의 경사가 가파를 때는 작은 폭으로 이동, 경사가 완만하면 큰 폭으로 빠르게 이동
  • 모델의 파라미터 별로 곡면의 변화량 계산 → 파라미터 별로 개별 학습률을 갖는 효과
  • Adagrad는 Velocity term 대신에 grad squared term 사용 → 기울기 값 이용
  • 학습 도중에 계산되는 gradient에 제곱을 해서 계속해서 더해줌
  • step을 진행할 수록 값이 작아지게 됨 → 올바른 지점으로 접근할 때 속도가 빨랐다가 점차 느려짐
  • 만약 경사가 가파른 위치에서 학습을 시작하면, 초반부터 적응적 학습률이 급격하게 감소해서 조기에 학습이 중단될 수 있음 ← AdaGrad 문제점

RMSProp

  • 최근 경로의 변화량에 따라 학습률을 적응적으로 결정하는 알고리즘
  • AdaGrad가 가지고 던 초기 학습 중단문제 해결
  • 곡면 변화량을 전체 경로가 아닌 최근 경로의 변화량을 측정하면 곡면 변화량이 누적되어, 계속해서 증가하는 현상 없앨 수 있다.
  • 지수가중이동편균 활용하여 곡면의 변화량 측정 및 파라미터 업데이트
  • 최근 경로의 그레디언트는 많이 반영되고 오래된 경로의 그레디언트는 작게 반영
  • 그레디언트 제곱에 곱해지는 가중치가 지수승으로 변화하기 때문에 지수가중평균이라고 함

Adam

  • SGD 모멘텀 + RMSProp 결합
  • 속도에 관성을 주고 동시에 최근 경로의 곡면 변화량에 따라 적응적 학습률을 갖는 알고리즘
  • 초기 편향 문제(첫번째 단계에서 출발 지점으로 부터 멀리 떨어진 곳으로 이동) 해결
  • first_moment = 0, second_moment = 0 → 값이 크면 step이 커져서 이상한 곳으로 튈 수 있음 (분자가 커져서)
  • 해결 방법 : bias correction term 항 추가, 값이 튀지 않게 방지

step decay learning rate

  • loss가 내려가다가 평평해지는 구간에 LR(learning rate)를 낮춤
  • adam 보다 모멘텀에서 자주 사용

First-Order Optimization & Second-Order Optimization

  • 지금 까지 1차 근사를 활용하여 최적화 진행
  • 2차 테일러 근사 함수에서 Hessian의 역행렬을 이용해서 실제 손실함수의 2차 근사를 이용해 minima로 곧 바로 이동할 수 있음
  • 위 방법 활용하면 LR이 필요 없음, 근사함수 만들고, 최소 값으로 이동, 각 step 마다 항상 minima 방향으로 이동
  • 하지만 근사가 완벽한 것이 아니기 때문에 LR이 필요하긴 함
  • Hessian 행렬이 N*N이기 때문에 연산량이 많아져 메모리 이슈로 딥러닝에서는 사용 x

Model Ensembles

  • 모델의 정확도를 높이는 방법
  • 여러 모델들을 평균내서 이용 →최종 성능에서 1~2% 성능을 끌어올림 → 경진대회에서 주로 사용
  • Learning rate을 낮췄다 높였다를 반복. 손실함수가 다양한 지역에 수렴할 수 있도록 해줌

Regularization

  • 단일 모델 성능 올리려면 규제를 적절히 사용해야한다

Dropout

  • forward pass 과정에서 일부 뉴런을 0으로 만듬. 한 레이어의 출력을 전부 구한 후 일부를 0으로 만듬. fc나 conv에서 사용
  • 네트워크카 특정 피처에만 의존하지 못하게함
  • 단일 모델로 앙상블 효과
  • dropout을 하면 각 스텝마다 업데이트 되는 파라미터 수가 줄어 학습시간이 늘어나지만 일반화 좋아짐
  • Batch Normalization과 유사한 효과
  • 랜덤으로 노드를 off

Data Augmentation

  • 또 다른 regularization 방법
  • Training 할 때, 이미지의 patch를 랜덤하게 훈련 시키거나, 이미지를 뒤집어서 추가해 훈련해주거나. 할 수 있음

Transfer Learning

  • 전이 학습이라고도 함, 이미 학습된 모델을 이용하여 우리가 이용하는 목적에 맞게 fine tuning하는 방법
  • Small Dataset으로 다시 학습 시키는 경우
  • DataSet이 클 경우 좀 더 많은 layer들을 학습 시킨다
  • 학습률 낮춰서 사용
  • 4가지의 경우
  • 이미 학습한 모델에 레이블이 많이 포함 & 데이터가 작음 → linear Classfier
  • 이미 학습한 모델에 레이블이 많이 포함 & 데이터 큼 → fine tune
  • 이미 학습한 모델에 레이블이 별로 없음 & 데이터 큼 → Trouble
  • 이미 학습한 모델에 레이블이 별로 없음 & 데이터 작음 → fine tune을 크게
  • 전이 학습은 많이 이용됨
  • 유사 데이터셋으로 학습된 pretrained model을 이용해서 fine tune 시킴

<Reference>

https://sonstory.tistory.com/70

https://lsjsj92.tistory.com/405

https://oculus.tistory.com/12

https://inhovation97.tistory.com/24

https://taeyoung96.github.io/cs231n/CS231n_7/

반응형

'Deep Learning' 카테고리의 다른 글

확률적 경사하강법(SGD), 최적화  (0) 2024.05.10
[DL] 클러스터링  (0) 2024.04.25
[DL] L1, L2 규제와 차원 축소  (0) 2024.04.17
Windows 10에 CUDA, Pytorch 설치하기  (0) 2024.04.11