Coursera의 Deep Learning Specialization - Week 2의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.
지난 주차에는 여러 최적화 기법들을 살펴 보았습니다. 이번 주차에서는 파라미터들을 튜닝하는 기법들을 살펴 보겠습니다.
Tuning Hyper-parameters
가중치 W, 바이어스 b를 제외한 나머지 파라미터들을 Hyper-paramter라고 부릅니다. 학습률 alpha, Layer 수 L, unit 수 n[L], Momentum에서 쓰이는 beta 1, RMSprop에서 쓰이는 beta2 등입니다.
이들의 최적값을 찾기 위해서는 값을 바꾸어 가면서 모델을 테스트해야 하는데, 무작정 모든 값들을 다 해볼 수는 없으니 특정 값들을 선정해야 합니다. 이 때, 그리드(grid)를 사용하기 보다는 무작위 값을 선정하여 이용하는 것이 좋습니다. 어떤 하이퍼파라미터가 더 중요한지 우리는 알 수 없기 때문입니다.
그래서 무작위로 값을 선정하여 테스트한 뒤, 그 값들을 바탕으로 범위를 좁혀 가며 값을 찾아가는 것이 바람직합니다.
Choosing the appropriate range of Hyper-parameters
최적 값을 탐색하고 싶은 하이퍼파라미터의 범위는 어떻게 조절하는 것이 좋을까요?
0.000....1부터 1까지 10등분하여 한 Block이 균일한 크기를 나타내도록 하는 방식은 uniform scale입니다.
하지만, 하이퍼파라미터의 경우는 log scale을 사용하는 것이 일반적입니다. 하이퍼파라미터가 해답에 가까워지거나 0 또는 1에 근접할수록 짧은 step으로 이동하면서 성능을 비교해야 하기 때문입니다.
log scale로 범위를 설정하는 numpy 코드는 그림 중간에 적혀 있습니다.
Practical Ways of tuning Hyper-parameters
실제에서 모델의 하이퍼 파라미터를 튜닝하는 방법은 Panda와 Cavior 두 가지로 나뉩니다.
Panda는 단 하나의 모델에만 집중하여 튜닝해 가면서 최적의 값을 찾는 방식입니다. 어미 판다가 아기 판다를 돌보는 모습과 비슷하다하여 붙은 이름입니다. 장비가 한정적일 때 주로 선택되는 방식입니다.
Cavior는 여러 모델을 동시에 튜닝하여 그 중 성능이 좋은 모델을 선택하는 방식입니다. 수많은 알에 해당하는 캐비어와 비슷하여 붙은 이름입니다. Cavior는 컴퓨터 및 GPU장비가 많다면 선택해 볼 만한 방식이 되겠습니다.
Batch Norms
지난 포스트에서는 입력(input)을 정규화하는 기법을 알아보았습니다. 이번에는 활성화 값 a와 z를 정규화하는 Batch Normalizations를 살펴 봅시다.Batch Norms는 각 층의 활성화 값을 정규화함으로써 모델을 일반화하고, 학습 속도를 빠르게 하는 효과가 있습니다.
μ는 해당 Layer의 z값들의 평균값입니다.
σ는 해당 Layer의 z값들과 평균의 차이를 제곱한 값을 평균으로 나눈 것으로, 분산에 해당합니다.
그리고 Znorm은 각 z값에서 평균을 빼고 분산으로 나눈 값입니다. 단, Znorm에 분모가 0이 되는 것을 방지하기 위해 σ 의 제곱에 epsilon을 더해줍니다.
최종 Batch Norms값인 z는 β와 γ를 이용하여 표현합니다. β와 γ를 추가하는 이유는, 분산이 1이고 평균이 0으로 정규화하게 되면 비선형 활성함수의 영향이 크게 감소하기 때문에 이를 방지하기 위해서입니다.
Batch Norms
입력 X로부터 Z를 구한 뒤, Batch Norm을 통해 정규화한 뒤 활성 함수를 통과하여 a값을 얻게 됩니다.
Mini-batch에서 활용할 때 사용되는 파라미터는 W, μ, σ로 총 3가지입니다. Bias b는 평균을 구하는 과정에서 자연스럽게 상쇄되는 값이므로 굳이 고려하지 않습니다.
위에서도 말했듯이 Batch Norms의 효과로는
- Layer별 입력 분포가 다를 때에도 비슷한 평균과 분산을 보장하여 Layer별 학습 속도가 빨라지고, 전체적인 Network의 학습 속도가 빨라지는 효과가 있습니다.
- 데이터에 약간의 Noise를 더하여, 모델 정규화 효과가 있습니다.
Softmax Regression
이미지를 단순히 0 또는 1로 분류할 때 활성함수로 Sigmoid를 주로 이용했습니다.
둘 중 하나가 아닌 여러 클래스 중에서 하나를 식별하는 활성 함수는 Softmax가 사용됩니다. 최종 Output으로 각 Class에 대한 Label이 표시됩니다. 그 Label들의 합은 1이 되어, 각 Class의 Label은 해당 Class로 분류할 확률을 의미하게 됩니다.
Loss를 계산하는 방법은 동일하나,예측해야 하는 값이 #class로 증가했기 때문에 Loss에서는 #class만큼 sigma로 더해주어야 합니다.
Backpropagation에서 사용되는 dz 수식은 y-hat - y와 같습니다.
'Deep Learning Specialization' 카테고리의 다른 글
Error Analysis [Deep Learning Specialization #8] (0) | 2022.07.20 |
---|---|
ML Strategy [Deep Learning Specialization #7] (0) | 2022.07.19 |
Optimization [Deep Learning Specialization #5] (0) | 2022.07.14 |
Improving Deep Neural Network [Deep Learning Specialization #4] (0) | 2022.07.14 |
Deep Neural Network [Deep Learning Specialization #3] (0) | 2022.07.13 |
댓글