2년 전에 Coursera에 개설된 머신러닝 코스를 들었는데, 업무에 인공지능을 적용해보려고 머신러닝을 복습하고 있다. 요즘 ‘딥러닝 첫걸음’이라는 책을 읽고 있는데, 식 표기나 공식 유도 방식이 달라서 헷갈려서 기억을 더듬어서 공식을 유도해봤다. 거의 다 잊어버려서 생각보다 시간이 걸렸기 때문에 기록 차원에서 남겨두려고 한다.

Binary Classification 문제는 Linear Regression(선형회귀)와 다르게 결과값이 0 또는 1로 분류되어야 한다. Sigmoid 함수의 결과는 범위가 [0, 1]이라서 이 문제에서 유용하게 사용할 수 있다.

g(z)=11+ez g(z) = \frac{1}{1+e^{-z}}

g(z)=g(z)(1g(z)) g'(z) = g(z)(1-g(z))

문제를 간략하게 만들기 위해 Bias는 없다고 가정하고, n차원의 feature 벡터 x(i) (i=1...m)\mathbf{x}^{(i)} \text{ } (i=1...m) m개를 이용해 같은 차원의 파라미터 벡터 w\mathbf{w}를 학습시키고자 한다. 우리의 학습모델 hh 와 비용함수 J(w)J(\mathbf{w})는 다음과 같다:

h(x)=g(wTx) h(\mathbf{x}) = g(\mathbf{w^Tx})

J(w)=1mi=1mcost(x(i),y(i)) J(\mathbf{w}) = \frac{1}{m}\sum_{i=1}^{m}cost(\mathbf{x^{(i)}, y^{(i)}})

cost(x(i),y(i))={log(h(x(i)))if y=1log(h(1x(i)))if y=0 cost(\mathbf{x^{(i)}, y^{(i)}}) = \begin{cases} -log(h(\mathbf{x^{(i)}})) & \text{if y=1} \\ -log(h(1-\mathbf{x^{(i)}})) & \text{if y=0} \\ \end{cases}

문제가 binary classification이므로 y의 값은 무조건 0 또는 1이다. 따라서 cost function을 간략하게 하나의 식으로 나타낼 수 있는데, 다음과 같다.

cost(x(i),y(i))=y(i)log(h(x(i)))(1y(i))log(h(1x(i))) cost(\mathbf{x^{(i)}, y^{(i)}}) = -\mathbf{y^{(i)}}log(h(\mathbf{x^{(i)}})) -(1-\mathbf{y^{(i)}})log(h(1-\mathbf{x^{(i)}}))

w\mathbf{w}를 gradient descent 최적화 방식을 이용해 주려면, ww에 따른 비용함수의 변화량, 즉 미분값을 이용해서 업데이트 해줘야 한다.

w:=wαwJ(w) where α is learning rate \mathbf{w} := \mathbf{w} - \alpha\frac{\partial}{\partial \mathbf{w}}J(\mathbf{w}) \text{ where } \alpha \text{ is learning rate}

결론부터 말하면, wJ(w) \frac{\partial}{\partial \mathbf{w}}J(\mathbf{w}) 는 선형회귀에서 사용하는 업데이트 식과 모양이 같이 나온다. w\mathbf{w}의 j번째 요소에 대해서 변화량을 살펴보자.

wjJ(w)=wj1mi=1m(y(i)log(h(x(i)))+(1y(i))log(1h(x(i))))=1mi=1m(y(i)wjlog(h(x(i)))+(1y(i))wjlog(1h(x(i)))=1mi=1m(y(i)h(x(i))h(x(i))wjwTx(i)+(1y(i))h(x(i))1h(x(i))wjwTx(i))=1mi=1m(y(i)h(x(i))(1h(x(i)))h(x(i))xj(i)+(1y(i))h(x(i))(1h(x(i)))1h(x(i))xj(i))=1mi=1m(h(x(i))y(i))xj(i) \begin{aligned} \frac{\partial}{\partial \mathbf{w}_j}J(\mathbf{w}) &= \frac{\partial}{\partial \mathbf{w}_j} - \frac{1}{m}\sum_{i=1}^{m} \bigg( \mathbf{y^{(i)}}log(h(\mathbf{x^{(i)}})) + (1-\mathbf{y^{(i)}})log(1-h(\mathbf{x^{(i)}})) \bigg) \\ &= -\frac{1}{m}\sum_{i=1}^{m} \bigg( \mathbf{y^{(i)}}\frac{\partial}{\partial \mathbf{w}_j}log(h(\mathbf{x^{(i)}})) + (1-\mathbf{y^{(i)}})\frac{\partial}{\partial \mathbf{w}_j}log(1-h(\mathbf{x^{(i)}}) \bigg) \\ &= -\frac{1}{m}\sum_{i=1}^{m} \bigg( \mathbf{y^{(i)}}\frac{h'(\mathbf{x^{(i)}})}{h(\mathbf{x^{(i)}})} \frac{\partial}{\partial \mathbf{w}_j} \mathbf{w}^T\mathbf{x}^{(i)} + (1-\mathbf{y^{(i)}})\frac{-h'(\mathbf{x^{(i)}})}{1-h(\mathbf{x^{(i)}})} \frac{\partial}{\partial \mathbf{w}_j} \mathbf{w}^T\mathbf{x}^{(i)} \bigg) \\ &= -\frac{1}{m}\sum_{i=1}^{m} \bigg( \mathbf{y^{(i)}} \frac{h(\mathbf{x^{(i)}})(1-h(\mathbf{x^{(i)}}))}{h(\mathbf{x^{(i)}})} \mathbf{x}^{(i)}_j + (1-\mathbf{y^{(i)}}) \frac{-h(\mathbf{x^{(i)}})(1-h(\mathbf{x^{(i)}}))}{1-h(\mathbf{x^{(i)}})} \mathbf{x}^{(i)}_j \bigg) \\ &= \frac{1}{m}\sum_{i=1}^{m} ( h(\mathbf{x}^{(i)}) - \mathbf{y^{(i)}} ) \mathbf{x}^{(i)}_j \\ \end{aligned}

이 식을 벡터 w\mathbf{w}에 대해서 다시 써주면 다음과 같다:

w:=wα1mi=1m(h(x(i))y(i))x(i) \mathbf{w} := \mathbf{w} - \alpha\frac{1}{m}\sum_{i=1}^{m} ( h(\mathbf{x}^{(i)}) - \mathbf{y^{(i)}} ) \mathbf{x}^{(i)}

이상으로 Logistic regression에 쓰이는 업데이트 함수를 유도해봤다. 식의 모양은 선형 회귀에서 쓰이는 것과 같고, 모델(hypothesis)가 다르다는 것을 이해하면 된다.

Reference
Machine Learning - complete course notes