티스토리 뷰

AI/딥러닝(sung kim)

과적합(Overfitting)

취뽀가자!! 2018. 7. 12. 10:51

머신러닝의 난제

우리가 머신러닝 기법을 통해 학습 데이터로부터 모델을 찾아내면 실제 현장의 데이터를 입력해 사용합니다. 학습된 모델에 실제 데이터를 입력해 결과를 찾는 것을
'추론(inference)'이라고 합니다. 이렇게 학습 데이터로 열심히 모델을 구했는데, 실제 데이터를 입력하니 제대로 작동하지 않을 수 있습니다. 그 이유는 학습데이터는 실제데이터의 부분집합이기 때문에 모든 상황에 맞는 모델이 아니기 때문입니다. 머신러닝의 모든 문제는 여기서 발생한다고 볼 수 있습니다.

딥러닝도 머신러닝의 개념을 물려받았기에 머신러닝의 난제도 그대로 물려받았습니다. 따라서 머신러닝 기법을 사용할 때는 실제 데이터의 특성이 잘 반영되어 있고 편향되지 않은 학습 데이터를 확보하는 것이 아주 중요합니다. 학습 데이터와 입력 데이터가 달라져도 성능 차이가 나지 않게 하는 걸 '일반화(generalization)'라고 합니다.

과적합(overfitting)

과적합은 위에서 일반화를 떨어뜨리는 주범 중에 하나입니다. 

과적합이란 학습데이터를 과하게 잘 학습하는 것을 뜻합니다. 일반적으로는 학습데이터는 실제 데이터의 부분집합인 경우가 대부분이다. 따라서, 아래의 그래프처럼 학습 데이터에 대해서는 오차가 감소하지만, 실제 데이터에 대해서는 오차가 증가하는 지점이 존재할 수 있다. 


과적합을 이러한 관점에서 본다면 과적합은 학습 데이터에 대해 과하게 학습하여 실제 데이터에 대한 오차가 증가하는 현상이다. 


과적합에 대한 대표적인 예는 노랑색 고양이를 보며 고양이의 특성을 학습한 기계가 검은색이나 다른 색깔의 고양이를 구분하지 못하는 것과 비슷하다고 생각하면 된다.


overfitting과 딥러닝

위에서 설명한 바와 같이 과적합은 머신러닝 알고리즘의 오차를 증가시키는 원인으로 작용합니다. 실제로 기존의 머신러닝 알고리즘을 이용하여 어떠한
데이터를 인식 및 분류하다보면, 과적합은 거의 해결 불가능에 가깝게 된다. 과적합을 해결하기 힘든 이유는 다음과 같다.

● 일반적으로 학습 데이터는 실제 데이터의 부분집합이며, 실제 데이터를 모두 수집하는 것은 불가능하기 때문입니다.

● 만약 실제 데이터를 모두 수집하여도 모든 데이터를 학습시키기 위한 시간은 측정 불가능입니다.

위와 같은 이유 때문에 과적합을  완전히 해결하기는 힘들지만 그에 대한 대항법은 존재합니다. 대항법은 다음과 같습니다.

● 많은 training data
● 입력으로 들어오는 변수(feature, x)의 갯수를 줄여라
● Regularization

정칙화(regularization)

정칙화는 모델의 형태를 최대한 단순하게 만들려는 수치해석적인 기법입니다. 모델이 복잡할수록 학습데이터에만 맞춰지고 실제 데이터에서는 오차가 생길 수 있기 때문에 모델을 단순화시켜 전체 경향만 잘 반영하자는 의미입니다. 

학습 데이터에 대한 모델의 성능을 약간 희생하더라도 모델을 최대한 간단하게 만들어 과적합에 빠지지 않도록 하자는 게 정칙화의 기본 전략입니다.

모델을 구축했을 때의 3가지 경우를 보여줍니다. underfitting은 너무 대충 맞춰서 error가 많이 발생하는 현상을 말하는데, 대충 맞출려고 하는 사람은 거의 없기 때문에 이것은 머신러닝에 대한 지식이 부족할 확률이 높습니다. 


overfitting은 너무 모델링을 training set에 잘 맞춰 나타나는 현상입니다. 이것은  training data set에서는 완벽하지만 실제 데이터에서는 에러가 많이 발생시키게 됩니다.


W가 크면 예측하려는 값(y hat)이 정상적인 규칙으로부터 벗어나 있는 경우에도 예측이 가능합니다. 그러나, 비정상적이거나 애매한 위치에 있는 데이터를 올바르게 예측하는 것을 '맞았다'라고 얘기할 수는 없습니다. 정상적이지 안흔 데이터를 예측했기 때문이죠. 그래서 오히려 '틀렸다'라고 얘기하는 것이 더욱 좋을 수 있습니다. 이럴 경우 training dataset에 특화된 overfitting 현상이 발생합니다. 가장 이상적인 경우는 최소한의 에러를 인정하는 'Just right'입니다.

Regularization을 구현하는 것은 매우 쉽습니다. cost 함수가 틀렸을 때 높은 비용이 발생할 수 있도록 벌점(penalty)을 부과하는 것처럼 W에 대한 값이 클 경우에 penalty를 부여하면 됩니다.

W에 대해 제곱을 한 합계를 cost 함수에 더하는 것이 전부입니다. 다만 합계를 어느 정도로 반영할지 결정할 수 있어야, 사용하는 시점에서 다양한 적용이 가능합니다. 람다(λ)라고 부르는 값을 사용해서 얼마나 penalty를 부여할 것인지 결정할 수 있습니다.


검증(vaildation)

검증은 학습 데이터의 일부를 따로 때어 내서 학습에는 사용하지 않고 모델의 성능 검증용으로 사용하느 기법을 말합니다.즉 학습 데이터에 대한 모델의 오차로는 과적합 여부를 판단하기 불가능하니 일부 학습 데이터를 사용해 과적합을 검증하겠다는 의도입니다. 학습된 모델에 검증 데이터를 입력해 성능 저하가 심하면 과적합으로 보고 모델을 수정하는 등의 조치를 취해 과적합을 막겠다는 겁니다.

검증을 도입하면 머신러닝의 학습은 다음과 같은 절차를 거쳐 진행됩니다.

1. 학습 데이터를 학습용 데이터와 검증용 데이터로 나눕니다.

2. 학습용 데이터로 모델의 성능을 평가합니다.

3. 검증용 데이터로 모델을 성능을 평가합니다.

A. 성증이 만족스러우면 학습을 마칩니다.

B. 성능이 떨어지면, 모델의 구조 등을 수정해 2단계부터 다시 수행합니다. 

교차 검증(cross validation)

교차 검증은 검증을 약간 변형한 기법입니다. 학습 데이터를 학습용 데이터와 검증용 데이터로 나누는 것은 같은데, 두 데이터를 고정하지 않고 계속 바꿔준다는 점이 다릅니다. 

이렇게 하는 이유는 검증용 데이터를 고정해 놓으면 모델이 검증용 데이터에도 고적합될 여지가 있기 때문입니다.

요약해보면 검증용 데이터를 고정하지 않고 무작위로 바꿔서 과적합 여부를 더 잘 판단하도록 하겠다는 게 교차 검증의 핵심 아이디어입니다.

온라인 검증

데이터가 너무 많을 경우 사용한다. 한번에 처리하지 않고 조금씩 나누어 처리하는 것을 말한다. 보통 데이터가 너무 많거나 신규 데이터가 지속적으로 유입되는 상황에서 사용되는 모델이다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함