3-4 Solving the Problem of Overffiting 본문
Overfitting의 정의와 Overfitting을 해결하는 방법에 대해 알아본다.
선형회귀로 집 값을 예측하는 예제를 다시 보자
첫번째 모델은 직선으로 집 값을 예측하고 있다. Size가 작을 때는 가격을 어느정도 예측할 수 있으나 Size가 점점 더 커질 수록 가격이 상승하는 폭이 줄어들기 때문에 직선을 사용해선 데이터를 잘 나타낼 수 없다. 다시 말해, 이 모델은 데이터에 제대로 맞지 않는 것이다.
이러한 문제를 과소적합(underfitting)이라고 하며 알고리즘이 high bias 성향을 가지고 있다고 한다.
High bias 특성을 갖는다는 뜻은 이 모델이 데이터의 분포와 상관없이 집 크기에 따라서 집 값을 무조건 선형적으로만 예측하려는 성향을 가지고 있기 때문이다. 집 크기가 엄청 큰 데이터가 들어와도 그걸 선형적으로 예측하려 하기 때문에 결과가 좋지 않을 것이다.
두번째 모델은 2차함수를 사용했을 때 훈련데이터에 그냥 잘 맞는다 정도로만 표현한다.
2차함수가 뒤로 갈수록 꺾여서 내려가기 때문에 이건 다른 데이터를 잘 예측할 수 없을 것이다.
세번째 모델은 5개의 파라미터를 사용해서 좀더 정확하게 현재 데이터를 예측할 수 있다. 이 모델은 지금 데이터에 잘 맞아떨어지기 때문에 좋은 모델처럼 보이지만 굉장히 복잡하고 꼬불꼬불한 선이기 때문에 다른 데이터도 train data만큼 정확하게 예측할 수 있다고 하기는 어렵다. 이러한 문제를 과적합(overfitting)이라고 하며 알고리즘이 high variance를 가지고 있다고 한다. 굉장히 큰 고차함수를 이용하면 훈련 데이터에 잘 맞는 모델을 만들 순 있다. 그러나 이렇게 만들어진 모델은 변동성이 너무 크기 때문에 high variance를 가지고 있다
정리하자면 과적합(Overfitting)이란 우리의 가설 h(x)가 학습 데이터에만 너무 잘 맞아서 학습 데이터의 비용함수 값은 0이나 0에 가까운 값을 보이게 되고 이 모델은 엄청나게 복잡한 모델로 학습 데이터에만 너무 잘 맞춰져서 새로운 데이터에 대해서 일반화가 잘 되지 않는 문제를 말한다.
이러한 문제는 로지스틱 회귀에서도 발생한다.
첫번째 모델은 직선으로 분류하려고 하니까 분류가 잘 되지 않는다. 이 경우는 과소적합(underfitting)의 예다.
두번째 모델은 100%는 아니지만 decision boundary가 그래도 잘 분류하고 있다.
세번째 모델은 엄청나게 많은 고차항의 모델로 굉장히 복잡한 decision boundary가 만들어질 것이고 이 모델은 현재 데이터를 정확하게 분류하고 있지만 훈련 데이터셋만 너무 잘 예측할 수 있게 학습되기 때문에 과적합이 발생했다고 볼 수 있다. 그래서 새로운 데이터가 들어오면 일반화가 잘 되지 않을 것이다.
이러한 오버피팅 문제는 어떻게 다뤄야 할까?
그리고 우리는 오버피팅이 됐다는 사실을 어떻게 알 수 있을까?
위와 같은 어떤 오버피팅된 모델을 다시 가정하면, 그래프를 그려서 아 이게 오버피팅이 됐네 라고 판단할 수 있다.
그런데 feature들이 엄청나게 많아지면 그래프가 더 복잡해지고 시각화하기 어렵기 때문에 그래프를 그려서 제대로 판단할 수가 없다.
오버피팅 문제를 해결하기 위한 방법으론 크게 2가지가 있다.
첫번째로 feature의 개수를 줄이는 것이다.
Feature를 보고 메뉴얼하게 판단하여 쓸모 없는 feature들은 버린다. 혹은 Model selection 알고리즘을 사용하여 어떤 feature들을 사용할 것인지 선택한다.
이렇게 불필요한 feature를 버리는 것은 오버피팅을 방지할 수 있다. 그러나 이러한 방법이 가지는 문제점은 어떤 feature를 버리게 되면 결국 문제에 포함된 정보를 같이 버리게 되는 것이다. 물론 완전히 쓸모 없는 feature들도 있을테지만 일단 feature라는 건 데이터에 대한 어떤 정보를 가지고 있기 때문에 이를 함부로 버리는 것은 정보의 손실로 이어진다. 또한 우리가 쓸모 없다고 판단한 feature들이 사실은 잘못된 판단으로 중요한 feature였을 경우 문제는 더 커질 수 있다. 따라서 우리는 웬만하면 정보를 가지고 있는 feature들을 버리고 싶진 않다.
두번째 방법은 모든 feature들을 사용하되, Regularization을 이용하여 파라미터들의 영향력을 줄이는 것이다.
Regularization이 cost function에서 어떻게 동작하는지 알아본다.
왼쪽과 달리 오버피팅된 오른쪽 모델이 있다고 하자.
이때 θ3, θ4의 값이 매우 작은 값이 되도록 penalize할 것이다.
그리고 현재 cost function을 조금 수정하여 뒤에 저러한 값을 더한다고 해보자.
우리의 목표는 어쨌든 cost 값이 최소화되는 파라미터를 찾는 것이다.
만약 뒤에 있는 θ3, θ4가 매우 큰 값을 가진다면 cost 값도 매우 큰 값을 가질 것이다.
반면 θ3, θ4가 0에 가까운 매우 작은 값을 가진다면 우리는 가설 h(x)에서 θ3와 θ4의 값이 거의 0에 가깝기 때문에 θ3x^3, θ4x^4의 값도 0에 매우 가까운 값이 될 것이고 따라서 이를 두 값을 무시해도 큰 문제는 없을 것이다. 그러면 h(x)를 이차함수로 생각할 수 있으므로 오버피팅되지 않은 더 좋은 모델을 만들 수 있다.
Regularization에 대해 좀 더 자세히 알아보자
Regularization은 θ0부터 θn까지 파라미터들의 값을 작게 만들어 그 영향력을 줄여서 가설 h(x)를 좀더 심플하게 만들고 오버피팅을 줄이는 것이다.
우리가 앞의 예에선 θ3, θ4를 가지고 penalize하였는데 feature가 매우 많은 상황에서 특정 파라미터만 뽑아서 penalize하는 것은 쉽지 않다.
따라서 cost function에 θ0를 제외한 모든 파라미터들 더하는 방법을 사용한다. (보통 θ0는 빼는 게 일반적인 방법(?)인 것 같다.)
Regularization을 적용한 cost function은 다음과 같다.
여기서 람다는 regularization 파라미터라고 하며 람다의 역할은 2 개의 goal 사이에서 trade off를 하는 것이다.
첫번째 goal은 기존에 있던 오차제곱합의 값이 최소화 되도록 하여 트레이닝 데이터를 잘 맞출 수 있도록 하는 것이다.
두번째 goal은 파라미터의 값을 작게 만들어 가설 h(x)를 simple하게 만들고 결과적으로 오버피팅을 줄이는 것이다.
다시 정리하자면 선형 회귀에서 regularization을 적용한 cost function은 이렇게 정의된다.
어쨌든 우선적으로 우리의 목표는 비용함수의 값을 최소화하는 θ 찾는 것이다. 그러나 너무 트레이닝 데이터만 가지고 학습했을 때 오버피팅이라는 문제가 발생했었고 이를 방지하기 위해 각 파라미터들의 영향력을 줄이는 regularization을 더하여 cost function을 재정의한다.
여기서 람다는 앞에서 말했던 두 목표의 절충점을 찾는 파라미터 값이다. 람다를 어떤 값으로 선택해야 하는지도 중요할 것이다.
한가지 분명한 건 람다가 아주아주 큰 값인 경우, cost가 커지지 않도록 regularization에 의해 파라미터의 값을 매우 매우 작은 값으로 만들 것이다.
그러면 θ0를 제외한 나머지 파라미터들이 모두 0에 가까운 값을 가지게 될 것이고 이러한 현상이 극대화되면 결국 h(x)는 직선이 되어버릴 것이다. 그래서 training data조차 맞추지 못하는 underfitting 현상이 발생한다.
Regularization이 적용된 선형회귀에서 Gradient descent와 normal equation이 어떻게 작동하는지 알아본다.
Regularization term이 적용된 비용함수 J는 다음과 같이 정의된다.
그리고 우리의 목표는 비용함수 J의 값을 최소화하는 파라미터 θ를 찾는 것이다.
Gradient descent로 파라미터 θ를 이렇게 업데이트 하였다.
Regularization term이 들어간 업데이트 식은 다음과 같다.
그냥 regularization term만 추가로 들어갔을 뿐이지 달라진 건 없다.
업데이트 되는 식을 θj로 묶어서 정리하면 2개의 term으로 나눌 수 있다.
흥미로운 것은 앞의 값은 대개 1보다 작은 값을 갖게 된다는 것이다. 그러면 regularization의 목적대로 θj가 기존 값보다 작아질 것이다.
그리고 뒤의 값은 우리가 그냥 선형 회귀에서 사용했던 learning rate뒤에 곱해지는 미분계수와 똑같아진다. Regularization을 사용한 cost function에
Gradient descent를 적용하더라도 문제 없이 작동한다.
Normal equation에서 θ를 구할 때 아래 식으로 한번에 구하였다.
Regularization을 적용한 θ는 람다와 (n+1 x n+1) 차원의 매트릭스 곱이 추가된다.
이때 matrix는 대각선의 처음 원소만 0이고 대각선의 나머지 원소는1로 채우며 그 외의 공간은 0으로 채운다.
역행렬을 구할 때 feature의 수보다 example의 수가 매우 적을 때 역행렬이 존재하지 않는 문제가 생길 수 있다.
Octave의 pinv를 이용하면 이러한 문제는 해결할 수 있다.
그러나 어쨌든 m <= n 이라면 역행렬이 존재하지 않을 수도 있는 여지는 여전히 남아있다.
그러나 우리가 regularization term을 추가하게 되면 괄호 안의 행렬은 역행렬이 존재하게 된다. (증명은 생략함)
로지스틱 회귀에 regularization을 적용해본다.
로지스틱 회귀에서 오버피팅된 이러한 고차식 모델이 있다고 해보자.
Regularization을 로지스틱 회귀에 적용하던 것도 똑같이 우리가 기존에 정의했던 cost function 뒤에 regularization term을 더해주면 된다.
Regularization을 적용하면 오버피팅을 방지할 수 있기 때문에 분홍색 모델처럼 일반화를 더 잘 할 수 있는 모델이 만들어질 것이다.
선형회귀에서 regularization을 적용한 cost function의 gradient descent 파라미터 업데이트는 이렇게 하였다.
크게 바뀌는 건 없다. 로지스틱 회귀에선 가설 h(x)가 다르기 때문에 우리가 배웠던 시그모이드 함수가 들어간다.
그리고 learning rate에 곱해지는 이 값의 미분계수를 구하여 업데이트를 반복하면 된다.
로지스틱 회귀에서 n개의 feature가 존재한다면 파라미터 θ 벡터는 n+1차원의 벡터가 될 것이다.
그리고 앞에서 정의한대로 우리의 cost function은 뒤에 regularization term을 더해주면 된다.
그리고 업데이트를 하기위해 cost function J(θ)의 기울기를 구하여 파라미터 값을 업데이트하고 이를 반복해가면 끝이다.
각 θ별로 해당 이런 식으로 미분계수 값을 구해주면 된다.
'ML & DL > Coursera-ML' 카테고리의 다른 글
4-2 Neural Networks (0) | 2019.01.15 |
---|---|
4-1 Neural Networks Motivation (0) | 2019.01.15 |
3-3 Multiclass Classification (0) | 2019.01.10 |
3-2 Logistic Regression Model (0) | 2019.01.09 |
3-1 Classification and Representation (0) | 2019.01.09 |