逻辑回归自问自答

逻辑回归作为最基础、最简单的模型,在工业界应用非常广泛。LR本身具有极强的鲁棒性和非常简单的计算方式,以至于我们不需要了解很多“为什么”就可以得到一个不错的结果。
本着什么都略懂一些,生活更精彩一点的原则,大概用几个Q&A的形式(这也是从最近看的《百面机器学习》里面学来的)来记录一些关于LR的小知识。

1. “逻辑回归”为什么要叫回归?

1.1 历史问题

逻辑回归是个分类模型,之所以叫这个名字是因为最早提出LR是在一篇叫《xxxx回归分析》的文章里,后面就沿用了这个名字。

1.2 “回归”概率

这个解释往往不是那么令人性福,那么下面这个说法会更好一些,如果我们把一个分类问题,看作是对一次实验出现“1”概率p的预估问题,用一个什么函数去拟合这个p,也就是f(x)=p(事实上,分类问题一般也都是这么做的),那我们的问题其实也就变成了“回归一个函数f(x)”。

1.3 LR的由来

所以LR是这样设计的,训练一个函数,来拟合“出现1的概率”p。在普通问题中我们会考虑回归目标的值域,然后选择一个合适的激活函数作为上面的f(·),但是站在设计LR的历史角度上来说,可能还没有激活函数的概念。那就选最简单的线性函数:
       f(x)=wx+b
直接拟合p是不现实的,这时候就需要把p做个映射,变成一个值域和f(x)匹配的值,也即g(p) \in (-\infty, \infty); p \in [0, 1]。反正,找到一个:
       g(p)=log{\frac p {1-p}}
概率学上将\frac p {1-p}称为出现1的“几率”,log{\frac p {1-p}}叫做“对数几率”,用f(x)去拟合g(p)则有:
       wx+b=log{\frac p {1-p}}
做个简单的变换,把p放到等号一边,变成一个end2end的标准问题:
       p = \frac 1 {1+e^{-wx-b}}
其实p也就是我们的学习目标y,写成这样是不是就很眼熟。
所以对于逻辑回归,一言以蔽之就是:

逻辑回归是对实验成功对数几率的线性拟合

2. LR的损失函数是啥?

2.1 损失函数推导

按照上述的理论,LR直接输出的就是一个概率值,很自然的,对于样本\{x_i\}(也就是所谓的训练集)可以做最大似然做参数的估计
       L(x)=\prod^n_{i=0}p_i
注意到,p表达的是y=1的概率,那么对于y=0的样本,需要写成1-p,所以最大似然估计写成的loss应该是
       L(x)=\prod^n_{i=0}(p_i)^{y_i}(1-p_i)^{1-y_i}
进一步,取个对数
    L(x)=\sum^n_{i=0}{y_i} log\frac 1 {1+e^{-wx_i-b}}+ {(1-y_i)}log \frac {e^{-wx_i-b}} {1+e^{-wx_i-b}}

2.2 收敛性

关于损失函数的最大似然推导显得非常顺畅,但是经验告诉我们,损失函数并不是写出来就可以的,loss最大的作用是在于利用梯度来寻优,最终完成模型参数的训练。因此,一个loss能否求得最优解就最需要考虑的问题。
不出意外地,书上都会告诉我们,这个loss(也就是分类问题中的交叉熵损失),是满足KKT条件的,也就是说整个求解问题是个凸问题,进而告诉我们有全局最优解。相应的基于最小二乘的MSE在这个问题上,是不满足KKT条件的,所以这个最自然的结果也就是最好的结果——这往往是符合体感的,人类劳动中总结出来的经验总是被科学证实,但仍然对所谓的KKT条件认识不是很清晰,下面我们可以用一种比较土的方式感受一下凸命题。基于交叉熵和均方误差的loss都写在下面:

\begin{align*} L_1(x)&=\sum^n_{i=0}{y_i} \frac 1 {1+e^{-wx_i-b}}+ {(1-y_i)} \frac {e^{-wx_i-b}} {1+e^{-wx_i-b}} \\ \end{align*}

