본문 바로가기

Data/Data Science

[deeplearning.ai] Coursera 필기정리 3

반응형

 

Train/dev/test

Train - 뜻 그대로 특정모델을 학습시키는데 사용되는 데이터 셋

Dev - Cross Validation와 같이 검증에 사용되는 데이터 셋

Test - 학습된 모델의 성능을 측정하기위한 데이터 셋

 

Test 데이터셋은 꼭없어도 된다. Dev 데이터셋으로도 성능평가가 가능함

 

Bias / Variance

딥러닝이 발전하므로 편향과 편차의 문제가 많이 줄었다고함

밑의 그림처럼. 4가지 경우가 있는데. 만일 어떤 classification문제에서 판단을 잘 못 내리는 확률이 0%에 가까울 때

  1. Train Set에서의 에러는 낮고, Dev Set에서는 높을때 -> High Variance
  2. Train Set에서의 에러가 높고, Dev Set 도 높지만 둘이 유사한 에러 비율을 가질 때 -> High bias
  3. Train Set에서의 에러가 높고, Dev Set 도 높을만 둘이 유사하지않은 에러 비율을 가질 때 -> High bias & High Variance
  4. Train Set에서의 에러는 낮고, Dev Set에서도 낮을때 -> Low bias & Low Variance

만약에 특정문제에서 기준이되는 에러확률이 15%일때, 두번째 15%를 기록한 모델은 그리 나쁜 값이 아니다.

Basic Recipe for Machine Learning

전체적인 Machine Learning Model의 학습시킬때 High Bias일 때 그리고 High Variance일 때 어떻게 처리하는지에대한 구조도이다.

딥러닝 바람이 불기전에는 bias, variance둘다 동시에 낮추는건 어려웠지마. 지금은 컴퓨팅파워가 많이늘어나고(Bigger Network만족), 빅데이터시대(More data만족)가 들어오고서는 딥러닝을 사용하여 High bias & variance 문제가 그렇게 크지않게되었다. 따라서 이러한 이유로 지도학습에서 딥러닝이 많이 쓰인다고 하였다.

Regularization

모델의 Overfitting을 방지하기위한 기법. 흔히 우리가 학습할때 사용하는 L1, L2, DropOut모두 Regularization기법중 한가지이다.

일반적으로 많이 쓰이는 정규화(Regularization)는 L2, DropOut이며. DropOut같은경우에는 Computer Vision쪽에서 많이쓰이는 기법이다. 물론 일반적인 학습모델에도 많이쓰이긴한다.

Dropout의 단점은 사용한 이상 더이상 명확한 Loss value를 얻을수가없다. 왜냐하면 dropout특성상 모든 노드가 참여하는게 아니기때문에 누락이 생기기 때문이다.

따라서 앤드류응 선생님께선 모델 학습을 할때 먼저 dropout을 끈상태에서 학습을 진행하고 loss function이 줄어드는지 확인한다음에 dropout을 켜서 학습을 진행한다고한다. (좋은생각)

 

또 한가지 정규화 방법은 Early Stopping이다. Train set data의 error는 epoch이 증가할때마다 loss function값이 줄어드는건 당연하다. 하지만 dev set error는 다르기때문에 epoch을 끝까지 진행시킬때 밑그림과 같이 어느 epoch에서 loss function값이 상승하게된다. early stopping은 이런 loss function값이 올라갈때 설정해둔 epoch값보다 빨리 학습을 중단시키는 정규화 방법이다.

Normalization Inputs

Input을 normalization을 해줘야지 gradient descent가 좀 더 빠르게 Loss function의 최소값으로 갈수가있다. 정규화가 안된 input을 썻을땐 왼쪽 두개의 그림이되고 왼쪽아래 그림처럼 gradient descent가 비효율적으로 최소값으로 접근한다. 하지만 정규화가된 input을 사용할시 오른쪽 두개의 그림이되고 gradient descent가 오른쪽 밑에 그림과같이 효율적으로 최소값에 접근한다.

