参考资料:
The equivalence of logistic regression and maximum entropymodels
从最大熵模型解释逻辑回归
最大熵模型原理小结——刘建平
1 前言
早期的博客中写过一篇逻辑回归的介绍,这篇博文中对逻辑回归的“输入为何能代表概率“这个问题做了浅层的探讨,但碍于当年太过年轻,对问题理解不够深刻,这次回过头来把这个问题重新梳理一遍。
这个问题还可以换种问法,那就是——逻辑回归sigmoid函数的形式到底是怎么来的。先说结论,逻辑回归的形式其实存在一个起源,并不是因为sigmoid函数本身的性质好就想当然套在了 ω x + b \omega x+b ωx+b上。通过最大熵模型的优化思路,可以从零到有的推导出逻辑回归的形式。而最大熵模型本身就是在对后验概率建模,所以逻辑回归的输出自然也可以代表概率。
综上,两点思路:
- 最大熵模型本身在对后验概率建模
- 根据最大熵模型的优化思路,可以推导出逻辑回归的形式
针对第一点,推荐一篇介绍最大熵模型的博客,写得非常不错,强烈建议学懂最大熵之后再看本文,否则会引起不适;第二点则是本文探讨的重点。
ok,let’s do it !
逻辑回归正向推导出的一个事实
这里对逻辑回归的基本原理不做赘述,不了解的朋友可以看我以前的博客。逻辑回归的基本形式可以表示为以下公式:
π ( x ) 1 = e λ ⋅ x e λ ⋅ x + 1 π ( x ) 2 = 1 − π ( x ) 1 \begin{aligned} \pi(x)_{1} &=\frac{e^{\lambda \cdot x}}{e^{\lambda \cdot x}+1} \\ \pi(x)_{2} &=1-\pi(x)_{1} \end{aligned} π(x)1π(x)2=eλ⋅x+1eλ⋅x=1−π(x)1 其中1、2代表二分类两种类别, π \pi π代表计算概率的函数。我们可以将两个类别的形式统一,写成类似softmax的形式:
π ( x ) v = e λ v ⋅ x ∑ u = 1 k e λ u ⋅ x \pi(x)_{v}=\frac{e^{\lambda_{v} \cdot x}}{\sum_{u=1}^{k} e^{\lambda_{u} \cdot x}} π(x)v=∑u=1keλu⋅xeλv⋅x 其中 v v v表示当前类别, k k k表示类别的总数,在二分类中为2。
逻辑回归的似然方程可以理解为极大化预测出正确类别的概率,即:
∏ i = 1 m π ( x ( i ) ) y ( i ) \prod_{i=1}^{m} \pi(x(i))_{y(i)} i=1∏mπ(x(i))y(i) 其中 m m m为样本总量, y ( i ) y(i) y(i)为第 i i i个样本的真实标签, π ( x ( i ) ) y ( i ) \pi(x(i))_{y(i)} π(x(i))y(i)为将第 i i i个样本预测为真实标签的概率。针对所有 m m m个样本,我们希望最大化上式。累乘不好解,取对数变累加:
f ( λ ) = ∑ i = 1 m log ( π ( x ( i ) ) y ( i ) ) f(\lambda)=\sum_{i=1}^{m} \log \left(\pi(x(i))_{y(i)}\right) f(λ)=i=1∑mlog(π(x(i))y(i)) λ \lambda λ为决定函数 π \pi π的参数,定义 λ u , j \lambda_{u,j} λu,j为第 u u u类第 j j j维特征的系数。
我们知道逻辑回归求解的问题是一个凸优化问题,具有全局唯一最优解,取最优解时,针对任何 λ \lambda λ的偏导数都应该为0,基于这一点,求上式对 λ u , j \lambda_{u,j} λu,j的偏导数。
∂ ∂ λ u , j f ( λ ) = ∂ ∂ λ u , j ∑ i = 1 m log ( π ( x ( i ) ) y ( i ) ) = ∑ i = 1 m 1 π ( x ( i ) ) y ( i ) ∂ ∂ λ u , j π ( x ( i ) ) y ( i ) \begin{aligned} \frac{\partial}{\partial \lambda_{u, j}} f(\lambda) &=\frac{\partial}{\partial \lambda_{u, j}} \sum_{i=1}^{m} \log \left(\pi(x(i))_{y(i)}\right) \\ &=\sum_{i=1}^{m} \frac{1}{\pi(x(i))_{y(i)}} \frac{\partial}{\partial \lambda_{u, j}} \pi(x(i))_{y(i)} \end{aligned} ∂λu,j∂f(λ)=∂λu,j∂i=1∑mlog(π(x(i))y(i))=i=1∑mπ(x(i))y(i)1∂λu,j∂π(x(i))y(i) 这里是针对某一种类别 u u u进行求导的,所以存在label为 u u u的样本,也存在label不为 u u u的样本,根据这个思路继续推导:
= ∑ i = 1 y ( i ) = u m 1 π ( x ( i ) ) u ∂ ∂ λ u , j π ( x ( i ) ) u + ∑ i = 1 y ( i ) ≠ u m 1 π ( x ( i ) ) y ( i ) ∂ ∂ λ u , j π ( x ( i ) ) y ( i ) \begin{aligned} =& \sum_{i=1 \atop y(i)=u}^{m} \frac{1}{\pi(x(i))_{u}} \frac{\partial}{\partial \lambda_{u, j}} \pi(x(i))_{u} \\ &+\sum_{i=1 \atop y(i) \neq u}^{m} \frac{1}{\pi(x(i))_{y(i)}} \frac{\partial}{\partial \lambda_{u, j}} \pi(x(i))_{y(i)} \end{aligned} =y(i)=ui=1∑mπ(x(i))u1∂λu,j∂π(x(i))u+y(i)=ui=1∑mπ(x(i))y(i)1∂λu,j∂π(x(i))y(i) 上式中的两个偏导数可以表示为:
∂ ∂ λ v , j π ( x ) v = x j π ( x ) v ( 1 − π ( x ) v ) ∂ ∂ λ u , j π ( x ) v = − x j π ( x ) v π ( x ) u (when u ≠ v ) \begin{aligned} \frac{\partial}{\partial \lambda_{v, j}} \pi(x)_{v} &=x_{j} \pi(x)_{v}\left(1-\pi(x)_{v}\right) \\ \frac{\partial}{\partial \lambda_{u, j}} \pi(x)_{v} &=-x_{j} \pi(x)_{v} \pi(x)_{u} \text { (when } \left.u \neq v\right) \end{aligned} ∂λv,j∂π(x)v∂λu,j∂π(x)v=xjπ(x)v(1−π(x)v)=−xjπ(x)vπ(x)u (when u=v) 代入其中,继续推导得到:
= ∑ i = 1 y ( i ) = u m 1 π ( x ( i ) ) u x ( i ) j π ( x ( i ) ) u ( 1 − π ( x ( i ) ) u ) − ∑ i = 1 y ( i ) ≠ u m 1 π ( x ( i ) ) y ( i ) x ( i ) j π ( x ( i ) ) y ( i ) π ( x ( i ) ) u = ∑ i = 1 y m x ( i ) j ( 1 − π ( x ( i ) ) u ) − ∑ i = 1 y ( i ) ≠ u m x ( i ) j π ( x ( i ) ) u = ∑ i = 1 y ( i ) = u m x ( i ) j − ∑ i = 1 m x ( i ) j π ( x ( i ) ) u \begin{aligned} =& \sum_{i=1 \atop y(i)=u}^{m} \frac{1}{\pi(x(i))_{u}} x(i)_{j} \pi(x(i))_{u}\left(1-\pi(x(i))_{u}\right) \\ &-\sum_{i=1 \atop y(i) \neq u}^{m} \frac{1}{\pi(x(i))_{y(i)}} x(i)_{j} \pi(x(i))_{y(i)} \pi(x(i))_{u} \\ =& \sum_{i=1 \atop y}^{m} x(i)_{j}\left(1-\pi(x(i))_{u}\right) \\ &-\sum_{i=1 \atop y(i) \neq u}^{m} x(i)_{j} \pi(x(i))_{u} \\ =& \sum_{i=1 \atop y(i)=u}^{m} x(i)_{j}-\sum_{i=1}^{m} x(i)_{j} \pi(x(i))_{u} \end{aligned} ===y(i)=ui=1∑mπ(x(i))u1x(i)jπ(x(i))u(1−π(x(i))u)−y(i)=ui=1∑mπ(x(i))y(i)1x(i)jπ(x(i))y(i)π(x(i))uyi=1∑mx(i)j(1−π(x(i))u)−y(i)=ui=1∑mx(i)jπ(x(i))uy(i)=ui=1∑mx(i)j−i=1∑mx(i)jπ(x(i))u 前面说过,偏导数应该为0,所以我们可以得到以下结论:
∑ i = 1 m π ( x ( i ) ) u x ( i ) j = ∑ i = 1 y ( i ) = u m x ( i ) j ( for all u , j ) \sum_{i=1}^{m} \pi(x(i))_{u} x(i)_{j}=\sum_{i=1 \atop y(i)=u}^{m} x(i)_{j}(\text { for all } u, j) i=1∑mπ(x(i))ux(i)j=y(i)=ui=1∑mx(i)j( for all u,j) 这个结论对于任何一个 λ \lambda λ都适用。定义一个类似损失函数的函数 A ( u , y ) A(u,y) A(u,y),当括号内相同时为1,不同时为0,上式可以更优雅的写为:
∑ i = 1 m π ( x ( i ) ) u x ( i ) j = ∑ i = 1 m A ( u , y ( i ) ) x ( i ) j ( for all u , j ) \sum_{i=1}^{m} \pi(x(i))_{u} x(i)_{j}=\sum_{i=1}^{m} \mathrm{~A}(u, y(i)) x(i)_{j}(\text { for all } u, j) i=1∑mπ(x(i))ux(i)j=i=1∑m A(u,y(i))x(i)j( for all u,j) 也就是说,我们要找的 π \pi π,应该极力靠近于这个函数A。(当然这是废话,函数A就代表着正确答案)
这是正向推导得到的一个事实,我们先放在这儿,一会儿要用。
从最大熵角度推导
最大熵模型讲究”知道的作为约束,不知道的千万别瞎假设“,以一种保守的态度保证熵最大,也就是不确定性最大。我们的预测对象是类别,我们要在保证label的熵是最大的情况下去猜测label的分布,可以用下式:
− ∑ v = 1 k ∑ i = 1 m π ( x ( i ) ) v log ( π ( x ( i ) ) v ) -\sum_{v=1}^{k} \sum_{i=1}^{m} \pi(x(i))_{v} \log \left(\pi(x(i))_{v}\right) −v=1∑ki=1∑mπ(x(i))vlog(π(x(i))v) 这个式子也与最大熵模型的求解目标一致,这里我们不对 π \pi π做任何约束和假设。参照最大熵模型,列出目标函数以外存在的约束:
π ( x ) v ≥ 0 always ∑ v = 1 k π ( x ) v = 1 always ∑ i = 1 m π ( x ( i ) ) u x ( i ) j = ∑ i = 1 m A ( u , y ( i ) ) x ( i ) j ( for all u , j ) \begin{aligned} \pi(x)_{v} & \geq 0 \text { always } \\ \sum_{v=1}^{k} \pi(x)_{v} &=1 \text { always } \\ \sum_{i=1}^{m} \pi(x(i))_{u} x(i)_{j} &=\sum_{i=1}^{m} \mathrm{~A}(u, y(i)) x(i)_{j}(\text { for all } u, j) \end{aligned} π(x)vv=1∑kπ(x)vi=1∑mπ(x(i))ux(i)j≥0 always =1 always =i=1∑m A(u,y(i))x(i)j( for all u,j) 这几个约束都非常好理解,第一个意为如果想表示概率,那么必须大于0;第二个意为如果想表示概率和必须为1;第三个则是我们上一节正向推导出的一个事实。
注意:第三个约束所指的事实,它的推导过程与sigmoid函数没沾一点关系,所以不存在从sigmoid函数正推又反推的情况。
有约束优化的求解方式自然是拉格朗日乘子法,拉格朗日方程可以表示为:
L = ∑ j = 1 n ∑ v = 1 k λ v , j ( ∑ i = 1 m π ( x ( i ) ) v x ( i ) j − A ( v , y ( i ) ) x ( i ) j ) + ∑ v = 1 k ∑ i = 1 m β i ( π ( x ( i ) ) v − 1 ) − ∑ v = 1 k ∑ i = 1 m π ( x ( i ) ) v log ( π ( x ( i ) ) v ) \begin{aligned} L=& \sum_{j=1}^{n} \sum_{v=1}^{k} \lambda_{v, j}\left(\sum_{i=1}^{m} \pi(x(i))_{v} x(i)_{j}-\mathrm{A}(v, y(i)) x(i)_{j}\right) \\ &+\sum_{v=1}^{k} \sum_{i=1}^{m} \beta_{i}\left(\pi(x(i))_{v}-1\right) \\ &-\sum_{v=1}^{k} \sum_{i=1}^{m} \pi(x(i))_{v} \log \left(\pi(x(i))_{v}\right) \end{aligned} L=j=1∑nv=1∑kλv,j(i=1∑mπ(x(i))vx(i)j−A(v,y(i))x(i)j)+v=1∑ki=1∑mβi(π(x(i))v−1)−v=1∑ki=1∑mπ(x(i))vlog(π(x(i))v) 既然我们的目标是找到 π \pi π的样子,那么我们对其求偏导并使得结果为0,可以得到:
∂ ∂ π ( x ( i ) ) u L = λ u ⋅ x ( i ) + β i − log ( π ( x ( i ) ) u ) − 1 \frac{\partial}{\partial \pi(x(i))_{u}} L=\lambda_{u} \cdot x(i)+\beta_{i}-\log \left(\pi(x(i))_{u}\right)-1 ∂π(x(i))u∂L=λu⋅x(i)+βi−log(π(x(i))u)−1 λ u ⋅ x ( i ) + β i − log ( π ( x ( i ) ) u ) − 1 = 0 \lambda_{u} \cdot x(i)+\beta_{i}-\log \left(\pi(x(i))_{u}\right)-1=0 λu⋅x(i)+βi−log(π(x(i))u)−1=0 把我们要找的目标拿出来放到等式左边,可以得到:
π ( x ( i ) ) u = e λ u ⋅ x ( i ) + β i − 1 \pi(x(i))_{u}=e^{\lambda_{u} \cdot x(i)+\beta_{i}-1} π(x(i))u=eλu⋅x(i)+βi−1 结合之前的约束二,概率和为一,可以有如下条件:
∑ v = 1 k e λ v ⋅ x ( i ) + β i − 1 = 1 e β = 1 / ∑ v = 1 k e λ v ⋅ x ( i ) − 1 \begin{array}{l} \sum_{v=1}^{k} e^{\lambda_{v} \cdot x(i)+\beta_{i}-1}=1 \\ e^{\beta}=1 / \sum_{v=1}^{k} e^{\lambda_{v} \cdot x(i)-1} \end{array} ∑v=1keλv⋅x(i)+βi−1=1eβ=1/∑v=1keλv⋅x(i)−1 将结果带回 π ( x ( i ) ) u \pi(x(i))_{u} π(x(i))u的表达式,我们就得到了逻辑回归的形式:
π ( x ) u = e λ u ⋅ x ∑ v = 1 k e λ v ⋅ x \pi(x)_{u}=\frac{e^{\lambda_{u} \cdot x}}{\sum_{v=1}^{k} e^{\lambda_{v} \cdot x}} π(x)u=∑v=1keλv⋅xeλu⋅x 非常漂亮的推导,真是精准而优雅。
最后
除此之外还有一种推导方式,就是篇头参考资料”从最大熵模型解释逻辑回归“的推导方式。这种方式严格遵守最大熵模型解的形式,但我并不清楚相对应的特征函数是怎么给出来的,特征函数有什么含义,所以我对这个推导的态度是存疑的。
个人认为,逻辑回归可以从最大熵理论的角度进行推导,用了最大熵模型的求解思路,二者的优化目标也非常相似,但并不能说逻辑回归完全是最大熵模型(狭义上)的一个例子,因为我并不认可那个特征函数,没有数学上的解释。
最后,贴一张刘建平大佬的观点,与我的观点相似。
(图片来源,篇头参考资料“最大熵模型原理小结——刘建平”)