brunch

매거진 머신러닝

You can make anything
by writing

C.S.Lewis

by 모험과 안정 Feb 13. 2024

머신러닝 과적합 해결 - 정규화


머신러닝 모델을 검증하는 방법 - 훈련, 검증, 테스트 데이터

머신러닝은 데이터가 주어진 상황에 따라 학습하는 방법이 다르지만, 대개는 정답이 있는 데이터를 정확하게 맞추는 “지도학습”의 형태로 학습한다. 그렇다면 이 지도학습을 통해서 무엇을 하고 싶은 것일까? 학습한 데이터를 넣어서 맞추는 것은 사실 의미가 없다. 이전에 얘기한 바, 머신러닝은 y값을 직접 측정하지 않고 x 값만 있을 때 y값을 알 수 있는 함수 같은 역할을 해야 되기 때문에, y값을 모르는 새로운 x를 넣고 예측했을 때 새로운 y를 잘 맞추는 것이 중요하다. 그리고 이 새로운 y를 잘 맞추는지 검증이 되어야 비로서 머신 러닝 모델을 신뢰할 수 있을 것이다.


하지만, 기존의 모든 데이터로 머신 러닝 모델을 학습시킨 후에 새로운 데이터가 들어오기까지 기다릴 수는 없는 노릇이다. 그리고 효율적이지도 않다. 그래서 머신러닝에서는 학습된 모델을 효과적으로 검증하기 위해 하나의 데이터셋을 학습, 검증, 테스트 용도로 나눠서 사용한다. 즉, 머신러닝 모델에 대해서 학습, 검증, 테스트 데이터에 대한 정확도를 각각 확인할 수 있다.



머신러닝 과적합 문제

그래서 함수로 치면 계수에 해당하는 부분인 모델의 parameter들을 바꾸어 가며 검증 데이터셋을 가장 정확하게 예측하는 parameter를 찾는다. 그리고 그 parameter로 테스트 데이터를 가장 잘 검증하는 지 확인한다. 


누군가는 이렇게 쉽게 생각할 수 있을 것이다 “학습 데이터에서 성능이 좋으면 검증, 테스트 데이터에서도 당연히 성능이 좋은 게 아닌가?” 물론 머신러닝 모델이 복잡하지 않을 때에는 맞는 얘기이다. 아래의 그림을 보자, 왼쪽 위가 class1이고 오른쪽 아래가 class2인 경우, 왼쪽과 같이 선형으로 단순하게 분류할 경우 에러가 생길 수 밖에 없다. 그리고 데이터를 오른쪽과 같이 매우 복잡하게 분류한다고 생각해보자 (7차 함수 이상의 복잡함). 그러면 학습 데이터에 대해서는 분류를 잘 해도 테스트 데이터에 대해서는 제대로 분류하지 못할 수도 있다. 위와 같이 선을 이용한 분류보다 학습 데이터의 분류 정확도는 높지만, 테스트 데이터의 분류 정확도는 떨어지는 것이다.

이를 머신러닝에서는 과적합이라고 한다. 이를 풀어보면, 머신러닝 모델이 훈련 데이터에 지나치게 fitted된 형태로 학습되다보니, 훈련 데이터가 아닌 다른 데이터에 대해서는 정확도가 떨어지는 것이다.


따라서, 이를 방지 하기 위해 훈련데이터에 포함되지 않은 검증 데이터의 정확도로 모델이 학습이 잘 되었는지를 판단하는 것이다.

그리고 학습 데이터 성능 자체에서 이러한 과적합을 방지할 수 있는 방법은 아래와 같다

- 데이터 추가

- 모델 단순화

- Dropout

- 정규화 (Regularization)


이 중에서 Regularization은 학습 데이터 성능을 평가할 때 사용하는 loss term인 (모델이 예측한 값 - 정답)의 오차에 복잡성을 추가한다. 즉, 모델이 복잡해지면 학습데이터를 매우 잘 맞춰도 모델의 복잡성이 커져서 loss term이 커지므로 최적의 학습 parameter가 될 수 없다. 이러한 Regularization은 L1, L2 regularization으로 나눌 수 있고 L1: linear term, L2: square term이 사용되고 있다. L1, L2에 대한 차이점 및 활용은 나중에 자세히 다루겠다.




매거진의 이전글 '원하는' 데이터가 없을 때의 머신러닝  
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari