Machine Learning2016. 7. 26. 17:00


이번에는 머신러닝을 적용하여 여러분이 원하시는 무언가를 진행하고자 할때 생각해보면 좋은 내용들을 알아보겠습니다.


여러분이 정규화된 linear regression을 예측하는 모델을 만들었다고 생각해보겠습니다. 그런데 실제 학습된 결과가 실제 결과 보다 생각보다 많이 차이가 나서 적용하기 어렵다고 느껴질 때가 있을 것입니다. 이때 무엇을 해야 할까요


일반적으로 사람들은 다음과 같은 내용들을 하려고 생각합니다.

1. 더 많은 데이터가 필요하다 

- 2배, 10배 되는 데이터가 있으면 더욱 정확한 결과가 가능할 것이다라고 생각하지만 실제로는 그렇치 않습니다.

2. features를 더 줄이자

- overfitting 이 일어나는것 같아서 이를 방지하기 위해서 더 줄이려고 하는 경향이 생깁니다.

3. features를 더 추가하자

- 혹은 부족한 features 때문에 정확한 결과가 나오지 않는다고 생각할 수 있습니다.

4. 다항식을 추가/사용 하자

- 좀더 복잡한 함수를 사용하여 연산을 하면 더 좋은 결과가 나올 것이라고 생각할 수 있습니다.

5. 정규화의 람다를 조정해보자

- 정규화가 제대로 되지 않았다고 생각하고 이를 조정하려고 할 수 있습니다.


위의 것들을 통해서 시스템 개선이 가능하기는 하지만 이를 선택할때 대부분은 감으로 그냥 랜덤으로 이거 해볼까? 저거 해볼까? 하고 선택을 합니다. 이것은 많은 시간을 낭비하게 되는 일이 될 수 있습니다.





이것을 해결하기 위해서 크게 2가지의 가이드라인을 제시하려고 합니다. 하나는 Hypothesis 가 적절한지 판별하는 것이고 또 다른 하나는 Machine learning diagnostic을 이용하는 방법입니다. 즉 간단한 테스트를 통해서 진단을 해보는 것입니다. 이것은 진단을 하기 위해서 시간이 소요가 되겠지만 전체적으로 시간을 더욱 효율적으로 사용할 수 있는 가이드라인을 제공할 수 있습니다. 이로 인해 Learning Algorithm을 어떻게 개선을 하는 것이 좋은지에 대한 insight를 얻을 수 있기도 합니다.


Evaluating a Hypothesis


먼저 Hypothesis에 대해서 알아보겠습니다.

아래 그림과 같이 특정 dataset에 너무 과최적화되어 있는 h 함수는 Overfitting되어 있다고 했었습니다. 이것이 문제가 되는 이유는 해당 dataset에서는 잘 맞지만 다른 dataset에서는 잘 맞지 않는 결과가 발생하게 되어 일반적으로 사용하기가 어렵기 떄문입니다. 이런 경우 어떻게 하는 것이 좋을까요



우리가 가지고 있는 dataset을 분리하는 방법이 있습니다.

약 70% 정도의 데이터(Training set)로 학습을 시켜본 후에 약 30% 정도의 데이터(Test set)로 검증 및 테스트를 해보는 것입니다.



이를 linear regression에 적용을 해보면,

아래 그림에서와 같이 약 70%의 dataset으로 J of Theta 함수를 학습을 시키고 발생한 error와 testset을 통해서 학습을 시킨 후 발생하는 error를 비교하는 것입니다.

이때, J test에 대한 공식은 아래와 같이 표현할 수 있습니다. h(x test) - y test 에 대한 제곱한 값들의 합에 대한 평균이 됩니다.



이번에는 logistic regression에 적용을 해보겠습니다.

아래 그림과 같이 training data로 먼저 학습을 시키고 test set으로 학습한 error를 구합니다.

이때 J test 함수는 아래 공식과 같이 표현이 되고 우리가 배웠던 J 함수와 동일합니다.


