본문 바로가기
COURSERA

week 3_Hyperparameter Tuning, Batch Normalization (Andrew Ng)

by HYUNHP 2022. 2. 24.
728x90
반응형

안녕하세요, HELLO

 

오늘은 DeepLearning.AI에서 진행하는 앤드류 응(Andrew Ng) 교수님의 딥러닝 전문화의 두 번째 과정인 "Improving Deep Neural Networks: Hyperparameter Tuning, Regularization and Optimization"을 정리하려고 합니다.

 

"Improving Deep Neural Networks: Hyperparameter Tuning, Regularization and Optimization"의 강의 목적은 '랜덤 초기화, L2 및 드롭아웃 정규화, 하이퍼 파라미터 튜닝, 배치 정규화 및 기울기 검사와 같은 표준 신경망 기술' 등을 배우며, 강의는 아래와 같이 구성되어 있습니다.

 

~ Practical Aspects of Deep Learning

~ Optimization Algorithms

~ Hyperparameter Tuning, Batch Normalization and Programming Frameworks

 

"Improving Deep Neural Networks" (Andrew Ng) 3주차 "Hyperparameter Tuning, Batch Normalization and Programming Frameworks"의 강의 내용입니다.


CHAPTER 1. 'Hyperparameter Tuning'

 

CHAPTER 2. 'Batch Normalization'


CHAPTER 1. 'Hyperparameter Tuning'

 

□ Tuning process

 

하이퍼 파라미터는 다양하게 존재하며, 각 하이퍼 파라미터의 중요성은 차이가 존재합니다.

Adam Optimization의 하이퍼 파라미터인 beta_1, beta_2, epsilonϵ은 값을 변경할 필요 없이, 대부분 기본값을 사용하기 때문에 수치를 변경할 필요가 적습니다. 하이퍼 파라미터 중에서 학습률 alpha, α가 가장 중요하며, 다음으로 노란색 박스의 하이퍼 파라미터(beta β, hidden units, mini-batch size)가 중요하며, 보라색 박스인 layer, learning rate decay가 중요합니다. 

머신러닝 알고리즘 개발 초기에, 2개의 하이퍼 파라미터가 있는 경우에 아래 왼쪽과 같이 격자판(grid) 형식으로 샘플링하는 경우가 많았습니다. 하이퍼 파라미터의 개수가 비교적 많지 않은 경우에는 왼쪽과 같이 정해진 값을 선택하는 것으로도 모델이 잘 작동합니다. 딥러닝의 경우에 추천하는 방법은 각 point의 위치를 오른쪽 이미지처럼 임의로 선택하는 것이다. 

임의로 선택하는 방법을 사용하는 이유는, 어떤 하이퍼 파라미터가 해결하려는 문제에서 가장 중요한지 미리 알 수 없기 때문이다. 예를 들어, 하이퍼 파라미터 1은 learning rate인 alpha α이고 하이퍼 파라미터 2는 Adam 알고리즘의 epsilon ϵ일 때, 위에서 정리한 것처럼 alpha α는 중요하고 epsilon ϵ은 거의 중요하지 않습니다. 왼쪽같이 격자판(grid) 형식으로 샘플링을 진행하면 25개의 모델을 학습했지만, 5개의 alpha α만 시도하게 되지만, 샘플링을 무작위로 진행한다면, 각각 25개의 alpha α를 시도할 수 있습니다.

결론적으로, 어떤 하이퍼 파라미터가 더 중요한지 미리 알아내기 어렵기 때문에, 격자판 형식(grid)으로 샘플링하는 것보다는 무작위로(random) 샘플링하는 방법이 더 많은 하이퍼 파라미터 값을 탐색해볼 수 있기 때문에, 더 광범위하게 학습을 진행할 수 있습니다.

 

□ Coarse to fine

 

Coarse to fine 방식은 샘플링된 위치(point)를 탐색해서 파란색 사각형 내부에서 잘 동작한다고 알아냈을 때, 이 사각형 포인에 집중하여 파란색 사각형 공간에 대해서 밀도를 높여서 샘플링하는 탐색하는 방법입니다. course to fine searching은 임의의 샘플링을 진행하고, 충분히 탐색한 후에 선택적으로 사용합니다.


□ Using an appropriate scale to pick hyperparameters

 

