본문 바로가기
딥러닝/CS182

CS182 - [Lecture 3] Error Analysis

by sb99 2022. 6. 27.

Part 1

Error Analysis

 



이번 강의에서는 모델이 가지는 Error에 대해 분석한다.

Error에 살펴보기 전에, 이전 챕터 마지막 부분에서 배웠던 Empirical risk에 대해 복습해보자.

 

지도 학습의 목표는 Empirical risk를 최소화하는 것으로, 학습을 통해 줄일 수 있는 risk이다.

True risk는 주어지지 않은 데이터셋에 대한 risk이기 때문에 학습 과정에서 직접적으로 줄이기란 불가능하며,

주어진 데이터에 대해 학습이 끝난 이후 모델이 실제 데이터나 테스트 데이터에 대해 가지는 risk다.

 

우리는 Empirical risk와 True risk의 값을 분석함으로써

모델이 가질 수 있는 문제점인 Overfitting과 Underfitting을 파악할 수 있다.

 

Overfitting은 Empirical risk는 낮지만 True risk는 높은 것으로, 주어진 데이터에 대해서만 잘 예측하는 경우이다.

중간 우측에 표시된 그래프에서 파란색 선이 Empirical risk를, 검은색 실선이 True risk를 나타내고 있다.

그래프에서 확인할 수 있는 바와 같이 주어진 데이터의 개수가 너무 적어 모델이 올바른 파라미터들을 학습하지 못했거나,

주어진 데이터에만 너무 알맞게 학습이 되어 새로운 데이터에 대해서는 예측을 잘 못하는 경우 Overfitting이 발생할 수 있다.

 

Underfitting은 Empirical risk와 True risk 둘 다 높은 것으로, 학습이 제대로 이루어지지 않은 것으로 볼 수 있다.

모델의 파라미터와 capacity가 너무 적어 데이터에 대한 학습이 제대로 되지 않았거나, 

optimizer을 모델에 맞지 않게 설정한 경우 Underfitting이 발생할 수 있다.

 

 

우리는 이전 챕터에서 classification의 Loss functions에 대해 얘기했으나,

이번 챕터에서는 regression에 초점을 맞춘다.

 

Classification에서는 input인 x에 대해 각각의 labels에 대해 예측한 확률을 출력한 반면,

Regression에서는 input인 x에 대해 예측한 실제값을 출력한다.

따라서 Regression은 데이터셋이 입력되면 labels에 대한 확률들이 아닌, Continouous distribution을 출력한다.

해당 강의에서는 이 distribution을 가장 기본적인 distribution 형태인 normal (Gaussian) distribution으로 가정한다.

 

위 그림에서 가장 하단부의 \(logp(y|x) \) 최종적으로 MSE(Mean Squared Error) 형태가 된다.

이전 챕터에서 \(-logp(y|x) \)는 '모델의 파라미터가 나쁜 정도', 즉, Loss 값을 의미하며

모델의 학습을 통해 최소화하려는 값임을 고려했을 때,

MSE 값은 Regression의 Loss 값과 동일한 의미를 지닌다는 것을 유추할 수 있다.

 

 

이를 활용하여 주어진 데이터셋에 대한 Expected error 값을 정의할 수 있다.

그림의 하단에 표시된 \( E_{D} \)식은 데이터셋 D에 대한 Expected error을 의미한다.

\( f_{D}(x) \)는 데이터셋에 대한 모델의 결괏값 분포를,  \(f(x) \)는 실제 결괏값의 분포를 의미한다.

 

우리는 해당 식을 정리함으로써 Overfitting과 Underfitting에 대한 인사이트를 얻을 수 있다.

Overfitting의 경우에는 모델의 함수가 데이터셋에 따라 유의미하게 변한다는 점과

반면 Underfitting의 경우에는 데이터셋이 변화할 지라도 함수의 변화가 크지 않으며

학습 데이터와 실제 데이터의 예측 모두가 정확하지 않다는 점을 기억하자.

 

데이터에 따라 모델의 변하는 정도가 크다는 것은 분산(Variance)이  크다는 것을,

데이터와 상관없이 모델의 예측 수준과 실제 값의 차이가 크다는 것은 편차(Bias)가 크다는 것을 의미하기 때문에,

Overfitting과 Underfitting은 각각 분산과 편차와 연관성을 지닌다.

 

 

\(E_{D} \)에 대한 식을 정리하면 다음과 같이 나타낼 수 있다.

\(f_{D}(x) - \overline{f}(x) \)의 경우 각각 데이터셋에 대한 결괏값과 기댓값 (평균 예측값)을 의미하며

\(\overline {f}(x) - f(x)\)의 경우 각각 기댓값과 실제값을 의미하기 때문에

전자 항은 분산 (Variance)을, 후자 항은 편차(Bias)의 제곱을 의미한다.

즉, 분산항은 실제값과 관계없이 예측이 데이터에 따라 얼마나 다른지를 나타내며,

