-
Bias and VarianceMachine Learning/Stanford ML Specialization 2024. 4. 27. 20:21
머신러닝 클래스들에서 예시로 주는, 잘 정제된 데이터로 모델을 생성하면, 8-90%의 예측률을 보여주는 모델을 만나가 되지만, 실제 현실에서는 그렇지가 않다. 선형 회귀 문제를 생각해보자. Bias가 높아서 underfit하거나, Variance가 높아서 Overfit하는 경우가 발생한다.
https://www.researchgate.net/figure/llustration-of-the-underfitting-overfitting-issue-on-a-simple-regression-case-Data_fig2_339680577 Underfit의 경우, 오차값이 크기때문에 Jtrain값은 높아지고, Jcv값도 높을것이다. Overfit의 경우, Jtrain값은 낮더라도, Jcv값이 높을수 있다. 이렇게 Jtrain과 Jcv를 비교해서 Underfit인지, Overfit인지 예측할 수 있다. Good fit일 경우에는 Jtrain값도, Jcv값도 낮을것이다. 지난시간, 여러가지 다차항을 이용해서 모델의 성능을 살펴보고, 최적의 모델을 선택하는 방법에 대해서 공부 했었다. polynomial(다항식)의 차수, d가 변할 때, 모델의 성능을 Evaluation하기 위해 사용하는 Jtrain값과 Jcv값은 아래와 같은 결과를 보여준다.
Bias가 높아서 underfit이 된 경우, Jtrain은 높고, Jcv또한 높은 값을 나타낸다. Variance가 높아서 overfit이 된 경우에는 Jtrain은 낮을지 몰라도, Jcv는 높아질 확률이 크다. bias도 높고, variance도 높다면, Jtrain도 높고, Jcv값이 Jtrain보다 훨씬 높아질 것이다. 이것은 꽤 높은 다차항이어서 variance가 높은데에도 불구하고 training도 잘 되지 않아서 예측율이 가장 떨어지는 케이스라고 할 수 있다.
Regularization using Lambda(λ)
정규화 파라미터 Lambda(λ)가 bia와 variance에 어떤 영향을 미치는지, 그리고 lambda를 잘 선택하는게 어떤 결과를 보여주는지 살펴보자. 아래와 같은 4차다항식의 모델이 있다고 가정해보자.
만약 람다값이 엄청 크다면, w값들은 0으로 향하려는 움직임이 커져서, 결국 수식은 f=b와 같이 bias의 비중이 너무 커져버리는 underfitting 현상이 발생한다. 만약 람다값이 엄청 작다면, 아니 0이라면? 정규화가 없으므로 데이터에 과적합해서 Overfitting의 문제가 발생하게 된다. 그래서 적절한 람다값을 찾아야 Jtrain도 Jcv도 알맞는 값을 가질 수 있다. 이렇게 적절한 람다(λ)값을 어떻게 찾아낼 수 있을까? 0부터 시작해서 처음에는 0.01을 올리고, 그 이후로 2배씩 값을 높히면서 Jtrain과 Jcv값을 구해보고, 이중 가장 좋은 결과값을 보여준 람다값을 선택하면 된다. 만약 5번째로 시도했던, (예를들어) 0.08의 람다값이 가장 낮은 오차값을 나타냈다면, 이것의 Jtest값을 이용해 보고하면 된다.
람다가 너무 낮거나 높지 않은, 적절한 값이 되면, Jtrain도 Jcv도 너무 높지 않은 값을 보여주는데, 그 모델이 가장 적합하다고 할 수 있다. 또한 람다가 너무 낮으면 high variance, 너무 높으면 high bias라고 할 수 있다.
Baseline
그렇다면 performance level의 baseline을 어떻게 결정할까? 이것은, 모델이 어느정도의 수준까지 도달하기를 원하는지 살펴보면 된다. Human Level Perfornamce를 원하는지, Algorithm performance보다 더 나은 성능을 보여주는것인지, 어느정도 성능을 원하는 것인지 등, 원하는 기대치를 먼저 정해야한다. 이후, 아래와 같이 Baseline Performance를 정한 후, Jtrain, Jcv등을 계산해서 비교해보는것이 좋다. 예를 들어 아래와 같은 결과가 나왔다고 하자.
Baseline Performance: 10.6% Training Error (Jtrain): 10.8% Cross Validation Error (Jcv): 14.8%
Baseline과 Jtrain의 차이는 0.2%이고, Jtrain과 Jcv와의 차이는 4%이다. 이것은 high variance라고 할 수 있다.
Baseline Performance: 10.6% Training Error (Jtrain): 15.0% Cross Validation Error (Jcv): 15.5%
만약 이 경우는 어떨까? Jtrain과 baseline과는 4.4%의 차이가, Jtrain과 Jcv와의 차이는 0.5%이다. 이는 high bias라고 할 수 있다.
Learning Curves
2차다항식 모델의 Learning curve를 살펴보자.
처음 몇개의 예시만 있을떄는 Jtrain곡선을 그릴 때(모델을 생성할 때), 모든 case를 만족할 수 있을것이다. 하지만 트레이닝 갯수가 늘어날수록, 모든것을 만족시키기는 어려워짐으로써 error가 증가한다. 하지만, 이를 통해 Jcv값은 점차 낮아지고, 전체적으로 모델의 성능은 좋아지게 된다. 만약, 모델의 성능이 너무 baseline performance보다 낮다면, bias가 너무 높은것은 아닌지 확인해보아야 한다. 만약, 1차 다항식을 씀으로써 너무 편향적인것은 아닌지 살펴볼 필요가 있다. 만약 high bias라면, 데이터 사이즈를 아무리 많이 늘려도 성능 개선이 되지 않을 수 있다. 만약 variance가 너무 높다면? variance조절을 하거나, 더 많은 데이터를 사용하면 성능이 개선될 수 있다.
그렇다면, 다시, 모델의 성능이 좋지 않을 떄 시도할 수 있는 옵션들을 살펴보고, 어떤 문제를 고칠 수 있는지 다시 답변해보자.
- Get more training examples -> fixes high variance
- Try smaller sets of features -> fixes high variance
- Try getting additional features -> fixes high bias
- Try adding polynomial features -> fixes high bias
- Try decreasing Lambda(λ) -> Fixes high bias
- Try increasing Lambda(λ) -> Fixes high variance
Bias/Variance and Neural Networks
그렇다면 Neural Network는 어떨까? 충분히 큰 Neural Network를 설계한다면, 이는 이미 low bias machine이 된다. 만약, training set, 즉 Jtrain의 값이 좋지 않다면? 이는 더 큰 Neural Network가 필요하다는 의미이다. 만약 Jtrain의 값이 좋았다면? Cross Validation을 계산해본다. 만약 Jcv값이 좋지 않다면, 더 많은 데이터가 필요하다는 의미이다. 더 많은 데이터를 사용해서 처음 Jtrain값부터 확인한 후, 이 과정을 반복해, 만족스러운 Jcv값을 얻어낼떄까지 계속 하면 된다.
하지만, 이 작업을 계속 함으로써, network의 크기가 커지고, 이것때문에 GPU나 그래픽 처리 장치를 비롯한 초고속 컴퓨터가 신경망 분야에 등장해서 크게 기여한 이유이다. 하드웨어는 전통적으로 컴퓨터 그래픽의 속도를 높이는 데 사용되었지만, 신경망의 속도를 높이는데도 유용했다. 또 한가지 어려운것은 데이터를 더 구하는 작업인데, 어느 시점에 도달하면, 더 많은 데이터를 구하는것이 힘들 수 있다. 이렇기 떄문에 딥 러닝은 대량의 데이터에 접근 가능한 애플리케이션을 위한 모델이라고 할 수 있다.
Regression 모델에서는, Feature를 너무 늘리거나 Degress를 너무 높게 잡으면 High variance문제가 발생했었다. 하지만, 딥러닝에서는 더 큰 Neural Network를 사용해도 그런 문제는 발생하지 않는다는 것이 많은 연구에서 밝혀졌다고 한다. 하지만, 대규모 신경망을 점차 늘리게 되면, 트레이닝의 시간도 오래 걸리고, 계산 비용도 더 많이 들게 된다. 즉, 적절하게 정규화 하기만 하면 문제가 되지 않는다.
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글
ML Development Process (1) 2024.04.28 Model Selection and Evaluation (1) 2024.04.27 Multiclass Classification | Neural Network Additional Layer Types (0) 2024.04.02 Multiclass Classification | Neural Network Advanced Optimization (0) 2024.04.02 Multiclass Classification | Advanced Learning Algorithm (0) 2024.03.24