본문 바로가기

DeepLearning Specialization(Andrew Ng)/Improving Deep Neural Networks

[Week 2] 1. Optimization Algorithms

728x90

 

1. Mini-batch gradient descent
2. Understanding Mini-batch gradient descent
3. Exponentially weighted averages
4. Understanding exponentially weighted averages
5. Bias correction in exponentially weighted averages
6. Gradient Descent with momentum
7. RMS prop
8. Adam optimization algorithm
9. Learning rate decay
10. The problem of local optima

1. Mini-batch gradient descent

 

1) 목적

 mini-batch 를 하는 목적은 학습 속도를 높이기 위해서다.

 

2) 기본 개념

 5,000,000 개의 training set가 있다고 하면 이를 개수가 1000개인 mini-batch로 나눈다. 즉, 5000개의 mini-batch를

만드는 것.

 원래는 기울기를 한번 update하는데 5,000,000개의 데이터를 모두 사용했지만, mini-batch 방식은 1,000개를 이용해서 update시킨다.

 5000개의 mini-batch가 있으므로 5000번 기울기를 업데이트 하고 이 전체과정을 원하는 만큼 반복시킬 수 있다. 

 


 

2. Understanding Mini-batch gradient descent

 

1)

 대충 예상했다 싶이 전체 training set을 학습시키는게 아니므로, 매번 다른 데이터로 기울기를 update하는 셈이 된다.

 따라서 cost 그래프가 일관적으로 쭉 떨어지는게 아니라 noise가 생김. 그리고 optimum으로 수렴하지 않고 계속 최소값 언저리를 맴돔.

 

2) 

size = m(training set) 이면 모든 트레이닝 셋을 mini-batch로 쓰므로 그냥 batch방식이다.

size = 1이면 이를 stochastic gradient descent 라고 하며 각각의 예시를 mini-batch로 한다.

 

3) Choosing mini-batch size

 그래서 mini-batch의 size를 무엇으로 해야할까? 교수님은 다음과 같은 가이드라인을 제시한다.

size가 너무 크면 update에 시간이 너무 오래걸리고, 너무 작으면 전체 data를 적용시키는데 오래걸리므로 효율이 떨어진다.

 따라서 그 사이의 적당한 값을 hyper parameter로 선택해야하는데, 컴퓨터 연산의 특성상 주로 2의 n승을 선택한다고 한다. 

 cf) 주로 64, 128, 256, 512 정도를 선택

 그리고 중요한 점은 mini-batch가 CPU/GPU에 들어갈 수 있는 크기로 설정해야 한다.  

 


3. Exponentially weighted averages

 

 

parameter 베타를 조절하여 몇일 동안의 평균으로 산출할 것인지 조절.

베타 값이 커질 수록 이전 값에 대한 가중치가 높아지므로 전반적인 온도의 변화는 좀 더 늦게 반영된다.

 


4. Understanding exponentially weighted averages

 

 

 (1-x)**(1/x) 는 1/e 값을 가지므로 대략 0.34~0.35 정도이다. 

EWA(exponentially weighted average) 방식은 현재 이전의 모든 값에 가중치를 부여하여 더하는 방식인데, 현재에서 멀어질 수록 가중치가 낮아져(베타만큼 계속 곱해짐) 가중치를 달리한다. 

 

 앞서 베타가 0.9 일 때 V 값이 대략 10일간의 평균값이 반영되었다고 말한 이유는 10일정도 되면 맨 처음 0.1*세타100에 비해서 1/3로 가중치가 감소하게 되고 따라서 그 밑으로는 영향력이 미미하다고 판단한 것이다. 

 즉, V100 은 쎄타1~100 모두의 영향을 받지만 대략 90정도 까지만 큰 영향력을 행사하는 것. 마찬가지로 베타가 0.98이면 현재부터 50일 정도까지의 평균이 반영되었다고 하는 것. 그렇기 때문에 베타가 커질 수록 더 먼 과거까지 높은 가중치를 부여하므로 온도의 변화가 반영되는게 느려짐. 보수적인 그래프가 되는 것.  

 

 

 


5. Bias correction in exponentially weighted averages

 

 

 베타가 0.98 일 때 실제로는 보라색 선처럼 결과가 나온다. 이유는 베타가 0.98일 경우 현재로부터 50일 정도 전까지의 데이터가 값에 영향을 끼치는데 50일 정도의 데이터가 누적되지 않아 과소평가 되는 것. 보다싶이 시간이 지날 수록 두 그래프는 동치를 이룬다. 

 

 따라서 과소평가된 보라색 그래프를 보정할 필요가 있는데, 위와 같이 (1-베타**t)를 나누어준다. 당연히 t가 커질 수록 분모는 1에 가까워지므로 원래 값과 비슷해짐.

 


 

6. Gradient Descent with momentum

 

1) 기본 개념

 위에서 보았듯이, 이동평균모형(EWA)는 그래프를 보수적으로 만든다고 이해하면 됨.

