머신러닝

[머신러닝 이론] 7. Regularization(정규화) - 앤드류응 강의

jasNote 2022. 6. 2. 22:55

목표

  • 과대적합(Overffiting)과 과소적합(Underffiting) 이해한다.
  • 정규화와 람다를 이해한다.
  • 정규화된 선형회귀와 로지스틱회귀를 이해한다.

 

7. Regularization(정규화)

많은 학습문제에는 과적합(Overffiting)이라는 문제가 발생하여 성능이 매우 저하된다. 과적합 문제가 무엇인지 설명하고 과적합을 개선하거나 줄일수있는 정규화기술을 배워본다. 정규화는 과적합 문제를 개선하여 학습 알고리즘의 성능을 향상시킨다.

7.1. Solving the Problem of overfittig

과대적합, 과소적합이란 무엇일까?

주택크기로 가격을 예측하는 예제로 아래 그림을 보자. 

 

우선 왼쪽의 이미지의 가설은 1차함수로 직선이 된다. 좋은모델은 아니다. 데이터를 보면 주택의 크기가 증가함에 따라 가격의 변화가 완만해지는 것을 알수있다. 이렇게 데이터에 적절하지 않게 학습된 문제를 과소적합(Underfitting) 혹은 높은편향이라고 한다.

 

다음 오른쪽 이미지를 보자. 고차 다항식의 가설로 데이터와 완전히 일치하는 극단적인 모습이다. 완전히 적합한 선이 됐지만 데이터셋에만 과도하게 맞춰졌기 때문에 새로운 데이터가 입력됐을때 제대로 예측하지 못할 가능성이 높다. 이렇게 훈련데이터에 과도하게 학급된 모델을 과적합(Overfitting) 혹은 높은분산이라고 부른다. 크게 분산된 데이터를 제한할 수 있는 충분한 데이타가 없다면 고차 다항식 가설에 과적합문제가 발생한다.

 

중간에 있는 이미지는 꽤 적합한 곡선이다. 특별한 이름은 없지만 데이터에 적합(Just right)하다고 표현한다. 

선형회귀 뿐만 아니라 로지스틱회귀에도 과적합문제는 적용된다. 아래 그림은 X1, X2특징을 갖는 예제이다. 왼쪽 이미지는 단순한 가설로 과소적합에 해당한다. 중간 그림은 2차항을 추가하여 꽤 적절한 결정경계를 그었다. 오른쪽그림은 과적합이다. 고차 다항식으로 구불구불 꼬인 가설함수를 만들었기 때문이다.

과적합이 발생하는지 어떻게 알수 있을까 ?

이 강의의 뒷부분에서는 학습알고리즘이 과적합인지 과소적합인지 확인하는 디버깅, 진단 도구를 제공한다. 지금까지의 예는 1,2차원의 데이터이므로 도식화하여 가설함수의 모양으로 확인할 수 있었다. 하지만 매우 많은 피처를 갖거나 다항식의 차수가 높다면 도식화하기는 힘들것이다. 그때는 학습데이터와 검증데이터를 나누어 학습한 모델의 정확도가 얼마나 높은지 검증 데이터를 통해 확인하는 방법도 있다.

 

과적합 문제를 해결하는 옵션 두가지가 있다.

  1. 피처의 개수를 줄인다. 구체저긍로 말하자면 사람이 수동으로 피처들을 살펴보고 중요한 피처들만 남기는 것 이다. 단점은 피처를 버리면서 문제에 포함된 정보도 같이 버리는 것이기 때문에 신중할 필요가있다.
  2. 정규화한다. 모든 피처를 남기고 피처가 주는 영향의 규모를 줄이는 것 이다.

 

7.2. Solving the Problem of overfittig : Cost Function with Regularization

정규화의 예시를 쉽게 확인해보자. 왼쪽그림은 데이터셋에 적합한 2차 함수가설, 오른쪽은 지나치게 적합한 고차 다항식의 가설이다. 오른쪽 가설에서  θ3, θ4를 0에 가깝게 보낸다면 왼쪽 2차 함수와 비슷해지며 적합한 가설이 될수있다. 이처럼 파라미터에 페널티를 부여하여 적합한 가설을 만드는 방법이다.

 

관련성이 낮은 피처를 선택하기는 쉽지않다. 가설에는 고차 다항식이 있는지 없는지도 모른다. 이상황에서는 어떤 파라미터θ를 선택하고 축소해야할지 정하기 어렵다. 따라서 모든 파라미터를 축소시키는 정규화항을 비용함수에 포함한다. 관습적으로 정규화항 추가는 θ1부터 시작하고 θ0는 페널티를 주지 않는다. 실제로 θ0를 포함하거나 포함하지 않아도 결과에는 큰 차이가 없긴하다. 아래는 선형회귀의 비용함수와 정규화를 추가한 비용함수의 수학식이다.

