머신 러닝, 딥러닝을 공부하다 보면 정규화라는 단어를 자주 접할 수 있습니다. 이번 글에서는 정규화에 대해 정리해보도록 하겠습니다.
정규화는 영어 표현에서는 전혀 문제가 없지만 번역하는 과정에서 문제가 생긴다.
머신 러닝, 딥러닝에서 정규화는 Normalization, Standardization, Regularization 세 가지가 있지만, 한글 표현에서는 이 세 가지 모두 정규화라고 불린다. 그러므로, 정규화는 영어로 표현하는 것이 적절하다.
Normalization, Standardization, Regularization은 각각 다르지만, 모두 Overfitting을 방지하기 위해 사용된다는 공통점이 있다.
Normalization & Standardization
Normalization과 Standardization은 모두 데이터의 분산을 줄이기 위해 값의 범위를 축소하는 re-scaling 과정을 말한다.
scale의 범위가 너무 크다면 노이즈 데이터 생성될 가능성이 커지고, Overfitting이 될 가능성이 높아집니다.
또한, 값의 범위가 커진다면 Activation function의 의미가 희미해진다. 그 이유는, 값이 너무 커진다면 활성화 함수를 거친다고 하여도 한 쪽으로 값이 치중될 가능성이 높기 때문입니다.
마지막으로 일반적으로 weight 초기화를 위해 정규분포(N(0,1))로 부터 값을 생성하게 된다. 이 때, 정규분포의 값은 ( -2.58, 2.58 ) 사이에 99%가 존재합니다. 따라서, scale이 너무 커진다면 분포 범위가 넓어짐을 의미하며, 이는 init weight 값을 정하기 힘들게 만든다.
Normalization과 Standardization은 scale 조절 방식의 차이로 구분됩니다.
Normalization : 다양한 방식이 존재하며, 값의 범위를 0~1 사이로 바꾸어주는 것을 말합니다.
Standardization : 정규 분포를 표준정규분포로 변환하는 방법으로 값의 범위를 평균 0, 분산 1이 되도록 변환하는 것을 말합니다. 종종 표준화로 번역되기도 합니다. [ (x - 평균) / 표준 편자 ]
머신러닝 : scale이 큰 feature의 영향이 지나치게 거치는 것을 방지합니다.
딥러닝 : Local Minimal에 빠질 위험을 줄여줍니다. 또한 이는, 큰 Learning Rate를 가능하게 하여 학습 속도를 향상시키는 효과를 가져올 수 있습니다.
아래 그림을 통해 Normalization이 어떻게 Local Minimal에 빠질 위험을 줄여주는지 이해할 수 있다. Normalization 적용 후 scale이 축소되면서 전체적으로 Minimal의 웅덩이가 작아지게 되고, Local Minimal은 더 낮아지게 됩니다. 이로 인해 Local Minimal에서 보다 쉽게 빠져나올 수 있게 됩니다
Regularization
Reuglarization은 '정규화'라고 하지만 '일반화'라고 하는 것이 이해하기 쉽습니다.
Regularization은 weight 조정에 '제약'을 걸어서 Overfitting을 방지하고 일반화 성능을 높이는데 도움을 줍니다.
머신 러닝에서 학습은 weight의 조정은 단순하게 cost function이 작아지는 방향으로 진행됩니다. 이때, 특정 가중치 값들이 커지면서 오히려 결과를 나쁘게 하는 경우가 있습니다.
[출처] 라온피플 머신러닝 아카데미 : https://m.blog.naver.com/laonple/220527647084
Regularization은 특정 가중치 값만 더해주거나 빼주어서 모델의 복잡도를 조정함(증가)으로써 학습 데이터에 딱 맞게 되는 것을 어느 정도 예방할 수 있습니다.
종류 : L1 Regularization, L2 Regularization, Dropout, Early Stopping
L1 Regularization & L2 Regularization
여기서 L 뒤에 붙는 숫자는 차수를 의미한다고 볼 수 있습니다. 즉, L1 - L2 Regularization의 차이는 수식의 차수 차이입니다.
L2 Regularization
$C = C_0 + \frac{\lambda}{2n}\sum_{w}^{}w^2$ 으로 표현할 수 있으며 $C_0$은 이전의 cost function을 나타내며, $n$은 훈련 데이터 개수, $\lambda$는 regularization 변수, $w$는 가중치를 나타냅니다.
Regularization이 적용되지 않을 경우 학습은 단순히 $C_0$ 값이 작아지는 방향으로 진행되지만, 적용되면 $w$ 값들 또한 최소가 되는 방향으로 진행됩니다..
새로운 가중치 $w$는 다음 식을 통해 결정된다. : $w - lr\frac{\partial C_0}{\partial w} - \frac{lr\lambda}{n}w = (1 - \frac{lr\lambda}{n})w - lr\frac{\partial C_0}{\partial w}$
$1 - \frac{lr\lambda}{n}$은 항상 1보다 작기 때문에 갱신되는 가중치는 항상 작아지는 작아지게 된다. 이를 "weight decay"라고 합니다.
"weight decay"에 의해 특정 가중치가 비이상적으로 커지는 것을 방지할 수 있습니다.
가중치 w가 작아지도록 학습하는 것은 'local noise'가 학습에 큰 영향을 미치지 않도록 하여 'outlier'의 영향을 줄이는 것과 같습니다.
대표적인 L2 Regularization : Lidge ( 원형 )
L1 Regularization
L1 Regularization은 2차항 대신 1차항이 오는 것을 말하며 다음 식을 갖습니다. $C = C_0 + \frac{\lambda}{n}\sum_{w}^{}|w|$
따라서 갱신되는 새로운 가중치 계산식은 다음과 같습니다. : $w - \frac{lr\lambda}{n}sgn(w) - lr\frac{\partial C_0}{\partial w}$
weight 값 자체를 줄이는 것이 아니라 w의 부호에 따라 상수 값을 빼주는 방식으로 regularization이 진행됩니다.
대표적인 L1 Regularization : LASSO ( 마름모 형태 )
차이점과 선택 기준
L1 Regularization은 상수 값을 빼는 것이기 때문에 작은 가중치들은 대부분 0으로 수렴하게 되어, 중요한 가중치들만 남게 된다. 즉, Feature Selection이 가능하여 몇 개의 의미 있는 가중치를 선별하고 싶은 경우 효과적이다. 하지만, 미분이 불가능하기 때문에 Gradient 기반 학습에 적용시 주의가 필요하다고 합니다.