遵循统一的机器学习框架理解逻辑回归

标签: 机器学习 LR 分类

一、前言

  1. 我的博客仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
  2. 本文参考了网络上诸多资料。

二、理解

统一的机器学习框架(MLA):

1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

按照如上所说框架,LR最核心的就是损失函数使用了 SigmoidCross Entropy

LR: Sigmoid + Cross Entropy

Model

题外话:参照上一篇博客:遵循统一的机器学习框架理解SVM,就会发现LR与SVM在模型和算法上是一样的,不同点就在于损失函数的不同。

给定数据集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{0,1\}\)\(y\) 表示预测的 \(label\) 值,线性函数:
\[f(x)=w^Tx+b\]

\[y=\begin{cases} 1,\quad &f(x)>0\\ 0, &f(x)<0 \end{cases}\]
同时:
\(\hat{y}=1\) 时,\(f(x)\)越大越好; $\hat{y}=0 $ 时,\(f(x)\)越小越好。

Loss

经验风险最小化(交叉熵损失函数):Sigmoid + Cross Entropy。
增加Sigmoid的目的是为了把 \(f(x)\) 的值放缩到0-1之间,用于计算交叉熵损失。

\[ \begin{aligned} &z = \sigma(f(x))\\ &p(y=1|x;w,b) = z\\ &p(y=0|x;w,b) = 1-z \end{aligned} \]

\(z\) 表示预测出的可能性

经验风险

1.使用 \(sigmoid + cross\ entropy\) 的损失函数:
\[\hat{y}=\begin{cases} 1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\\ 0,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z) \end{cases}\]

\[ Loss = -[\hat{y} ln z+(1-\hat{y})ln (1-z)] \]

2.从最大似然的角度
假设训练样本相互独立,那么似然函数表达式为:

\[ \begin{aligned} Loss &= p(\hat{Y}|X;w,b) \\ &= \prod_{i=1}^n p(\hat{y}^i|x^i;w,b)\\ &= \prod_{i=1}^n z_i^{\hat{y}^i} (1-z_i)^{1-\hat{y}^i}\\ &= \sum_{i=1}^n \hat{y}^iln z_i + (1-\hat{y}^i)ln(1-z_i) \end{aligned} \]

至此,发现从交叉熵的角度和最大似然的角度,得到的损失函数竟然完全相同,说明他俩在背后存在着不为人知的本质联系。
现在开始探究这种联系。

3. 交叉熵与最大似然的联系

\[H(X) = -E_{x \sim P}[log {P(x)}]\]

KL散度:KL衡量两个分布之间的差异
\[ \begin{aligned} D_{KL}(P||Q) &=E_{x \sim P}[log \frac{P(x)}{Q(x)}]\\ &=E_{x \sim P}[log{P(x)}-log{Q(x)}] \end{aligned} \]

\(D_{KL}(P||Q)\)表示选择一个 \(Q\),使得它在 \(P\) 具有高概率的地方具有高概率。简单来说就是找到一组参数表示 \(Q\) 分布,这组参数要做到:当 \(P\) 分布中高概率的地方时,从这组参数也能取到高概率。

交叉熵
\[ \begin{aligned} H(P,Q) &=H(P)+D_{KL}(P||Q) \end{aligned} \]

具体到我们的场景而言:\(\hat{Y}\) 分布对应着 \(P\) 分布, \(Y\) 分布对应着 \(Q\) 分布。\(\hat{Y}\) 分布是确定的,\(Y\) 分布是我们所求的。换句话说就是让 \(Y\) 分布尽量逼近 \(\hat{Y}\) 分布。

在我们这个场景下,\(\hat{Y}\) 是确定但未知的(先验分布)。

\[ \begin{aligned} H(\hat{Y},Y) &= H(\hat{Y})+D_{KL}(\hat{Y}||Y)\\ &=-E_{x \sim \hat{Y}}[log \hat{Y}]+E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\\ &=E_{x \sim \hat{Y}}-log{Y(x)} \end{aligned} \]

当我们最小化交叉熵时:
\[ \begin{aligned} &min\;\;H(\hat{Y},Y)\\ &min\;\;D_{KL}(\hat{Y}||Y)\\ &min \;\;E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\\ &min \;\;E_{x \sim \hat{Y}}-log{Y(x)} \end{aligned} \]

\(\hat{Y}\) 分布是已知,则熵是常量,此时交叉熵和KL散度则是等价的。
针对 \(Y\) 最小化交叉熵等价于最小化KL散度,因为 \(H(\hat{Y})\)\(Y\)无关。

