逻辑回归(Logistic Regression)知识点

文章目录

  • 1 Logistic分布
    • 几率(odds)
  • 2 逻辑回归模型
    • 2.1 先验假设
    • 2.2 似然函数与损失函数的推导
  • 3 交叉熵损失(Cross-Entropy loss)
    • 3.1 损失函数优化方法
      • Sigmoid层反向传播
      • Softmax层的反向传播
  • 4 相关问题


1 Logistic分布

  Logistic分布函数可以表示为:
F ( x ) = P ( X < x ) = 1 1 + e − ( x − μ ) σ ,   − ∞ < x < ∞ F\left( x \right) =P\left( XF(x)=P(X<x)=1+eσ(xμ)1, <x<
其中,位置参数: − ∞ < μ < ∞ -\infty <\mu<\infty <μ<,尺度参数: σ > 0 \sigma>0 σ>0. 其概率密度函数为:
f ( x ) = F ′ ( x ) = 1 σ e − ( x − μ ) σ ( 1 + e − ( x − μ ) σ ) 2 f\left( x \right) =F'\left( x \right) =\frac{\frac{1}{\sigma}e^{\frac{-\left( x-\mu \right)}{\sigma}}}{\left( 1+e^{\frac{-\left( x-\mu \right)}{\sigma}} \right) ^2} f(x)=F(x)=(1+eσ(xμ))2σ1eσ(xμ)
  当 μ = 0 \mu=0 μ=0 σ = 1 \sigma=1 σ=1时,称为标准Logistic分布,分布函数 F 0 ( x ) F_0(x) F0(x)和密度函数 f 0 ( x ) f_0(x) f0(x)为:
F 0 ( x ) = 1 1 + e − x F_0\left( x \right) =\frac{1}{1+e^{-x}} F0(x)=1+ex1 f 0 ( x ) = e − x ( 1 + e − x ) 2 f_0\left( x \right) =\frac{e^{-x}}{\left( 1+e^{-x} \right) ^2} f0(x)=(1+ex)2ex
其中, − ∞ < x < ∞ -\infty <x<.

几率(odds)

  几率是指事件发生和不发生概率的比值,即正类和负类的几率为:
o d d s = F 0 ( x ) 1 − F 0 ( x ) ln ⁡ ( o d d s ) = ln ⁡ ( 1 + e x 1 + e − x ) = x \begin{aligned} odds & = \frac{F_0(x)}{1-F_0(x)} \\ \ln(odds) & = \ln(\frac{1+e^x}{1+e^{-x}}) = x \end{aligned} oddsln(odds)=1F0(x)F0(x)=ln(1+ex1+ex)=x

   下面分别是标准逻辑分布的分布函数和密度函数:
逻辑回归(Logistic Regression)知识点_第1张图片
逻辑回归(Logistic Regression)知识点_第2张图片

2 逻辑回归模型

   逻辑回归(Logistics Regression,LR)是一种广义线性回归模型,线性回归解决的是回归问题,预测值是实数范围,逻辑回归则相反,解决的是分类问题,预测值是[0,1]范围。所以逻辑回归名为回归,实为分类。用一句话来概括逻辑回归(LR):

逻辑回归假设数据服从伯努利分布,通过极大化似然函数推导损失函数,运用梯度下降来求解参数,来达到将数据二分类的目的。

   Logistic回归模型是分析二分类型变量时常用的非线性统计模型,是最重要且应用最广泛的非线性模型之一。该模型的因变量为二分类变量(y=0或y=1),结果变量与自变量间是非线性关系。如:
P ( y i = 1 ∣ x i ) = 1 1 + e − ( w x i + b ) ,    − ∞ < x i < ∞ P\left( y_i=1|x_i \right) =\frac{1}{1+e^{-\left( \bm{w}x_i+b \right)}},\,\,-\infty P(yi=1xi)=1+e(wxi+b)1,<xi<
其中, P i P_i Pi为事件发生的概率,取值为 [ 0 , 1 ] [0,1] [0,1].

2.1 先验假设

   LR遵循两个假设:一是数据服从伯努利分布;二是正类概率由sigmoid函数计算。

   逻辑回归第一个假设是样本集服从伯努利分布。伯努利分布为离散型概率分布,正类取值为1;反类取值为0。正类概率为p,反类概率为1-p。可以表示为:
p ( y i ∣ x i ; w ) = { h ( x i ; w ) , y i = 1 1 − h ( x i ; w ) , y i = 0 p\left( y_i|x_i;\bm{w} \right) =\begin{cases} h\left( x_i;\bm{w} \right)& ,y_i=1\\ 1-h\left( x_i;\bm{w} \right)& ,y_i=0\\ \end{cases} p(yixi;w)={h(xi;w)1h(xi;w),yi=1,yi=0
   逻辑回归第二个假设是样本是正样本类别的概率可以用sigmoid函数表示,即:
h ( x ; w ) = 1 1 + e − w x h\left( x;\bm{w} \right) =\frac{1}{1+e^{-\boldsymbol{\bm{w}}x}} h(x;w)=1+ewx1
将两者合并起来,可以表示为:
y ^ = p ( y i = 1 ∣ x i ; w ) y i [ 1 − p ( y i = 1 ∣ x i ; w ) y i ] 1 − y i \hat{y}=p\left( y_i=1|x_i;\bm{w} \right) ^{y_i}\left[ 1-p\left( y_i=1|x_i;\bm{w} \right) ^{y_i} \right] ^{1-y_i} y^=p(yi=1xi;w)yi[1p(yi=1xi;w)yi]1yi = h ( x i ; w ) y i [ 1 − h ( x i ; w ) ] 1 − y i =h(x_i;\bm{w})^{y_i}[1-h(x_i;\bm{w})]^{1-y_i} =h(xi;w)yi[1h(xi;w)]1yi

2.2 似然函数与损失函数的推导

   线性回归问题中使用的是模型误差的平方和来定义损失函数。但是逻辑回归中类别不是连续的,无法使用误差的平方和来定义损失函数。在概率统计中通常使用极大似然估计法求解参数 w \bm{w} w。这里通过似然函数来推导出逻辑回归的损失函数。
极大似然估计:利用已知的样本结果信息,反推最具可能导致这些样本结果出现的模型参数值。
   假设已知 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn是样本 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn的观测值,则事件 { X 1 = x i , X 2 = x 2 , . . . , X n = x n } \{X_1=x_i,X_2=x_2,...,X_n=x_n\} {X1=xi,X2=x2,...,Xn=xn}发生的概率为:
L ( w ) = L ( x 1 , x 2 , . . . , x n ) = ∏ i = 1 n p ( x i ; w ) ,   w ∈ w L\left( \bm{w} \right) =L\left( x_1,x_2,...,x_n \right) =\prod_{i=1}^n{p\left( x_i;\bm{w} \right)},\ \bm{w} \in \bm{w} L(w)=L(x1,x2,...,xn)=i=1np(xi;w), ww = ∏ i = 1 n h ( x i ; w ) y i [ 1 − h ( x i ; w ) ] 1 − y i =\prod_{i=1}^n{h\left( x_i;\bm{w} \right) ^{y_i}\left[ 1-h\left( x_i;\bm{w} \right) \right] ^{1-y_i}} =i=1nh(xi;w)yi[1h(xi;w)]1yi

L ( w ) L(\bm{w}) L(w)即为似然函数,其中 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn均为已知的样本值。
   对等式两边同时取对数,得到对数似然函数,即:
ln ⁡ L ( y i , x i ; w ) = ∑ y i ln ⁡ h ( x i ) + ( 1 − y i ) ln ⁡ ( 1 − h ( x i ) ) = ∑ y i ln ⁡ h ( x i ) 1 − h ( x i ) + ln ⁡ ( 1 − h ( x i ) ) = ∑ y i ln ⁡ 1 1 + e − w x i 1 1 + e w x i + ln ⁡ ( 1 − h ( x i ) ) = ∑ y i ( w x i ) − ln ⁡ ( 1 + e w x i ) \begin{aligned} \ln L\left(y_i,x_i; \boldsymbol{\bm{w}} \right) &=\sum{y_i\ln h\left( x_i \right) +\left( 1-y_i \right) \ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\ln \frac{h\left( x_i \right)}{1-h\left( x_i \right)}+\ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\ln \frac{\frac{1}{1+e^{-\boldsymbol{\bm{w}}x_i}}}{\frac{1}{1+e^{\boldsymbol{\bm{w}}x_i}}}+\ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\left( \boldsymbol{\bm{w}}x_i \right) -\ln \left( 1+e^{\boldsymbol{\bm{w}}x_i} \right)} \end{aligned} lnL(yi,xi;w)=yilnh(xi)+(1yi)ln(1h(xi))=yiln1h(xi)h(xi)+ln(1h(xi))=yiln1+ewxi11+ewxi1+ln(1h(xi))=yi(wxi)ln(1+ewxi)
   在机器学习中我们有损失函数的概念,其衡量的是模型预测错误的程度。如果求在整个数据集上的平均对数似然损失,可以得到:
L ( w ) = − 1 N ln ⁡ L ( y i , x i ; w ) L\left( \boldsymbol{w} \right) =-\frac{1}{N}\ln L\left(y_i,x_i; \boldsymbol{\bm{w}} \right) L(w)=N1lnL(yi,xi;w)
   可以看出,在逻辑回归模型中,最大化似然函数最小化损失函数是等价的。
   总结: 对于分类问题来说,我们采用逻辑回归作为分类模型,采用最大似然估计评估模型性能。基于此,神经网络直接用最大似然函数的变形作为损失函数,指导模型的训练过程,也就是这里的逻辑损失函数。
   Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。
   Logistic 回归的本质是:假设数据服从伯努利分布,然后使用极大似然估计来得到参数的估计。

3 交叉熵损失(Cross-Entropy loss)

  将负对数似然损失函数从二分类扩展到多分类,即可得到交叉熵损失函数。
对一个样本来说,真实类标签与模型预测的类标签分布可以用交叉熵来表示,当 C = 2 C=2 C=2 时,交叉熵损失函数与负对数似然损失函数相同:
L C = − ∑ i = 1 C t i ln ⁡ y i L_C=-\sum_{i=1}^C{t_i\ln y_i} LC=i=1Ctilnyi
   对于 N N N个样本 { t 1 , t 2 , . . . , t n } \{ t_1,t_2,...,t_n\} {t1,t2,...,tn},总的损失函数为:
L = − ∑ k = 1 N ∑ i = 1 C t i k ln ⁡ y i k L=-\sum_{k=1}^N{\sum_{i=1}^C{t_{i}^{k}\ln y_{i}^{k}}} L=k=1Ni=1Ctiklnyik
其中, t i k t^k_i tik表示样本 t k t^k tk属于类别 i i i的真实概率, y i k y^k_i yik表示模型预测的结果。

3.1 损失函数优化方法

   损失函数的优化方法有很多,主要方法为梯度下降(一阶优化方法)和牛顿法(二阶方法)。优化的主要目标是找到一个方向,参数朝这个方向移动之后使得损失函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。

  随机梯度下降:随机梯度下降主要通过 L ( w ) L(\bm{w}) L(w)对参数 w \bm{w} w的一阶导数来寻找下降方向,初始化参数 w \bm{w} w后,以迭代的方式来更新参数,更新方式为:
g i = ∂ L ( w ) ∂ w j = ( σ ( z ) − y ) x ( i ) w j k + 1 = w j k + α g j \begin{aligned} g_i=\frac{\partial L(\bm{w})}{\partial \bm{w}_j} &=\left( \sigma \left( z \right) -y \right) x_{}^{\left( i \right)} \\ w^{k+1}_j &= w^k_j +\alpha g_j \end{aligned} gi=wjL(w)wjk+1=(σ(z)y)x(i)=wjk+αgj

Sigmoid层反向传播

   针对分类问题来看,网络输出通常需要通过Sigmoid(二分类)和Softmax(多分类)层,然后输出样本所属类别的先验概率。最后,用于计算交叉熵损失。
以网络最后一层为例,分析模型预测、计算损失和模型学习的过程:

  1. 神经网络最后一层输出每个类别的得分scores;
  2. 该得分经过Sigmoid/Softmax层获得概率输出;
  3. 模型预测的样本类别概率输出与真实类别标签的One-Hot形式进行交叉熵损失的计算,并通过误差传播来更新最后一层网络的参数 w \bm{w} w

   简单将二分类模型定义为:
z = w T x + b p = σ ( z ) = 1 1 + e − z L ( w ) = − [ y log ⁡ p + ( 1 − y ) log ⁡ ( 1 − p ) ] \begin{aligned} z & = \bm{w}^T\bm{x}+b \\ p & = \sigma(z) = \frac{1}{1+e^{-z}}\\ L(\bm{w}) &=-\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] \end{aligned} zpL(w)=wTx+b=σ(z)=1+ez1=[ylogp+(1y)log(1p)]
   二分类的交叉熵损失优化可以看成是sigmoid层的反向传播过程,总的损失相对于参数 w \bm{w} w 的梯度为可以分为三个部分:
∂ L ( w ) ∂ w i = ∂ L ( w ) ∂ p ⋅ ∂ p ∂ z ⋅ ∂ z ∂ w i \frac{\partial L(\bm{w})}{\partial w_i}=\frac{\partial L(\bm{w})}{\partial p}\cdot \frac{\partial p}{\partial z}\cdot \frac{\partial z}{\partial w_i} wiL(w)=pL(w)zpwiz
   1. 计算 ∂ L ( w ) ∂ p \frac{\partial L(\bm{w})}{\partial p} pL(w) ,已知:
L ( w ) = − [ y log ⁡ p + ( 1 − y ) log ⁡ ( 1 − p ) ] L(\bm{w})=-\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] L(w)=[ylogp+(1y)log(1p)]
其中, y ∈ 1 , 0 y \in {1, 0} y1,0 .
则有:
∂ L ( w ) ∂ p = ∂ { − [ y log ⁡ p + ( 1 − y ) log ⁡ ( 1 − p ) ] } ∂ p = − [ y p + ( − 1 − y 1 − p ) ] = − y p + 1 − y 1 − p \begin{aligned} \frac{\partial L(\bm{w})}{\partial p} & =\frac{\partial \left\{ -\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] \right\}}{\partial p} \\ & =- \left[\frac{y}{p} + \left( -\frac{1-y}{1-p} \right)\right] \\ &=-\frac{y}{p}+\frac{1-y}{1-p} \end{aligned} pL(w)=p{[ylogp+(1y)log(1p)]}=[py+(1p1y)]=py+1p1y

   2. 计算 ∂ p ∂ z \frac{\partial p}{\partial z} zp,也就是对 p = σ ( z ) = h ( x i ; w ) p=\sigma(z)=h\left( x_i;\bm{w} \right) p=σ(z)=h(xi;w)求导:
σ ( z ) = 1 1 + e − z σ ′ ( z ) = − − e − z ( 1 + e − z ) 2 = 1 1 + e − z ( e − z 1 + e − z ) = σ ( z ) ( 1 − σ ( z ) ) \begin{aligned} \sigma \left( z \right) & = \frac{1}{1+e^{-z}} \\ \sigma'\left( z \right) & =-\frac{-e^{-z}}{\left( 1+e^{-z} \right) ^2}=\frac{1}{1+e^{-z}}\left( \frac{e^{-z}}{1+e^{-z}} \right) =\sigma \left( z \right) \left( 1-\sigma \left( z \right) \right) \end{aligned} σ(z)σ(z)=1+ez1=(1+ez)2ez=1+ez1(1+ezez)=σ(z)(1σ(z))

   3. 计算 ∂ z ∂ w i \frac{\partial z}{\partial w_i} wiz ,假设样本为 m m m 维,即 x = [ x ( 1 ) ,   x ( 2 ) , . . . ,   x ( m ) ] T x=\left[ x_{}^{\left( 1 \right)},\ x_{}^{\left( 2 \right)},...,\ x_{}^{\left( m \right)} \right] ^T x=[x(1), x(2),..., x(m)]T ,最后一层正向传播过程为 z = w T x + b = w 1 x ( 1 ) + w 2 x ( 2 ) + . . . + w m x ( m ) + b ⋅ 1 z=\bm{w}^T\boldsymbol{x}+b=w_1x_{}^{\left( 1 \right)}+w_2x_{}^{\left( 2 \right)}+...+w_mx_{}^{\left( m \right)}+b\cdot 1 z=wTx+b=w1x(1)+w2x(2)+...+wmx(m)+b1 ,对第 i i i 个参数 w i w_i wi 求导:

∂ z ∂ w i = x ( i ) \frac{\partial z}{\partial w_i}=x_{}^{\left( i \right)} wiz=x(i)

  最终的求导结果为:(注意这里的 y = 1 y=1 y=1

∂ L ( w ) ∂ w i = ∂ L ( w ) ∂ p ⋅ ∂ p ∂ z ⋅ ∂ z ∂ w i = ( − y p + 1 − y 1 − p ) ⋅ σ ( z ) ( 1 − σ ( z ) ) ⋅ x ( i ) = − y ( 1 − p ) + p ( 1 − y ) p ( 1 − p ) ⋅ p ( 1 − p ) ⋅ x ( i ) = ( p − y ) x ( i ) = ( σ ( z ) − y ) x ( i ) \begin{aligned} \frac{\partial L(\bm{w})}{\partial w_i} & = \frac{\partial L(\bm{w})}{\partial p}\cdot \frac{\partial p}{\partial z}\cdot \frac{\partial z}{\partial w_i} \\ & = \left( -\frac{y}{p} + \frac{1-y}{1-p}\right) \cdot \sigma(z)\left( 1-\sigma(z) \right) \cdot x^{(i)} \\ & =\frac{-y\left( 1-p \right) +p\left( 1-y \right)}{p\left( 1-p \right)}\cdot p\left( 1-p \right) \cdot x^{\left( i \right)} \\ & =\left( p -y \right) x_{}^{\left( i \right)} \\ & =\left( \sigma \left( z \right) -y \right) x_{}^{\left( i \right)} \end{aligned} wiL(w)=pL(w)zpwiz=(py+1p1y)σ(z)(1σ(z))x(i)=p(1p)y(1p)+p(1y)p(1p)x(i)=(py)x(i)=(σ(z)y)x(i)

   参数 w \bm{w} w 的梯度可以写为: ( σ ( z ) − y ) x \left( \sigma(z)-y \right) \bm{x} (σ(z)y)x ,其中 ( σ ( z ) − y ) \left( \sigma(z)-y \right) (σ(z)y) 为实数,最终输出为向量形式,分别表示每个参数的梯度。
   对于参数 b b b来说,可以将 b b b 看成是与输入维度 x ( m + 1 ) = 1 x^{\left( m+1 \right)}=1 x(m+1)=1 对应的参数,即输出表示为 z = w T x + b = [ w ; b ] T [ x ; 1 ] z=\bm{w}^T \bm{x}+b=\left[ \bm{w};b \right] ^T\left[ \bm{x};1 \right] z=wTx+b=[w;b]T[x;1] ,参数 b b b 的梯度为: ∂ L ( w ) ∂ b = σ ( z ) − y \frac{\partial L(\bm{w})}{\partial b} =\sigma \left( z \right) -y bL(w)=σ(z)y .

Softmax层的反向传播

逻辑回归(Logistic Regression)知识点_第3张图片
   网络最后一层输出为 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T , z i = w i T x + b = [ w i ; b ] T [ x ; 1 ] z_i=\bm{w}_i^T \bm{x}+b=\left[ \bm{w}_i;b \right] ^T\left[ \bm{x};1 \right] zi=wiTx+b=[wi;b]T[x;1] ,softmax激活层输出为: a i = softmax ( z i ) a_i=\text{softmax} \left( z_i \right) ai=softmax(zi) ,其中 a i = e z i ∑ j e z j ,   i = 1 , 2 , . . . , n a_i=\frac{e^{z_i}}{\sum_j{e^{z_j}}},\ i=1,2,...,n ai=jezjezi, i=1,2,...,n
   根据最后一层( L L L层,第 j j j个神经元输出 z j z_j zj,激活值为 a j a_j aj)误差定义:
δ j L = ∂ L ∂ z j = ∂ L ∂ a j ⋅ ∂ a j ∂ z j \delta ^L_j=\frac{\partial L}{\partial z_{j}}=\frac{\partial L}{\partial a_{j}}\cdot \frac{\partial a_{j}}{\partial z_{j}} δjL=zjL=ajLzjaj

   对于多分类问题来说,假设类别数为 n n n,样本 x ( i ) x^{(i)} x(i)对应的标签为: y = [ y 1 , y 2 , . . . , y n ] \bm{y} = [y_1, y_2,...,y_n] y=[y1,y2,...,yn],其中 y i ∈ { 1 , 0 } y_i\in \left\{ 1,0 \right\} yi{1,0} 。网络输出 a i a_i ai表示对应 i i i类的概率。多目标的交叉熵损失函数为(单个训练样本):
L = − ∑ i = 1 n y i log ⁡ a i L=-\sum_{i=1}^n{y_i\log a_i} L=i=1nyilogai

   参数 w \bm{w} w 的梯度也可以分为三个部分:
∂ L ∂ w i j = δ i L ⋅ ∂ z i ∂ w i j = ∂ L ∂ a i ⋅ ∂ a i ∂ z i ⋅ ∂ z i ∂ w i j \begin{aligned} \frac{\partial L}{\partial w_{ij}} & =\delta^L_i \cdot \frac{\partial z_i}{\partial w_{ij}} \\ & =\frac{\partial L}{\partial a_i} \cdot \frac{\partial a_i}{\partial z_i} \cdot \frac{\partial z_i}{\partial w_{ij}} \end{aligned} wijL=δiLwijzi=aiLziaiwijzi

   下面分别对三部分进行求导:

   1. ∂ z i ∂ w i j \frac{\partial z_i}{\partial w_{ij}} wijzi,由于 z i = [ w i 1 , w i 2 , . . . , w i m , b ] [ x 1 , x 2 , . . . , x m , 1 ] T z_i=\left[ w_{i1},w_{i2},..., w_{im}, b \right] \left[ x_1, x_2, ..., x_m, 1 \right]^T zi=[wi1,wi2,...,wim,b][x1,x2,...,xm,1]T ,因此: ∂ z i ∂ w i j = x j \frac{\partial z_i}{\partial w_{ij}} = x_j wijzi=xj ;

   2. 求softmax输出 对最后一层神经元的输出值 a j a_j aj的导数: ∂ a j ∂ z i \frac{\partial a_j}{\partial z_i} ziaj 。因为,softmax函数与网络输出 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T 都有关系,所以需要分情况讨论,而不能只求 ∂ a i ∂ z i = ∂ softmax ( z i ) ∂ z i \frac{\partial a_i}{\partial z_i}=\frac{\partial \text{softmax} \left( z_i \right)}{\partial z_i} ziai=zisoftmax(zi)
   将其分为两种情况,分别是 i = j i=j i=j i ≠ j i\not ={j} i=j , i = j i=j i=j
∂ a j ∂ z i = ∂ a i ∂ z i = e z i ∑ j e z j − e z i e z i ( ∑ j e z j ) 2 = e z i ∑ j e z j [ 1 − e z i ∑ j e z j ] = softmax ( z i ) ( 1 − softmax ( z i ) ) \begin{aligned} \frac{\partial a_j}{\partial z_i}=\frac{\partial a_i}{\partial z_i} & =\frac{e^{z_i}\sum_j{e^{z_j}}-e^{z_i}e^{z_i}}{\left( \sum_j{e^{z_j}} \right) ^2} \\ & =\frac{e^{z_i}}{\sum_j{e^{z_j}}} \left [ 1 - \frac{e^{z_i}}{\sum_j{e^{z_j}}}\right ] \\ & =\text{softmax} \left( z_i \right) \left( 1-\text{softmax} \left( z_i \right) \right) \end{aligned} ziaj=ziai=(jezj)2ezijezjeziezi=jezjezi[1jezjezi]=softmax(zi)(1softmax(zi))

    i ≠ j i\not = j i=j
∂ a j ∂ z i = 0 − e z i e z j ( ∑ j e z j ) 2 = − e z i e z j ( ∑ j e z j ) 2 = − softmax ( z i ) ⋅ softmax ( z j ) \begin{aligned} \frac{\partial a_j}{\partial z_i} & =\frac{0-e^{z_i}e^{z_j}}{\left( \sum_j{e^{z_j}} \right) ^2} = -\frac{e^{z_i}e^{z_j}}{\left( \sum_j{e^{z_j}} \right) ^2} \\ & =-\text{softmax} \left( z_i \right) \cdot \text{softmax} \left( z_j \right) \end{aligned} ziaj=(jezj)20eziezj=(jezj)2eziezj=softmax(zi)softmax(zj)

   3. 求损失 L L L 相对于最后一层输出 z j z_j zj 的梯度 ∂ L ∂ z i \frac{\partial L}{\partial z_i} ziL,即最后一层网络的误差 δ j L \delta ^L_j δjL(假设输出层网络输出值 z j z_j zj 直接通过softmax层,不使用其它激活函数):

∂ L ∂ z i = ∂ [ − ∑ j = 1 n y j log ⁡ a j ] ∂ a j ⋅ ∂ a j ∂ z i = ∂ L ∂ a i ∂ a i ∂ z i + ∂ L ∂ a j ≠ i ∂ a j ≠ i ∂ z i     ( 分为两种情况, j = i 和 j ≠ i ) = − y i a i ⋅ ∂ a i ∂ z i − ∑ j ≠ i n y j a j ⋅ ∂ a j ∂ z i = − y i a i a i ( 1 − a i ) − ∑ j ≠ i n y j a j ⋅ ( − a i a j ) = − y i ( 1 − a i ) + ∑ j ≠ i n y j a i = − y i + ∑ j = 1 n y j a i = − y i + a i = { a i − 1 , i 是目标的真实类别 a i − 0 , i 不是目标的真实类别 \begin{aligned} \frac{\partial L}{\partial z_i} & = \frac{\partial \left[ -\sum_{j=1}^n{y_j\log a_j} \right]}{\partial a_j}\cdot \frac{\partial a_j}{\partial z_i} \\ & =\frac{\partial L}{\partial a_i}\frac{\partial a_i}{\partial z_i}+\frac{\partial L}{\partial a_{j\ne i}}\frac{\partial a_{j\ne i}}{\partial z_i}\ \ \ \left( \text{分为两种情况,}j=i\text{和}j\ne i \right) \\ & =-\frac{y_i}{a_i}\cdot \frac{\partial a_i}{\partial z_i}-\sum_{j\ne i}^n{\frac{y_j}{a_j}\cdot \frac{\partial a_j}{\partial z_i}} \\ & = -\frac{y_i}{a_i}a_i\left( 1-a_i \right) -\sum_{j\ne i}^n{\frac{y_j}{a_j}\cdot \left( -a_ia_j \right)} \\ & = -y_i\left( 1-a_i \right) +\sum_{j\ne i}^n{y_ja_i} \\ & = -y_i+\sum_{j=1}^n{y_ja_i} \\ & = -y_i+a_i \\ & = \begin{cases} a_i - 1, &i\text{是目标的真实类别}\\ a_i - 0, &i\text{不是目标的真实类别}\\ \end{cases} \end{aligned} ziL=aj[j=1nyjlogaj]ziaj=aiLziai+aj=iLziaj=i   (分为两种情况,j=ij=i)=aiyiziaij=inajyjziaj=aiyiai(1ai)j=inajyj(aiaj)=yi(1ai)+j=inyjai=yi+j=1nyjai=yi+ai={ai1,ai0,i是目标的真实类别i不是目标的真实类别

   简单来说,当求损失相对于某个样本 x x x 的输出 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T 的误差时,若当前样本属于第 i i i 类时,其误差为 a i − 1 a_i - 1 ai1 ;其余类别对应输出的误差为 a i a_i ai
   举个例子,假设样本 x x x 属于第2个类别,即其样本标签为: y = [ 0 , 1 , 0 , . . . , 0 ] T \bm{y} = [0,1,0,...,0]^T y=[0,1,0,...,0]T ,网络预测概率为: a = [ 0.05 , 0.7 , 0.05 , . . . , 0.05 ] T \bm{a} = [0.05,0.7,0.05,...,0.05]^T a=[0.05,0.7,0.05,...,0.05]T 。此时,网络最后一层的误差计算结果为: δ L = [ δ 1 L , δ 2 L , δ 3 L , . . . , δ n L ] T = [ 0.05 , ( 0.7 − 1 ) , 0.05 , . . . , 0.05 ] T \bm{\delta}^L =\left[\delta^L_1,\delta^L_2,\delta^L_3,...,\delta^L_n \right]^T = [0.05,(0.7-1),0.05,...,0.05]^T δL=[δ1L,δ2L,δ3L,...,δnL]T=[0.05,(0.71),0.05,...,0.05]T 。可以看出,正类(第2类)对应的预测概率越大,误差的绝对值越小;负类对应的预测概率越大,误差越大。

   4. 求损失 L L L 相对于最后一层中第 i i i 个权重 w i = [ w i 1 , w i 2 , . . . , w i m , b ] T \bm{w}_i=\left[ w_{i1},w_{i2},...,w_{im},b \right] ^T wi=[wi1,wi2,...,wim,b]T 的梯度 ∂ L ∂ w i \frac{\partial L}{\partial \bm{w}_i} wiL :(假设前一层共 m m m 个神经元,最后一层的输入为 x = [ x 1 , x 2 , . . . , x m , 1 ] T \bm{x}=\left[ x_1,x_2,...,x_m,1 \right] ^T x=[x1,x2,...,xm,1]T
其中,参数 w i \bm{w}_i wi 表示最后一层中第 i i i 个神经元与前一层连接的权重矩阵, w i j w_{ij} wij 表示最后一层中第 i i i 个神经元与前一层第 j j j 个神经元的连接权重。
∂ L ∂ w i = ∂ L ∂ z i ∂ z i ∂ w i = ( a i − y i ) ⋅ x \frac{\partial L}{\partial \bm{w}_i}=\frac{\partial L}{\partial z_i}\frac{\partial z_i}{\partial \bm{w}_i}=\left( a_i-y_i \right) \cdot \bm{x} wiL=ziLwizi=(aiyi)x

根据输出梯度向量 ( a i − y i ) ⋅ x \left( a_i-y_i \right) \cdot \bm{x} (aiyi)x 可以对每个参数 w i j w_{ij} wij 进行更新,如:

w i j ← w i j − λ ∂ L ∂ w i j = w i j − λ ⋅ [ a i − y i ] ⋅ x j w_{ij}\gets w_{ij}-\lambda \frac{\partial L}{\partial w_{ij}}=w_{ij}-\lambda \cdot \left[ a_i-y_i \right] \cdot x_j wijwijλwijL=wijλ[aiyi]xj

其中, λ \lambda λ 为参数学习率。

将Softmax和Sigmoid层的输出层误差结合起来看,可以表示为:
δ L = ∂ L ∂ z = a − y \delta^L = \frac{\partial L}{\partial \bm{z}} = \bm{a}-\bm{y} δL=zL=ay
即二分类和对分类问题使用交叉熵损失函数时,输出层的误差可以表示为预测概率和样本标签(One-Hot码)的差值。

###为什么使用交叉熵损失?

逻辑回归(Logistic Regression)知识点_第4张图片

《深度学习入门:基于Python的理论与实现》第5章5.6节:
   使用交叉熵作为分类问题中的损失函数,在反向传播过程中,网络输出层的误差为 a − y = [ a 1 − y 1 , . . . , a n − y n ] \bm{a}-\bm{y}=\left[ a_1-y_1,...,a_n-y_n \right] ay=[a1y1,...,anyn] ,得到这种看似恰好的结果。实际上,上述结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。
   若代价函数为均方误差函数 C = 1 2 ∑ j ( y j − a j L ) 2 C=\frac{1}{2}\sum_j{\left( y_j-a_{j}^{L} \right) ^2} C=21j(yjajL)2 ,则输出层误差为(不使用激活函数情况下): ∂ C ∂ a j L = a j L − y j \frac{\partial C}{\partial a_{j}^{L}}=a_{j}^{L}-y_j ajLC=ajLyj
   回归问题中输出层使用“恒等函数”,损失函数使用“均方误差”,也是出于同样的理由。可以看出,输出层误差的形式与交叉熵损失函数的相同: a i − y i a_i-y_i aiyi

4 相关问题

1) 为什么LR不使用均方误差(MSE)当作损失函数?
   使用均方误差替换LR模型中的交叉熵损失函数,即损失函数为:
C = ( y − y ^ ) 2 2 C = \frac{(y-\hat{y})^2}{2} C=2(yy^)2
其中, y ^ \hat{y} y^ 是模型的预测结果, y ^ = σ ( z ) , z = w T x + b \hat{y} = \sigma(z), z = \bm{w}^T \bm{x} + b y^=σ(z),z=wTx+b ,参数的梯度为:
∂ C ∂ w i = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ w i = ( y ^ − y ) ⋅ σ ′ ( z ) ⋅ x i = ( y ^ − y ) ⋅ σ ( z ) [ 1 − σ ( z ) ] ⋅ x i \begin{aligned} \frac{\partial C}{\partial w_{i}} & = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w_{i}} \\ & = (\hat{y}-y)\cdot \sigma ' (z) \cdot x_i \\ & = (\hat{y}-y)\cdot \sigma (z) [1 - \sigma (z)] \cdot x_i \end{aligned} wiC=yLzywiz=(y^y)σ(z)xi=(y^y)σ(z)[1σ(z)]xi
∂ C ∂ b = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ b = ( y ^ − y ) ⋅ σ ′ ( z ) = ( y ^ − y ) ⋅ σ ( z ) [ 1 − σ ( z ) ] \begin{aligned} \frac{\partial C}{\partial b} & = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial b} \\ & = (\hat{y}-y)\cdot \sigma ' (z) \\ & = (\hat{y}-y)\cdot \sigma (z) [1 - \sigma (z)] \end{aligned} bC=yLzybz=(y^y)σ(z)=(y^y)σ(z)[1σ(z)]

   1. 从结果可以看出,如果使用均方误差+sigmoid组合的情况下,参数的梯度式中包含sigmoid函数的导数,其值域为 ( 0 , 0.25 ] (0,0.25] (0,0.25] 。相比于交叉熵+sigmoid的组合,前者更容易出现梯度消失的情况。
   2. 其次,使用交叉熵损失函数计算简单且速度更快,因为只和x,y有关,和sigmoid本身的梯度无关。因为,sigmod函数的梯度都小于0.25,会使误差减小。

2) 逻辑回归的优缺点
优点:

  1. 形式简单,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
  2. 模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。
  3. 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。
  4. 资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
  5. 方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行阈值调整。

缺点:

  1. 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
  2. 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
  3. 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。
  4. 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

3) 为什么逻辑回归是线性模型
   LR模型可以表示为:
P w ( y ∣ x ) = 1 1 + e w T x P_{\bm{w}}(y|\bm{x}) = \frac{1}{1+e^{\bm{w}^T\bm{x}}} Pw(yx)=1+ewTx1
   可以看出LR模型中存在分线性因素,但是并不影响LR模型的分类面。也就是说,判断一个模型是否是线性的,是通过分界面是否是线性来判断的。这个P函数是y关于x的后验概率,它的非线性不影响分界面性质。

4) LR为什么用极大似然函数
   想要让每一个样本的预测都要得到最大的概率,即将所有的样本预测后的概率进行相乘都最大,也就是极大似然函数。
   对极大似然函数取对数以后相当于对数损失函数,由梯度更新的公式可以看出,对数损失函数的训练求解参数的速度是比较快的,而且更新速度只和x,y有关,比较的稳定。

5) LR为什么用sigmoid函数, 为什么不用其他函数?优缺点?
   LR是广义线性模型,假设数据服从伯努利分布,广义线性模型理论和伯努利分布推导出的函数形式和sigmoid函数相同。
优点

  1. 自定域是 [ − ∞ , + ∞ ] [-\infty, +\infty] [,+],值域为 ( 0 , 1 ) (0, 1) (0,1),正好满足概率分布为 ( 0 , 1 ) (0, 1) (0,1)的要求,可以理解为概率。
  2. 单调上升的函数,具有良好的连续性,不存在不连续点。
  3. 函数关于(0,0.5) 中心对称

缺点

  1. 幂运算相对耗时
  2. sigmoid 函数反向传播时,很容易出现梯度弥散现象(反向传播过程中,误差公式中包含sigmoid的梯度,其取值小于0.25,会对梯度进行缩减)。

6) LR如何实现多分类

  1. 使用Softmax函数实现多分类。
  2. 1对1:n个类别,训练n(n-1)个二分类器,两两比较,投票决定最终类别。
  3. 1对多:n个类别,训练n个分类器,结果为属于该类和不属于该类,最终选择概率最大的作为最终类别。

注意:类别互斥,用softmax,不互斥,用多分类lr。

7) 逻辑回归能否解决非线性分类问题?

  1. 引入核函数,但是要考虑所有样本,计算慢,随着样本量增加,复杂性增加;
  2. 数据进行离散化。

7) 逻辑回归为什么要对特征进行离散化

  1. 非线性:LR属于广义线性回归模型,表达能力受限;特征离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;
  2. 速度快,稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  3. 鲁棒性,离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
  4. 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
  5. 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
  6. 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

8) 线性回归与逻辑回归区别
  1. 逻辑回归是广义线性回归模型,名为回归,实为分类,输出是[0,1],可作为概率;线性回归是回归模型,输出是负无穷到正无穷;
  2. 线性回归使用最小化平方误差(MSE),对偏离真实值越远的数据惩罚越严重。逻辑回归是最大化似然函数进行参数估计,使用交叉熵做损失函数
  3. 线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值,使用逻辑回归的方法进行分类,就明显对异常值有较好的稳定性。

9) LR和SVM的区别:
  相同点: LR和SVM都是分类模型,监督学习,判别模型,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
  不同点:

  1. 损失函数不同,LR基于概率理论,假设正样本概率为sigmoid函数,通过极大似然方法推导出损失函数。SVM是基于几何间隔最大化,认为存在最大几何间隔的分类面为最优分类面;
  2. 对数据和参数的敏感程度不同。SVM考虑分类边界附近的样本,对支持向量外的样本添加或减少任何样本对分类没有影响;LR依赖数据分布,受所有数据点影响,每个样本点都会影响决策面结果,如果非均衡,需进行均衡处理;
  3. LR是参数模型,假设数据服从伯努利分布,SVM是非参数模型,对分布不做假设;
  4. SVM基于距离,依赖数据距离测度,需要做归一化,LR基于概率,不受影响;
  5. 解决非线性问题,SVM采用核函数机制,而LR通常不采用核函数的方法(假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。);
  6. 小规模数据集上,线性SVM略好于LR,但差别不大,而线性SVM的计算复杂度受数据量限制,对海量数据使用LR;
  7. SVM自带正则,LR需要额外添加正则化;
  8. SVN容易出现过拟合问题,因为经验风险最小化;而LR对异常值处理效果更好。

10) 逻辑回归为什么更适合处理id类特征?
  1. 对于tree based模型,处理id类特征,从树根到树叶的路径,其实就是是否是某用户和是否是某商品的联合判断,它已经变成了一个历史记忆,这就是为什么tree based模型在稀疏大规模ID类特征表现不行的原因;
  2. 对于逻辑回归模型,一方面,它可以处理大规模的数据,可以并行处理;另一方面,我们可以通过L1正则化,进行特征选择。

11) 关于模型在各个维度进行不均匀伸缩后,最优解与原来等价吗?
  等不等价要看最终的误差优化函数。如果经过变化后最终的优化函数等价则等价。明白了这一点,那么很容易得到,如果对原来的特征乘除某一常数,则等价。做加减和取对数都不等价。

12) 关于逻辑回归,连续特征离散化的好处
  可以实现非线性。举例,一个变量如果服从对数正态分布,那么对于不同区间,重要度不同。因此我们通过离散化,可以实现对不同区间学习不同的权重。

你可能感兴趣的:(机器学习,logistic,regression,逻辑回归,算法)