티스토리 뷰
본 내용은 Coursera에서 Andrew ng 의 Machine Learning(기계학습, 머신러닝)을 수강한 내용을 정리한 것입니다. 이번 장에서는 Error가 발생한 경우에 무엇을 할지에 대한 접근(Deciding what to try next)에 대해서 알아보도록 하겠습니다.
1. Deciding what to try next
[ Debugging a learning algorithm ]
$$ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta( x^{(i)}) - y^{(i)} \right)^2 + \lambda \sum_{i=1}^{100} \theta_j^2 $$ 예를 들어 집값을 예측하기 위해 Regularized Linear Regression을 사용한다고 할 때의 Cost Function이 위와 같다고 합시다. 하지만 새로운 집들에 대해 예측을 하는 경우에 많은 문제가 발생하였다면 우리는 다음의 것들을 시도할 수 있습니다.
Get more training examples
Try smaller sets of features
Try getting additional features
Try adding polynomial features ($x_1^2, x_2^2, x_1x_2, ... )$
Try decreasing $\lambda$
Try increasing $\lambda$
일반적으로 우리는 위와 같은 선택지들 중에서 직감적으로 하나를 시도해봅니다. 하지만 무작정 Training Examples를 늘리는 것 등에는 한계가 있을 뿐 아니라 최적의 해결책이 되지 않을 수 있습니다. 그래서 우리는 어느 알고리즘이 작동하고 작동하지 않는지를 체계적으로 진단해주는 Machine Learning Diagnostic을 이용하여 어떻게 수정을 할지 선택해야 합니다.
[ Machine Learning Diagnostic ]
Diagnostic: A test that you can run to gain insight what is/isn't working with a learning algorithm and gain guidance as to how best to improve its performance
즉, Diagnostic이란 어떤 부분이 동작하는지 동작하지 않는지를 테스트 하는 것으로 퍼포먼스를 높이기 위한 최적의 가이드를 제공해줍니다. 물론 이것은 시간이 걸리는 작업이지만 앞으로 우리의 작업시간을 많이 줄여줍니다.
2. Evaluating a hypothesis
[ Evaluating your hypothesis ]
우리의 가설함수가 좋은지를 판단할 때, 예를 들어 과적합인지 아닌지를 판단하는 경우에 Feature가 작다면 함수를 그려서 눈으로 파악할 수 있습니다. 하지만 Feature가 100개가 넘어가서 매우 복잡한 경우에는 다른 방법이 필요합니다.
예를 들어 위와 같은 Data Set이 주어진 경우에 가설함수를 Evaluate하기 위해서 Data Set을 2영역으로 나누어야 합니다. 첫번째 영역은 전체의 70%를 차지하는 Training Set으로 우리는 이 데이터들을 이용하여 우리의 가설함수를 학습시키고($J(\theta)$ 가 최소가 되는 $\theta$ 를 구해주고), 두번째 영역은 나머지 30%를 차지하는 Test Set으로 우리의 가설함수가 다른 데이터들에 대해서도 잘 들어맞는지를 판단합니다.
[ Training/testing procedure for linear regression ]
Learn parameter $\theta$ from training data (minimizing training error $J(\theta)$ )
Compute test set error: $ J_{test}(\theta) = \frac{1}{2m_{test}} \sum_{i=1}^{m_{test}} \left( h_\theta( x_{test}^{(i)}) - y_{test}^{(i)} \right)^2 $
일반적으로 우리는 먼저 전체의 70%인 Training Data로부터 $\theta$ 를 학습시켜야합니다. 이것은 Training Error $J(\theta)$ 를 최소화시킬 것입니다. 그리고 이제 위의 공식을 사용하여 Test Set Error를 계산합니다. Training Error는 가설함수와 실제 값의 오차로 학습 중에 발생하는 오차이므로 이를 최소화시켜야합니다. Test Set Error는 새로운 Data에 대한 오차로 이 값이 크면 제대로된 예측을 하지 못하고 있음을 알 수 있습니다.
[ Training/testing procedure for logistic regression ]
Learn parameter $\theta$ from training data
Compute test set error: $ J_{test}(\theta) = \frac{1}{m_{test}} logh_{\theta}(x_{test}^{(i)}) + (1-y_{test}^{(i)})logh_{\theta}(x_{test}^{(i)}) $
Misclassification error (0/1 misclassification error):
Logistic Regression도 Linear Regression과 마찬가지로 Training Data로부터 $\theta$ 를 먼저 구하고 Test Set Error를 구해주어야합니다. 하지만 구하는 공식이 Linear Regression과 조금 다름을 알 수 있습니다. Binary Classification 문제의 경우에는 output이 1 또는 0이며 이런 상황의 error를 Misclassification error라 합니다.
3. Model selection and Training/Validation/Test sets
[ Overfitting example ]
Training Set을 통해서 $\theta$ 를 구하면 Training Set과의 오차를 나타내는 Training Error $J(\theta)$ 는 작아지지만 새로운 Data인 Test Set과의 오차를 나타내는 Test Error가 작아지는 것을 보장할 수 없습니다. 실제로 Overfitting 문제는 Training Error는 매우 작지만 Test Error는 높은 경우이며, 이것은 Training Error가 좋은 가설을 판단하는 기준이 되기에는 부족함을 보여줍니다. 그래서 우리는 Test Error를 통해서 검증을 해주어야 합니다.
[ Model Selection ]
우리는 가장 먼저 다양한 Model들 중에서 1개를 선택해야합니다. 각각의 방정식에 최대차수를 나타내는 d(degree of polynomial)를 정의한다고 할 때, 각각 d=1, 2, 3.... 10이 됩니다. 우리는 각각의 방정식에 대해서 $\theta_i$ 와 그에 대한 $J_{(test)}(\theta^{i})$ 를 구해서 Test Error가 최소가 되는 d의 Model을 택하면 됩니다. 하지만 이렇게 선택된 Model도 Test Set에만 딱 맞는 가설함수가 될 수 있으므로 적합한 Estimate가 될 수는 없으며 Optimistic estimate of generalization error 가 될 수 있습니다. 그래서 우리는 다른 방법을 사용합니다.
[ Evaluating your hypothesis ]
Training Set = 60% of Training Example
Cross Validation Set = 20% of Training Example , $M_{cv}$ = num of CV Example
Test Set = 20% of Training Example
그래서 우리는 존재하는 Training Example들을 위의 3종류로 분류합니다. Training Set을 통해서 각 Model에 대한 $\theta$ 를 구하면 Cross Validation Set을 통해 오차를 나타내는 $J_{cv}(\theta)$ 를 구하여 그 값이 최소가 되는 $\theta$ 를 선택합니다. 그리고 Test Error를 통해서 새로운 데이터와의 오차는 어느정도 나는지, 우리의 가설이 좋은지 예측합니다(Estimate Generalization error for test set $J_{test}(\theta)$ 그리고 각각의 Data Set에 대한 Error를 찾는 방법은 아래와 같습니다.
4. Diagnosing bias vs Variance
[ Bias/Variance ]
High Bias: Too Simple $h_\theta(x)$ -> UnderFit
High Variance: Too Complex $h_\theta(x)$ -> OverFit
가설함수의 차수가 너무 낮아서 데이터를 단조로운 가설함수에 맞추지 못하는 문제를 High Bias 또는 UnderFit이라고 하며, 가설함수의 차수가 너무 높아서 데이터를 억지로 너무 복잡한 가설함수에 끼워맞추어 발생하는 문제를 High Variance 또는 OverFit이라고 합니다.
[ Diagnosing Bias vs Variance ]
Bias와 Variance 문제를 자세히 알아보기 위해서 가설함수의 차수(d, degree of polynomial)를 x축, 그에 따라 발생하는 에러(error)를 y축으로 하는 그래프를 그려보도록 하겠습니다. 차수가 낮은 경우에는(아래의 A) UnderFitting한 상황이며 가설함수가 주어진 Training Set에 대해서도 올바른 예측을 하지 못하며 새로운 데이터에 대한 예측도 잘 하지 못할 것이므로 $J_{train}\theta(x), J_{cv}\theta(x)$ 가 높게 나타날 것입니다. 하지만 차수가 높아서(아래의 B) 가설함수가 주어진 Training Set 에 대해서 지나치게 들어맞는 경우에는 $J_{train}\theta(x)$ 에러는 낮지만 $J_{cv}\theta(x)$ 는 높게 나타날 것입니다. 적당한 d를 갖는 경우에는 $J_{train}\theta(x), J_{cv}\theta(x)$ 모두 낮게 나타날 것입니다.
High Bias: $J_{train}(\theta)$ will be high and $J_{train}\theta(x) \approx J_{cv}\theta(x)$
High Variance: $J_{train}(\theta)$ will be low and $J_{train}\theta(x) \gt\gt J_{cv}\theta(x)$
5. Regularization and bias/variance
[ Linear regression with regularization ]
우리가 고차식의 Model을 세운다고 할 때, $\theta$ 를 줄여 Overfitting을 해결하기 위해서는 Regularization(정규화)가 필요합니다.
먼저 $\lambda$ 가 매우 큰 경우로 Heavily Penalized된 상황입니다. 이러한 경우에는 $\lambda$ 가 $\theta$ 값을 많이 차지하고 있으므로 대부분의 $\theta$ 값은 0이 될 것이고, High Bias(Underfit) 문제가 발생할 것입니다. 다음 $\lambda$ 가 매우 작은 경우에는 $\theta$ 가 너무 커져서 High Variance(Overfit) 문제가 발생할 것입니다. 반면에 적절하며 Intermediate한 $\lambda$ 를 갖는 경우는 가설함수에 데이터가 잘 들어맞는 것으로 보입니다. 그래서 우리는 너무 작지도, 크지도 않은 $\lambda$ 를 잘 선택해주어야 합니다.
[ Choosing the regularization parameter $\lambda$ ]
Model $h_\theta(x) = \theta_0 + \theta_1x + \theta_2x^2 + \theta_3x^3 + \theta_4x^4 $
$ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta( x^{(i)}) - y^{(i)} \right)^2 + \frac{\lambda}{2m} \sum_{i=1}^{100} \theta_j^2 $
위와 같은 Model과 Cost Function이 있는 경우에 0, 0.01로 시작하여 10정도의 $\lambda$ 를 구하고, 각각의 경우에 대해 $J(\theta)$ 를 최소화 시키는 $\theta$ 를 구하고, $J_{cv}(\theta)$ 를 구하여줍니다. 그리고 모든 경우에서 $J_{cv}(\theta)$ 가 최소가 되는 $\lambda$ 를 선택하여 그 경우가 Test Set어도 잘 돌아가는지 확인해주면 됩니다.
[ Bias/Variance as a function of the regularization parameter $\lambda ]
$\lambda$ 가 작은 경우에는 $\theta$ 가 커져서 Overfit(High Variance) 문제가 발생할 것이므로 Training Set과의 오류를 나타내는 $J_{train}(\theta)$ 는 낮을 것이지만 새로운 Data와의 오류를 나타내는 $J_{cv}(\theta)$ 은 높을 것입니다. $\lambda$ 가 큰 경우에는 $\theta$ 가 작아져서 Underfit(High Bias) 문제가 발생할 것이므로 $J_{train}(\theta), J_{cv}(\theta)$ 모두 높게 나타날 것입니다.
6. Learning Curves
[ Learning Curves ]
$ J_{train}(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta( x^{(i)}) - y^{(i)} \right)^2 $
$ J_{cv}(\theta) = \frac{1}{2m_{cv}} \sum_{i=1}^{m_{cv}} \left( h_\theta( x_{cv}^{(i)}) - y_{cv}^{(i)} \right)^2 $
Learning Cure는 우리의 Learning Algorithm이 Bias 또는 Variance 등으로 문제가 되는지를 진단해주는 도구로 이것은 $J_{train}(\theta), J_{cv}(\theta)$ 의 그래프를 그립니다.
오른쪽과 같은 가설함수를 기준으로 m=1, 2, 3 인 경우에는 Training Set이 가설함수에 딱 맞으므로 Train Error는 0일 것입니다. 하지만 Cross Validation Set에는 잘 맞지 못해서 Train Error는 매우 높을 것입니다. m=4 인 경우부터는 Training Set이 2차함수에 완벽히 들어맞지 못할 것입니다. 그래서 m이 커질수록 Train Error가 커질 것이며 반대로 Model이 더욱 정교해질 것이므로 Test Error는 줄어들 것입니다. 즉, m이 작으면 $h_\theta(x)$ 에 맞추기 쉬워서 Training Error가 작지만 잘 Generalize하지 못해서 Test Error는 커질 것입니다. 반대로 m이 커지면 $h_\theta(x)$ 에 맞추기 어려워지므로 Training Error가 커질 것이지만 보다 정교한 가설함수가 되어 Test Error는 줄어들 것입니다. 그리고 이렇게 생긴 그래프를 Learning Curve라고 하는데 그렇다면 High Bias 또는 High Variance인 경우의 Learning Curve는 어떻게 그려질까요?
[ High Bias ]
Model이 1차식으로 High Bias 문제를 가지고 있는 가설함수의 경우에는 오른쪽 그림과 같은 직선으로 그려질 것입니다. Training Set Size가 작은 경우에는 Training Set에 딱 맞는 가설함수를 구할 것이므로 Train Error가 매우 작은 반면 새로운 Data Set에 대한 예측은 잘 하지를 못하므로 Test Error가 높을 것입니다. Training Set Size가 커진다고 하면 Size가 작아서 딱 맞았던 가설함수와는 달리 모든 Data에 대한 평균적인 직선이 되므로 Train Error는 높아질 것이지만 직선이 모든 데이터에 대해 보다 정교해져서 Test Error는 작아질 것입니다. 물론 Error를 내포하고 있기 때문에우리가 원래 기대했던 Desired Performance에 미치지는 못합니다. 또한 High Bias문제에서 일정 크기 이상의 Training Set을 가지고 있는 경우에 그 Size를 더 크게한다 하여도 어떠한 도움도 되지 못할 것입니다.
[ High Variance ]
Model이 100차식으로 High Variance 문제를 가지고 있는 가설함수인 경우에는 오른쪽 그림과 같은 복잡한 곡선으로 그려질 것입니다. Training Set Size가 작은 경우에는 Training Set에 딱 맞는 가설함수를 구할 것이므로 Train Error가 매우 작은 반면 새로운 Data Set에 대한 예측은 잘 하지를 못하므로 Test Error가 높을 것이며 이는 High Bias와 유사합니다. 하지만 Training Set Size가 점차 커진다고 하여도 가설함수 자체가 워낙 복잡하여 Train Error와 Test Error 사이의 Gap이 매우 큰 상황으로 남을 것입니다. High Variance문제에서 Training Set을 계속해서 늘려주면 100차에 가까울 정도의 복잡한 곡선이 완성되는 것이므로 Gap이 줄어들어 해결책이 될 수 있습니다.
7. Deciding what to try next(Revisited)
[ Debugging a learning algorithm ]
이제 우리는 Neural Network의 Architecture를 고를 때 아래의 경우를 고려하면 됩니다.
Get more training examples -> High Variance
Try smaller sets of features -> High Variance
Try getting additional features -> High Bias
Try adding polynomial features ($x_1^2, x_2^2, x_1x_2, ... )$ -> High Bias
Try decreasing $\lambda$ -> High Bias
Try increasing $\lambda$ -> High Variance
Get more training examples -> High Variance
Try smaller sets of features -> High Variance
Try getting additional features -> High Bias
Try adding polynomial features ($x_1^2, x_2^2, x_1x_2, ... )$ -> High Bias
Try decreasing $\lambda$ -> High Bias
Try increasing $\lambda$ -> High Variance
일반적으로 우리는 위와 같은 선택지들 중에서 직감적으로 하나를 시도해봅니다. 하지만 무작정 Training Examples를 늘리는 것 등에는 한계가 있을 뿐 아니라 최적의 해결책이 되지 않을 수 있습니다. 그래서 우리는 어느 알고리즘이 작동하고 작동하지 않는지를 체계적으로 진단해주는 Machine Learning Diagnostic을 이용하여 어떻게 수정을 할지 선택해야 합니다.
[ Neural Networks and Overfitting ]
우리가 고차식의 Model을 세운다고 할 때, $\theta$ 를 줄여 Overfitting을 해결하기 위해서는 Regularization(정규화)가 필요합니다.
작은 Neural Network 구조는 Hidden Layer가 1개 있는 구조로, 계산 비용이 상당히 적지만 Parameter가 적어서 Underfitting이 될 수 있습니다. 반대로 큰 Neural Network 구조는 Hidden Layer가 여러개 있는 구조로 계산 비용이 상당히 크고 Parameter가 많아서 Overfitting이 될 수 있습니다. Overfitting이 되면 Regularization을 사용하여 해결해야 합니다. 물론 앞에서 Hidden Layer의 Default 개수는 1개이지만 Hidden Layer가 1개, 2개 3개, ... n개인 상황을 모두 시도하여 어떤게 가장 좋은지 선택해주면 됩니다.
관련 포스팅
- 기계학습이란? (1/11)
- 지도 학습과 비지도 학습 (2/11)
- Model and Cost Function (3/11)
- Gradient Descent (4/11)
- Multivariate Linear Regression (5/11)
- Logistic Regression (6/11)
- Regularization (7/11)
- Neural Networks: Representation (8/11)
- Neural Networks: Learning (9/11)
- Advice for Applying Machine Learning (10/11)
- Machine Learning System Design (11/11)
'인공지능' 카테고리의 다른 글
Deep Learning(딥러닝) vs Reinforcement Learning(강화학습) (2) | 2020.02.09 |
---|---|
[Machine Learning] Machine Learning System Design (0) | 2018.01.18 |
[Machine Learning] Neural Networks:Learning (0) | 2018.01.13 |
[Machine Learning] Neural Networks:Representation (0) | 2018.01.08 |
[Machine Learning] Regularization (2) | 2018.01.04 |