1부터 0.0001 등 범위가 다른 하이퍼 파라미터에서 효율적으로 하이퍼 파라미터를 탐색하는 방법을 살펴보고자 합니다. 임의로 하이퍼 파라미터를 샘플링하는 것은 특정한 유효한 범위에서 탐색하는 것이 아니기 때문에 조금 비효율적이기 때문에, 적합한 scale을 선택해서 하이퍼 파라미터를 탐색하는 것이 중요합니다. 

 

정수 범위(예를 들어 2~4)에 있어서는 하이퍼 파리 미터가 균일하게(uniform)하게 설정되겠지만, 0.0001에서 1 사이와 같이 샘플링을 진행하면, 90%의 샘플링이 0.1에서 1 사이에서 집중될 것입니다.

이 경우에는 하이퍼 파라미터를 linear scale대시에 log scale로 나눠서 구간 별로 나눌 수 있습니다. 이렇게 구간 별로 설정하지 않은 경우에는 대부분의 값이 1과 0.1 사이에 무작위로 설정되어, 하이퍼 파라미터를 다양하게 하기 어렵습니다. 


□ Hyperparameters for exponentially weighted averages

Exponentially Weighted Averages의 beta β 하이퍼 파라미터 샘플링을 예로 들어, beta β가 0.9에서 0.999 사이의 값이라고 하면, 탐색해야 되는 범위도 동일하게 0.9 ~ 0.999d입니다. 이를 위와 같은 범위에서 균등하게 탐색하려면 linear scale이 아닌 log scale로 탐색하는 것입니다. 


이를 위해서는 1-beta의 범위로 계산하여, 0.001 ~ 0.1의 범위로 조정한 후, 샘플링을 해서 값을 찾는 것입니다


□ Hyperparameters tuning in practice: pandas Vs. caviar

 

하이퍼 파라미터는 탐색하는 방법에는 2가지의 방법이 있는데, 그중 하나는 Babysitting one model입니다. 아이를 돌보는 것과 동일하게, 차근차근 파라미터를 수정하며, 데이터 세트를 훈련합니다. 대표적으로 대용량 데이터를 훈련하며, 하나의 모델을 적용하는 방법에 적합합니다.


다른 방법으로는 Training many models in parallel이며, 이 방법은 parallel 방식으로 여러 모델을 한 번에 학습하는 방법입니다. 여러 하이퍼 파라미터를 적용해서 동시에 훈련을 진행하고, 충분히 많은 컴퓨터를 가지고 있음으로, 여러 개의 모델을 병렬(parallel) 방식으로 트레이닝할 수 있을 때 적합한 교육 방법입니다.

 

어느 한 모델에 대해서 하이퍼 파라미터의 값을 설정해서 학습할 수 있고, 또 다른 모델은 다른 하이퍼 파라미터의 값으로 설정하는 등 다양한 방법을 동시에 학습할 수 있습니다. 여러 모델에 대한 learning curve를 얻을 수 있습니다.

위와 같은 방법은 동물들이 번식하는 방법으로 비유해서, Babysitting one model 방법은 panda approach라 부르며, Training many models in parallel 방법은 Caviar approach라고 부릅니다.

 

CHAPTER 2. 'Batch Normalization'

 

□ Normalizaing activations in a network

평균값은 z(x)의 합의 평균, 분산은 오차의 제곱의 평균 그리고 z(x)의 평균화는 정규분포와 유사하지만, 숫자적 안정감(numerical stability)을 위해, 앱실론(emsilon)을 분모에 더합니다. 이는 수학적으로 표준편차가 0일 때, 분모가 0이 되는 경우를 방지하기 위함입니다. 

 

이를 통해서 z(x) norm은 평균 0이고, 분산 1인 정규분포를 가지게 됩니다.

 

z tilde은 gamma와 beta를 통해 파라미터 튜닝이 가능합니다, 이때 gamma와 beta는 정규화된 z(x) 값의 평균을 원하는 값으로 조정하게 합니다.


여러 신경망층이 있는 딥러닝에 있어서, 숨겨진 층에서의 정규화(normalization)를 하면 다음 신경망 층에서의 속도가 빨라집니다. 이를 batch normalization, batch norm이라고 합니다. 

 

batch norm을 적용함에 있어, activation function을 기준으로 z(x)에 적용할지, a(x)에 적용할지 토론이 있습니다. 실제로는 activation function 적용 전인 z(x)에 batch norm을 적용하는 게 속도가 빠릅니다. z(x)를 활용해서 batch norm을 활용합니다.

