cs231n 강의


SGD: minibatch 내에서 data loss를 계산하고, gradient의 반대방향을 이용해 parameter vector를 업데이트 하는 방식

단점

  • 느림: 아래로 볼록한 모양의 loss function이 있을 때, x방향, y방향의 합방향으로 gradient가 업데이트 될 것. 이때, 수평방향으로는 기울기 변화가 작고, 수직방향으로는 기울기 변화가 큼. 따라서 한방향으로 내려가는 것이 아니라 지그재그 형태로 최저점에 도달하게 되어 오랜 시간이 걸림

  • local minima, saddle point: local minima의 경우, loss 함수에서 기울기가 0인 부분에 도달하게 되면 더이상 update를 진행하지 않아 global minima를 찾기 전에 멈춰버릴 수 있음. saddle point 문제는 고차원 그래프에서 많이 발생하는데, 주변 기울기가 완만한 경우 wegit update를 느리게 진행하고, 계속되는 경우, 머무르게 됨


SGD + momentum: local minima, saddle point 문제를 해결하기 위해 momentum과 SGD를 합친 방식

-> weight를 update할 때 velocity의 개념을 추가한 것 (gradient vector 방향 + velocity vector)

-> rho: velocity의 영향력

-> 속도 개념을 사용할 경우, gradient가 0이더라도 충분히 움직일 수 있음. 이는 local minima와 saddle point를 극복할 수 있게 함. update가 잘 안되는 경우, 위에서 지그재그로 움직이는 경우에도 momentum이 변동을 상쇄시켜 수평방향의 움직임을 좀 더 가속화할 것. 즉, 노이즈가 평균화됨


Nesterov Momentum: 현재지점에서 gradient를 계산하고 velocity를 추가해주는 기존 SGD momentum과는 다르게 neterov는 velocity 방향으로 먼저 움직인 후, 그 지점에서 gradient를 계산하고, 둘을 합하는 것 (convex model에서는 성능이 좋지만 nonconvex model에서의 성능은 좋지 않음)


AdamGrad: 일종의 매개변수 맞춤형 update algorithm. velocity 대신에 grad squared 즉, 기울기값을 이용함

-> 학습이 계속 진행되면 학습 횟수가 늘어나고, update 속도가 느려짐.

-> Convex할 경우, 유리하지만, nonconvex의 경우, saddle point에서 멈출 수 있어 NN을 학습시킬 때 잘 사용하지 않음


RMSProp: AdaGrad의 문제를 해결하기 위한 것. decay rate을 이용해 step의 속도를 조절할 수 있음


Adam: 가장 많이 사용하는 방법으로, first moment와 second moment를 이용해 이전의 정보를 유지시킴

  • 일종의 RMSProp과 momentum을 합친 방식
  • 초기 스텝에서는 second moment를 0으로 초기화하는데, 이 때 초기 step이 엄청 커져서 잘못될 수 있음
  • 이를 보정하는 항이 biased correction; first/second moments를 update하고, 현재 step에 맞는 적절한 bias를 부여해 값이 엄청 튀지 않도록 조절함
  • 일반적으로 효과가 좋음


learning rate; step decay라는 방식이 있음. learning rate decay는 부차적인 하이퍼파라미터임. 학습 초기부터 고려하지 않기에 보통 학습 초기에는 learning rate decay가 없다고 생각하고 learning rate를 잘 선택하는 것이 중요함


지금까지는 1차미분을 활용한 optimization 알고리즘을 살펴봤음. second-order approximation의 정보를 추가적으로 활용하는 방법이 있을 수 있음. 이를 활용하면, minima에 더 잘 근접할 수 있음.

ex) Hessian matrix 이용하기: learning rate 없이 minima에 접근 가능 -> 기본적인 Newton’s method에서 learning rate는 불필요함. 하지만, 실제로는 2차 근사 또한 완벽하지 않으므로 learning rate가 필요함. (minima로 이동하는 것이 아니라 minima의 방향으로 이동하기 때문)