Vanishing / Exploding gradients

신경망을 학습시킬때 일어 날 수 있는 문제가 미분을 했을때 기울기가 굉장히 큰값을 갖거나 굉장히 작은값을 가졌을때 문제가 생긴다. 따라서 random weight initial 방법을 통해서 이러한 문제점들을 줄이고자 한다.

 

그림과같이 매우 깊은 신경망 모델이 있다고했을때, 활성화 함수는 g(z) = z 이고 b를 0이라고했을때

마지막 출력되는 값은 w[l] * w[l-1] * ... * w[2] * w[1] * x 가 되는데 만일 w matrix에서 1.5라는 값이 있고 l 개층이 있다고 가정할시, y에 값은 1.5의 l승이 된다. 또한 w matrix에 0.5라는 값이 있다면 0.5의 l승이 된다. 즉 1.5일때는 y의 값이 폭발적인 값이 나오게되고, 0.5일때는 매우 작은 값이 나오게된다. 비슷한 문제로 미분을 적용했을때(back propagation과정을 말하는듯?)에도 문제가 생긴다. 값이 매우 크거나, 매우 작을때 정확한 정보를 넘겨주지 못하는 문제같다. 이러한 문제때문에 깊은 신경망 모델에서는 트레이닝을 어렵게 만든다.

 

Mini-Batch Gradient Descent

데이터가 굉장히 많을때 하나의 train set data로 학습을 할시 매우 느리게 학습이 진행이된다. 따라서 해당 데이터셋을 작게 나누어서 학습을 진행하는 방법. 일반적으로 64, 128, 256, 512 2의 제곱수만큼 나눠서 한다.

 

일반batch시 gradient descent 그래프와, mini-batch시 gradient descent 그래프는 다음과 같다.

작은 training set data면 그냥 일반 batch gradient descent로 진행하는것이 좋다고한다

 

Momentum

기존에 Gradient Descent 기반의 optimization함수. 기존에 GD에서 가속도라는 개념을 추가해서 적용한 버전이다. 

Momentum은 베타라는 값을 추가해서 가속도의 영향을 준다.

RMSProp

RMSProp는 cost function에서의 x축(W)은 빠르게 감소시키면서, y축(b)은 크게 변화를 안주는 방향으로 설계되었다. RMSProp를 사용하면 다음과 같이(그림의 초록색선) cost function의 최소값으로 다가갈수가있다.

위 수식에서도 알수있듯이, SdW같은 경우엔 Sdb 보다 상대적으로 낮은 값을 계산하게되어서 W값을 갱신시킬때 분모값이 작게되어 좀더 많은 step을 가게되어 x축방향으로 좀더 빠르게 접근이 가능하게되고, b값의 경우엔 분모가 큰값이 들어있어 y축에 대해서는 큰 step을 가지않게된다.

 

Adam optimization

Momentum과 RMSProp를 결합한 알고리즘이 Adam optimization이다. 위에 두개 식에서 나온 Vdw, Vdb, Sdw, Sdb네개의 값을 전부다활용하여 알고리즘을 만들어냈다. 수식은 다음과 같다

Learning Rate Decay

항상 일정한 learning rate를 사용하지않고 수렴해나갈수록 learning rate값을 줄여나가는 방법

앤드류쌤은 해당 기법은 좀 나중에 사용하는것으로 권장함

반응형

'Data > Data Science' 카테고리의 다른 글

[HMM] Hidden Markov Models  (0) 2020.08.28
[deeplearning.ai] Coursera 필기정리 4  (0) 2020.08.27
[deeplearning.ai] Coursera 필기정리 2  (0) 2020.07.06
[deeplearning.ai] Coursera 필기정리 1  (0) 2020.07.02
[ML] Coursera 필기 정리  (0) 2020.06.30