실제로 은닉층에서 z(x) 값이 0과 1 사이의 정규 분포를 이루기보다는 다양한 분포를 갖는 것이 타당합니다. 이에 따라 아래처럼 gamma, γ와 beta, β를 통해 분포를 만들 수 있습니다. γ와 β를 통해서 z tilde의 평균을 원하는 값이 되도록 조정해줍니다. 즉, 각 hidden unit이 다른 평균과 분산을 갖도록 할 수 있습니다.

x의 입력값뿐만 아니라 batch norm을 통해서 입력값을 normalization을 할 수 있습니다. 은닉층에서 gamma와 beta의 조정을 통해 은닉층에서 고정된 원하는 분포를 만들 수 있습니다.

활성화 함수로 sigmoid를 예로 들어, 평균이 0, 분산이 1인 정규분포를 가지면 위의 그래프처럼 선형 관계를 가지기에, 이를 gamma와 beta로 조정해서 non-linear function으로 만들어 학습률을 조정할 수 있습니다.

 


□ Fitting batch notm into a neural network

 

 

1st layer에서 batch normalization을 진행하고, 이 결과를 activation function을 진행합니다. 그리고 위 결과를 동일하게 batch normalization을 진행합니다.

이에 따라 각 층에서 파라미터가 적용됩니다.


기울기 강하를 적용할 때, z(x)와 batch norm을 적용한 정규화된 평균, 분산인 z(x) tilde가 생성됩니다.

이를 바탕으로 역전파를 적용해, 마지막으로 파라미터를 업데이트시킵니다.

 

이전 기울기 강하와 동일한 프로세스를 가지며, batch norm이 적용된 z(x) tilde를 활용합니다.

다른 알고리즘은 momentum, ADAM 등에서도 잘 적용됩니다.

 

반응형

 

□ Why does batch norm work?

 

batch norm을 적용할 때 훈련 속도가 빨라지는 것은, 입력층뿐만 아니라 은닉층에서의 입력 데이터 분포를 통일화하여 데이터 훈련 속도를 빠르게 적용할 수 있습니다.

데이터의 분포를 바꾸는 것을 covariate shift라고 합니다. x의 분포도를 바꿀 경우에는 새롭게 데이터를 훈련시켜야 합니다.  특히 ground truth 함수가 이동하는 경우에는 새로운 데이터를 훈련시킬 필요성이 커집니다.

(ground truth: 학습하고자 하는 데이터의 원본 혹은 실제 값을 표현)

 

배치 정규화는 입력값이 변해서 생기는 문제를 줄여줍니다. 이는 입력값에 상관없이 z(x) tilde의 값이 평균값과 분산이 똑같을 것이라는 점입니다. 신경망 이후의 층들이 훈련하는데 드는 컴퓨팅 파워를 줄일 수 있습니다.

 

추가적으로 batch normalization은 일반화가 가능하게 합니다. mini-batch는 전체 데이터에서 훈련된 게 아니기에 noise를 포함하고 있어서, 다음 훈련을 진행하는데 시간이 소요됩니다. dropout가 유사하게 noise를 가지고 있습니다 (0과 1), 배치 정규화도 숨겨진 유닛에 영향을 주거나 없애는 등 dropout과 유사한 효과를 낼 수 있습니다.

 

다만, 일반화의 효과는 미비하기에 배치 정규화를 통해 일반화하는 것은 목적에 해당하지 않습니다. hidden unit activation의 속도를 높이는 방법으로 사용하는 것이 좋습니다.


□ Batch Norm at test time

batch norm 계산을 위해서 지수적 가중 평균 (exponentially weighted average)을 활용합니다.

 

그리고 최종적으로 mini batch의 평균(mu)과 분산(sigma square)을 활용해서, z norm과 z norm tilde를 구합니다.

지수적 가중 평균을 활용하여 mu와 sigma square를 사용하는 방법이 모델을 견고하게(robust) 만들어 줍니다.


■ 마무리

 

"Improving Deep Neural Networks" (Andrew Ng) 3주차 "Hyperparameter Tuning, Batch Normalization and Programming Frameworks"의 강의에 대해서 정리해봤습니다.

 

그럼 오늘 하루도 즐거운 나날 되길 기도하겠습니다

좋아요와 댓글 부탁드립니다 :)

 

감사합니다.

 

반응형

댓글