[머신러닝] Lecture 10 Advice for applying machine learning

이재호·2025년 3월 6일

머신러닝

목록 보기
9/18

https://www.youtube.com/watch?v=kX1yTdXq_Wc&list=PLiPvV5TNogxIS4bHQVW4pMkj4CHA8COdX&index=10

이제 머신러닝 알고리즘에 대해서 어떤 식으로 디버깅할 수 있는지 알아보자.
만약 학습된 머신러닝 알고리즘에서 큰 에러가 발생할 경우, 이를 어떻게 디버깅할 수 있을까?
아래는 여러 상황에 대한 해결책들이다.

  • 학습 데이터를 더 추가한다.
  • feature들의 집합을 축소한다.
  • feature를 추가한다.
  • 다항식 feature를 추가한다.
  • regualrization parameter λ\lambda 값을 낮춘다.
  • regualrization parameter λ\lambda 값을 높인다.

먼저, 우리가 개발한 머신러닝 알고리즘이 올바른지 아닌지 어떻게 판단할 수 있을까?
이를 위해 따로 알고리즘을 진단할 필요가 있다. 물론 진단에 비용이 들지만, 오히려 시간을 더 절약할 수 있다.

따라서 알고리즘의 정확도를 판단하기 위해, 전체 데이터셋을 "training set"(70%), "test set"(30%)으로 나눈다.

그런 다음, training set으로 J(θ)J(\theta)를 최소화하는 최적의 파라미터를 찾으며, 학습을 한다.
그리고 test set으로 J(θtest)J(\theta_{test})(오차 함수)의 값을 계산한다.
아래의 경우, linear regression에 대한 예시이다.

다음으로 logistic regression train/test 과정은 다음과 같다.
위와 유사하게 training set으로 최적의 파라미터 θ\theta를 찾고 (학습하고), 이를 test set으로 계산하여 오차값을 구한다.
다만, linear regression과 달리 logistic regression은 (binary classification의 경우) 결과값이 0 또는 1이기 때문에, 잘못 분류된 개수를 기준으로 오차 정도를 측정한다.

  • 만약 예측값이 1)"hθ(x)0.5h_{\theta}(x) \ge 0.5이고 실제값이 y=0y=0일 때" 혹은 2)"hθ(x)<0.5h_{\theta}(x) < 0.5이고 실제값이 y=1y=1일 때", 이는 잘못 분류된 케이스로 카운트가 1이 된다.
  • 반면에 잘 예측될 경우 카운트는 0이 된다.
  • 따라서 이 경우 test error는 아래와 같다.
    Test error=1mtesti=1mtesterr(hθ(xtest(i)),ytest(i))\text{Test error} = \frac{1}{m_{test}} \sum_{i=1}^{m_{test}}err(h_\theta(x_{test}^{(i)}), y_{test}^{(i)})

overfitting의 경우 training data set에 대해서는 Jtrain(θ)J_{train}(\theta) 값은 Jgeneral(θ)J_{general}(\theta) 값보다 낮게 나올 것이다.

그렇다면 어떻게 모델을 잘 선택할 수 있을까? 아래 그림은 차수 dd에 따른 다양한 모델식을 보여준다.
각각의 차수 dd에 대해서 test를 한 결과, d=5d=5 식이 가장 정확도가 높게 나왔다고 가정해보자.
과연, 이 d=5d=5에 대한 모델은 정확도가 높다고 볼 수 있을까?
그렇지 않다. 왜냐하면 test set이 어떻게 구성되느냐에 따라 다른 dd를 갖는 모델이 test에 대한 정확도가 더 높게 나올 수 있기 때문에, 새로운 데이터에 대해서도 d=5d=5 모델이 가장 높은 정확도를 보여준다고 장담하기 힘들다.

따라서, 이를 위해 "cross validation set (cv)"를 추가해줘야 한다.
전체 데이터셋은 일반적으로 다음과 같이 분할된다.

  • train set : 60%
  • cross validation set : 20%
  • test set : 20%

마찬가지로 각 데이터셋에 대해서 error function J(θ)J(\theta)를 구해야 한다.

이제 아까의 과정을 똑같이 적용해서 d=4d=4 모델이 가장 높은 정확도를 보여준다는 것을 얻었다고 가정해보자. 이 경우 cross validation set에 대한 오차를 기준으로 가장 잘 나왔기에, test set에 대한 오차를 계산함으로써 일반적인 generalization 오차를 추정할 수 있다.

이제 bias와 variance에 대해서 복습해보자. 아래 그림은 각각의 예시를 보여준다.
차수 dd가 너무 낮으면 high bias (underfitting) 문제가 발생하고, 반대로 차수 dd가 너무 높으면 high variance (overfitting) 문제가 발생한다.

그리고 아래 그래프는 차수 dd에 따른 training error Jtrain(θ)J_{train}(\theta)와 cross validation error Jcv(θ)J_{cv}(\theta) 값을 보여준다.

  • train error Jtrain(θ)J_{train}(\theta)의 경우, 차수 dd가 커질수록 fit 정도가 커지고, 이로 인해 에러값은 낮아진다. 만약, dd가 매우 커지면 overfitting 문제가 발생할 수 있다.
  • cross validation error Jcv(θ)J_{cv}(\theta)의 경우, 차수 dd가 너무 작거나 (underfitting) 혹은 너무 크면 (overfitting) 에러값이 높아진다.

