공부일기/Machine-Learning

과적합(Overfitting)과 정규화(Regularization)

pipiiiiii 2024. 7. 28. 21:25

과적합

 

집값을 선형 회귀로 표현한 그래프를 통해 과소적합과 과적합을 설명하고자 한다.

 

그림의 왼쪽 그래프는 과소적합(Underfitting)을 의미한다.

그래프에 사용되는 Feature(특징)이 1개뿐인데, 매개변수 2개를 사용해 직선 형태로 데이터를 억지로 모델링하려 하니 알고리즘이 강한 선입견을 가지게 되어 데이터의 분포가 '집의 크기가 커져도 집값이 크게 변하지 않는 평탄한 부분'에 대한 예측을 잘하지 못하게 된다.

이런 과소적합을 다른 말로 표현하면, 모델이 높은 편향(Bias)을 가지고 있다고 할 수 있다.

편향은 어떤 것을 예측할 때 특징의 영향을 받지 않는 값인데 이 편향 수치가 높으면 특징에 관계없이 엉뚱한 예측을 하게 된다. 주로 모델이 단순하거나, 학습 반복(Iteration) 횟수가 적은 경우 발생한다.

 

그림 중간 그래프는 데이터를 적절하게 모델링하고 있다.

 

그림 오른쪽 그래프는 과적합(Overfitting)을 의미한다.

해당 모델은 데이터에 잘 맞으니 훈련 데이터 셋에서도 잘 동작하겠지만 보다시피 그래프가 굉장히 꼬여있다. 이런 모델은 테스트 데이터 셋에서도 집값을 정확이 예측하지는 못할 것이다. 

과적합을 다른 말로 표현하면, 높은 분산(Variance)을 가지고 있다고 할 수 있다. 

모델은 어떤 고차 함수를 데이터에 맞추려고 하고, 이에 완벽히 맞는 함수를 만들고자 하면 만들 수 있다. 그러나 그러면 그래프와 같은 커다란 변동성을 가지게 된다. 주로 모델이 복잡하거나 학습 반복(Iteration) 횟수가 너무 많은 경우 발생한다.

 

정리하자면, 우리가 수많은 특징들을 가지고 있을 때, 학습한 가설이 훈련 데이터셋에만 잘 맞아서 훈련할 때 사용되는 비용 함수(Cost Function)는 거의 0에 가까운 값을 가지게 되지만, 학습 과정에서 본 적 없는 데이터셋에는 잘 예측하지 못하는 것을 과적합이라고 한다. 즉, 모델이 일반화(Generalization)가 잘 안 돼서 새로운 데이터셋에 대해서는 가설이 잘 맞지 않는 것이다.

 

 

과적합 문제 해결법

과적합 문제를 해결하기 위해서는 크게 2가지 해결법이 있다.

 

1. 특징(Faature)의 개수를 줄인다.

  • 어떤 특징이 중요한지 아닌지를 직접 고른다.
  • 알고리즘이 어떤 특징을 사용할지 고른다.
  • 특징을 버림으로써 문제에 포함된 정보를 같이 버리게 된다.

2. 정규화(Regularization)

  • 매개변수의 값을 감소시킨다.
  • Featured의 개수를 유지함으로써 예측하기 위한 정보를 살릴 수 있다.

 

 

정규화(Regularization)

정규화는 다양한 스케일의 데이터를 일정한 범위나 형태로 변환하는 것으로 이 과정은 데이터 분석의 정확성을 높이고, 모델의 성능을 향상시키는데 중요한 역할을 한다. 조금 더 쉽게 설명하면, 서로 다른 스케일을 가진 두 데이터 세트가 있을 때 이를 동일한 기준으로 조정하여 분석의 일관성을 유지할 수 있다. 이로 인해 데이터의 왜곡을 최소화하고, 분석 결과의 신뢰도를 높이는데 기여한다. 

 

정규화된 데이터는 모델의 학습 시간을 단축시키고, 더 나은 결과를 도출할 수 있다. 또한 이상치의 영향을 줄이고 데이터 간의 관계를 더 명확하게 할 수 있다. 이는 빅 데이터 분석이나 머신러닝 알고리즘에 있어 매우 중요하다. 

 

 

Regularization(정규화)과 Normalization(정규화)의 차이점

둘 다 정규화로 차이는 명확하지만 모델의 일반화 성능을 높여준다. 

 

Normalization는 feature scaling(기능 스케일링)의 한 종류로 데이터의 scale이 매우 다를 경우(최댓값과 최솟값의 범위가 너무 큰 경우)에 feature(특징)의 데이터 간 다른 특성으로 인해 왜곡이 발생하지 않도록 데이터에 변형을 가하는 것이다. 

 

Regularzation은 특정 가중치가 너무 과도하게 커지지 않도록 모델의 학습을 방해하는 것이라고 할 수 있다. 

조금 더 쉽게 설명하자면 모델이 학습 데이터에 과적합 되는 것을 방지하는 기술로 모델이 최적화하려는 목적 함수에 패널티 항(패널티 항이란? 모델 파라미터의 큰 값을 사용하는 것에 대한 비용을 추가하여, 모델이 작은 파라미터 값을 사용하도록 유도하고 모델을 단순화하는 것)을 추가하는 것으로 이루어진다. 

 

 

정규화 모델

L1 정규화와 L2 정규화를 말하기 전에 알아야 할 것

L1 정규화와 L2 정규화를 이해하기 위해서는 먼저 L1 Norm, L2 Norm이 무엇이 알아야 한다. 

Norm이란 벡터의 크기 혹은 길이를 측정하는 함수로 두 벡터 간 거리를 측정할 때 쓰인다. 

