일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백트래킹
- 너비 우선 탐색
- 자바스크립트
- Overfitting
- 문자열
- 다익스트라
- 크루스칼
- lazy propagation
- 플로이드 와샬
- tensorflow
- DP
- 분할 정복
- 가끔은 말로
- c++
- 2023
- 회고록
- dfs
- dropout
- 세그먼트 트리
- pytorch
- back propagation
- 이분 탐색
- object detection
- BFS
- 조합론
- 알고리즘
- 가끔은_말로
- 우선 순위 큐
- NEXT
- 미래는_현재와_과거로
- Today
- Total
Doby's Lab
L1, L2 Regularization에 대하여 본문
Regularization
Overfitting 문제를 해결하는 데에 있어서 여러 기법들이 있습니다. 오늘은 L1, L2 Regularization에 대해 알아봅시다.
이 두 기법은 모델이 복잡할 때 일어나는 Overfitting을 해결하기 위한 기법입니다. 이 기법을 통해 가중치들이 작아지면서 모델이 아래 그림과 같이 일반성을 가질 수 있도록 합니다.
MSE (Mean Squared Error)
들어가기 전에 일반적으로 Cost Function을 많이 쓰이는 MSE에 대해 알아봅시다.
MSE란 평균 제곱 오차라는 뜻으로 예측 값과 실제 값의 차이를 제곱하여 이를 모두 평균화한 것을 의미합니다.
$$ MSE = \frac{1}{N}\sum_{i=1}^{N}(\hat{y_i}-y_i)^{2} $$
MSE(Cost Function)에 따라 Cost가 정해지고, Optimizer를 통해 가중치를 조절합니다.
이러한 MSE에 Penalty Term(규제 항)을 더하여 Cost가 정해지고, 이에 따른 조절을 통해 Weight에 Regularization이 들어갑니다.
$$ Cost = MSE + (Penalty\;term) $$
L1 Regularization (Lasso)
L1 Regularization이란 기존의 Cost Function에서 아래와 같은 L1-norm(Penalty Term)에 하이퍼파라미터 값인 Alpha를 곱한 값을 더하여 총 Cost가 만들어지는 것입니다.
$$L_1-norm(Penalty\;term) = \sum_{j=1}^{m}|w_j|$$
-> 모든 Weight의 절댓값을 더한 형태
$$\frac{1}{N}\sum_{i=1}^{N}(\hat{y_i}-y_i)^{2} + \alpha\sum_{j=1}^{m}|w_j|$$
규제가 걸린 상태에서 학습을 진행하면 train_set에 맞게 손실을 줄여가고, 가중치를 조절할 뿐만이 아니라 가중치 값들이 최소가 될 수 있도록 합니다.
즉, 손실이 최소가 되게 학습한다는 것은 Penalty Term도 더해져있으므로 Penalty Term 또한 최소가 되게 학습한다는 뜻입니다.
L1에서는 Penalty Term이 가중치들의 절댓값 총합이므로 가중치들이 최소가 되는 것입니다.
동작방식은 가중치들의 부호를 고려하여 특정 상수값들을 빼주는 방식입니다.
+ 하지만, 절댓값에서 미분을 할 수 없습니다. 특정 상수에 대해 다른 분이 다룬 글을 링크로 남기겠습니다.
(https://yurmu.tistory.com/20)
(절댓값에서 미분을 할 수 없는 이유는 y = x(if x > 0), y = 0(if x = 0), y = -x (if x < 0) 같은 그래프를 그려보면 x = 0일 때 미분을 할 수 없음을 쉽게 할 수 있습니다.)
이러한 동작방식의 특징으로 L1에서는 특정 가중치들은 0으로 수렴하여 불필요한 Feature들은 없어질 수 있습니다.
L2 Regularization (Ridge)
L2 Regularization이란 L1과 비슷하게 기존의 Cost Function에서 아래와 같은 L2-norm(Penalty Term)에 하이퍼파라미터 값인 Lambda를 곱한 값을 더하여 총 Cost가 만들어지는 것입니다.
$$L_2-norm(Penalty\;term) = \sum_{j=1}^{m}w_j^{2}$$
-> 모든 weight에 제곱을 더한 형태
$$\frac{1}{N}\sum_{i=1}^{N}(\hat{y_i}-y_i)^{2} + \lambda\sum_{j=1}^{m}w_j^{2}$$
L1과 마찬가지로 가중치의 값들이 최소가 되도록 학습을 진행합니다.
또한, Penalty Term이 최소가 되도록 하는 것도 마찬가지입니다.
L1과 다른 점은 가중치의 제곱의 합을 Penalty Term으로 쓴다는 것인데 이 부분이 동작 방식에 있어서 어떤 방향으로 작용하는지 알아봅시다.
L1도 그렇지만 둘 다 최소가 되기 위해 일반적으로 Gradient Descent 방법으로 최소가 되는 방법을 찾습니다.
L2는 Descent를 하기 위해 w로 미분을 하면 w^2 term이 Penalty Term에 있었기 때문에 w가 남아있습니다.
이는 w의 기울기를 의미하며 0에 수렴하기 위한 값을 찾고 이 값을 다음 weight에 반영합니다.
그러다 보니 최적의 파라미터를 찾을 뿐 파라미터가 0이 되지는 않습니다. 이 과정에서 L1과 차이가 납니다.
Hyperparameter & Difference
그래서 우리가 조절할 수 있는 건 Alpha와 Lambda라는 Hyperparameter입니다.
규제를 줄 때, 과하게 주면 Cost Function에서 가중치의 영향이 커지므로 가중치들이 많이 작아져서 Underfitting 현상이 날 수도 있습니다.
반대로 너무 조금 줘버리면 규제가 별로 되지 않고, Overfitting 현상이 날 수도 있습니다.
그리고, L1과 L2의 차이점은
L1은 weight가 없어질 수도 있다는 것과 L2는 0에 근접하나 사라지지는 않는다는 것입니다.
이러한 차이점을 알고서 일부 특성만 중요하다면 L1, 모든 특성의 중요도가 비슷하다면 L2를 적용하는 접근을 하면 됩니다.
L1, L2 in Keras
Keras에서는 이런 규제를 regularizers 패키지에서 제공하기 때문에 아래와 같이 사용할 수 있습니다.
model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu',
padding = 'same', input_shape=(224, 224, 1),
kernel_regularizer=keras.regularizers.l2(0.002)))
Reference
https://rdmkyg.blogspot.com/2021/06/regularization-l1.html
https://steadiness-193.tistory.com/262
https://nicola-ml.tistory.com/137
https://towardsdatascience.com/weight-decay-l2-regularization-90a9e17713cd
'AI > Concepts' 카테고리의 다른 글
Batch Normalization이란? (Basic) (0) | 2023.01.02 |
---|---|
Dropout에 대하여 (1) | 2022.12.31 |
Image Augmentation이란? (2) | 2022.12.29 |
Normalization이 필요한 이유 (0) | 2022.12.28 |
Gradient Descent와 Loss Function의 관계 (0) | 2022.09.03 |