논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

UFLDL Tutorial 1. Supervised Learning and Optimization – Linear Regression

http://deeplearning.stanford.edu/tutorial/

Supervised Learning and Optimization - Linear Regression

Problem Formulation

기억을 되새기기 위해서, linear regression을 어떻게 구현할 것인지 배워봅시다. 우리의 목표는 목적 함수(objective function)과 그것의 그래디언트(gradients), 그리고 목적함수를 최적화하는 파라미터 셋을 구하는 방법에 대해 친숙해지는 것입니다. 이러한 도구들은 뒤에 알고리즘은 좀 더 정교하게 만드는 밑거름이 됩니다. Supervised Learning에 좀 더 알고 싶은 사람은 강의 자료(http://cs229.stanford.edu/notes/cs229-notes1.pdf)를 참고하시기 바랍니다.

Linear regression의 목표는 입력 값 $x \in \mathfrak{R}^n$으로부터 시작하여 목표 값 $y$를 예측하는 것입니다. 예를 들면, 집 값을 예측하는 문제를 상상할 수 있습니다. 여기서 $y$는 달러화를 사용한 집 값을 나타내고, 벡터 $x$의 각 요소 $x_j$들은 집을 묘사하는 특징(방의 크기나 갯수)이라고 합니다. 이제 우리에게 많은 집들의 특징과 그 가격이 주어졌다고 가정하여봅시다. 그리고 i번째 집의 가격을 $y^{(i)}$, 특징을 $x^{(i)}$이라고 합시다. 그렇다면 이제 우리 목표는, 어떠한 함수 $y=h(x)$를 찾는 것이라 말할 수 있습니다. 이 때 이 함수는 각 트레이닝 샘플에 대해서 $y^{(i)} \approx h(x^{(i)})$를 만족하는 함수입니다. 만약 이러한 함수를 찾는 것에 성공한다면, 그리고 충분한 수의 집 들과 그 가격에 대한 샘플들을 가지고 있다면, 아마 그 함수는 새로운 집의 가격을 예측할 수 있는 좋은 예측기로 사용할 수 있을 것입니다.

그러한 함수 $h(x)$를 찾기 위해서는 먼저 함수를 어떻게 표현할 지 정해야 합니다. 여기서는 다음과 같은 선형 함수(linear function)을 사용할 것입니다.

$$h_\theta(x) = \sum_j \theta_j x_j = \theta^Tx$$

여기서 $h_\theta(x)$$\theta$에 의해 파라미터화되어 있는 큰 함수군을 나타냅니다. 이 함수 공간을 hypothesis class라고 부를 것입니다. 이제 $h$의 표현형을 결정하였기 때문에 남은 일은 $h_\theta(x^{(i)})$$y^{(i)}$에 가까워 지도록 $\theta$를 찾는 것입니다. 여기서는 다음의 함수를 최소화하여 좋은 $\theta$를 찾고자 합니다.

$$j(\theta) = \frac{1}{2} \sum_i (h_\theta(x^{(i)}) - y^{(i)})^2 = \frac{1}{2} \sum_i (\theta^T x^{(i)} - y^{(i)})^2$$

이 함수를 우리가 풀고자 하는 문제의 비용 함수(cost function)라 하는데, 이것은 어떠한 한 파라미터 $\theta$를 선택하여 $y^{(i)}$를 예측한 것이 얼마나 오류를 가지고 있는지를 측정하는 함수입니다. 이는 loss, penalty, objective 함수로도 불리곤 합니다.

Function Minimization

이제 $J(\theta)$를 최소화하는 파라미터 $\theta$를 찾고하고자 합니다. 이 함수를 최소화하는 알고리즘은 여러가지가 있지만 여기서는 매우 효과적이면서도 구현이 간단한 Gradient descent방법을 사용해보고자 합니다. 이 방법을 사용하기 위해서는 일반적으로 다음의 두가지는 꼭 알고 있어야 합니다. 바로 $J(\theta)$를 계산하는 코드와 각 파라미터 값이 \theta일 때의 편미분 $\nabla_\theta J(\theta)$ 입니다. 이 두가지가 준비되면 남은 절차는 최적화 알고리즘을 따라가기만 하면 됩니다. $\nabla_\theta J(\theta)$은 미분 가능한 함수 $J$의 그래디언트로 파라미터 지점 $\theta$에서 함수가 증가하는 방향을 나타내는 벡터입니다.

트레이닝 데이터 셋 $x^{(i)}$$y^{(i)}$가 주어졌을 때, MATLAB에서 $J(\theta)$를 계산하는 것은 간단할 것이고 남은 것은 편미분입니다. 이는 다음과 같은 벡터로 계산하면 됩니다.

$$\nabla_\theta J(\theta) = \begin{bmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \\ \frac{\partial J(\theta)}{\partial \theta_2} \\ \vdots \\ \frac{\partial J(\theta)}{\partial \theta_n} \end{bmatrix}$$

각 요소에 대한 식은 다음과 같습니다.

$$\frac{\partial J(\theta)}{\partial \theta_j} = \sum_i x_j^{(i)} ( h_\theta(x^{(i)}) - y^{(i)})$$

Exercise 1A

연습문제는 ex1/ex1a_ligreg.m에서 시작합니다. 주어진 데이터 housing.dat로부터 linear regression의 cost function과 그래디언트를 계산하는 코드를 작성하여야 합니다. 코드는 linear_regression.m 파일 내에서 cost function의 값을 f에, 그래디언트는 g에 할당하도록 작성하면 됩니다. 올바르게 작성되면 다음과 같은 결과가 출력됩니다.

학습용 데이터와 테스트용 데이터를 무작위로 선택하기 때문에 모양은 매번 달라지나, 보통 에러의 RMS는 4.5에서 5사이로 떨어지게 됩니다.


Tags:
Add a Comment Trackback