정규화를 잘 하려면 어떻게할까 ?

정규화를 적용한 비용함수의 람다λ는 정규화 파라미터이다. 람다가 하는 일은 서로 다른 두가지 목표 사이에서 균형을 제어하는 것이다.  첫번째는 학습데이터셋에 적합한 파라미터θ를 선택하는 것이고, 두번째는 파라미터 θ를 작은 값으로 유지하는 것이다.

 

아래 그림을 보자 정규화된 비용함수에서 람다를 매우 크게하여 θ1, θ2, θ3, θ4에 높은 페널티를 부여하면 어떻게 될까? θ1, θ2, θ3, θ4는 모두 0에 가까워질것이고 파란색 선과 같은 가설이 될것이다. 이처럼 정규화가 잘 작동하려면 람다를 잘 선택해야한다.

 

7.3. Solving the Problem of overfittig : Regularized Linear Regression

선형회귀의 경사하강법은 어떻게 달라질까 ?

아래는 선형회귀의 정규화된 비용함수J이다. 경사하강법을 통해 J를 최소화하는 파라미터를 찾을것이다.

아래는 정규화된 비용함수의 경사하강법이다. θ0에는 페널티를 부과하지 않으므로 θ0와 θ1, θ2, ... θn의 경사하강법은 다르게 정의한다. 또한 경사하강법에 추가된 (1 -  αλ /m)항은 정규화된 비용함수를 미분한 값이다.

 

정규화된 비용함수의 미분항(1 -  αλ /m)은 매우 흥미롭다. 이 항은 일반적으로 1보다 약간 작은 숫자이다. 왜냐하면 α는 매우 작은값, m은 매우큰값이다. 따라서 1에서 매우작은값αλ /m을 빼기 때문에 0.999와 같은 숫자가 될것이다. 그러므로 비용함수를 업데이트할때 θj * 0.99가 될것이고  θj를 조금 더 작게하는 효과가 있다.

 

7.3. Solving the Problem of overfittig : Regularized Logistic Regression

여기 로지스틱 회귀예제가 있다. 고차 다항식의 특성으로 과적합되기 쉽다는 것을 확인했었다. 이미지의 곡선은 과적합된 학습 모델로 극도로 왜곡된 함수이다. 많은 피처를 가질때 반드시 다항식일 필요는 없지만 피처들로 인해 결국 과적합이 발생한다.

때문에 정규화가 필요하다. 아래는 로지스틱회귀의 비용함수에서 정규화항을 추가한 함수이다. 파라미터에 페널티 효과를 준다. 이렇게 하면 매개변수가 많은 매우 높은 차수의 다항식을 피팅하더라도 효과가 있을것이다.

정규화를 적용하고 매개변수를 작게 유지하면 분홍색의 적절한 결정경계를 얻을 수 있다. 따라서 기능이 많은 경우에도 정규화를 사용하면 과적합문제를 해결할 수 있다.

로지스틱 회귀의 경사하강법은 어떻게 달라질까 ?

아래는 로지스틱회귀의 경사하강법이다. 첫 줄은 θ0의 업데이트, 두번째 줄은 θ1~θn의 업데이트이다. 선형회귀의 경사하강 업데이트와 동일해보이지만 가설이 다르기 때문에 전혀 다른 알고리즘이다. 여기서 정규화항은 정규화된 비용함수를 미분한 것이다.

정규화된 경사하강법을 살펴보았다. 이번엔 고급 최적화 방법을 활용하여 정규화된 로지스틱 회귀를 학습해 본다. 고급 최적화 방법을 이용하기 위해서는 비용함수를 정의해서 비용과 기울기를 반환해야한다. 정규화된 로지스틱 회귀를 사용할때 비용함수에 정규화항이 포함되었는지 확인한다. 그 다음 비용함수의 기울기는 정규화된 비용 함수를 편미분 한 값이다.

 

고급 최적화 방법을 사용하기 위해 비용함수costFunction를 정의한다. 비용함수에 파라미터를 전달하면 비용인 Jval과 기울기인 gradent를 반환한다. 둘의 값을 반환받는 비용함수가 완성됐다면, fminunc()와 같은 고급 최적화 알고리즘에 비용함수를 파라미터로 넘겨 최적의 θ를 반환받을 수 있다.

참조
머신러닝 코세라 : https://ko.coursera.org/learn/machine-learning
라인하트 브런치 : https://brunch.co.kr/@linecard