편차항은 데이터의 평균 예측값과 실제값이 얼마나 차이나는지에 대한 지표이다.

 

만약 분산이 높다면 우리는 모델이 Overfitting이 되었다는 것을 알 수 있으며

반대로 편차가 높다면 모델이 Underfitting 되었다는 것을 알 수 있을 것이다.

하나의 값을 줄이면 다른 하나의 값이 증가하기 때문에,

어느 값이 큰지를 파악한 후 모델을 수정하는 것이 중요한 과제가 된다.

 

 

Part 2

Regularization

 

그렇다면 우리는 어떻게 variance와 bias이 치우쳐지지 않게 조절할 수 있을까?

 

첫 번째로 더 많은 데이터를 모델에 입력하는 것을 생각할 수 있다.

입력되는 데이터가 많아지면 첫 번째 줄의 그래프들 처럼 variance가 줄어들게 되어 overfitting을 해결할 수 있다.

하지만 데이터의 수와 관계없이 bias는 여전히 큰 값을 유지하므로 underfitting은 해결할 수 없다.

 

두 번째로 모델 자체를 변화시키는 방법이 있다.

Overfitting을 해결하려 한다면 모델을 smooth하게 생성되도록 (첫 번째 줄 4번째 그래프처럼) 제한해야 할 것이며,

Underfitting을 해결하기 위해서는 모델을 복잡하게 생성해야 할 것이다.

우리는 이 중 모델을 smooth하게 만듦으로써 overfitting을 해결하는 방안에 대해 중점적으로 살펴볼 것이다.

 

 

해당 파트의 쟁점인 regularization은 일반적으로 variance를 줄이기 위해 loss function에 추가하는 것을 의미한다.

만약 variance가 높다면, 이는 데이터가 파라미터를 적절하게 조절할 수 있을 만큼의 정보를 포함하지 못하고 있다는 뜻이다.

데이터가 충분하지 않아 variance가 높은 상황이라면

우리는 loss function을 통해 파라미터에 추가적인 정보를 제공할 수 있다.

하단의 그래프들을 보면 주어진 데이터셋은 같지만,

3번째 그래프가 true function과 가장 가깝게 smooth 하다는 것을 확인할 수 있다.

Loss function에 추가되는 regularization이 이를 가능하게 해 준다.

 

 

동일한 데이터에 대해 smoother function을 생성하기 위해서는

주어진 데이터에 D에 대해 parameter θ가 어떻게 형성되는지를 의미하는 \( p(\Theta | D)  \)가 쟁점이다.

\( p(\Theta | D)  \)를 구성하는 식 중 \( p(D| \Theta)  \)는 주어진 데이터를 통해 계산할 수 있으므로,

결론적으로 \( p(\Theta)  \)가 \( p(\Theta | D)  \)를 결정짓는 중요한 요소가 된다.

Bayesian 관점에서 보면 Regularization은 파라미터의 prior(사전 지식)으로 여겨지며, \( p(\Theta)  \)가 그것이다.

\( p(\Theta)  \)는 데이터를 고려하지 않고 \( \Theta  \)가 어떻게 구성되어있는지에 대한 값이다.

 

\( p(\Theta | D)  \)에 대한 식에 log를 취한 후 정리하면 다음과 같은 새로운 loss function이 정의된다.

해당 식은 이전 강의에서 배웠던 loss function과 동일한 형태를 가지며, 

Loss function의 regularization으로서 \( -logp(\Theta)  \)를 추가할 것이다.

 

그렇다면 Smoother model을 만들기 위해서 \( -logp(\Theta)  \)를, 즉, prior를 어떻게 설정해야 할까?

 

 

예를 들어 다항식에 대해 regularize를 수행한다고 생각해보자.

모델의 함수  \( f_{\Theta}(x)  \)에서 각각의  \( \Theta  \),

즉, coefficients(계수)이 큰 경우 중간 부분의 첫 번째 그림처럼 overfitting이 발생할 수 있다.

따라서 간단한 정규화를 통해 coefficients를 감소시킴으로써 smoother models를 생성할 수 있다.

 

 

이때 정규화로 인해 \( -logp(\Theta)  \)은 \( \lambda||\Theta||^{2}  \)로 변하게 된다.

여기서 \( \lambda \)는 하이퍼 파라미터를 의미한다.

 

결국 Regularizatoin은 손실 함수에 파라미터의 제곱을 포함하여 더함으로써,

파라미터 값들의 크기가 커지면 loss 값이 커지게 만들어 파라미터 값들의 크기를 제한한다.

이렇듯 Regularization에 \( \lambda||\Theta||^{2}  \) 값을 사용하는 것을 L2 Regularization이라 한다.

 

L1 Regularization은 \( \lambda \sum_{i=1}^{D} |\Theta_{i}|  \)을 사용하며,

L2 Regularization과 배교했을 때 Outlier (이상치)의 영향을 더 적게 받는다는 특징이 있다.

 

 

