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`는 정규화 강도를 조절하는 하이퍼파라미터입니다. 적절한 값을 찾기 위해 교차 검증 등을 사용할 수 있습니다.