Table of Contents

ML

L1 L2 정규화, Lasso Ridgd 과적합 방지

꼬꼬마코더 2024. 7. 18. 16:51
728x90

L1과 L2 정규화는 머신 러닝에서 모델이 과적합되는 것을 방지하기 위해 사용되는 정규화 기법입니다. 이들은 손실 함수에 페널티 항을 추가하여 모델의 복잡도를 줄이는 역할을 합니다. 이를 통해 모델이 훈련 데이터에 너무 잘 맞추지 않고, 일반화 성능을 향상시킬 수 있습니다.

### L1 정규화 (Lasso Regularization)

L1 정규화는 손실 함수에 가중치 절댓값의 합을 페널티로 추가합니다. 수학적으로는 다음과 같이 표현됩니다:

$$ \text{Loss} = \text{Original Loss} + \lambda \sum_{i} |w_i| $$

여기서:
- \( \text{Loss} \)는 최종 손실 함수입니다.
- \( \text{Original Loss} \)는 원래의 손실 함수 (예: MSE, Cross-Entropy 등)입니다.
- \( \lambda \)는 정규화 강도를 조절하는 하이퍼파라미터입니다.
- \( w_i \)는 모델의 가중치입니다.

L1 정규화는 가중치를 0으로 만들기 쉽기 때문에, 특성 선택 효과가 있습니다. 즉, 중요하지 않은 특성의 가중치는 0으로 만들어져 모델에서 제외될 수 있습니다.

### L2 정규화 (Ridge Regularization)

L2 정규화는 손실 함수에 가중치 제곱의 합을 페널티로 추가합니다. 수학적으로는 다음과 같이 표현됩니다:

$$ \text{Loss} = \text{Original Loss} + \lambda \sum_{i} w_i^2 $$

여기서:
- \( \text{Loss} \)는 최종 손실 함수입니다.
- \( \text{Original Loss} \)는 원래의 손실 함수입니다.
- \( \lambda \)는 정규화 강도를 조절하는 하이퍼파라미터입니다.
- \( w_i \)는 모델의 가중치입니다.

L2 정규화는 모든 가중치를 작게 만들어 모델의 복잡도를 줄입니다. 이로 인해 모델이 더 일반화되도록 도와줍니다.

### L1과 L2 정규화의 차이점

- **L1 정규화**는 일부 가중치를 정확히 0으로 만들어 특성 선택을 가능하게 합니다.
- **L2 정규화**는 모든 가중치를 작게 만들어 모델의 복잡도를 줄이고, 더 안정적인 학습을 가능하게 합니다.

이 두 정규화 기법을 조합한 Elastic Net 정규화도 있습니다. Elastic Net은 L1과 L2 정규화를 함께 사용하여 각각의 장점을 취할 수 있습니다.

### 적용 방법

L1과 L2 정규화는 대부분의 머신 러닝 프레임워크 (예: Scikit-learn, TensorFlow, Keras 등)에서 쉽게 적용할 수 있습니다. 예를 들어, Scikit-learn에서 Ridge (L2 정규화)와 Lasso (L1 정규화)를 사용하는 방법은 다음과 같습니다:

```python
from sklearn.linear_model import Ridge, Lasso

# L2 정규화 (Ridge)
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)

# L1 정규화 (Lasso)
lasso_model = Lasso(alpha=1.0)
lasso_model.fit(X_train, y_train)
```

여기서 `alpha`는 정규화 강도를 조절하는 하이퍼파라미터입니다. 적절한 값을 찾기 위해 교차 검증 등을 사용할 수 있습니다.