注意最后的 \(E_{x \sim \hat{Y}}-log{Y(x)}\) 与熵 \(H(Y)\) 之间的差别。熵是已经知道一个变量x的概率分布,求出来的是这个分布的事件所产生的期望信息总量;但对于这个式子,\(Y\) 分布是未知的,是我们所要求的东西。我们只是希望\(Y\)\(\hat{Y}\)之间尽可能相似或者接近,而并不需要知道他们每个的确切的分布是什么(也就是并不需要知道概率分布的表达式),所以使用KL散度直接定义他们之间的差异就行了。
说到这里想起来了上一篇介绍SVM时的核函数,其中也是要把低维空间升到高维空间,然后计算他们的内积,对于这整个过程,我们最终需要的是内积的结果。为了减少计算量同时达到最终的目的,跳过中间复杂的过程,引入了核函数,这样我们就不需要知道升维后具体是什么样子。

最小化KL散度和模型采用最大似然估计进行参数估计又是一致的,因此交叉熵与最大似然估计有一个KL散度关联在一起的。

Algorithm

梯度下降法

\(\sigma(x)' = \sigma(x)(1-\sigma(x))\)
$ min;;Loss = -\sum_{i=1}^n \hat{y}^i ln z_i + (1-\hat{y}^i)ln(1-z_i)$
\(z = \sigma(f(x))\)

\[ \begin{aligned} \frac{\partial L}{\partial w} &= -\sum_{i=1}^n \hat{y}^i \frac{1}{z_i} z_i(1-z_i) x^i+(1-\hat{y}^i)\frac{1}{1-z_i} (-1) z_i(1-z_i)x^i \\ &= -\sum_{i=1}^n \hat{y}^i(1-z_i) x^i-(1-\hat{y}^i)z_ix^i\\ &= -\sum_{i=1}^n (\hat{y}^i-z_i)x^i\\ &= -\sum_{i=1}^n (\hat{y}^i-\sigma(w^Tx^i+b))x^i \end{aligned} \]

\[ \begin{aligned} w^{k+1} &= w^k - \eta \frac{\partial L}{\partial w} \\ &= w^k+\eta\sum_{i=1}^n (\hat{y}^i-z_i)x^i \end{aligned} \]

这里有一个很好的性质,更新的梯度与 \(\hat{y}^i-z_i\) 有关,当他们之间的差距越大时,更新的梯度越大。

三、扩展

上面所说的模型中\(\hat{y}^i\in\{0,1\}\),换一种写法:\(\hat{y}^i\in\{1,-1\}\),还是用sigmoid+交叉熵的方式来写损失函数。
此时:
\[\hat{y}=\begin{cases} 1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\\ -1,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z)=-ln(-z) \end{cases}\]

上式的变换参考上一篇遵循统一的机器学习框架理解SVM

综合得来:
\[ \begin{aligned} Loss &= -\sum_{i=1}^n ln(\sigma(\hat{y}^if(x^i)))\\&= - \sum_{i=1}^n ln \frac{1}{1+exp(-\hat{y}^if(x^i))}\\&=\sum_{i=1}^n ln(1+exp(-\hat{y}^if(x^i))) \end{aligned} \]

\[ \begin{aligned} \frac{\partial L}{\partial w} &= -\sum_{i=1}^n \frac{1}{\sigma(\hat{y}^if(x^i))}\sigma(\hat{y}^if(x^i))(1-\sigma(\hat{y}^if(x^i)))\hat{y}^ix^i\\ &=-\sum_{i=1}^n (\hat{y}^i-\hat{y}^i\sigma(\hat{y}^if(x^i)))x^i \end{aligned} \]

\(\hat{y}^i=1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (1-\sigma(f(x^i)))x^i\]

\(\hat{y}^i=-1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (-1+\sigma(-f(x^i)))x^i=-\sum_{i=1}^n (-1+1-\sigma(f(x^i)))x^i=-\sum_{i=1}^n -\sigma(f(x^i))x^i\]

到此可以看出与\(\hat{y}^i\in\{1,0\}\) 时完全相同。

2019-10-10 add

从不同的角度看待深度神经网络做分类任务

\(z = g(x)\), z是变换后的特征,

  • 角度1:对于深度神经网络做分类任务而言,除开最后一层,前面的层都可以看作这个g,最后一层看作线性分类层f,也就是说过程是看作 \(f(g(x))\),其中g作为特征转换函数,是未知的,注意这里与SVM中的kernel区别,kernel函数也是特征转换,可是这个函数是已知的,在深度学习中,这个函数是未知的,将会通过数据学习而来。
  • 角度2:直接就是把整个神经网络看作一个f函数,建模就是f(x)>0 或者f(x)<0进行分类,此时就不能看作是线性分类了,也没有特征转换,而是学习一个超曲面,整个超曲面能把当前数据分类。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