[ML] 정규화
[정규화]
파라미터를 추정할 때 손실함수에
벌칙항
을 도입함으로써 계수가 큰 값이 되는 것을 막는 기법
정규화에 관한 설명을 살펴보면 무슨 말인지 와닿지 않는다. 이를 이해하기 위해서는 머신러닝에서 좋은 모델이란 무엇인지에 관하여 먼저 알아볼 필요가 있다.
기본적으로 좋은 모델이란 다음과 같다.
- 현재 데이터(training data)를 잘 설명하는 모델
- 미래 데이터(testing data)를 잘 설명하는 모델
현재 데이터를 잘 설명할 수 있는 모델
이란, Trainning error를 최소화하는 모델을 의미한다.
Trainning error를 최소화 시키기 위해서는 MSE(평균 제곱의 오차)
가 최소가 되어야 한다.
이때, Expected MSE(MSE의 기댓값)
을 구하게되면 Irreducible Error, Bias, 그리고 Variance의 합이 산출된다. 여기서 Irreducible Error의 경우 우리가 어떻게 해볼 수 있는 값이 아니며, 집중해야할 것은 Bias
와 Variance
이다.
Bias
- 정답과 예측값이 서로 가까운지 먼지 알려주는 지표이다.
- Bias는 지나치게 단순화된 모델로 인한 error에 해당한다. 따라서, Bias가 클 수록 데이터가 편향되게 출력되는 것을 확인할 수 있다.
- Bias가 클수록 예측값과 멀어지게 되며, Bias가 작을수록 예측값과 가까워진다.
Variance
- 예측값들이 서로 얼마나 흩어져 있는가 를 표현
- Variance는 지나치게 복잡한 모델(train 데이터에 지나치게 fit하려는 모델)로 인한 error에 해당한다. 따라서, Variance가 지나치게 큰 모델은 일반화시키기 어려운 모델이다.
- Variance가 큰 모델을 예를 들어 설명하면 점산도에서 n차원 회귀선이 거의 모든 점을 지나면서 그려지는 모델에 해당한다. 작은 모델의 경우는 점산도에서 단순 2차원의 선형 회귀선이 이에 해당된다.
아래의 그림을 참조하면 Bias
와 Variance
의 관계에 대해 더 쉽게 파악할 수 있다.
위에서 설명한 Expected MSE
는 미래 데이터의 예측 성능이라고도 볼 수 있다.
따라서 미래 데이터를 잘 예측한다는 것은 Expected MSE
가 낮은 모델을 의미하는 것이다.
모델을 만들 때, Expected MSE
를 줄이기 위해서는 Bias
, Variance
혹은 모두 낮추어야한다.
하지만, 둘 중 하나를 포기해야 하는 경우도 종종 발생한다.
이때, bias를 좀 가지더라도 제일 작은 variance를 가지는 모델을 만들 수 있지 않을까 생각하게 된다.
즉 variance가 지나치게 큰 과적합이 발생하지 않는 모델을 만들자는 의미이다.
과적합 즉 overfitting을 해결하는 방법은 크게 두가지 이다.
- 특성(Feature)의 갯수 줄이기
- 주요 특징을 직접 선택하고 나머지는 버린다.
- Model Selection Algorithm을 사용한다.
- 정규화(Regularization)를 수행한다.
- 모든 특성을 사용하되, 파라미터의 값을 줄인다.
그럼 이제 정규화에 관하여 살펴보자.
이 개념을 가지고 아래의 예제를 살펴보자.
위의 그림에서 어떤 모델이 주어진 (산점도로 표시된)자료를 가장 잘 표현하는 것 일까?
초면에는 이게 뭔가 싶다. 하지만, 다음의 그림을 확인해보자.
위의 그래프는 그래프의 차수와 Error와의 관계를 보여준다.
(다른 머신러닝 책에서의 경우 y축이 정확도로 나타나있으며, 위의 그래프를 x축 대칭 시킨 모습과 똑같다.)
여기서 확인할 수 잇는 점들은 다음과 같다.
Degree of Polynominal 값이 작을수록
, 훈련 데이터와 테스트 데이터 모두 높은 Error를 보여준다.- 즉, 모델이 너무 단순화되어 두 데이터셋 모두 예측값과 매우 먼 값을 출력함을 의미하기에,
Bias가 매우 크다는 것을 확인할 수 있다. - 이와 같은 경우 위에서 확인한 Case 1과 같은 모델이다.
- 즉, 모델이 너무 단순화되어 두 데이터셋 모두 예측값과 매우 먼 값을 출력함을 의미하기에,
Degree of Polynominal 값이 클수록
, 훈련 데이터는 낮은 Error수치를 테스트 데이터는 높은 Error수치를 보여준다.- 즉, 모델이 Train data셋과 너무 fit되어있기 때문에 복잡도가 높음을 의미한다.
따라서, Variance가 매우 높다는 것을 확인할 수 있다. - 이와 같은 경우 위에서 확인한 Case 3와 같은 모델이다.
- 즉, 모델이 Train data셋과 너무 fit되어있기 때문에 복잡도가 높음을 의미한다.
따라서, Case 1, 3보다는 Case 2가 가장 최적화된 모델이라는 것을 알 수 있다.
그렇다면, Case 3 모델처럼 모델이 너무 복잡해지거나 너무 간단해지는 것을 막기위해서는 어떻게 해야할까?
이를 위한 방법 중 하나가 정규화(Regularization)
이다.
아래의 예시를 살펴보자
위의 MSE
에서 최소가되는 beta를 찾고자 한다. 하지만, 너무 복잡한 모델은 지향하고 싶다. 이럴 경우 벌칙항(or 정규항)
을 도입하여 계수가 큰 값이 되는 것을 막는 기법을 정규화
라고 부른다.
따라서 벌칙항을 추가하기 위해,
위와 같이 beta_3와 beta_4의 계수로 상당히 큰 숫자로 보이는 5000이라는 값을 곱해주고 전체 식에 더해주었다. 그렇다면, 위의 전체식이 최솟값을 되도록 할려면 beta_3와 beta_4는 어떤 값을 가져야만 할까?
바로 beta_3와 beta_4가 0에 근사한 값을 가지면 된다.
따라서, case 3의 beta_3와 beta_4는 0에 근사한 값이 삽입되고, case 3는 bestfit 모델이라 부를 수 있는 case 2에 근사한 모델이 된다!
References
- 파이썬으로 배우는 통계학 교과서
- https://www.youtube.com/watch?v=pJCcGK5omhE
- https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-12-%ED%8E%B8%ED%96%A5Bias%EC%99%80-%EB%B6%84%EC%82%B0Variance-Trade-off
- http://scott.fortmann-roe.com
- https://opentutorials.org/module/3653/22071