본문 바로가기
DNN with Keras/Regularization and Dropout

L1 / L2 정규화

by goatlab 2023. 7. 24.
728x90
반응형
SMALL

 L1 (Lasso) Regularization

 

LASSO (Least Absolute Shrinkage and Selection Operator)라고도 하는 L1 정규화를 사용하여 신경망에서 희소성을 생성해야 한다. 즉, L1 알고리즘은 많은 가중치 연결을 거의 0으로 밀어넣는다. 가중치가 0에 가까우면 프로그램이 네트워크에서 가중치를 삭제한다. 가중 연결을 삭제하면 희소 신경망이 생성된다.

 

기능 선택은 희소 신경망의 유용한 부산물이다. 특징은 훈련 세트가 입력 뉴런에 제공하는 값이다. 입력 뉴런의 모든 가중치가 0에 도달하면 신경망 훈련은 기능이 불필요하다고 판단한다. 데이터 세트에 불필요한 입력 기능이 많은 경우 L1 정규화를 통해 신경망이 불필요한 기능을 감지하고 무시할 수 있다. L1은 목표에 다음 오류를 추가하여 최소화함으로써 구현된다.

 

 

L1 정규화를 사용하여 신경망에 희소성을 생성해야 한다. 즉, L1 알고리즘은 많은 가중치 연결을 거의 0으로 밀어넣는다. 가중치가 0에 가까우면 프로그램이 네트워크에서 가중치를 삭제한다. 가중 연결을 삭제하면 희소 신경망이 생성된다. 다음 코드는 라소 회귀 분석을 보여준다.

 

import sklearn
from sklearn.linear_model import Lasso

regressor = Lasso(random_state=0, alpha =0.1)

regressor.fit(x_train, y_train)

pred = regressor.predict(x_test)

score = np.sqrt(metrics.mean_squared_error(pred, y_test))
print(f"Final score (RMSE) : {score}")
report_coef(
    names,
    regressor.coef_,
    regressor.intercept_)

Final score (RMSE) : 3.0604021904033303
Intercept : -18.506677982383223

 

 L2 (Ridge) Regularization

 

Tikhonov / Ridge / L2 정규화는 우주 네트워크 생성에 대한 관심이 적고 중량 값이 낮은 경우에 사용해야 한다. 일반적으로 가중치 값이 낮으면 과적합이 줄어든다.

 

 

L1 알고리즘과 마찬가지로, α 값은 신경망의 오류와 비교하여 L2 목표가 얼마나 중요한지를 결정한다. 일반적인 L2 값은 0.1 (10%)보다 작다. L2에 의해 수행되는 주요 계산은 모든 가중치의 제곱합이다. 알고리즘은 바이어스 값을 합하지 않다.

 

우주 네트워크를 만드는 것에 덜 관심이 있고 낮은 가중치 값에 더 관심이 있는 경우 L2 정규화를 사용해야 한다. 일반적으로 가중치 값이 낮으면 과적합이 줄어든다. 일반적으로 L2 정규화는 L1보다 전반적으로 더 나은 성능을 제공한다. 그러나 L1은 입력이 많은 상황에서 유용할 수 있으며 약한 입력 중 일부를 잘라낼 수 있다. 다음 코드는 선형 회귀 (리지 회귀)가 있는 L2를 사용한다.

 

import sklearn
from sklearn.linear_model import Ridge

regressor = Ridge(alpha = 1)

regressor.fit(x_train, y_train)

pred = regressor.predict(x_test)

score = np.sqrt(metrics.mean_squared_error(pred, y_test))
print(f"Final score (RMSE) : {score}")
report_coef(
    names,
    regressor.coef_,
    regressor.intercept_)

Final score (RMSE) : 3.0036496535815025
Intercept : -19.079800744254825

 

 ElasticNet Regularization

 

ElasticNet 회귀 분석은 L1과 L2를 모두 결합한다. 두 가지 규제가 모두 적용된다. L1과 L2의 양은 모수 알파와 베타에 의해 결정된다.

 

import sklearn
from sklearn.linear_model import ElasticNet

regressor = ElasticNet(alpha = 0.1 , l1_ratio = 0.1)

regressor.fit(x_train, y_train)

pred = regressor.predict(x_test)

score = np.sqrt(metrics.mean_squared_error(pred, y_test))
print(f"Final score (RMSE) : {score}")
report_coef(
    names,
    regressor.coef_,
    regressor.intercept_)

Final score (RMSE) : 3.0450899960775026
Intercept : -18.389355690429745
728x90
반응형
LIST