여기서 에러 즉, 잘못 분류된 결과는 h(x)의 예측된 값이 0.5를 기준으로 해서 같거나 클때 1이 되어야 하는데 최종결과가 0이거나, 0.5보다 작아서 0이 되어야 하는데 실제 결과가 1인 경우가 오류가 됩니다.


그리고 이런 오류를 비율로 나타낼 수 있는데, 다음의 공식과 같이 error의 값들을 합하고 평균을 구해서 나타내는 것도 가능합니다.

Test Error=1mtestmtesti=1err(hΘ(x(i)test),y(i)test)




Model Selection


Hypothesis 모델을 선택하는 방법에 대해서 알아보겠습니다

아래와 같이 Overfitting 예제에서 Training set을 통해 학습하여 특정 dataset에 과최적화가 되었다면 이것은 좋은 Hypothesis가 아닙니다.



그래서 hypothesis 를 변경해 보기 위해서 아래와 같이 다항식으로 구성되어 있는 모델들 중에서 하나를 선택하려고 합니다.

이를 하기 위해서 training set을 이용해서 모든 다항식의 h 함수에 대해서 학습을 시킨 다음에 test set을 이용해서 가장 적은 error의 결과를 보여주는 hypothesis를 찾았다고 생각해보겠습니다.

아래 그림에서는 5차항을 선택했네요. 


이와 같이 할 경우에는 이미 test set에 대해서 학습이 된 상태이기 때문에 이를 이용해서 테스트를 다시 하거나 할때 실질적인 Validation 체크가 되지 않고 일반적인 케이스에서 보다 적은 error가 나오게 될 겁니다. 결국 여전히 과하게 최적화가 되어 있다는 의미가 됩니다. 이것은 좋치 않습니다. 그럼 어떻게 하는 것이 좋을까요



이를 해결하기 위해서 또 다른 dataset을 하나더 만들어 줍니다. 이 dataset의 이름은 Cross validation set (CV set)이라고 합니다.

Training set : CV set : Test set의 비율을 60 : 20 : 20으로 해주면 좋습니다.



그래서 각각의 dataset에 대한 error를 아래와 같이 표현할 수 있습니다. 3가지의 dataset이니 3가지의 error에 대한 공식이 나옵니다.



자 이제 각각의 다항식의 Hypothesis 에 대해서 training set을 이용해 학습을 시킨 다음에 CV set을 이용해서 가장 낮은 error를 보여주는 다항식을 선택합니다. 그런 후에 test set을 이용하여 일반적인 error을 도출해 내는 방법으로 합니다.

이 방법은 test set을 이용해서 가장 낮은 error를 찾는 것보다 더 좋은 방법이 됩니다.

참고로 여기서는 정규화에 대한 고려를 하지 않았습니다.



Diagnosing Bias vs. Variance


이번에는 다항식이 고차항으로 갈수록 underfitting 이나 overfitting과 어떠한 관계를 나타내는지 알아보겠습니다. 우리는 이것을 통해서 학습한 결과가 좋치 않을때 어떤 문제인지를 구별할 수 있어야 합니다.


결론적으로는 high bias는 underfitting에서 발생하는 문제이고 high variance는 overfitting에서 발생하는 문제입니다. 


아래와 같이 underfit 된 1차항에 대한 왼쪽 그래프와 overfit된 고차항에 대한 오른쪽 그래프가 있습니다. 그리고 가운데 그래프가 2차항의 적정한 hypothesis의 그래프임을 이미 알고 있습니다

.


1차항(d=1)에 대한 hypothesis 부터 고차항에 대한 hypothesis 까지 training set을 이용해서 학습을 시키고 난 후에 그결과에 대한 error를 살펴 보면 아래 분홍색 그래프와 같이 J train 은 일반적으로 고차항으로 갈수록 error가 줄어드는 모습으로 나타납니다. 좋은 결과가 된 것처럼 보이는 것이지요


만약 underfit 된 hypothesis로 cv set을 이용해서 동일하게 학습을 시켰다고 합시다. 그리고 그 결과에 대한 error를 살펴보면 빨간색 그래프와 같이 저차항에서는 error가 높다가 한 2차항정도에서는 error가 낮아졌다가 고차항으로 갈수록 error가 다시 높아지는 형태로 나타납니다. 


