욱이의 냉철한 공부

[딥러닝 기본] Deep Learning 학습최적화 개선 본문

데이터과학/개념 : Deep Learning

[딥러닝 기본] Deep Learning 학습최적화 개선

냉철한 욱 2020. 6. 21. 23:26

* 출저

본 개념정리는 제 지도교수님이신 연세대학교 정보대학원 김하영 교수님 수업과 Andrew 교수님의 Coursera 수업을 통해 얻은 정보를 통해 정리했습니다. 자료는 대부분 Andrew 교수님의 Coursera 수업자료입니다.


* 목차

1. 학습과 평가를 위한 Dataset 개념

2. 학습최적화 : Optimizer, Momentum과 아이들 

3. 학습최적화 : Mini-batch (미니 배치)

4. 학습최적화 : Batch Normalization (배치 정규화)

5. 학습최적화 : The problem of local optima


 

 

1. 학습과 평가를 위한 Dataset 개념

 Training Dataset

처음 확인하는 것은 아키텍쳐가 많은 데이터 양을 잘 학습하도록 잘 구축되어 있는가를 확인해야 한다.

그 다음이 과적합(Overfit)확인이다. 

 

- Validation Dataset

과적합(Overfit)을 확인하고 하이퍼파라미터를 찾는 용도이다. 

모델이 잘 학습되고 있는지 확인하기 위해서 사용한다. 

Text Dataset으로 확인해서는 안된다. 왜냐하면 이것에 기반하여 최적의 하이퍼파라미터를 튜닝한다면, Test Dataset에 대해 Bias 된다. 그러므로 Test는 마지막에 최종 Generation 측정을 위해 한 번 해야 한다. 

 

- Test Dataset

아키텍처의 Generation 측정을 위한 새로운 Data에 대한 마지막 평가이다.  

 

* Training Sample : iteration, epoch, min-batch 차이

1 Epoch은 모든 Training Dataset 보는 것.

100 iteration은 100번 학습하는 것, 즉 100번 Weight를 Update하는 것.

ex) Train Dataset에서의 총 Sample 60000개를 몇 번 볼 것인가? 

       epoch = 5라면 30,000개를 보게 되는 것이다. 

       batch-size = 128개라면 128개만 보고 Weight Update를 실시한다. 

       즉 468번의 iteration을 해야 1epoch가 가능한 것이다

 

* Validation Dataset의 필요성

Training Sample을 아예 외워버릴 수가 있다. 매핑 관계를 외워버린다. 

이것은 Training Sample이 outlier라면 불필요한 부분을 과도하게 학습하게 되는 것이다. 

이 같은 과적합 현상을 확인하기 위해 아직 보지 않은 새로운 데이터인 Validation Dataset에서 검증을 해봐야 한다. 

 

 

 

 

 

 

 

2. 학습 최적화 : Optimizer, Momentum과 아이들

 

- Optimizer 배경지식 :  Exponentially weighted averages

1). Exponentially weighted averages

 

 

2). Understanding Exponentially weighted averages

 

 

3). Bias correction in exponentially weighted averages

 

 

 

- Optimizer : 모멘텀(Momentum)

* Optimizer 개요

 

1) 모멘텀(Momentum) 개요

지난 기울기들의 힘(관성)을 받아 방향성 등에 엎고 Local mimimum 탈출한다. 

이전에 업데이트된 기울기 값에 비율을 반영하여, 현재 Weight를 업테이트 하기때문에 

방향성을 주면서 Local mimimum을 탈출하게 만든다. 

 

2) 모멘텀(Momentum) 주요 개념

- 관성을 이용하는 것으로 이해

- B가 0.9가 일반적으로 좋은 값

- B에 내포된 뜻은 현재에 영향을 주는 지난 일수를 뜻한다.

- B는 최근 값에 높은 가중치를 두게 한다.

- 세로로는 낮은 변동, 가로로는 빠른 학습률을 가지게 한다.

- 기울기에도 직관적으로 영향을 주기 위해 1-B도 활용한다.

 

3) 모멘텀(Momentum) 효과

1. 기울기가 0인 곳을 탈출하게 한다.