Norm에는 여러 종류가 있는데 L1 Norm과 L2 Norm은 대표적은 Norm의 종류다. 

  • L1 Norm 
    • 절댓값의 합으로 표현된다.
    • Manhattan norm이라고도 하며 Lasso regression에서 loss 값을 규제하는 방법으로 사용된다. 
  • L2 Norm
    • 각 성분의 제곱의 합을 루트로 씌워준 값으로 Ridge regresson에서 주로 사용된다. 또한, 2차원에서는 삼각형의 대각선을 구하는 피타고라스 정리와 동일한 방법으로 Euclidean norm이라고도 한다. 
    • 장애물을 고려하지 않고 직선의 최단거리로 이동한다. 

위 그림으로 L1 Norm과 L2 Norm의 차이를 알아볼 수 있다.

두 점 사이를 잇는 여러 선 중 L2 Norm은 오직 최단 거리를 나타내는 직선인 초록색 선으로만 표현될 수 있고, 그 외 빨간색, 파란색, 노란색 선은 L1 Norm으로 표현 가능하다. 

이처럼 L1 Norm은 여러 가지 경로를 가질 수 있지만 L2 Norm은 하나의 최단 경로만을 가질 수 있다.

 

 

L1 정규화(라소(Lasso) 정규화)

  • 파라미터의 절댓값에 비례하는 패널티를 추가하여 희소한 해결책(많은 0 값을 가지는 파라미터)을 사용하도록 모델을 유도한다. 
  • 일반적인 cost function에 가중치 절댓값을 더해준다. 
  • 편미분을 하면 W(weight) 값은 상수값이 되어버리고, 그 부호에 따라 +,-가 결정된다. 가중치가 너무 작은 경우는 상수값에 의해 W가 0이 된다. 결과적으로 몇몇 중요한 가중치들만 남게 된다. 
  • L1 정규화를 사용하는 회귀 모델을 Lasso Regression이라고 한다. 

 

L2 정규화(랏지(Ridge) 정규화)

  • 파라미터의 제곱에 비례하는 패널티를 추가하여 작은 파라미터 값을 사용하도록 모델을 유도한다.
  • cost function에 제곱한 가중치 값을 더해줌으로써 편미분을 통해 back propagation 할 때 cost 뿐만 아니라 가중치 또한 줄어드는 방식으로 학습한다. 특정 가중치가 비이상적으로 커지는 상황을 방지하고 weight decay가 가능해진다. 전체적으로 가중치를 작아지게 하여 과적합을 방지한다. 
  • L2 정규화를 사용하는 회귀 모델을 Ridge Regression이라고 한다. 

 

엘라스틱 넷(Elastic Net)

  • L1과 L2 정규화를 조합하여 희소성과 부드러움 사이의 균형을 제공한다.
  • 엘라스틱넷은 α가 0에 가까울수록 L2 정규화와 특성이 유사해지며 반대로 α가 1에 가까울수록 L1 정규화와 유사한 특성을 가진다. 
  • 표면적으로는 단순히 L1 Norm과 L2 Norm을 혼합한 형태에 불과해 보이지만 이 둘을 동시에 사용함으로써 변수 간 grouping effect를 제공하는 엄청난 이점을 가지게 된다. 즉, 변수간 상관관계가 큰 변수들에 유사한 가중치를 줌으로써 중요한 변수들은 똑같이 중요하게 취급하고 중요하지 않은 변수들은 모두 공평하게 중요하지 않게 취급한다. 
  • 변수 간 상관관계가 크더라도 중요하지 않은 변수들을 모두 버리면서 중요한 변수들만 잘 골라내어 중요도와 상관관계에 따라 적합한 가중치를 적용할 수 있다. 

 

 

L1 정규화(라소(Lasso) 정규화)와 L2 정규화(랏지(Ridge) 정규화)의 차이점

  • 랏지 정규화는 L2 Norm, 라소 정규화는 L1 Norm을 사용한다. 
  • 랏지 정규화는 불필요한 변수에 대한 가중치를 0에 가깝게 줄이고, 라소 정규화는 불필요한 변수에 대한 가중치를 완전히 0으로 억압하여 변수선택 기능을 제공한다. 
  • 랏지 정규화는 미분이 가능해 보다 매끄럽게 최적점에 도달하지만 라소 정규화는 0에서 미분이 가능하지 않아 진동하면서 수렴한다.
  • 랏지 정규화는 closed-form-solution을 제공하고, 미분이 가능해 경사하강법이 적용 가능하다.
  • 라소 정규화는 numerical optinization 문제를 풀어야 하며, sub-gradient vector를 사용해 경사하강법을 적용한다. 
  • 랏지 정규화는 변수 간 상관관계가 높은 경우 좋은 예측 성능을 보이는 것으로 알려져 있으나, 라소 정규화는 이 경우 변수 선택 성능이 저하되어 좋지 못한 성능을 제공한다. 

 

 

언제 어떤 정규화를 사용해야 할까

일반적인 선형회귀는 피하는 것이 좋으며, 기복적으로는 랏지 정규화를 많이 사용한다.

랏지 정규화가 제1 옵션이지만 중요한 변수의 개수가 몇 개뿐이고 변수 간 상관관계가 적다고 판단된다면 라소 정규화를 사용하는 것이 낫다. 엘라스틱 넷은 중요한 특성의 수가 적지만 특성 간 상관관계가 있다고 판단됐을 때 선호한다. 

 

 

과적합과 정규화 코드 공부

https://github.com/DIB-PP/Machine-Learning

 

GitHub - DIB-PP/Machine-Learning

Contribute to DIB-PP/Machine-Learning development by creating an account on GitHub.

github.com

 

 

 

 

 

 

참고 자료