이를 토대로 우리의 hypothesis가 가지고 있는 문제를 구별할 수 있습니다. 




우리가 기대한 만큼의 학습된 결과가 나오지 않을때 우리는 이 문제가 bias 문제인지 variance 문제인지 알아야 적절한 해결 방안을 찾을 수 있다고 했습니다. 

위에서의 그래프를 가지고 다시 한번 살펴보면,

d=1일 때 즉, 저차항에서 발생하는 문제는 bias 문제가 되며 d=4일 때, 즉 고차항에서 발생하는 문제는 variance 문제가 됩니다.


다시 이야기 하면 저차항의 hypothesis 를 이용한 학습의 결과가 J train 값(error)이 상당히 높게 나오고 J cv 값도 비슷하게 높게 나온다면 이것은 Bias 문제로서 underfit된 것이라고 생각할 수 있습니다.

또, 고차항을 사용하는 hypothesis 를 이용한 학습의 결과가 J train 값이 낮게 나오는데 J cv 값이 2배이상 상당히 높게 나온다면 이것은 Variance 문제로서 overfit된 것이라고 생각하면 됩니다.


이와 같이 문제를 파악하면 어떻게 적정한 hypothesis 로 변경을 해야하는지 알수 있게 됩니다.



Regularization and Bias/Variance


이번에는 정규화식에 lambda에 대해서 알아보겠습니다.

아래 그림의 예제에서와 같이 너무 큰 값을 가지는 람다는 underfit의 결과를 만들게 되고, 너무 작은 값의 람다는 오른쪽 그래프와 같이 overfit된 그래프를 나타냅니다. 어떻게 가운데 그래프와 같이 적절한 람다를 선택할 수 있을까요



아래 그림의 익숙한 공식들이 있습니다. 

여기서 J of Theta는 정규화식을 포함하고 있으며 lambda를 가지고 있고 그외 다른 J train, J cv, J test 들은 error를 나타내는 함수들입니다.



람다를 선택하기 위해서 어떻게 하면 되는지 알아보겠습니다.

우선 람다는 0에서 부터 10이상의 큰 값을 가질 수 있으며 0.01, 0.02, 0.04와 같이 배수로 커지면서 값을 갖는 것이 일반적입니다. Ng 교수님은 10.24를 사용하시는가 봅니다. 이렇게 람다의 후보군들을 만들고 나서 J of Theta로 각각 학습을 한 결과에 만듭니다. 그 결과로 찾은 minimize Theta를 이용해서 정규식이 제외된 J train을 이용해서 error를 만들어냅니다. 그리고 J cv 를 이용해서 가장 적은 error를 보여주는 model과 lambda를 선택합니다.


이때 각 람다에 대한 J train와 J cv를 그래프로 그려보는 것이 좋습니다.



이를 그래프로 그리면 아래의 그림과 같이 됩니다.

J train은 람다가 작을 때는 error가 작았다가 커질 수록 error도 같이 높게 나타나며 , J cv는 람다가 작을때는 error가 높았다가 적정한 람다가 되면 error가 작아졌다가 람다가 더 커지면 error로 커지는 형태로 나타나게 됩니다.


람다가 클 때 error가 높게 나타나는 문제는 Bias 문제이고 이것은 underfit 을 의미합니다. 그리고 람다가 작을 때 J train 값은 작지만 J cv 값이 크게 나타난다면 이것은 Variance 문제이고 Overfit 됨을 의미합니다. 가장 적정한 가운데 값을 찾기 위해서 그래프로 그리면 쉽게 찾을 수 있습니다.


Learning Curves


보다 다차원적으로 다항식 모델과 람다를 결정하기 위해서 learning curves를 이용할 수 있습니다.

이것은 dataset에 m(데이터의 갯수)에 대한 관계를 통해서 더 많은 데이터가 필요한지 아닌지 여부를 알수 있기도 합니다.