-> Deep learning에서는 사용할 수 없음

-> quasi-Newton methods를 실제로 이용: Full Hessian을 그대로 사용하기보다 근사시켜 Low-rank approximations 하는 방법임


L-BFGS: Hessian을 근사시켜서 사용하는 방법. 사실상 DNN에서는 잘 사용하지 않음

  • L-BFGS에서 2차근사가 stochastic case에서 잘 동작하지 않음
  • non-convex problems에 적합하지 않음
  • 결론적으로는, Adam을 많이 씀. 하지만, full batch update가 가능하고 stochasticity가 적은 경우, L-BFGS는 좋은 선택이 될 수 있음


Model ensemble: 한번도 보지 못한 데이터에서의 성능을 올리기 위해 사용하는 가장 빠르고 쉬운 방법. Machine learning 분야에서 사용

  • 모델을 하나만 학습시키지 않고 여러개의 모델을 독립적으로 학습시키고 해당 모델 결과의 평균을 이용함
  • model의 수가 늘어날수록 overfitting이 줄어들고, 성능은 향상됨
  • 혹은 학습 도중에 중간 모델을 저장하고 앙상블로 사용할 수도 있음. 이 경우, test 시에 여러 snapshot에서 나온 예측값을 평균 내서 사용함 -> 모델을 한번만 train시켜도 좋은 성능을 얻을 수 있음


Regularization: 앙상블은 모델을 여러개 만들기 때문에 효율적이지 않음. 이때 사용하는 것이 regularization

  • dropout: 일정 노드를 랜덤으로 out시켜버리는 것. forward pass 과정에서 일부 뉴런을 0으로 만듦. 이때, forward pass할 때마다 0이 되는 뉴런이 바뀜
    • 노드가 어떤 일부 feature에만 의존하지 못하게 하여 overfitting을 막아줌
    • 단일 모델로 ensamble 효과를 얻을 수 있음 -> dropout은 서로 파라미터를 공유하는 서브네트워크 앙상블을 동시에 학습시키는 것이라고 생각할 수 있음
    • 이를 사용하면 NN의 동작 자체가 변함
    • Network에 z라는 입력이 추가되는데, 이는 random dropout mask임. 하지만, z는 임의적이므로 test time에는 적절하지 않음. 따라서 적분을 통해 그 임의성을 average out시킴.
    • 여기서 문제는 이 적분이 어렵다는 것. 따라서 적분식을 근사화시켜서 이용함
    • dropout을 사용하게 되면 네트워크 out에 dropout probability를 곱해줘야 함
  • BN: train time에서는 각 데이터에 대한 stochasticity가 존재했지만, test time에서는 minibatch 단위가 아닌 galobal 단위로 수행하여 stochasticity를 평균화시켰음. -> dropout과 유사한 regularization 효과
  • data augmentation: 이미지를 조금씩 변형시키는 방식. 원본 이미지를 무작위로 변화시킨 이미지를 학습시킴
    • train time에 input data에 변환을 주게 되면 regularization 효과를 얻을 수 있음. <- train time에는 stochasticity가 추가되고 test time에는 marginalize out되기 때문
  • 또다른 방식: DropConnect, fractional max pooling


Transfer Learning: CNN을 학습할 때 많은 데이터가 필요하다는 편견을 깸

  • 기존의 CNN layer를 아주 큰 데이터셋으로 학습시킴
  • 훈련된 model을 작은 dataset에 적용시킴
  • 최종 FC layer를 초기화시키고, 이전의 나머지 layer의 weight은 freeze시킴
  • 즉, 마지막 layer만 가지고 데이터를 학습시키는 것
  • data가 좀 더 많다면, 좀 더 위의 layer에서 fine tuning함. 이때, 이미 model이 잘 학습되어 있으므로 learning rate는 작아도 됨