[DL Basic] 딥러닝과 최적화

딥러닝 기본

딥러닝

구현 실력이 중요하다

딥러닝의 핵심 요소는 데이터, 모델, loss function, Optimization Algorithm : loss를 최소화할 알고리즘. 하지만 결국 궁극적인 목표는 loss function이 아니라 다양한 테스트 데이터에서 잘 작동하는 모델을 어떻게 학습시킬지이다. 손실 함수는 우리 목표의 근사치…

Neural Network - Multi Layer Perceptron

Neural Network

인간의 뇌 신경망을 모방하려는 시도이다.
행렬 연산과 비선형 연산을 반복해서 함수를 근사하는 모델이다.

Linear Neural Network

예측치와 실제값의 loss를 최소화하는 w와 b를 찾는 게 목표이다.

역전파..loss function을 줄여야 한다. 파라미터가 어느 방향으로 움직였을 때 손실 함수가 줄어드는지 확인하고 파라미터를 바꿔야 한다. 따라서 loss function을 파라미터로 미분해서 역방향으로 추적한다. 이는 곧 최적화를 의미한다. 손실함수를 w로 편미분하고, 마찬가지로 b로도 편미분하면서 w, b 업데이트.

하지만 단순히 선형 결합만 반복하면 안된다. 선형 변환 와중에 비선형 변환이 필요하다. 따라서 아래와 같은 활성 함수로 비선형 변환을 거친다.

  • ReLU
  • Sigmoid
  • Hyperbolic Tangent 어떤 게 좋을지는 상황마다 달라.

Loss Functions

  • Regression Task : MSE.
  • Classification Task : CE. 여기서 y는 정답인 class만 값 1을 가진 one hot vector. y hat은 logit이다. 결과적으로 그 class에 해당하는 값만(해당하는 차원 값) 키우는데, 다른 값들에 비해서 더 크기만 하면 분류 가능하다.
  • Probablistic Task : MLE.


Optimization

  • generalization : 일반화 성능을 높히는 게 목표…train error, test error의 차이를 줄인다는 뜻

  • overfitting : 학습 데이터에선 잘 동작하나 테스트 데이터에선 그렇지 않음

  • underfitting : 학습데이터에서조차 제대로 동작 안 하는 것

  • cross-validation(k-fold validation) : 학습 데이터를 k개로 나눠서 그 중 일부로 학습 시킨 후 학습에 사용되지 않은 데이터로 시험하는 것. 이걸 순서대로 k 반복. 하이퍼 파라미터를 찾기 위함. 단, 테스트 데이터는 절대 학습에 사용하지 않는다.

  • bias, variance
    variance는 얼마나 일관적인지에 관한 것. 반면에 bias는 평균적으로 얼마나 목표치에 접근했는가…보통 트레이드오프 관계다.

  • bootstrapping : 정해진 데이터에서 랜덤으로 일부만 뽑아서 학습 모델을 여러 개 만든다.

  • bagging(Bootstrapping aggregating) : subsampling한 데이터로 모델을 여러 개 만들고, 각 모델에서 예측값의 평균 따위를 산출한다. 앙상블이 여기에 속한다.

  • boosting : 잘 예측하지 못한 데이터에 대해서 또 다른 모델(weak learner)을 만든다. 그리고 모든 모델을 합쳐서 강력한 하나의 큰 모델을 만든다.

  • Gradient Descent Methods
    1. Stochastic gradient descent : SGD
    2. Mini-batch gradient descent
    3. Batch gradient descent
  • batch-size matters : 적당한 크기를 찾아야 한다. large-batch method는 sharp minimizer, small-batch method는 flat minimizer로 각각 도달한다. 일반적으로 배치사이즈를 작게 하는 게 좋다더라. 배치 사이즈 줄임…flat minimum …일반화 잘 됨.

파라미터 최적화 방법론

  • Gradient Descent : 적절한 learning rate(step size)를 찾기 어렵다.
  • Momentum : 관성을 이용한다. 마치 보드 타듯이 gradient 방향을 좀 더 이어갈 수 있도록 유지해서 gradient가 너무 자주 방향이 바뀌는 것을 방지한다. 이전 gradient 정보를 활용한다.
  • Nesterow Accelerated Gradient(NAG) : Momentum 방법과 달리 지역 최솟값을 빨리 벗어나서 탐색 가능하다.
  • Adagrad : 분모가 점점 커져서 w가 업데이트가 안되고, 결국 나중엔 학습이 안되는 결과가 일어난다.
  • Adadelta : adagrad 문제 개선한다. 특징으론 learning rate가 없다는 것.
  • RMSprop
  • Adam : 운동량에 착안한 Momentum 과 Adaptive learning rate 같이 활용한다. 성능이 좋아서 현재 가장 기본적이고 많은 쓰이는 방법이다.

Regularization

일반화가 잘 되게 하고 싶다.
학습을 살짝 방해해서 테스트 데이터에도 통하게 하고 싶다.

  • Early stopping : 말 그대로 학습 도중에 학습을 멈추는 것.
  • Parameter norm penalty(weight decay) : 파라미터가 너무 커지지 않게 하는 것.
  • Data augmentation : 그냥 데이터를 엄청나게 쏟아붓기. 어떻게든 데이터셋을 키운다.
  • Noise robustness : 데이터와 weight에 노이즈 넣기.
  • Label smoothing : 데이터를 섞는다. decision boundary를 부드럽게 만들어주는 효과가 있다.
  • Dropout : 일부 뉴런을 0으로 만든다.
  • Batch normalization : layer의 statistics(파라미터들)를 정규화한다.