티스토리 뷰
[Course2 - Week2] Improving Deep Neural Networks
제이gnoej 2020. 5. 25. 07:15"해당 포스팅은 Coursera 에서 수강한 Andew Ng 의 deep learning specialization 코스를 요약한 것입니다."
1. Stochastic Gradient Descent / (Bacth) Gradient Descent / Mini-batch Gradient Descent
이 3가지의 차이는 몇 개의 examples 을 가지고 gradient descent 를 update 하느냐에 따라 달라진다. Stochastic gradient descent 의 경우, 하나의 데이터 포인트마다 gradient update 을 하고, gradient descsent 는 m 개의 data 전체를 돌았을 때 (1 iteration) 에 update 한다. Mini batch 는 이 중간이라고 할 수 있는데 1 개와 m (데이터 전체 갯수) 사이의 수 n 에 대해서 이만큼의 데이터만을 가지고 gradient descent update.
Mini-batch gradient descent 의 장점은 gradient descent 보다 더 빠르게 최적값으로 converge 한다는 것! m 개의 데이터 전체를 다 돌아야지만 gradient descent 를 하는 게 아니라, mini-batch 마다 update 를 하니까 더 자주, 빠르게 update 를 한다. 단, batch 마다 데이터의 차이가 있어서 어떤 데이터는 더 어려울 수 있기 때문에 gradient descent 가 진동하며 converge 하는 모습을 보인다.
코드를 직접 짜보면 더 확실히 볼 수 있는데, Gradient descent 가 9000 번을 iterate 해야 얻을 수 있는 accuracy 를 mini-batch 를 통해서는 4000 번만에 도달하는 것이 예. 물론, Gradient descent 도 iteration 수를 더 많이 한다면 언젠가 그 accuracy 에 도달할 수 있겠지만, GPU 와 우리의 시간 = $
2. Optimization function
그 전에 weight (w, b) 를 update 할 때는 항상 W = W - learning_rate * dW 를 사용했다. 그런데 이제 dW 를 gradient descent with momentum 혹은 gradient descent with adam 으로 바꿔줄거임!
※ Gradient Descent with Momentum
Mini-batch 를 사용하면, 그림에서처럼 (파란선) gradient descent 를 update 하면서 osciliation 이 생긴다. mini-batch 간 데이터가 다르기 때문에. 이렇게 서로 다른 방향으로 꺾이는게 많을수록 convergence 는 느려질 수 밖에 없고, 또 다른 문제는 큰 learning rate 을 쓸 경우 그 방향으로 그대로 튕겨져 나가서 diverging 되는 수가 있음 (보라색 선). 근데 momentum 을 이용하면 이 부분을 완화할 수 있다.
위 그림의 빨간 선과 같이 Osiciliation 이 생긴다고 할 때, 파란 점선은 현재의 mini-batch 를 기준으로 gradient 의 방향을 보여준다. 지난 gradients 에 비하면 상당히 꺾인 모습인 것을 알 수 있다. 그런데 여기에 지난 gradients 의 방향들을 더해 이 진동을 smooth out 하는 것이 gradient descent with momentum 이라고 할 수 있다. v라는 term 이 역할을 할 수 있는데 간단히 말하면 moving average of previous derivatives 라고 할 수 있다.
어떻게? 일단 지난 gradients 를 v 에 저장하고 (previous steps 의 gradients 의 exponentially weighted average) 이 값을 gradient descent 에 반영하는 것!
v dW 를 구하고 W 를 업데이하는 하는 식은 아래와 같다 ( 초기 v DW 값은 모두 0으로 초기화되어있음).
이 식에서 v dW[l] 는 속도이고, beta 는 friction 역할을 한다. beta 가 크면 클수록 smooth 되는 정도도 크다 (현재의 gradient descent 보다, previous steps 의 gradients 의 영향력을 더 키우는 거니까). 반대로 beta 가 작을수록 smooth 되는 정도는 작고.
※ Gradient Descent with Adam
Adam 은 위의 momentum 과 RMSProp (밑에 수식의 S dw, S db) 를 합친 거라고 보면 된다. 그리고 여기에 bias correction 을 더해 최종적으로는 v corrected, s corrected 를 combine 해서 parameters 를 업데이트한다.
Training data 를 Mini batch 나눌 때 Steps
1. Shuffle data. X 랑 Y 과 같은 순서로 섞여야 되기 때문에, 각각 데이터를 shuffle 하는 게 아니라, index 를 shuffle 하는 거임.
# Step 1: Shuffle (X, Y)
permutation = list(np.random.permutation(m))
shuffled_X = X[:, permutation]
shuffled_Y = Y[:, permutation].reshape((1,m))
2. Partition ((mini_x, mini_y), (mini_x, mini_y), (mini_x, mini_y), ….
3. Handle the end case
마지막 mini batch 는 다른 full mini batch 보다 더 작을 수도 있음. 그니까 for loop 을 이용해서 slicing 으로 mini-batch 를 나눈다면, 마지막 mini-batch slicing 할 때는 for loop 를 벗어나서 하되, index 에도 신경써야 함.
'Deep learning (일반) > deeplearning.ai' 카테고리의 다른 글
[Course4 - Week1] Convolutional neural networks (0) | 2020.07.28 |
---|---|
[Course3 Week2] - Structuring Machine Learning Projects (0) | 2020.07.13 |
[Course1 - Week 3] Shallow Neural Network (0) | 2020.04.06 |
[Course1 - Week 2] Neural network and deep learning 코드 (0) | 2020.03.23 |
[Course1 - Week 2] Logistic Regression as a Neural network (0) | 2020.03.16 |
- Total
- Today
- Yesterday
- 벡터
- GPTZero
- language model
- neurone
- Contextual Embedding
- LM
- neural network
- 워터마킹
- cs224n
- Pre-trained LM
- Attention Mechanism
- 뉴럴넷
- transformer
- Elmo
- weight vector
- 언어모델
- Neural Language Model
- nlp
- Bert
- word embedding
- Statistical Language Model
- 뉴런
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |