设 X X X是一个取有限个值的离散随机变量,其概率分布为: P ( X = x i ) = p i , i = 1 , 2 , ⋯ , n \begin{align}P(X=x_i)=p_i,\quad i=1,2,\cdots,n \end{align} P(X=xi)=pi,i=1,2,⋯,n
一个随机事件发生的概率越高,其信息量越低,故信息量定义为: I ( X ) = − ∑ i = 1 n log p i \begin{align}I(X)=-\sum_{i=1}^{n}{\log p_i}\end{align} I(X)=−i=1∑nlogpi
在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量:则随机变量 X X X熵的定义为: H ( X ) = − ∑ i = 1 n p i log p i \begin{align}H(X) &=- \sum_{i=1}^n p_i \log p_i \end{align} H(X)=−i=1∑npilogpi
上式中,若 p i = 0 p_i=0 pi=0,则定义 0 log 0 = 0 0 \log 0=0 0log0=0。由定义可知,熵只依赖于 X X X的分布,而与 X X X的取值无关,所以也可以将 X X X的熵记作 H ( p ) H(p) H(p): H ( p ) = − ∑ i = 1 n p i log p i \begin{align}H(p)=- \sum_{i=1}^n p_i \log p_i \end{align} H(p)=−i=1∑npilogpi
现在有关于样本集的两个概率分布 p(x) 和 q(x),其中 p(x) 为真实分布, q(x)非真实分布。如果用真实分布 p(x) 来衡量识别一个样本所需要编码长度的期望(平均编码长度)为式(3),如果使用非真实分布 q(x) 来表示来自真实分布 p(x) 的平均编码长度,则是: H ( p , q ) = − ∑ p i log q i \begin{align} H(p,q)=-\sum_{} p_i \log q_i\end{align} H(p,q)=−∑pilogqi
如考虑一个随机变量 X X X,真实分布 p ( x ) = ( 1 2 , 1 4 , 1 8 , 1 8 ) p(x)=( \frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \frac{1}{8}) p(x)=(21,41,81,81),非真实分布 q ( x ) = ( 1 4 , 1 4 , 1 4 , 1 4 ) q(x)=( \frac{1}{4}, \frac{1}{4}, \frac{1}{4}, \frac{1}{4}) q(x)=(41,41,41,41),则 H ( p , q ) = − ( 1 2 log 2 1 4 + 1 4 log 2 1 4 + 1 8 log 2 1 4 + 1 8 log 2 1 4 + ) = 2 bits H(p,q)=-(\frac{1}{2} \log_2 \frac{1}{4}+\frac{1}{4} \log_2 \frac{1}{4}+\frac{1}{8} \log_2 \frac{1}{4}+\frac{1}{8} \log_2 \frac{1}{4}+)=2 \text{bits} H(p,q)=−(21log241+41log241+81log241+81log241+)=2bits
用来衡量两个分布之间的差异。使用概率分布q来近似p时所造成的信息损失量。 KL ( p , q ) = H ( p , q ) − H ( p ) = ∑ p i log p i q i \begin{align} \text{KL}(p,q)&=H(p,q)-H(p)\\ &=\sum_{}p_i \log \frac{p_i}{q_i}\end{align} KL(p,q)=H(p,q)−H(p)=∑pilogqipi
应用到机器学习中,若真实分布为 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x),预测分布为 p θ ( y ∣ x ) p_{\theta}(y|\boldsymbol{x}) pθ(y∣x),通过KL散度衡量两个分布之间的额差异,即损失函数为最小化预测分布与真实分布之间的差异: min KL ( p r ( y ∣ x ) , p θ ( y ∣ x ) ) = ∑ p r ( y ∣ x ) log p r ( y ∣ x ) p θ ( y ∣ x ) ∝ − ∑ p r ( y ∣ x ) log p θ ( y ∣ x ) \begin{align} \min \text{KL}(p_r(y|\boldsymbol{x}),p_{\theta}(y|\boldsymbol{x})) &=\sum_{}p_r(y|\boldsymbol{x}) \log \frac{p_r(y|\boldsymbol{x})}{p_{\theta}(y|\boldsymbol{x})}\\& \propto -\sum{}p_r(y|\boldsymbol{x}) \log p_{\theta}(y|\boldsymbol{x})\end{align} minKL(pr(y∣x),pθ(y∣x))=∑pr(y∣x)logpθ(y∣x)pr(y∣x)∝−∑pr(y∣x)logpθ(y∣x)
σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma '(x)=\sigma(x)(1-\sigma(x)) σ′(x)=σ(x)(1−σ(x))
首先推导逻辑斯蒂回归模型,然后最小化损失函数,通过梯度下降算法学习最优参数。文章将回答一下问题:
逻辑斯谛回归是经典的分类方法,它属于对数线性模型,原理是根据现有的数据对分类边界线建立回归公式,以此进行分类。具体来讲,对于二分类问题,只需要构造一个线性判别函数 f ( x ) = w T x + b f(x)=\pmb{w}^\mathrm{T} \pmb{x}+b f(x)=wTx+b。特征空间 R D \mathbb{R}^D RD中所有满足 f ( x ) = 0 f(\pmb x)=0 f(x)=0的点组成一个分割超平面(Hyperplane),称为决策边界(Decision Boundary),决策边界将特征空间一分为二,划分为两个区域,每个区域对应一个类别。一个二分类问题的线性决策边界如下图所示,其中样本特征向量 x = [ x 1 , x 2 ] \pmb x =[x1, x2] x=[x1,x2],权重向量 w = [ w 1 , w 2 ] \pmb w = [w1, w2] w=[w1,w2]。
但这存在一个问题,我们知道一个分割超平面将特征空间分成两个部分,样本在不同的子空间中则被分为相对应的类。但是感知机的一个问题在于,我们仅能知道这个样本被分类的结果,但不知道它属于一个类的概率是多少。换句话说,样本在特征空间中的位置可能与分离超平面距离非常近,也有可能非常远,如果距离较远,那么它更有可能被分成它所在一侧对应的类,但是如果与超平面的距离非常近,说明它被分成另一类的可能性也很大,比如被分成A的可能性为51%,而分成B类的可能性为49%,此时线性回归会将其分为A类,而忽略了49%分成B类的可能性。于是,为了得到这一概率,我们引入了 Sigmoid 函数。sigmoid ( z ) = g ( z ) = 1 1 + e − z \begin{align}\text{sigmoid}(z)=g(z)=\frac{1}{1+e^{-z}}\end{align} sigmoid(z)=g(z)=1+e−z1
在线性回归模型的基础上,使用Sigmoid函数,将线性模型的预测值 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞)压缩到 ( 0 , 1 ) (0,1) (0,1)之间,使其拥有概率意义,实现值到概率转换1
。这样,就可以显示一个样本被分为一个类别的概率是多少。这时,式(10)已经是一个概率了,给定一个样本输入 x \pmb x x,输出为正类的条件概率分布表示为式(11),当然也可以是表示为负类,只是表示方式不一样而已。 P ( Y = 0 ∣ x ) = 1 − P ( Y = 1 ∣ x ) P(Y=0|\pmb x)=1-P(Y=1|\pmb x) P(Y=0∣x)=1−P(Y=1∣x)得到式(12)。公式(11)(12)是二项逻辑斯蒂回归模型的条件概率分布。
P ( Y = 1 ∣ x ) = sigmoid ( f ( x ) ) = 1 1 + e − w T x + b = e w T x + b 1 + e w T x + b P ( Y = 0 ∣ x ) = 1 1 + e w T x + b \begin{align}P(Y=1|\pmb x) &=\text{sigmoid}(f(\pmb x))&=\frac{1}{1+e^{-\pmb{w}^\mathrm{T} \pmb{x}+b}}=\frac{ e^{\pmb{w}^\mathrm{T} \pmb x+b}}{ 1+e^{\pmb{w}^\mathrm{T} \pmb x+b} } \\P(Y=0|\pmb x) &= \frac{1}{1+e^{\pmb{w}^\mathrm{T} \pmb x+b} }\end{align} P(Y=1∣x)P(Y=0∣x)=sigmoid(f(x))=1+ewTx+b1=1+e−wTx+b1=1+ewTx+bewTx+b
这里, x ∈ R d \pmb{x} \in \mathbb{R}^d x∈Rd是输入, Y = { 0 , 1 } Y=\{0,1\} Y={0,1}是输出, w ∈ R d \pmb{w} \in \mathbb{R}^d w∈Rd和 b ∈ R b \in \mathbb{R} b∈R是参数, w w w称为权重, b b b称为偏置, w x w \pmb x wx为内积。对于给定的输入实例 x x x,按照式(11)(12)可以计算 P ( Y = 1 ∣ x ) P(Y=1|\pmb x) P(Y=1∣x)和 P ( Y = 0 ∣ x ) P(Y=0|\pmb x) P(Y=0∣x),逻辑斯蒂回归比较两个条件概率的大小,将实例 x \pmb x x分类到概率值较大的那一类。
比如我们认为A类为正类,B类为负类,那么当某个样本分为A类的概率>50%,我们可认为其为A类,如果<50%,我们可认为其为B类,如下式,式中 y ^ \hat{y} y^为样本的预测值, f ( x ) f(x) f(x)为分割超平面,当某个样本在分割超平面的这一侧(法向量方向, f ( x ) > 0 f(x)>0 f(x)>0),可以认为该样本分为这一类的概率较大( sigmoid ( f ( x ) ) > 0.5 \text{sigmoid}(f(x))>0.5 sigmoid(f(x))>0.5):
y ^ = { 1 if f ( x ) > 0 ⇔ sigmoid ( f ( x ) ) > 0.5 − 1 if f ( x ) < 0 ⇔ sigmoid ( f ( x ) ) < 0.5 \begin{align} \hat{y} = \begin{cases} 1 & \text{if} \ f(\pmb x) > 0 \Leftrightarrow\text{sigmoid}(f(\pmb x))>0.5\\ -1 & \text{if} \ f(\pmb x) < 0 \Leftrightarrow\text{sigmoid}(f(\pmb x))<0.5\\ \end{cases}\end{align} y^={1−1if f(x)>0⇔sigmoid(f(x))>0.5if f(x)<0⇔sigmoid(f(x))<0.5
给定 N N N个样本的训练集 D = { x ( i ) , y ( i ) } i = 1 N \mathcal{D}=\{\pmb x^{(i)},y^{(i)}\}_{i=1}^N D={x(i),y(i)}i=1N,其中 y ( i ) ∈ { + 1 , − 1 } y^{(i)} \in \{+1,-1\} y(i)∈{+1,−1},线性模型试图学习参数 w ∗ \pmb w^* w∗,使得对于每个样本 ( x ( i ) , y ( i ) ) (\pmb x^{(i)},y^{(i)}) (x(i),y(i))尽量满足 f w ∗ ( x ( i ) ) > 0 if y ( i ) = 1 f w ∗ ( x ( i ) ) < 0 if y ( i ) = − 1 \begin{align} f_{w^*}(x^{(i)}) >0 \quad \text{if} \quad y^{(i)}=1 \\ f_{w^*}(x^{(i)}) <0 \quad \text{if}\quad y^{(i)}=-1 \\ \end{align} fw∗(x(i))>0ify(i)=1fw∗(x(i))<0ify(i)=−1
上面两个公式也可以合并,即参数∗ 尽量满足
y ( i ) f w ∗ > 0 , ∀ i ∈ [ 1 , N ] \begin{align} y^{(i)}f_{w^*}>0,\quad \forall i \in [1,N] \end{align} y(i)fw∗>0,∀i∈[1,N]
模型预测条件概率为:
P w ( Y = 1 ∣ x ( i ) ) = y ( i ) P w ( Y = − 1 ∣ x ( i ) ) = 1 − y ( i ) \begin{align} P_w(Y=1|\pmb{x}^{(i)})&=y^{(i)} \\ P_w(Y=-1|\pmb{x}^{(i)})&=1-y^{(i)}\end{align} Pw(Y=1∣x(i))Pw(Y=−1∣x(i))=y(i)=1−y(i)
对于一个样本 ( x ( i ) , y ( i ) ) (\pmb{x}^{(i)},y^{(i)}) (x(i),y(i)),其真实条件概率为:
P r ( Y = 1 ∣ x ( i ) ) = y ( i ) P r ( Y = − 1 ∣ x ( i ) ) = 1 − y ( i ) \begin{align} P_r(Y=1|\pmb{x}^{(i)})&=y^{(i)}\\P_r(Y=-1|\pmb{x}^{(i)})&=1-y^{(i)} \end{align} Pr(Y=1∣x(i))Pr(Y=−1∣x(i))=y(i)=1−y(i)
为了充分利用凸优化中一些高效、成熟的优化方法, 如共轭梯度、拟牛顿法等,很多机器学习方法都倾向于选择合适的模型和损失函数,以构造一个凸函数作为优化目标.但也有很多模型(比如神经网络)的优化目标是非凸的,只能退而求其次找到局部最优解。
在线性回归中采用平方损失函数,但在逻辑斯蒂回归中采用交叉熵损失函数2:,很多文献和资料提及交叉损失的同时还涉及对数损失,其实两者是一样的3。
平方损失函数:
L ( w ) = 1 2 N ∑ i = 1 N ( y ( i ) − y ^ ( i ) ) ) 2 \begin{align} \mathcal{L}(\boldsymbol w) = \frac{1}{2N} \sum_{i=1}^N ( y^{(i)}-\hat y^{(i)}) )^2 \end{align} L(w)=2N1i=1∑N(y(i)−y^(i)))2
梯度为: ∂ L ( w ) ∂ w = 1 N ∑ i = 1 N ( y ( i ) − y ^ ( i ) ) x \begin{align} \frac{\partial \mathcal{L(\boldsymbol w)}}{\partial \boldsymbol w} =\frac{1}{N} \sum_{i=1}^N(y^{(i)}-\hat y^{(i)})\boldsymbol x \end{align} ∂w∂L(w)=N1i=1∑N(y(i)−y^(i))x其中, y ^ ( i ) \hat{y}^{(i)} y^(i)是关于 w \boldsymbol w w的sigmoid函数,是一个非凸函数,存在许多局部极小值点,采用梯度下降算法求解时,不适合做逻辑斯蒂回归的损失函数。
由交叉熵公式和KL散度推导出损失函数:
H ( p r , p w ) = − ( y ( i ) log y ^ ( i ) + ( 1 − y ( i ) ) log ( 1 − y ^ ( i ) ) ) \begin{align} H(p_r,p_w)=-\left( y^{(i)} \log \hat{y}^{(i)}+\left(1-y^{(i)}\right) \log(1-\hat{y}^{(i)}) \right) \end{align} H(pr,pw)=−(y(i)logy^(i)+(1−y(i))log(1−y^(i)))
交叉熵损失函数:
L ( w ) = − 1 N ∑ i = 1 N ( y ( i ) log y ^ ( i ) + ( 1 − y ( i ) ) log ( 1 − y ^ ( i ) ) ) \begin{align} \mathcal{L}(\pmb{w})=-\frac{1}{N} \sum_{i=1}^N\left( y^{(i)} \log \hat{y}^{(i)}+\left(1-y^{(i)}\right) \log(1-\hat{y}^{(i)}) \right) \end{align} L(w)=−N1i=1∑N(y(i)logy^(i)+(1−y(i))log(1−y^(i)))
交叉熵损失函数就是对数似然函数
首先写出最大似然函数:
L ( w ) = ∏ i = 1 N [ P ( X = x ( i ) ) ] y ( i ) [ 1 − P ( X − x ( i ) ) ] ( 1 − y ( i ) ) = ∏ i = 1 N y ^ y ( i ) [ 1 − y ^ ] ( 1 − y ( i ) ) \begin{align} L(\boldsymbol w) &= \prod_{i=1}^{N} [P(X=\boldsymbol x^{(i)})] ^{y{(i)}} [1-P(X-\boldsymbol x ^{(i)})]^{(1-y^{(i)})} \\ &=\prod_{i=1}^{N} \hat y ^{y{(i)}} [1-\hat y]^{(1-y^{(i)})}\end{align} L(w)=i=1∏N[P(X=x(i))]y(i)[1−P(X−x(i))](1−y(i))=i=1∏Ny^y(i)[1−y^](1−y(i))
为了计算方便,我们对似然函数取对数,得到对数似然函数:
log L ( x ) = ∑ i = 1 N y ( i ) log y ^ ( i ) + ( 1 − y ( i ) ) log ( 1 − y ^ ( i ) ) \begin{align} \log L(\boldsymbol x)=\sum_{i=1}^N y^{(i)} \log \hat y^{(i)} +(1-y^{(i)})\log (1- \hat y^{(i)}) \end{align} logL(x)=i=1∑Ny(i)logy^(i)+(1−y(i))log(1−y^(i))
梯度为:
∂ L ( w ) ∂ w = − 1 N ∑ i = 1 N ( y ( i ) y ^ ( i ) ( 1 − y ^ ( i ) ) y ^ ( i ) x ( i ) − ( 1 − y ( i ) ) y ^ ( i ) ( 1 − y ^ ( i ) ) 1 − y ^ ( i ) x ( i ) ) = − 1 N ∑ i = 1 N ( y ( i ) ( 1 − y ^ ( i ) ) x ( i ) − ( 1 − y ( i ) ) y ^ ( i ) x ( i ) ) = − 1 N ∑ i = 1 N x ( i ) ( y ( i ) − y ^ ( i ) ) . \begin{aligned} \frac{\partial \mathcal{L}(\boldsymbol{w})}{\partial \boldsymbol{w}} & =-\frac{1}{N} \sum_{i=1}^{N}\left(y^{(i)} \frac{\hat{y}^{(i)}\left(1-\hat{y}^{(i)}\right)}{\hat{y}^{(i)}} \boldsymbol{x}^{(i)}-\left(1-y^{(i)}\right) \frac{\hat{y}^{(i)}\left(1-\hat{y}^{(i)}\right)}{1-\hat{y}^{(i)}} \boldsymbol{x}^{(i)}\right) \\ & =-\frac{1}{N} \sum_{i=1}^{N}\left(y^{(i)}\left(1-\hat{y}^{(i)}\right) \boldsymbol{x}^{(i)}-\left(1-y^{(i)}\right) \hat{y}^{(i)} \boldsymbol{x}^{(i)}\right) \\ & =-\frac{1}{N} \sum_{i=1}^{N} \boldsymbol{x}^{(i)}\left(y^{(i)}-\hat{y}^{(i)}\right) . \end{aligned} ∂w∂L(w)=−N1i=1∑N(y(i)y^(i)y^(i)(1−y^(i))x(i)−(1−y(i))1−y^(i)y^(i)(1−y^(i))x(i))=−N1i=1∑N(y(i)(1−y^(i))x(i)−(1−y(i))y^(i)x(i))=−N1i=1∑Nx(i)(y(i)−y^(i)).
采用梯度下降法,Logistic回归的训练过程为:初始化 w 0 ← 0 \boldsymbol{w_0} ← 0 w0←0,然后通过下式来迭代更新参数:
w t + 1 ← w t + α 1 N ∑ i = 1 N x ( i ) ( y ( i ) − y ^ ( i ) ) \begin{aligned} \boldsymbol{w}_{t+1} \leftarrow \boldsymbol{w}_{t}+\alpha \frac{1}{N} \sum_{i=1}^{N} \boldsymbol{x}^{(i)} \left(y^{(i)}-\hat{y}^{(i)} \right) \end{aligned} wt+1←wt+αN1i=1∑Nx(i)(y(i)−y^(i))
有了梯度后,就可以使用梯度下降算法学习参数 w \boldsymbol w w了。
【机器学习】关于逻辑斯蒂回归,看这一篇就够了!解答绝大部分关于逻辑斯蒂回归的常见问题,以及代码实现 ↩︎
逻辑斯谛回归(Logistic回归)最详解 ↩︎
对数损失和交叉熵损失 ↩︎