논문

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

UFLDL Tutorial 2. Supervised Learning and Optimization – Logistic Regression

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

Supervised Learning and Optimization - Logistic Regression

앞에서 우리는 연속적인 값을 입력된 값에 대한 선형 함수(linear function)로써 예측하는 방법을 배웠습니다. 앞의 예제에 따르면 입력은 집의 크기 등이 될 것이고 집 값을 예측하는 것이었습니다. 하지만 어떤 경우에는 연속된 값이 아니라 이산적(discrete)인 값을 예측하고 싶은 경우가 있을 것입니다. 예를들면 0과 1의 디지털로 표시되는 픽셀의 값과 같은 것들이 말이죠. 이러한 문제를 분류(classification)문제입니다. Logistric regression은 어떤 결정을 내리기 위한 간단한 분류 알고리즘입니다.

Linear regression에서 우리는 선형 함수(linear function) $y=h_\theta (x) = \theta^T x$를 이용하여 i번째 샘플 $x^{(i)}$의 값 $y^{(i)}$를 예측하고자 했습니다. 이 방법은 예측하고자 하는 값이 바이너리 값($y^{(i)} \in { 0, 1 }) $을 가지는 경우에는 적절한 방법이 아닙니다. Logistic regression에서는 앞에서와는 다른 hypothesis class를 사용할 것입니다. 그것은 바로 주어진 샘플에 대해서 군(class)가 1에 속하는지 0에 속하는지에 대한 각각의 확률을 구하는 것입니다. 이를 함수로 표현해보면 다음과 같습니다.

$$P(y=1|x) = h_\theta (x) = \frac{1}{1 + \exp (- \theta^T x)} \equiv \sigma (\theta^T x)$$

$$P(y=0|x) = 1 - P(y = 1| x) = 1 - h_\theta (x)$$

함수 $\sigma(z) = \frac{1}{1 + \exp (-z)}$는 보통 시그모이드(sigmoid) 혹은 로지스틱(logistic) 함수로 부릅니다. 이것은 S자 형태를 띄는데, $\theta^T x$의 값들을 0과 1사이의 값으로 우겨넣도록 합니다. 따라서 이를 $h_\theta(x)$의 값을 확률로 계산할 수 있게 됩니다. 이제 우리가 할 일은 실제 class가 1에 해당하는 $x$가 들어왔을 때, 확률 $P(y=1|x) = h_\theta (x)$을 크도록 하고 0에 해당하는 $x$가 들어왔을 때, 작도록 하는 ($P(y=0|x)$는 크도록) $\theta$를 찾는 것입니다. 사용되는 훈련용 샘플은 바이너리 값의 레이블(label)을 갖는 데이터 ${ (x^{(i)}, y^{(i)}) : i=1, \dots, m } $가 주어지면 아래의 cost function을 이용하여 $h_\theta$이 얼마나 좋은지 측정할 수 있습니다.

$$J(\theta) = - \sum_i \left( y^{(i)} \log (h_\theta (x^{(i)})) + (1- y^{(i)}) \log (1- h_\theta (x^{(i)})) \right)$$

각 샘플을 훈련시킬 때 2개의 항 중 하나는 반드시 0이 아니게 된다는 점이 특이합니다. 그 이유는 $y^{(i)}$의 값이 0 혹은 1이기 때문입니다. $y^{(i)}=1$일 때, cost function을 최소화하려면 $h_\theta (x^{(i)})$의 값을 크도록 해야합니다. 반대로 $y^{(i)}=0$의 경우에는 $1 - h_\theta (x^{(i)})$를 크게 만드는 것과 동일합니다. Logistic regression과 cost function이 어떻게 유도되었는지에 대한 자세한 설명은 CS229 Note(http://cs229.stanford.edu/notes/cs229-notes1.pdf)의 supervised learning을 참고하면 됩니다.

이제 hypothesis $h_\theta$가 좋은지 측정할 수 있는 cost function이 생겼으니 어떻게 가지고 있는 트레이닝 데이터로 $J(\theta)$를 최소화하여 원하는 $\theta$를 구하는지 알아봅시다. 구하는데 성공하면 새로운 테스트 데이터가 1 혹은 0 중 어디로 분류하는 것이 가장 타당한지 검사하여 둘 중 하나의 class로 분류하게 될 것입니다. 이것은 곧 $P(y=1|x) > P(y=0|x)$이라면 1로 분류될 것이고 반대의 경우 0으로 분류하는 작업을 의미합니다. 또한 이것은 $h_\theta (x) \gt 0.5$인지 확인하는 과정과도 동일합니다.

$J(\theta)$를 최소화 시키기 위해 linear regressio에서와 동일한 도구를 사용합니다. 역시 마찬가지로 $J(\theta)$와 주어진 $\theta$위치에서의 $\nabla_\theta J(\theta)$를 계산할 수 있어야 합니다. $\theta_j$에 대한 $J(\theta)$ 편미분 값은 아래와 같습니다.

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

벡터 식으로 나타내면 그래디언트 벡터는 다음과 같이 됩니다.

$$\nabla_\theta J(\theta) = \sum_i x^{(i)} (h_\theta(x^{(i)}) - y^{(i)})$$

이것은 $h_\theta(x) = \sigma(\theta^\top x)$으로 변경된 것 외에는 linear regression의 그래디언트와 동일한 값입니다.

Exercise 1B

연습문제는 ex1/ex1b_logreg.m에서 시작합니다. 주어진 데이터로부터 logistic regression의 cost function과 그래디언트를 계산하는 코드를 작성하여야 합니다. 코드는 logistic_regression.m 파일 내에서 cost function의 값을 f에, 그래디언트는 g에 할당하도록 작성하면 됩니다. 올바르게 작성되면 분류 정확도는 100%가 나오게 됩니다.


Tags:
Add a Comment Trackback