아래 그림에서 2차항의 hypothesis 가 있습니다. 만약 데이터가 1개(m=1)만 있다고 생각해봅니다. 이때는 J train을 통해서 쉽게 완벽하게 예측이 가능한 h 함수를 찾을 수 있을 것입니다. 즉, error가 0에 가까울 것입니다. 이를 m 에 대한 그래프로 그리면 m이 커질 수록 error가 증가하는 형태로 파란색 그래프가 됩니다.


J cv도 동일한 방식으로 m=1일때를 생각해 보면, 완전히 새로운 데이터가 되므로 J train으로 학습한 hypothesis로는 예측할 수 없을 것입니다. 즉, error가 아주 높게 나오게 되며 이를 그래프로 그리면 분홍식의 그래프와 같이 됩니다.



bias에 대해서 알아보겠습니다. 1차항의 h 함수가 있습니다. m 에 대해서 J train과 J cv를 그래프로 그려보면 아래 그림과 같이 됩니다.

m이 작을 때는 위에서와 같이 J train은 0에서 부터 시작되어 상승하고 J cv는 높은 값에서 시작되어 하락하는데 이때, 일정한 수의 m의 데이터가 되면 두 값이 거의 비슷하게 만나게 됩니다. 이것은 Bias 문제라고 할 수 있으며 underfit 임을 의미합니다. 이 상태에서는 dataset의 수인 m을 늘리더라도 좋아지지 않음을 알 수 있습니다. 그러니까 더 많은 데이터가 효용이 없게 됩니다.



그럼 variance는 어떻게 알수 있을까요. 마찬가지로 m 에 대해서 J train과 J cv를 그래프로 그려 보았을때 아래와 같이 됩니다.

100차항의 hypothesis 에 대해서 m 이 작을 때는 비슷한 모습으로 시작되지만 m 이 커지면서 J train은 bias의 케이스에 보다 작은 error로 상승하는 것으로 보여집니다. 또, J cv는 m 이 커지면서 error의 하락이 그리 크지 않게 나타납니다. 이것은 variance의 문제라고 하며 overfit 됨을 의미합니다. 이 상태에서는 data 사이즈인 m을 늘리면 좋아지는 결과를 볼 수 있습니다. 


여러분은 위의 방법들을 통해서 우리의 Learning Algorithm 이 어떤 문제가 있는지를 확인하고 적절한 조치를 할 수 있게 되었습니다. 다음에는 이것을 실제로 적용해서 변경을 할 것이지 안할 것인지를 결정하는 방법에 대해서 알아 보겠습니다.


Posted by 대소니

댓글을 달아 주세요

  1. 오소리

    궁금한게 있습니다ㅜㅜ
    Jcv가 음,, 주어진 데이터가 아닌 새로운 다른데이터 인건가요??.
    Jcv와 J traing 의 명확한 차이를 잘 모르겠습니다.

    2019.07.01 02:03 [ ADDR : EDIT/ DEL : REPLY ]
    • 네에~ 주어진 데이터를 용도에 맞춰서 크게 3가지의 데이터셋으로 나눈거에요. 그중에서 학습용으로 사용한 데이터가 train data가 되고 검증용으로 사용할 데이터가 validation data로 줄여서 cv라고 표현한 거에요. ^^

      2019.07.01 10:40 신고 [ ADDR : EDIT/ DEL ]
  2. 어렵습니다

    Learning Curves에서 Jtrain과 Jcv의 그래프가 어떻게 나왔는지 잘 모르겠습니다.

    2020.01.03 16:47 [ ADDR : EDIT/ DEL : REPLY ]
    • 안녕하세요. Jtrain과 Jcv 의 수식에 m 이 1부터 순차적으로 1씩 증가하면서 대입을 해보면서 값을 이어주면 그래프와 같이 됩니다.
      오른쪽에 서브 그래프를 살펴보시면 이해하시는데 도움이 되실거 같아요^^

      2020.01.07 23:57 신고 [ ADDR : EDIT/ DEL ]