Hello Computer Vision

Understanding DeepLearning-Supervised learning 본문

딥러닝

Understanding DeepLearning-Supervised learning

지웅쓰 2023. 9. 19. 21:08

Understanding Deep Learning을 읽는데 따로 할애한다면 나에게 도움이 될 거 같아 읽어보려고 한다. 처음 시작은 2장인 Supervised Learning부터이다.

 

1. Supervised learning overview

지도학습에서는 x -> y로 가 되는 mapping을 모델이 찾도록 목표로 한다.이를 표기로 하면은 y = f(x)이고 f는 x를 input으로 받고 y를 output으로 뱉는 모델이다. 이렇게 우리가 input으로부터 y를 예측하는 것을 inference라고 한다. 모델은 parameters 를 가지는데 어떠한 파라미터 집합을 가지느냐에 따라 input - output에 대한 관계가 달라질 수 있다. 한번 이를 나타내보면 $y = f[x , \phi ]$ 라고 할 수 있다. 따라서 우리가 모델을 학습시키고 훈련시키는 것은 파라미터 $\phi $를 찾는 것이라고 볼 수 있다. 우리는 이러한 mapping과정에서 손실 값을 수량화할 수 있는데 이를 파라미터에 대한 손실값이라고 한다. 이를 나타내면 $ L[\phi] $ 로 나타내며 scalaer값이다. 그렇다면 우리는 $ \phi^{hat} =  argmin_{\phi}[L[\phi] $ 이렇게 나타낼 수 있는데 손실함수에서 나온 손실 값을 최소화 시키는 $ \phi^{hat} $ 값을 찾는 것이다. 훈련이 다 끝난다면 테스트 데이터(훈련과정에서 보지 않은)로 하여금 모델이 얼마나 일반화를 잘하는지 볼 수있다.

 

2. Linear regression

1차 Linear regression model은 다음과 같이 나타낼 수 있다(discriminative model이라고도 할 수 있다, 반대로는 generative model이 있다).

$y = f[x, \phi] = \phi_{0} + \phi_{1}x $  

다양한 파라미터에 대해 한번 시각화 해보면 다음과 같다.

보면 알 수 있듯이 $ \phi_{0}, \phi_{1} $의 값에 따라 input값에 따라 output값도 달라지는 것을 확인할 수 있다.

 

우리는 어떠한 파라미터가 다른 파라미터들의 조합보다 잘 맞는지 원칙이 필요하다. 이를 Loss라고 하며 낮으면 더 잘 맞는다고 한다. 손실 값은 모델의 예측값과 실제 값에 대한 편차라고 할 수 있는데 다음과 같은 식을 시각화 하면 다음과 같다.

여기서의 Loss를 측정하는 방법은 MSE방법이 사용된 것을 확인할 수 있다. 해당 함수의 특징이라고 하면 편차가 +로 나든 -로 나든 상관이 없다는 것이다. 이렇게 수치화를 위해 사용된 L을 cost/loss function이라고 한다(앞서 MSE라고 언급). 목적은 Loss를 적게하는 최적의 파라미터 $ \phi^{hat} $을 찾는 것이다.

이를 시각화한 것이며 더 낮은 손실 값을 향해 우리는 최적화를 해야하는 것이다.

 

이렇게 손실 값을 줄이는 파라미터를 찾는 과정을 model fitting, training, learning 등으로 표현한다. 이를 위한 기본적인 방법이라면 손실함수의 바닥을 향해 walking down하는 것이다. 이를 수행하기 위해서 현재 손실값에 위치해있는 표면의 gradient를 계산해 더 가파르게 있는 downhill쪽으로 이동하고 이러한 작업을 gradient가 0이 될 때까지 반복 수행하면 되는 것이다.

 

우리는 real world에서 어떻게 잘 작동할지가 궁금하다. 그래서 이를 알아보기 위해 test data에 대해서 loss값을 측정해본다. 이는 model이 어떻게 expressive하냐에 의존적이다. model이 훈련 데이터에 대해 mapping을 잘 하지 못했다면 이를 underfitting 이라고 하며 너무 복잡하게 한다면 overfitting이라고 한다(개인적인 생각은 test 데이터 셋이 얼마나 real world를 잘 반영하고 있는지도 고려해볼 필요가 있다. 물론 test데이터 성능만 좋으면 되는 대회같은 곳에서는 고려할 필요 없겠지만).