2. 오버슛팅 막을 수 잇다.

 

 

 

- Optimizer : RMSprop

1)  RMSprop 주요개념 : learning rate에 집중

- 기울기 강하의 속도를 증가시킬 수 있다.

- 변동을 무뎌지게 해준다.

- 가로, 세로의 각각의 속도를 더 유연하게 조절한다.

앱실론으로 분모 기울기 0으로 가는 단점 막아준다. (학습속도 폭발(오버슛팅) 막아준다.)

 

 

 

 

- Optimizer : Adam(Adaptive Moment Estimation)

1) Adam주요개념 : Momentum + RMSprop

- 적응 모멘트 추정을 뜻한다.

- 강의에서는 좋게 설명되지만 안 좋은 경우가 강의 이후에 많이 나타났다. : 그래서 비추

 

 

- Optimizer : 학습 속도 감쇠법(learining rate decay)

1) 학습 속도 감쇠법 개요

1. 학습 초기 단계에는 큰 스텝으로 움직이고, 학습이 점점 수렴해 갈수록 학습속도 늦추게 해서 점점 작은 스텝으로 움직이게 한다.

2. 수 많이 하이퍼파라미터 중 나중에 조정할 것. 우선순위 아니다.

3. 아담같은 경우 굳이 learing rate decay 사용할 필요 없다. 하지만 그 외에는 사용할 필요있음.

 

 

 

2) 학습 속도 감쇠법 종류

 

 

 

 

 

 

 

 

 

3. 학습 최적화 : Mini-Batch

- 미니배치 개요 및 적용하는 이유 (미니배치를 이용한 경사하강법)

그냥 배치를 할 경우 Training Dataset 전체를 한 번에 다 보고 학습을 진행한다. 

전체 다 보고 한 발짝 나아가는 것은 느리고 비효율적이다.

하지만 미니배치를 적용하면 Training Dataset 전체를 보는데 있어, 훨씬 많은 전진(한 번의 학습, 1iteration)을 진행하며 나아갈 수 있다.

=> 즉 더 신속히 학습해준다.

- 미니배치는 언제 사용하는가?

데이터가 충분히 많을 경우

 

​- 미니배치가 노이즈와 함께 진동하는 이유

미니배치는 표본으로 뽑아서 확인하기 때문에 정확한 표본이라고 할 수 없다.

-> 그리하여 진동하는 형태로 표현

 

- 3가지 배치 방법

1. 배치(Batch)

- 개념

그냥 배치를 할 경우 Training Dataset 전체를 한 번에 다 보고 학습을 진행한다. 

전체 다 보고 한 발짝 나아가는 것은 느리고 비효율적이다.

 

- 장점

1) 안정적이다. 

 

- 단점

1) 학습속도 느리다. 큰 Training Dataset 를 확인하는 가정하에 iteration마다 너무 긴 시간 소요된다.

     (Training Dataset 전체를 한번에 다 확인하고 학습을 진행하기 때문이다.)

만약 작은 트레이닝 세트라면 배치기울기 강하는 괜찮다.

 

2. Stochastic Gradient Descent (SGD)

- 장점

1) 하나의 예시만으로도 전진(한 번의 학습, 1iteration)이 있기 때문에 학습속도 빠르다.

 

- 단점

1) Global minimum에 수렴하기가 쉽지 않다.  Global minimum으로 가기 전에 통통 튄다.

     => 작은 학습률(러닝속도)로 파장 줄여야 한다.

2) 속도를 잃는다. 벡터 연산의 가속화 기회가 없어졌기 때문이다. 

    벡터 연산 많이 해야 한다. 언제 갈래.... ? 가속붙여야지

3. 미니배치(Mini Batch)

- 장점

미니배치를 적용하면 Training Dataset 전체를 보는데 있어, 훨씬 많은 전진(한 번의 학습, 1iteration)을 진행하며 나아갈 수 있다.

1) 1개보다는 많은 1000개의 예시를 사용하면서 백터연산이 유지된다.

2) 전체 Training Dataset 기다리지 않고 연산이 가능하다.

 

- Training Dataset의 크기에 따라 다른 배치크기 적용