이를 Gradient Descent 에 적용하면 update 과정에서의 변동폭을 줄일 수 있다. 우리는 기울기 강하를 할 때, 위와 같은 Cost 그래프가 있다고 하면, 상하로는 적은 변동폭을, 좌우로는 큰 변동폭을 주어 빠르게 기울기를 update하고 싶어한다. 이동평균모형을 적용하면 상하로는 아래위로 왔다갔다 하므로 그 평균을 어느정도 잡을 것이고, 좌우로는 거의 항상 최소점을 향해있으므로 그 방향으로 가중치를 줄 것. 

 앞서 보았던 day - temp 의 그래프와 비교해보면 iteration(0...t)가 x축, dW(혹은 db)가 y축이 되는 것. 이거 이해하면 약간 느낌올 것임.

 

 dW - iteration 그래프를 그려보면, dW는 거의 항상 1사분면에 위치할 것이고(등고선 그래프에서 W가 optimum 방향으로 계속 증가한다면), update 정도에 따라 등락은 있을 것이다. 반면 db의 경우 등고선 그래프에서 b 값이 아래위로 요동치면서 꾸준하게 증가하거나 감소하지 않으므로 1사분면과 4사분면을 왔다갔다 할 것이다. 이 상태에서 momentum을 적용하면 그 변동을 완만하게 할 수 있어 update가 빨라지는 것. 

 

 (momentum은 보수적이라는 말을 머릿속에 넣어두면 적용하기 쉬움.)

 (참고로 exponentially weight average 방식을 모멘텀이라 부르는 것 같은데 뭐 이름은 별로 안중요하니까...)

 

 

 

2) 적용

 위와 같이 적용하면 됨. 보라색으로 쓴거는 같은 방식을 다르게 쓰는 경우도 있는데, 기존방식이 더 직관적이니 기존 방식을 사용하자. 교수님도 기존 방식을 선호.

 


7. RMS prop

 

 

 Cost-W,b 그래프를 그릴 때, 기울기값이 큰 쪽의 parameter는 update 과정에서 그 변동폭이 크다.  위의 캡처사진에서 b가 그것에 해당된다고 볼 수 있다. 이게 이해하기가 조금 난해할 수 있는데, 내가 이해한 방식은 다음과 같다.

 

 변수가 b와 W만 있다고 가정하고 고차원에 대해 일반화하기로 하자. 먼저, 위와 같이 2개의 변수 b와 W만 있을 때 Cost 그래프를 그리면 위와 같은 등고선(?)이 나온다. 이거를 3차원으로 그렸다고 생각해보자. b 방향에서는 굉장히 얇고 길쭉한 빗살무늬토기같은 모양일 것이고, W방향에서 바라보면 넓적한 혀(?)모양이 될 것이다. 이걸 그려주고 싶은데

귀찮다.

 

 여튼 머릿속에서 그린 요상한 모형 위의 한 점은 그 높이가 cost, 가로세로는 각각 W와 b 값이 될 것이다. 그 한점에서의 기울기(편미분값)을 생각해보면 db가 dW보다 클 것이다. Cost-b, Cost-W 이렇게 다른 관점에서 바라본다고 상상하면 쉬울 듯.

 

 여튼 결론은 db와 dW의 차이로부터 비롯되어 SdW도 Sdb보다 작을 것이며 update 과정에서 dW와 db를 각각 저렇게 나눠주면 미분값이 큰 (가파른) 변수는 큰 값으로 나눠지고 미분값이 작은 변수는 작은 값으로 나누어지므로 어느 정도 상대적인 변동폭이 조정된다. 근데 어찌되었든 양쪽 방향 모두에서 변동폭이 조정이 되었으므로 이 상태에서 learning rate 알파값을 조절해서 update 속도를 조정한다. 

 

 그리고 분모(특히 SdW)가 너무 작으면 해당값이 폭발적으로 커질 수 있으므로 앱실론 값을 분모에 더해주어서 조절해준다. 

 

 정확히 맞는 말인지도 모르겠고, 내가 쓴 글이지만 뭔 말인가 싶다. 

 


 

8. Adam optimization algorithm

 

 Adaptive moment estimation

 

 opimization 방법 중 몇 안되게 일반화되어서 잘 작동하는 알고리즘.

위와 같은 방법으로 적용할 수 있는데, V와 S 모두 설정해놓고 마지막 update할 때 둘 다 적용함.

 

 hyper parameter 는 learning rate, b1, b2, 앱실론 이렇게 4개가 생긴다. learning rate 는 여러개 시도해보면서 튜닝되어야 하고 베타1 은 0.9, 베타2는 0.99, 앱실론은 1e-8 이 default이다. 베타 값은 바뀔 수도 있는데 앱실론은 그냥 저거 그대로 쓰는게 낫고 바꿔도 큰 의미 없음. 

 


9. Learning rate decay

 

Learning rate를 초기값을 설정하고 일관되게 유지하는 것이 아니라, 점점 Learning rate를줄인다.

학습 초기에는 큰 Learning rate로 학습을 빠르게 시키고, opimum 근처로 가면 갈 수록 낮은 learning rate를 적용하여 작은 스텝으로 update되게 한다. 이렇게 하면 계속해서 큰 스텝으로 optimum 주위를 배회하지 않고 거의 optimum과 근사한 곳에서 맴돌게 됨. 효율 증가

 

learning rate decay를 적용하는데에는 여러 수식이 있다. 

이게 대표적이다. 참고로 mini-batch로 나눈 모든 데이터를 한번 도는 것을 1 epoch라 한다. 

 

 

그 외에도 이런 방법들이 있다. 

 


 

10. The problem of local optima

 

 

 딥러닝 초기에는 local optima에 대한 우려가 굉장히 많았다. 하지만 고차원의 parameter로 정의된 cost function J에 있어서 local optima에 빠질 확률은 굉장히 적다고 밝혀짐. 완벽히 이해는 안되지만, 기울기가 0인 부분은 local optima 이기보다는 위의 사진에서 확인할 수 있는 안장점(말의 안장과 비슷)이라고 한다.

 결론은 local optima 걱정 ㄴㄴ

 

 오히려 위의 사진과 같은 능선(plateau)가 문제가 되는데, 기울기가 0에 가깝기 때문에 학습속도가 매우 느린 것이 문제이다. 이 문제는 앞서 배운 momentum, RMSprop, ADAM이 해결할 수 있음.

 

 

비판과 질문은 언제나 환영입니다. 많이 꾸짖어주세요.

728x90