\begin{align*} L_2(x)&=\sum^n_{i=0}({y_i} - \frac 1 {1+e^{-wx_i-b}})^2+ ({(1-y_i)} \frac {e^{-wx_i-b}} {1+e^{-wx_i-b}}) ^2 \\ \end{align*}

话不多说,对loss求导,公式里面全是sigmoid函数,因此可以先把sigmoid函数的导数写出来,后面会简洁一些

sigmoid(x)=\frac 1 {1+e^{-wx-b}}
\frac {\partial sigmoid(x)} {\partial x}=w(sigmoid(x)-sigmoid(x)^2)
\frac {\partial log(sigmoid(x))} {\partial x} =w(1-sigmoid(x))

好了下面开始求导,这里把sigmoid函数称为s(wx)
对于交叉熵损失,有:

\begin{align*} \frac {\partial L_1(x)} {\partial x} &= \sum _{i=1} ^n[wy_i(1-s(wx))-w(1-y_i)s(wx)]\\ &= \sum _{i=1} ^nw[y_i-s(wx)] \end{align*}
\begin{align*} \frac {\partial^2 L_1(x)} {\partial^2 x} &= \sum _{i=1} ^n-w*s(wx)'\\ &=-w^2 \sum _{i=1} ^n [s(wx)-s^2(wx)] \\ &<0 \end{align*}

而对于平均平方损失有:

\begin{align*} \frac {\partial L_2(x)} {\partial x} &= \sum _{i=1} ^n2[y_i-s(wx)]*s(wx)'\\ &=\sum _{i=1} ^n2w[y_i-s(wx)]*[s(wx)-s^2(wx)]\\ &=\sum _{i=1} ^n2w*s(wx)*[y_i-s(wx)]*[1-s(wx)]\\ \end{align*}
\begin{align*} \frac {\partial^2 L_2(x)} {\partial^2 x} &=\sum _{i=1} ^n2w*s(wx)'*[y_i-s(wx)]*[1-s(wx)] \\ & ~~ ~~ ~~+2w*s(wx)*[y_i-s(wx)]*[1-s(wx)'] \\ & ~~ ~~ ~~+2w*s(wx)*[y_i-s(wx)']*[1-s(wx)]\\ &=\sum _{i=1} ^n2w^2*[s-s^2]*[y_i-s]*[1-s] \\ & ~~ ~~ ~~~+2w*s*[y_i-s]*[1-ws+ws^2] \\ & ~~ ~~ ~~~+2w*s*[y_i-ws+ws^2]*[1-s]\\ \end{align*}

用二阶导数来理解,交叉熵的二阶导数符号确定,因此是个凸的;
用MSE求出来的导数符号不确定,存在多个极值点,所以非凸。

2.3 MSE vs. CrossEntropy

交叉熵在分类中是一个非常好用的损失,同时MSE又是一个哪里都能用的万金油损失,在工具非常发达的情况下尤其是tf/torch这种傻瓜式框架的普及,loss的选择有时候就成了一种超参数,并行跑个实验靠数据说话即可。
但损失函数具体表现区别的原因究竟是为什么,我们从梯度反向传播的角度来说一说——说白了,还是求导。假设输出(在nn里也就是激活函数)还是一个sigmoid,写成这样y=\sigma(x)=\frac 1 {1+ e^{-wx-b}}
在一次backpropagation中,得到对参数wb的梯度(也就是偏导)如下:

\begin{align*} \frac {\partial y} {\partial w}&=\sum^n_{i=0}{y_i} * x(1-s(wx))- {(1-y_i)} *x*s(wx)) \\ &=\sum^n_{i=0}{y_i} * x- x*s(wx) \\ &=\sum^n_{i=0}x*[y_i-s(wx)] \end{align*}

\begin{align*} \frac {\partial y} {\partial b}&=\sum^n_{i=0}{y_i} * (1-s(wx))- {(1-y_i)} *s(wx)\\ &=\sum^n_{i=0} [yi-s(wx)] \end{align*}

bias的偏导直接跟误差线性相关了

但是MSE的偏导是这样的

