Ian goodfellow의 Deep Learning 책을 공부하던 중 5.1.4절에서 Linear Regression의 내용이 상당히 불친절한 수식전개로 구성되어 자세히 들여다보았고, 공부한 내용을 적어봅니다.
먼저 Linear Regression의 수식분석을 들어가기 전에 이것이 무엇인지 간단하게 짚고 넘어가겠습니다.
Linear Regression은 '선형 회귀 ' 로써 주어진 데이터를 대표한다고 할 수 있는 한개의 직선을 찾아내는 것을 의미합니다.
위의 사진은 데이터를 2차원의 좌표평면에 흩뿌려진(scatter된) 데이터를 대표하는 한개의 직선(파란선)을 그은 것입니다. 선형 회귀는 기계가 한번에 저 직선을 찾아낼 수는 없기 때문에, 직선방정식(1차방정식;linear인 이유)의 계수를 천천히 수정해가면서 파란색 직선이 되도록하는 계수를 찾는 것을 의미합니다. 이 사진의 경우, 방금 말한대로 2차원의 좌표평면에서 표현된 데이터이기 때문에, 직선의 식은 단순히
로 표현될 수 있습니다. 이 식은 w가 1개의 스칼라값을 의미하고 x 또한 1개의 스칼라 값을 의미하기 때문에 데이터가 1개의 feature만을 가지고 있다는 전제에서 만들어진 수식인데, 실세계의 데이터는 보통 여러개의 feature로 구성되어있습니다. 따라서 여러개의 feature로 구성된 데이터를 선형 회귀하기 위한 식은 다음과 같이 표현됩니다.
이렇게 나열된 회귀식을 다중 선형회귀라고 합니다.
다중 선형회귀는 컴퓨터의 입장에서 이해시키기 위하여 행렬로 표현해줄 수 있습니다. 따라서 위의 식은 아래처럼 바꿀 수 있습니다.
그런데 X와 W는 열벡터로 이루어져있기 때문에, 이상태 그대로를 사용하는 것은 맞지 않습니다. 따라서 W에 transpose를 취해주어 다중선형회귀식은 다음과 같이 표현됩니다.
이 글을 읽으시는 분들에게는 사실 불필요한 그림이겠지만, 그냥 한번 넣어보았습니다. ㅎㅎ
그러면 지금부터 Deep Learning 5.1.4의 내용을 기반으로 설명하도록 하겠습니다.
5.1.4에서는 다중 선형회귀식전체에 대하여 설명하기전 먼저 데이터의 feature들을 기반으로 output을 예측하는 함수를 다음과 같이 정의하였습니다.
y_hat은 예측된 값을 의미합니다. 뒤에서 다룰 내용이지만 살짝 먼저 말씀드리자면,
선형회귀를 위해서는 정답과 예측값의 오차를 계산하여, 계산된 오차에 기반하여 w(가중치)를 수정해주기 때문에, y_hat이라는 기호로 y와 구별될 수 있도록 표현하는 것입니다.
이 식에서 w는 열벡터를 의미하며 n차원의 실수공간에 속해있기 때문에, nx1의 형태를 나타내고,
x또한 n차원의 실수공간(1개의 데이터가 n개의 feature들로 구성)에 속해있으며, 1개의 데이터를 의미하기 때문에 nx1의 형태를 나타냅니다.
만약 데이터가 n개가 있게된다면, nxn의 형태를 나타내겠죠.
그럼, 예측함수를 살펴보았으니, 예측함수를 학습시킴으로써 직선을 회귀시킴에 앞서서 예측함수를 평가하는 것부터 알아보도록 하겠습니다.
평가하기 앞서서 정의한 예측함수의 task T에 대해서 다시한번 설명하면,
x로부터 의 식에 기반하여 실제 y를 예측해내는 것입니다. 이 회귀분석 알고리즘을 평가하는 방법은 바로 Mean Squared Error (MSE)를 사용하는 것입니다.
MSE는 '에러에 제곱을 취해주고 평균을 내는 함수'를 의미하며, 수식으로 표현하면 다음과 같습니다.
알고리즘의 평가는 test set으로 하기 때문에 이를 전제로 하며,
에러는 예측값과 정답의 차이이기에,
로 표현하며, 이를 기반으로 MSE는
입니다.
이때 우리는 직관적으로, MSE에서 y_hat(예측값)과 y(정답)이 일치함으로써 Error값이 0일때, 성능이 가장 좋을 것임을 알 수 있습니다.
MSE식은 지난번에 블로깅한 Norm의 form을 활용하여 다음과 같이 변형될 수 있습니다.
잊으신 분이 있을수도 있으니 Lp Norm의 식을 간단하게 다시 보여드리면,
입니다.
MSE에서 S가 Square라고 하였으니 p값은 2가 되겠죠? 즉 L2 norm, Euclidean distance로 표현될수 있습니다.
따라서 MSE는
로 표현될 수 있는 것이죠.
그럼 정의한 예측함수를 평가하는 방법을 살펴보았으니, 오차가 최소가 되는 값을 찾는 예측함수의 학습에 대하여 알아보도록 하겠습니다.
학습을 하는 식을 분석하기에 앞서서 오차가 최소가 되는 지점을 어떻게 찾을까요? 이것을 알기 위해서 평가함수로 사용된 MSE를 다시 살펴보도록 하겠습니다.
MSE는 Euclidean distance식에 제곱을 취해주고 평균을 낸 값을 의미하죠. 이때 제곱의 의미가 중요합니다.
제곱은 곧 2차함수를 의미하고, 2차함수는 곡선을 그리게되죠.
2차함수의 접선의 기울기 즉 미분계수가 0이 되는 지점이 최저점이기 때문에, 우리는 예측함수의 평가함수인 MSE의 미분계수가 0인 지점이 에러가 최저인 지점이고 우리는 그 지점을 찾으면 되는 것이죠.
Deep Learning 5.1.4에서는 기울기가 0인 지점을 찾는 과정을 다음과 같이 전개하고 있습니다.
수식을 보기에 앞서서 notation을 다시한번 정리해드리면,
1. delta w (역삼각형 w) = w에 대하여 옆 수식을 미분한다 라고 생각하시면 되고,
2. X(train)은 학습데이터 셋의 행렬로써, nx1의 데이터가 m개 있다는 가정을 두면, nxm의 행렬을 구성하게 됩니다.
3. W는 n차원의 실수공간에 있다는 전제가 있기 때문에, nx1 형태의 행렬로 이루어져 있습니다.
4. y는 예측함수의 수식이 W_T*X -> (1xn)(nxm) -> 1xm 형태의 행렬로 이루어져 있습니다.
이를 그림으로 이해하기 쉽게 표현해보았습니다.
그럼 지금부터 5.1.4절에서 식 5.6부터 나열되는 수식을 파헤쳐보겠습니다.
이 부분에서 약간 오류가 있어서 짚고 넘어가도록 하겠습니다. 5.8에서 문제가 있는데요,
이기 때문에, 5.8의 L2 norm 내부식은
가 되어야 합니다. 이 부분으로 인해서 뒤에 나오는 전개에서 행렬곱이 안되는 문제 때문에 공부할때 상당히 헷갈렸었습니다.
따라서 잘못된 부분을 수정하여, 식을 제가 5.8부터 다시 전개해보았습니다.
에서 양변에 m을 곱해주고, L2 norm의 제곱을 행렬곱 형태로 풀어주면,
이때, 5.9.1에서 5.10이 되는 과정은 다음과 같습니다.
먼저 X는 nxm, w는 nx1, y는 1xm의 형태로 이루어져 있습니다. 그렇다면, X_T는 mxn, w_T는 1xn, y_T는 mx1로 이루어져있겠죠.
5.9.1에서 (X_T) x (w) x (y)는 (mxn) x (nx1) x (1xm)이며, 행렬곱이 이루어지면, (mx1) x (1xm) -> mxm행렬이 됩니다.
(y_T) x (w_T) x (X)는 (mx1) x (1xn) x (nxm)이며, 행렬곱이 이루어지면, (mxn) x (nxm) -> mxm행렬이 됩니다.
서로 형태가 일치하기 때문에 5.9.1의 X_T(train)wy(train)과 y_T(train)w_TX(train)은 덧셈에 닫혀있음을 알 수 있고,
두 행렬이 동일하다는 것은 위의 제가 그린 그림을 참고해서 직접 계산해보시면 알 수 있습니다. (그림그리기 힘들어요..)
따라서, 5.10의 수식은,
으로 전개되어 m개의 데이터를 나타내기 위한 최적의 w(가중치)를 얻을 수 있게됩니다. 이를 머신러닝에서는 '학습한다'라고 표현합니다.
따라서, 최적의 w를 얻으면 다시 예측함수 y = wx + b에서 w를 얻어진 최적의 w로 대체하고 직선을 그으면, 데이터들을 표현하는 회귀선을 얻을 수 있게됩니다.
'Machine Learning > Math' 카테고리의 다른 글
Regularization (Random Erasing Data Augmentation) (0) | 2018.04.18 |
---|---|
Regularization (Weight Decay) (15) | 2018.04.07 |