逻辑回归(二):Loss易导

回顾

书接上回,讲到了逻辑回归的Loss函数的一般形式,大体如下:

\[ L(\theta) = \frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)}) \\=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] \\h_{\theta}(x) = g(\theta^TX)\\ g(z) = \frac{1}{1+e^{-z}} \]

梯度下降

已经有了Loss函数,那么我们要做的事情就是通过梯度下降的方法来确定最佳参数\(\theta\),使得对于训练集的所有数据,Loss函数值最小。那么我们就来对这看似复杂的函数进行一下求导吧。 ## 对Loss函数求偏导 我们知道函数有以下形式: \[ L(\theta) = \frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] \] \(\frac{1}{m}\)是常数,我们可以先放至一边。括号里面的\(y^{(i)}\)\((1-y^{(i)})\)都是常数,对导数的形式并无影响。Loss函数对\(\theta\)求偏导有以下形式: \[ \frac{\partial L(\theta)}{\partial \theta_j}=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}] \] 显然,要计算\(\frac{\partial L(\theta)}{\partial \theta_j}\),我们就只需要计算\(\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}\)以及\(\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}\)

这看起来还是非常吓人呢,不过没关系,笔者高中数学老师曾告诉过我们,一切反动派都是纸老虎。先让我们回到\(h_\theta(x^{(i)})\)的表达式,令\(z=\theta^TX\)

\[h_{\theta}(x) = g(z) =\frac{1}{1+e^{-z}}\]

根据复合函数的求导,我们可以知道: \[ \begin{aligned} \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}&= \frac{\partial log(g(z))}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial z} \frac{\partial z}{\partial \theta_j} \end{aligned} \] 一项一项拆解: \[ \frac{1}{g(z)} = 1+e^{-z} \]

\[ \frac{\partial g(z)}{\partial z} = -\frac{-e^{-z}}{(1+e^{-z})^2}=\frac{e^{-z}}{(1+e^{-z})^2} \]

\[ \frac{\partial z}{\partial \theta_j}=x_j \]

那么我们就可以得到\(log(h_\theta(x^{(i)}))\)\(\theta_j\)的偏导: \[ \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}=\frac{e^{-z}}{1+e^{-z}}\cdot x_j = (1-g(z))x_j \] 接着我们继续看\(log(1-h_\theta(x^{(i)}))\)\(\theta_j\)的偏导,事实上,依旧是根据复合函数的求导: \[ \begin{aligned} \frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j} &= \frac{-1}{1-h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j}\\ &= -\frac{1}{1-g(z)}\frac{\partial g(z)}{\partial \theta_j}\\ &= -\frac{1+e^{-z}}{e^{-z}}\cdot \frac{e^{-z}}{(1+e^{-z})^2} \cdot x_j\\ &= -g(z)\cdot x_j \end{aligned} \] OK,那么我们把得到的这两个式子代回Loss函数的偏导形式中,得到: \[ \begin{aligned} \frac{\partial L(\theta)}{\partial \theta_j}&=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}]\\ &= \frac{1}{m}\sum_{i=1}^m[-y^{(i)}(1-g(z))x_j+(1-y^{(i)})g(z)x_j]\\ &= \frac{1}{m}\sum_{i=1}^m[g(z)-y^{(i)}]x_j\\ &= \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j \end{aligned} \]

还是那句话,常数只是起到一个缩放的作用,重要的是求和号后面的形式。那么看到这个式子,你有想到什么吗?事实上,逻辑回归和线性回归的的Loss函数的偏导形式是相同的,多么美丽的巧合!值得一提的是,这也仅仅是巧合而已,线性回归和逻辑回归是两个不同的算法,因为我们使用的model,也就是假设函数\(h_\theta(x)\)是不同的。

更新公式

与线性回归同理,我们依旧是按照如下式子进行参数的更新: \[ \theta_j := \theta_j - \eta \frac{\partial}{\partial \theta_j}L(\theta) \] 将前面求得的表达式代入得: \[ \theta_j := \theta_j - \eta \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j \]

多分类问题

目前为止我们也只是提出了一种解决二分类问题的方法,但是日常生活中,我们常常需要进行更多种的分类,比如除了猫和狗,我们还希望计算机能识别出老鼠等更多动物;除了分辨诈骗和非诈骗邮件,我们还希望计算机能自动分出哪些邮件是家人发的,哪些是朋友发的等等。那么,我们讨论过的逻辑回归算法,能不能应用在多分类上呢?答案是肯定的。以三分类为例子,我们用圆形、正方形和三角形来表示。如下图:

我们可以把这个问题转换成三个二分类问题。先把所有圆形的看作第一类,其余的都看作第二类,如下图:

利用这些数据,我们可以训练得到一个函数\(h_\theta^{(1)}(x)\),这个函数的输出的意义是\(x\)为圆形的概率。

然后把三角形看作一类,其他的看作另一类:

可以训练得到一个函数\(h_\theta^{(2)}(x)\),这个函数的输出的意义是\(x\)为三角形的概率。

同理,把正方形当作一类,其他当作另一类:

可以训练得到一个函数\(h_\theta^{(3)}(x)\),这个函数的输出的意义是\(x\)为三角形的概率。

那么,对于一个输入\(X\),我们可以把\(X\)输入到三个函数中,则得到这个\(X\)为三种类型的概率,概率最大的那个函数对应的类别即为结果。

总结

逻辑回归讲到这里就差不多了,当然还有正则项之类的知识,我自己也没太想好应该怎么理解,等到以后有机会再写。有意思的是,清楚了逻辑回归的基础知识,我们就快要揭开神经网络的神秘面纱了。