\begin{align*}y &= L_2(x)\\ &=\sum^n_{i=0}({y_i} - \frac 1 {1+e^{-wx_i-b}})^2 \end{align*}
\begin{align*} \frac {\partial y} {\partial w} &= \sum^n_{i=0}2x({y_i} - s(wx))*(s(wx)-s(wx)^2)\\ \end{align*}
\begin{align*} \frac {\partial y} {\partial b}=\sum^n_{i=0}2({y_i} - s(wx))*(s(wx)-s(wx)^2) \end{align*}

注意到,s(wx)是很容易饱和的,也就是说上述的s(wx)'=s(wx)-s(wx)^2非常容易为0,这个时候,反向传播的梯度就消失了。

所以,通常会有这种结论,如果sigmoid激活的分类问题,一般用交叉熵的效率会比MSE高。

2.4 MSE是怎么来的?

在损失函数领域,最小二乘和极大似然可以说是各领半壁江山。

  • 极大似然很好理解,就是把每个样本当成是独立事件,计算各个样本的联合概率,通过优化概率训练参数。
  • 最小二乘看起来也很好理解,直接把样本的误差求导,但是由于L1范数在原点不可导,所以变成了可导的二次函数L2=\frac 1 n \sum(y_i-\hat y_i)^2

那对于最小二乘,有没有其他的解释呢,其实是有的:最小二乘其实仍然是基于极大似然的推导。
对于一个学习任务,y(i) = \hat y(i) + \epsilon(i),我们认为\hat y(i)是对真实值的拟合/估计,\epsilon(i)为误差。最小二乘一个基础的假设是误差符合均值为0的正态分布,也就是说:

\begin{align*} \epsilon(i) \sim N(0, \sigma^2) &= \frac 1 {\sqrt {2\pi}\sigma} e^{-\frac {\epsilon(i)^2} {2\sigma^2}}\\ &= \frac 1 {\sqrt {2\pi}\sigma} e^{-\frac {(y_i-\hat y_i)^2} {2\sigma^2}} \end{align*}

根据误差\epsilon(i)的概率密度函数,也可以构造一个极大似然函数

\begin{align*} L(x)&=\prod^n_{i=0}\epsilon(i)\\ &= \prod^n_{i=0} \frac 1 {\sqrt {2\pi}\sigma} e^{-\frac {\epsilon(i)^2} {2\sigma^2}}\\ &=\prod^n_{i=0} \frac 1 {\sqrt {2\pi}\sigma} e^{-\frac {(y_i-\hat y_i)^2} {2\sigma^2}} \\ &=(\frac 1 {\sqrt {2\pi}\sigma})^n\prod^n_{i=0} e^{-\frac {(y_i-\hat y_i)^2} {2\sigma^2}} \\ &=(\frac 1 {\sqrt {2\pi}\sigma})^n e^{-\frac 1 {2\sigma^2}\sum^n_{i=0}{ {(y_i-\hat y_i)^2} }} \end{align*}

注意到
\sum^n_{i=0} {(y_i-\hat y_i)^2} = n*L2(x)
其极大似然写成:
\begin{align*} L(x) &= (\frac 1 {\sqrt {2\pi}\sigma})^n e^{-\frac 1 {2\sigma^2}\sum^n_{i=0}{{(y_i-\hat y_i)^2}}} \\ &=(\frac 1 {\sqrt {2\pi}\sigma})^n e^{-\frac n {2\sigma^2} L2(x)} \end{align*}

L(x)关于L2(x)是单调的,优化L(x)L2(x)的结果是一样的——至此,得到了最小二乘从最大似然的推导。

小结

以上是一点关于LR最基础用法的来由和相关的一点分析,换成神经网络里面的术语,无外乎“激活函数”和“损失函数”。
内容不多,但是里面很多东西也是理解了很长时间才想明白个大概,包括在写这些公式的过程中,也会陷入一些自己都不知道怎么解释的窘境,也是翻阅了不少材料,其中大神刘建平Pinard博客真的是获益匪浅,深入浅出言简意赅,每一篇都值得读一读。
关于LR还有很多有意思的应用,也正是这些工业化的改造才使得这么一个简单的函数在这个深度学习满天飞的年代依然是某些大公司的首选,留着日后再说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258