Algorithm/Deep Learning

Improving Deep Neural Networks : Hyperparameter tuning, Regularization and Optimization : Coursera 강좌 Deeplearning.ai 정리

빠릿베짱이 2017. 8. 30. 22:19
반응형



 Setting up your Machine Learning Application

 

1. Train / Dev / Test sets

  • Train Set : 학습을 위한 데이터 셋
  • Dev Set : Cross validation Set
    • Train set으로 학습한 모델들을 비교하여 좋은 모델을 선택하기 위함
    • 즉 어떤 모델을 선택할지 결정되므로, 이 또한 학습에 영향을 미친다는 것을 의미
  • Test Set : 학습과정에서 전혀 본적없는 데이터 셋으로 학습된 모델을 평가하기 위한 데이터 셋
    • 이는 학습된 모델이 얼마나 잘 학습 되었나를 검사하기 위한 목적, 혹시나 오버피팅이 되지 않았나..
  • 예전에는 60%/20%/20%로 데이터를 나누고 실험을 수행했으나, 요즘에는 데이터가 매우 많아서 98%/1%/1%로 분리하여 실험해도 됨
  • 중요한 것은 dev set과 test set의 분포가 같아야 한다는 것 --> 즉, 확인 후 실험을 해야 함. 아니면 뻘짓
Key-Point
dev set과 test set는 엄밀히 다르다. dev set은 학습 과정에서 모델을 선택하기 위해 사용되므로, dev set에 overfitting된다. 따라서 test set과 dev set은 구분해서 명칭하자.


2. Bias / Variance



3. Basic Recipe for Machine Learning



1. Mini-batch gradient descent

  • 트레이닝 셋이 만약 (n_x, 1,000,000) 이라면, backpropagation을 한번 하기 위해 너무 많은 시간이 걸림
  • 빠르게 학습하기 위해, 학습 데이터를 적당한 크기로 나눔
  • (n_x, 1,000)으로 나누면 전체 학습 데이터에 대해 1000번 gradient descent를 수행할 수 있음
  • n_x는 입력 특징의 차원수
  • 1 epoch 는 모든 학습 데이터에 대해 backpropagation을 완료한 경우를 말함



2. understanding mini-batch gradient decent

  • 전체 학습 데이터로 backpropagation을 수행하면 자연스럽게 cost가 감소하지만, mini-batch로 할 경우 cost의 전체적인 경향은 감소하나, 노이즈같이 왔다갔다하는 모습을 보임
  • mini-batch size = m(학습 데이터의 수) : batch gradient descent
  • mini-batch size = 1 : stochastic gradient descent
  • 미니 배치 사이즈의 결정
    • 학습 데이터가 작다면( m <= 2000) : batch gradient descent를 사용
    • 이왕이면, 2^n의 크기로 할당하는 것이 속도 측면에서 유리함
    • cpu/gpu의 메모리에 적합하게 맞춰라

3. Exponentially weighted averages
  • Moving average에 대해 설명함
  • 평균의 양을 1/(1-베타)로 근사해서 계산하는데, 이유는 모르겠음


4. Understanding exponentially weighted averages

  • 가중치 평균의 방법은 결국 지수적으로 가중치를 주어 평균내는 것과 같은 효과를 갖는다.
  • 메모리도 많이 사용하지 않고, 간단해서 좋음
  • 아래에서 0.9^10 = 0.35 = 1/e라는데 이건 무슨 의미인지 모르겠음
  • 결국 10일동안의 가중치 평균을 나타낸다는 의미 같은데,..


5. bias coreection in exponentially weight averages

  • 이 방법을 사용할 경우, 초기에는 매우 작은 값을 갖게됨.
  • 이러한 문제를 해결? 보정하기 위한 방법을 설명함


6. Gradient descent with momentum

  • 위에서 설명한 내용을 Gradient descent에 적용하는 방법에 대해 설명


  • 구현 방법에 대해 설명
  • 학습율(알파)를 베타에 포함되어 있다고 생각하면, 더 간단하게 식을 표현할 수 있다고 설명하는 것 같음



7. RMSprop

  • 개념은 모멘텀과 유사한 것 같음
  • 이건 좀 더 자세히 읽어보자..


8. Adam(Adaptive Moment Estimation) optimization algorithm : [논문]


  • 여러 최적화 방법 및 gradient descent 방법이 제안되었는데, 다방면에 잘되는 것을 찾기는 어려웠다.
  • 하지만 adam 과 rmsprop는 많은 연구에서 좋은 결과를 보였기 때문에, 이 방법을 추천한다.
  • adam은 모멘텀과 rmsprop을 기본적으로 취한다.
  • 베타1은 일반적으로 0.9, 베타2는 0.999를 추천(adam 논문 저자)
  • 입실론의 선택은 별로 중요하지 않음. 논문의 저자는 10^-8을 추천
  • 학습율의 선택이 중요함



9. learning rate decay

  • 학습율을 학습이 진행됨에 따라 조금씩 줄이는 것이 학습 속도에 도움을 줌
  • 이것을 learning rate decay라고 부른다.
  • 작은 미니배치로 학습을 진행하면, 전체적으로 최소값을 향하는 경향이 있다. 하지만, 정확하게 일치하지 않음
  • 알파를 고정된 값으로 사용하면 방황하다가 수렴을 못할 수 있다.




 Programming Assignment

 

1. Initialization

신경망의 가중치(W) 초기화 방법에 따른 모델 성능 비교

  • W를 모두 0으로 준 경우
  • W를 랜덤한 큰 값을 준 경우
  • W를 He Initialization의 방법을 이용한 경우 ( He Initialization"; this is named for the first author of He et al., 2015)
  • 결론
    • 가중치 초기화 방법에 따라 학습 속도와 성능의 차이가 발생함
    • 초기 가중치를 너무 크게 줄 경우 문제가 발생함 : sigmoid 미분값이 매우 작은 수이기 때문으로 생각됨
    • 모두 0으로 주는 경우 : symmetry 문제 발생 ( 모든 노드의 연산이 같아짐..)
    • Different initializations lead to different results
    • Random initialization is used to break symmetry and make sure different hidden units can learn different things
    • Don't intialize to values that are too large
    • He initialization works well for networks with ReLU activations.


2. Regularization


3. Gradient Checking




반응형