따라서 train error와 cross validation error 값을 보면서, 해당 dd 차수 모델이 high-bias(underfitting)인지 high-variance(overfitting)인지 아니면 최적인지 등을 판단할 수 있다.

  • 만약 high-bias라면, Jtrain(θ)J_{train}(\theta) \approx \infty and Jcv(θ)Jtrain(θ)J_{cv}(\theta) \approx J_{train}(\theta)와 같은 결과가 나올 것이다.
  • 만약 high-variance라면, Jtrain(θ)0J_{train}(\theta) \approx 0 and Jcv(θ)>>Jtrain(θ)J_{cv}(\theta) >> J_{train}(\theta)와 같은 결과가 나올 것이다.

그렇다면 이제 regularization을 판단하는 방법을 알아보자.
아래 그림은 linear regression에 대한 regularization의 예시이다.

  • regularization parameter λ\lambda가 너무 크면 모델은 hθ(x)θ0h_\theta(x) \approx \theta_0와 같이 나올 것이고, 이는 high-bias를 의미한다.
  • regularization parameter λ\lambda가 너무 작으면 모델은 매우 많은 파라미터 θ\theta들을 가질 것이고, 이는 high-variance를 의미한다.

구체적인 수식 예시는 다음과 같다. train, cross validation, test 데이터셋에 대해서 모두 적용한다.

이제 λ\lambda 값을 다양하게 하여 모델에 적용했을 때, cross validation error에 대해서 λ=0.08\lambda=0.08일 때가 가장 최적의 θ\thetaθ(5)\theta^{(5)}가 나왔다고 가정해보자. 그리고 해당 θ(5)\theta^{(5)}를 가지고 와 test error를 구한다.

그리고 아래 그림을 통해 λ\lambda 값에 따른 모델의 bias, variance 정도 그래프를 볼 수 있다.

  • Jtrain(θ)J_{train}(\theta)의 경우,
    λ\lambda 값이 작을 때는 에러값이 낮지만(왜냐하면 높은 비중으로 적용되는 파라미터 수가 많기 때문에),
    λ\lambda 값이 클 때는 (파라미터 수가 적기 때문에) 에러값이 높아지는 것을 볼 수 있다.
    따라서, λ\lambda 값이 작을 때는 high-bias, λ\lambda 값이 클 때는 high-variance 문제가 발생할 수 있다.
  • Jcv(θ)J_{cv}(\theta)의 경우,
    λ\lambda 값이 너무 작을 때와 너무 클 때 모두 에러값이 높게 나온다.
    즉, λ\lambda 값이 너무 작을 때는 high-bias, λ\lambda 값이 너무 클 때는 high-variance 문제가 발생할 수 있다.

이제 learning curve에 대해서 알아보자. 아래 그림은 일반적인 경우의 learning curve를 보여준다.

  • Jcv(θ)J_{cv}(\theta)는 학습 데이터셋인 training set의 크기 mm이 작을 때는 에러가 높지만, mm이 커질수록 에러값이 낮아진다.
  • Jtrain(θ)J_{train}(\theta)mm이 작을 때는 에러가 거의 없지만, mm이 커질수록 에러값이 커진다.

high-bias일 경우,

  • Jcv(θ)J_{cv}(\theta)mm이 커져도 에러값이 높게 유지된다.
  • Jtrain(θ)J_{train}(\theta)mm이 작을 때는 에러값이 낮지만, mm이 커질 경우 에러값이 빠르게 높아지며, Jcv(θ)J_{cv}(\theta)와 값의 차이가 거의 없어진다.
  • 그리고 training data set을 더 추가해도 문제는 해결되지 않는다.

high-variance의 경우,

  • Jcv(θ)J_{cv}(\theta)는 높은 에러값을 보이고,
  • Jtrain(θ)J_{train}(\theta)는 낮은 에러값을 보여준다.
  • 하지만 training data set을 추가할수록 (mm이 커질수록) 두 값의 차이는 점점 줄어들 것이다. 그리고 high-variance의 문제를 해결할 수 있을 것이다.

따라서 learning algrithm을 디버깅하는 방법들을 자세히 살펴보면 다음과 같다.

  • 학습 데이터 추가 : high variance 문제 해결
  • feature 수 줄이기 : high variance 문제 해결
  • feature 추가 : high bias 문제 해결
  • 다항식 feature 추가 : high bias 문제 해결
  • regularization parameter λ\lambda 값 감소시키기 : high bias 문제 해결
  • regularization parameter λ\lambda 값 증가시키기 : high variance 문제 해결

regression 방법과 마찬가지로 neural networks에서도 underfitting 문제와 overfitting 문제가 존재한다.

  • 너무 적은 hidden layer 및 units는 underfitting 문제를 일으킬 수 있고, (다만 비용은 적게 들지만)
  • 너무 많은 hidden layer 및 units는 overfitting 문제를 일으킬 수 있다. (비용이 많이 든다.)
    따라서 이 경우, regularization parameter λ\lambda 값을 증가시킴으로써, overfitting 문제를 해결할 수 있을 것이다.
profile
천천히, 그리고 꾸준히.

0개의 댓글