지금까지 알아봤던 Regularization의 Bayesian 관점 이외에도, Regularization에 대한 다양한 관점이 존재한다.

 

Numerical 관점에서는 undetermined problems를 well-determined problems으로 만든다고 여긴다.

Optimization 관점에서는 역설적으로, 잘못된 optimization으로 인해 underfitting이 발생한 경우,

Regularization을 통해 underfitting을 줄일 수 있다고 말한다.

이는 GANs에서 종종 사용되며, 추후에 자세히 배울 예정이다.

 

 

Part 3

Training sets, Validation sets, Test sets

 

지금까지 overfitting과 underfitting의 특징과, 이를 해결하기 위한 방법인 regularization에 대해 알아보았다.

그 과정 속에서 다음과 같은 의문들이 생겨날 것이다.

- 우리는 실제로 모델을 학습할 때 모델이 overfitting 되었는지 underfitting 되었는지 어떻게 알 수 있는가?

- 결론적으로 우리가 선택해야 하는 알고리즘은 무엇인가?

- 하이퍼 파라미터는 어떠한 방법으로 선택하는가?

 

가장 간단한 아이디어는 loss(train loss)를 낮추는 방법으로 알고리즘과 하이퍼 파라미터를 선택하는 것이다.

하지만 이는 overfitting 문제를 야기할 수 있으므로 좋은 방법이 아니다.

 

 

위의 질문들에 올바른 답을 얻기 위한 실제 머신러닝의 workflow는 다음과 같다.

우리는 주어진 데이터셋을 training set과 validation set으로 나눈다.

 

Training set은 말 그대로 모델을 직접적으로 학습시키는 데 사용되며,

모델의 학습에 사용되는 loss 값은 모델의 파라미터들과 training set에 의해 도출된다.

 

Validation set은 모델의 성능을 검증하는 데 사용된다.

Training set을 통해 학습된 모델의 파라미터와, 학습에 사용되지 않은 validation set을 통해

Loss가 도출되며, 이 loss 값은 하이퍼 파라 미터 선택, features 제거 및 추가, 모델의 클래스 변경에 활용된다.

 

만약 training loss가 충분히 작지 않은 경우, 우리는 underfitting을 의심해볼 수 있다.

이를 해결하기 위해서는 regularization의 효과를 줄이거나 optimizer를 개선하는 방법이 있다.

 

반면 training loss가 validation loss에 비해 지나치게 작을 경우에는 overfitting을 의심해볼 수 있다.

모델의 학습에 활용된 데이터에는 정확한 예측이 가능하지만,

학습에 활용되지 않은 새로운 데이터에 대해서는 성능이 좋지 않다는 것을 의미하기 때문이다.

따라서 이러한 상황에서는 regularization을 증가시킴으로써 overfitting 문제를 개선할 수 있을 것이다.

 

 

정리하자면 다음과 같다.

 

Training set은 모델의 파라미터를 (자동적으로) 학습하는 데 사용된다.

또한 optimizer를 통해 모델의 파라미터가 학습되기 때문에,

training loss를 통해 optimizer의 하이퍼 파라미터를 선택할 수 있다.

 

Validation set은 모델의 overfitting을 검사하는데 활용될 수 있으므로,

모델의 class와 regularizer의 하이퍼 파라미터, 학습에 사용되는 features를 선택하는 데 사용된다.

만약 overfitting이 의심된다면 모델이 지나치게 복잡하기 때문일 가능성이 있으므로,

덜 중요한 features를 제거하면 될 것이다.

 

 

우리는 training set과 validation set을 통해 모델을 수정하였다.

그렇다면 training loss와 validation loss가 충분히 낮다면, 모델이 좋은 성능을 가지고 있다고 말할 수 있을까?

혹은 validation loss이 모델의 성능의 성능을 의미한다고 말할 수 있을까?

 

답은 그렇지 않다.

우리는 validation set을 활용하여 하이퍼 파라미터를 선택하였는데,

이는 더 이상 validation loss가 unbiased 하거나 independant 하지 않다는 것을 의미한다.

즉, 더 이상 validation loss가 모델의 성능을 평가하는데 적합하지 않다는 것을 의미한다.

 

 

모델의 정확한 성능 평가를 위해서는 모델을 학습할 때 사용되지 않은 순수한 데이터셋이 필요하다.

따라서 우리는 dataset을 training set, validation set과 더불어 test set으로 나눠야 한다.

 

Training set과 validation set은 모델의 성능 개선에 사용되며,

Test set은 모델의 최종적은 성능을 평가하는 데 사용된다.

 


References

 

'딥러닝 > CS182' 카테고리의 다른 글

CS182 - [Lecture 5] Backpropagation  (0) 2022.07.02
CS182 - [Lecture 4] Optimization  (0) 2022.06.29
CS182 - [Lecture 2] Machine Learning Basics  (0) 2022.06.25
CS182 - [Lecture 1] Introduction  (0) 2022.06.23
[시작] CS182  (0) 2022.06.18

댓글