반응형


안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


이번 포스팅에서는 머신러닝과 딥러닝에서 일반화 성능을 떨어뜨리는 것 중 하나인 '과적합(Overfitting)'에 대해서 포스팅을 하려고 합니다.


과적합(Overfitting)이란?

머신러닝이나 딥러닝 분야에서 모델을 만드는데, 모델에 training data를 과하게 학습을 시키는 것을 말합니다.

모델에 training data를 과하게 학습을 시키면, 모델은 training data에 좋은 성능을 나타내고, 오차나 MSE가 줄어들 수 있겠지만 training data가 아닌 새로운 data에 대해서는 좋지 않는 성능을 나타내고, 오차나 MSE가 커지게 됩니다. 즉, training data에 무한한 신뢰를 하여 모델에 과하게 적합을 하면, 일반화의 성능이 떨어지게 됩니다. 

대체적으로, Overfitting이 일어나고 있는지 확인을 해보려면 학습을 시켜야 합니다. 학습을 시켜서 training data에서는 당연 좋은 모델의 성능이 나타날 것입니다. 



과적합(Overfitting) 확인 방법!

첫 번째로, 

위의 글과 같이, 과적합은 새로운 data에 대해 모델이 좋지 않는 성능을 나타낸다고 말하였습니다.

이 말 그대로, training data로 모델을 학습시키면 좋은 accuracy나 mse 등 높은 값을 가지는데,

이와 반대로, 새로운 data를 모델에 돌리면 training data로 모델에 적합한 accuracy나 mse 등 값이 크게 차이가 나는 것을 볼 수 있습니다. 여러분들께선 이러한 상황에 Overfitting을 의심해 볼 필요가 있습니다.


두 번째로, 과적합은 모델이 복잡할 경우에 발생할 수 있습니다.

이 말이 무슨 말이냐면, 수학 문제가 있습니다. 이 수학 문제를 하나의 식을 이용하여 풀 수 있는데, 너무 많은 식을 사용하여 푸는 경우라고 할 수 있습니다. 즉, 작은 문제 해결 방법으로 문제를 해결 할 수 있다면, 큰 문제 해결 방법으로 문제를 해결 하지 않는다는 말입니다. 그래서, 첫 번째 방법으로 확인을 할 수 없다면 모델의 자유도가 높은지를 확인하여 모델의 복잡성을 확인하는 방법이 있습니다.


세 번째로, 설명 변수가 많을 경우 과적합이 발생할 수 있습니다. 

머신러닝 분야에서 설명 변수(모델링을 할 때 영향을 줄 수 있는 변수)가 많으면 '차원의 저주(The Curse of Dimensionality)'라는 현상이 발생합니다. 차원의 저주는 설명 변수가 많으면 많을수록 데이터가 그래프에서 표현되는 범위는 넓어져 관측 값들이 그 범위에 분포하게 됩니다. 따라서, 이 점들이 연결이 되면 노이즈가 발생하게 되는데 모델이 이 노이즈를 결과로 나타낼 수 있어서 Overfitting이 발생할 가능성이 있습니다. 이에 따라서, 설명 변수가 많으면 관측 값들을 더 많이 늘려 해결하는 방법이 있고, 단순하게 설명변수를 줄이는 방법도 있습니다.



그래서, 딥러닝이나 머신러닝 분야에서 Overfitting을 해결하는 것이 중요합니다. 과적합을 해결하는 방법은 정규화(regularization)가 있습니다. 정규화는 모델의 형태를 최대한 간단하게 만드는 기법입니다. 그래서, 위의 과적합 확인 방법에서 모델의 복잡성을 이야기 하였는데, 모델의 복잡성을 확인을 하여 정규화를 하게 되면, Overfitting을 해결 할 수 있습니다. 


하지만, 딥러닝 분야에서 고차원의 문제로 들어가게 되면 그래프 상이나 그림으로 Overfitting을 확인하기 힘들어집니다. 그래서, 확인할 수 있는 방법이 앞에 포스팅 했던 training data 에서 validation data set을 이용하는 것입니다.


validation data set은 training data set에서 7:3 또는 8:2로 분할을 하여 학습에는 사용하지 않고 모델을 학습시키는 중간에 성능 검증용으로 사용합니다. 

왜 이 방법으로 과적합을 해결할 수 있느냐???

해결을 하는 것보다 확인을 하여 수정한다라는 의미가 더 맞습니다. validation data를 이용하여 중간에 모델의 성능 저하가 심하면 과적합으로 보고 모델을 수정(하이퍼 파라미터 값을 수정하는 등의 방법)하는 조취를 취하여 Overfitting을 막는 방법이 되겠습니다. 이 validation data set은 또 교차 검증(cross validation)도 있는데 이것은 다음 포스팅에 대한 주제로 사용을 하겠습니다.



머신러닝과 딥러닝 분야에서는 모델의 성능을 저하시키는 Overfitting을 해결하냐 해결하지 못하느냐에 따라 아마추어와 프로(?)로 나뉠 정도로 중요한 문제입니다. 이 분야를 학습하는 사람들은 꼭 해결해야 하는 문제이니 도움이 됐으면 좋겠습니다.


이상으로 츄르 사려고 코딩하는 집사! 코집사였습니다.






반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기