1) 배치(Batch) 적용

Training Dataset 작으면 사용한다. M=2000 이하이면 사용.

 

2) 미니배치(Mini Batch) 적용

Training Dataset 일정크기 이상이면 사용한다. M=2000이상이면 사용.

 

3) 미니배치(Mini Batch) 크기

64~512가 대표적

컴퓨터 메모리가 배치되어 있는 방식과 연관되어 2의 지수값을 가질 때 더 빨리 학습가능하다.

전통이라고 생각.

 

 

 

 

 

 

 

 

 

 

4. 학습 최적화 : 배치 정규화(Batch Normalization)

 

- 배치 정규화(Batch Normalization) 개념

기존 학습은 배치마다 Weight이 Update되면 진행된다. 

그런데 각 미니배치(ex)32개)는 모집단의 표본이기 때문에 데이터 분포가 각각 다르다.  

그리하여 값 차이가 크다.

이것을 해결하기 위해 각 미니배치마다 특정한 분포에 따르도록 정의한다.

이것은 학습속도에 많은 영향을 끼친다.  

 

- 배치 정규화(Batch Normalization) 구체적 설명

각 은닉층들에서 Activation function에 투입되기 직전의 Z값에, Normalization을 진행한다.

로지스틱에서는 입력특성만 정규화하면 되었다.

하지만 딥러닝에서는 은닉층들에서 Z값에 각각 정규화 필요하다.

즉 X 정규화만으로는 부족하다.

 

더불어 층이 깊을수록 멀어져 입력특성에서 정규화한 효과 없어진다.

그래서 갈수록 분포가 달라져 학습이 어려워진다. => 내부 공변량 변화(Internal Covariate Shift)

그러므로 각 층의 Z를 정규화 한다.

 

 

- 배치 정규화 수식설명 (감마, 베타를 사용하는 이유)

배치정규화는 각 유닛에 다른 평균값과 분산을 갖게 한다.

그런데 핵심적인 부분은 "모든 유닛(z)이 평균 0과 분산 1을 가지고 있지 않게" 만든다.

왜냐하면 sigmoid function 같은 경우는 Z가 0에 밀집된 상태로 input 되서는 안된다.

sigmoid function은 0으로 가까워질수록 선형적인 함수에 가까워지기 때문에 표현력을 잃게 된다.

=> 이를 위해 파라미터 "감마"와 "베타" 이용해 z값이 원하는 범위의 값을 갖도록 한다.

 

 

-  배치 정규화 효과

히든 유닛에서의 학습을 잘 시킬 수 있다. -> 학습속도를 빠르게 할 수 있다.

너무 크거나 작은 값이 없다. -> 기울기 폭발, 소실 예방한다. 

 

1. 배치 정규화를 사용하면 시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용하더라도 기울기 소실 문제가 크게 개선

2. 가중치 초기화에 훨씬 덜 민감해집니다.

3. 훨씬 큰 학습률을 사용할 수 있어 학습 속도를 개선

4. 미니 배치마다 평균과 표준편차를 계산하여 사용하므로 훈련 데이터에 일종의 잡음 주입의 부수 효과로

    과적합을 방지하는 효과. 다시 말해, 마치 드롭아웃과 비슷한 효과 물론, 드롭 아웃과 함께 사용하는 것이 좋음.

5. 배치 정규화는 모델을 복잡하게 하며, 추가 계산을 하는 것이므로 테스트 데이터에 대한 예측 시에 실행 시간이 느려        짐. 그래서 서비스 속도를 고려하는 관점에서는 배치 정규화가 꼭 필요한지 고민필요

6. 배치 정규화의 효과는 굉장하지만 내부 공변량 변화때문은 아니라는 논문도 있음.

 

 

 

-  배치 정규화 구체적 효과

1). 학습최적화 : 전체 네트워크의 학습속도를 올려주는 효과

     (숨겨진 유닛의 분포가 왔다 갔따 이동하는 양 줄여줌)

-> 다른 층들과 독립적. 각각의 층이 스스로 학습 진행할수록 도움.

(신경망이 이전에 있는 층들의 파라미터들을 업데이트하면서 그 값이 변할 것입니다.

그런데 배치 정규화는 어떻게 변하더라도, 층의 각 유닛의 평균값과 variance는 똑같을 것)

-> 즉 이전의 층에서 파라미터가 업데이트되면서 세 번째 층에 영향을 줄 수 있는 양 제한

-> 즉 배치 정규화는 입력 값이 변해서 생기는 문제를 줄인다.

(다르게 말하자면, 앞에층의 파라미터가 배워야하는 것들과 뒷층의 파라미터들이 해야하는 것들의 결합을 약화)

=> 이 과정들이 전체 학습 속도 상승시킨다.

 

* 공변량 이해 필요

내부 공변량 변화란 학습 과정에서 층 별로 입력 데이터 분포가 달라지는 현상을 말합니다.

이전 층들의 학습에 의해 이전 층의 가중치 값이 바뀌게 되면, 현재 층에 전달되는 입력 데이터의 분포가 현재 층이 학습했던 시점의 분포와 차이가 발생합니다.

공변량 변화는 훈련 데이터의 분포와 테스트 데이터의 분포가 다른 경우를 의미합니다.

내부 공변량 변화는 신경망 층 사이에서 발생하는 입력 데이터의 분포 변화를 의미합니다.

 

2). 과적합 방지 : 미니배치로 인한 노이즈 효과 (이 의도는 추천하지 않는다.)

미니배치에서 산출된 평균값과 variance가 전체데이터세트에서보다 더 많은 noise를 함유

드롭아웃처럼 은닉층에서 노이즈를 더한다.

그래서 드롭아웃과 비슷하게 약간의 일반화 효과가 있다.

(배치 정규화는 복수의 noise. scaling을 표준편차 때문에도 그렇고, 추가적인 noise도 있습니다.

평균값을 빼기 때문이죠. 여기 평균값과 표준편차의 추정치가 noisy합니다.)

 

 

 

- Batch Normalization의 한계

1) 미니 배치 크기에 의존적이다.

배치 정규화는 너무 작은 배치 크기에서는 잘 동작하지 않을 수 있습니다.

단적으로 배치 크기를 1로 하게되면 분산은 0이 됩니다.

작은 미니 배치에서는 배치 정규화의 효과가 극단적으로 작용되어 훈련에 악영향을 줄 수 있습니다.

배치 정규화를 적용할때는 작은 미니 배치보다는 크기가 어느정도 되는 미니 배치에서 하는 것이 좋습니다.

이처럼 배치 정규화는 배치 크기에 의존적인 면이 있습니다.

 

2)  RNN에 적용하기 어렵다.

RNN은 각 시점(time step)마다 다른 통계치를 가집니다.

이는 RNN에 배치 정규화를 적용하는 것을 어렵게 만듭니다.

RNN에서 배치 정규화를 적용하기 위한 몇 가지 논문이 제시되어 있지만, 여기서는 이를 소개하는 대신 배치 크기에도 의존적이지 않으며, RNN에도 적용하는 것이 수월한"층 정규화(layer normalization)"라는 방법을 소개하고자 합니다.

 

 

 

 

 

 

 

 

 

 

5. The problem of local optima

- Saddle point (안장점) 개요

딥러닝에서는 국소최적값이 아니다.

딥러닝에서 국소 최적값 문제 잘 일어나지 않는다. : 파라미터가 많기 때문이다.

고차원의 공간에서 정의되는 경우 기울기가 0이라면 방향에 따라 오목, 블록 경우가 많다.

즉 많이 일어나는 문제는 saddle point이다.

saddle point는 보는 측면에 따라 극대극소점 달라진다.

- Saddle point로 인한 plateau 문제

1. 비교적 신경망이 꽤 큰 네트워크를 학습하는 이상 또는 파라미터가 많은 경우, 국소 최적값에 갇힐 경우는 작다. 대신 saddle point 문제 있다.

2. plateau문제 : 안장점 근처에서 속도가 늦어지고 시간이 오래 걸린다. (완만해지기 때문에)

정체된 saddle point에서 탈출해야 한다.

=> 아담이나 모멘텀 통해 탈출한다.