ML Lecture 5: Classification——Logistic Regression(上)

ML Lecture 5: Classification——Logistic Regression


Logistic回归

在前面用概率生成模型解决分类问题的基础上,本节继续介绍判别模型——Logistic回归解决分类问题。按照机器学习三个步骤(确定模型/函数集、判断函数优劣、寻找最佳函数),介绍Logistic回归的基本原理。

1. 确定模型/函数集

在二分类问题中,我们的模型/函数集其实就是后验概率 P ( C 1 | x ) 。分类的判断依据是:

  • P ( C 1 | x ) > 0.5 ,样本 x 就属于第一类
  • P ( C 1 | x ) < 0.5 ,样本 x 就属于第二类

后验概率 P ( C 1 | x ) 可以化为Sigmoid函数 σ ( z ) , 而 z = w T x + b = k w k x k + b
其中,样本 x 共有 K 维特征,则 w x 都是 K 维向量, w T x 是两个向量的内积。 b 是一个常数,称为偏置(Bias) x k 表示样本 x 的第 k 维特征( k = 1 , 2 , . . , K ), w k 是样本 x k 维特征的权重(Weight)。模型与各参数之间的关系用图形表示为:

所以, P ( C 1 | x ) 是由 K 维向量 w 和常数 b 决定的模型/函数集。选择不同的 w b ,就会得到不同的函数。

P ( C 1 | x ) σ ( z ) 记为关于参数 w b 的形式:

f w , b ( x ) = P w , b ( C 1 | x ) = 1 1 + e z = σ ( z ) = σ ( w T x + b ) = σ ( k w k x k + b )

这个模型就称为 Logistic回归模型


【Logistic回归 vs. 线性回归】

在机器学习第一个步骤——确定模型,Logistic回归和线性回归的区别在于:

  • Logistic回归把每一个特征 x k 乘上对应的权重 w k ,加上常数 b ,再输入Sigmoid函数里。由于经过了Sigmoid函数的转换,所以Logistic回归输出的数值介于 [ 0 , 1 ] 之间
  • 线性回归则是直接把每一个特征 x k 乘上对应的权重 w k ,加上常数 b ,而没有通过Sigmoid函数。所以线性回归输出的数值是任意的,在 [ , + ] 之间

2. 判断函数优劣

依旧是二分类问题,假设 N 个训练样本 { x 1 , x 2 , x 3 , . . . , x N } 分别属于 { C 1 , C 1 , C 2 , . . . , C 1 } 类,它们是根据后验分布的模型 P w , b ( C 1 | x ) 产生的。

给定一组参数 w b ,也就相应确定了一个函数 f w , b ( x ) = P w , b ( C 1 | x ) 。从而能够计算由 w b 构成的函数 f w , b ( x ) 生成这 N 个样本的概率。

注意, f w , b ( x ) 表示一个样本 x 来自 C 1 的概率。所以,从 f w , b ( x ) 中产生 N 个样本的似然函数写为:

L ( w , b ) = f w , b ( x 1 ) f w , b ( x 2 ) ( 1 f w , b ( x 3 ) ) . . . f w , b ( x N )

我们要做的是,穷尽所有可能的 w b ,找到一组参数 w b ,使得上面的似然函数最大。即找到使 N 个样本出现概率最大的那个函数:

( w , b ) = a r g m a x w , b L ( w , b )

如何通过一些简单的变换,找到最优的参数 w b
似然函数 对数似然函数,最大化 最小化

对于似然函数:

L ( w , b ) = f w , b ( x 1 ) f w , b ( x 2 ) ( 1 f w , b ( x 3 ) ) . . . f w , b ( x N )
由于它带有连乘结构,所以考虑用 log ( x ) 函数将其变成连加结构。而函数 log ( x ) 具有与 x 同增同减的特性,问题可以进一步转化为:
a r g m a x w , b L ( w , b ) a r g m a x w , b ln L ( w , b ) a r g m i n w , b [ ln L ( w , b ) ]
以上三个优化问题求得的 w b 是相同的,但从求解问题一转化到求解问题三,计算更简便。

  • 对数似然函数的新形式:引入交叉熵 H ( p , q ) = E p [ log q ] = x p ( x ) log q ( x )

    最优参数的求解问题转变为 a r g m i n w , b [ ln L ( w , b ) ] 后, ln L ( w , b ) 就是我们定义的用来判断函数优劣的损失函数(似然函数最大化 损失函数最小化):

    ln L ( w , b ) = ln f w , b ( x 1 ) ln f w , b ( x 2 ) ln ( 1 f w , b ( x 3 ) ) . . . ln f w , b ( x N )
    由于不同类别的表达式不一样,第一类样本的形式是 ln f w , b ( x n ) ,而第二类样本的形式是 ln ( 1 f w , b ( x n ) ) ,无法将整个式子统一成 形式(这里仅考虑二分类问题)。

    所以考虑引入二分类变量 y ^ 。若第 n 个样本 x n 属于 C 1 ,对应的目标输出是 y ^ n = 1 ;若 x n 属于 C 2 ,对应的目标输出是 y ^ n = 0 。所以, y ^ n 即第 n 个样本 x n 的真实类别标签:

    y ^ n = { 1 x n C 1 0 x n C 2

    这个做法类似于线性回归中,每一个输入样本 x 都对应一个真实输出值 y ^ 。二者的区别在于,线性回归的 y ^ 可以是任意数值,而二分类问题的真实输出是某个类别, y ^ 只能是 0 1

    ln L ( w , b ) 中的每一项都可以写为(省略函数 f 的下标参数 w b ):

    [ y ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) ]

    其中, n = 1 , . . , N 。显然:

    • x n C 1 y ^ n = 1 ,上式等于 ln f ( x n )
    • x n C 2 y ^ n = 0 ,上式等于 ln ( 1 f ( x n ) )

    从而 ln L ( w , b ) 就可以统一成 的形式:

    ln L ( w , b ) = n = 1 N [ y ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) ]
    其中, [ y ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) ] 这一项是伯努利分布 X ~ B ( 1 , y ^ n ) 和伯努利分布 X ~ B ( 1 , f ( x n ) ) 之间的交叉熵(Cross Entropy),是第 n 个样本 x n 的交叉熵。注意, n = 1 N 代表 N 个样本的交叉熵累加。


【交叉熵】

对于离散分布 p q ,它们在给定样本集 { x 1 , x 2 , x 3 , . . . , x N } 上的交叉熵定义如下:

H ( p , q ) = E p [ log q ] = x p ( x ) log q ( x )

注意,这里的 x 表示样本 x 遍历所有可能的类别。
特别地,在Logistic回归(二分类问题)中,第 n 个样本 x n 只可能属于两个类别的其中一个,则 x n 的交叉熵展开写为:

H ( p , q ) = [ p ( x n C 1 ) log q ( x n C 1 ) + p ( x n C 2 ) log q ( x n C 2 ) ]

p q 是两个不同的伯努利分布(0-1分布、两点分布),其中:

  • p 为第 n 个样本 x n 的真实分布,服从参数为 y ^ n 0 1 分布,即 X ~ B ( 1 , y ^ n )
    p ( x n C 1 ) = y ^ n
    p ( x n C 2 ) = 1 y ^ n
    【注】:真实分布是固定的

  • q 为第 n 个样本 x n 的估计分布,服从参数为 f ( x n ) 0 1 分布,即 X ~ B ( 1 , f ( x n ) )
    q ( x n C 1 ) = f ( x n )
    q ( x n C 2 ) = 1 f ( x n )

代入上式,真实分布与估计分布的交叉熵写为:

H ( p , q ) = [ y ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) ]

交叉熵反映的是分布 p q 之间的相似程度。交叉熵有两个特性使得它能够作为Logistic回归的代价函数:

  1. 交叉熵是非负的 y ^ n 的值等于 0 1 ,而 f ( x n ) 的值介于 0 1 之间, log 之后得负。整个式子前面添加了一个负号,所以交叉熵的数值非负
  2. p q 两个分布越相近,交叉熵越小。如果两个分布完全一样,计算出来的交叉熵就是 0 。例如:
    x n C 1 y ^ n = 1 ,若 f ( x n ) 1 ,则 H ( p , q ) 0
    x n C 2 y ^ n = 0 ,若 f ( x n ) 0 ,则 H ( p , q ) 0

事实上,均方代价函数也同时满足这两个特征。但交叉熵有另外一个特征是均方代价函数不具备的,就是交叉熵能够避免学习速率降低的情况,后详。


【Logistic回归 vs. 线性回归】

在机器学习第二个步骤——评价函数的优劣,Logistic回归和线性回归的区别在于:

  • Logistic回归中,评价一个函数优劣的方式是这样的:
    对于训练集中的第 n 个样本 x n ,它对应一个真实类别的输出 y ^ n 。若 x n C 1 y ^ n = 1 ;若 x n C 2 y ^ n = 0 。从而构成了样本对 ( x n , y ^ n ) 。这里,定义 y ^ n 的取值只能为 0 1

    我们定义的损失函数(即需要最小化的对象),是所有样本的交叉熵总和

    L ( f ) = n = 1 N H ( y ^ n , f ( x n ) ) = n = 1 N [ y ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) ]
    直观而言,我们希望找到一个函数 f ( x n ) ,它的输出能够与样本真实类别的输出 y ^ n 越接近越好。或者说,我们希望找到的伯努利分布与样本实际的伯努利分布越接近越好。

  • 线性回归的损失函数是均方误差(MSE)

    L ( f ) = 1 N n = 1 N ( f ( x n ) y ^ n ) 2


3. 寻找最佳函数

根据第1步的变换:

f w , b ( x ) = P w , b ( C 1 | x ) = 1 1 + e z = σ ( z ) = σ ( w T x + b ) = σ ( k w k x k + b )

第2步定义的损失函数:

L ( f ) = ln L ( w , b )
= n = 1 N [ y ^ n ln f w , b ( x n ) + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) ]
= n = 1 N [ y ^ n ln σ ( z n ) + ( 1 y ^ n ) ln ( 1 σ ( z n ) ) ]

在第3步中,利用梯度下降法,求损失函数对权重 w k 的偏导:

L w k = n = 1 N [ y ^ n ln σ ( z n ) w k + ( 1 y ^ n ) ln ( 1 σ ( z n ) ) w k ]
= n = 1 N [ y ^ n ln σ ( z n ) z n z n w k + ( 1 y ^ n ) ln ( 1 σ ( z n ) ) z n z n w k ]
= n = 1 N [ y ^ n σ ( z n ) σ ( z n ) z n w k + ( 1 y ^ n ) σ ( z n ) 1 σ ( z n ) z n w k ]
= n = 1 N [ y ^ n σ ( z n ) σ ( z n ) ( 1 y ^ n ) σ ( z n ) 1 σ ( z n ) ] z n w k

其中, z n w k = x k n σ ( z n ) = σ ( z n ) ( 1 σ ( z n ) )

若在同一坐标图上画出 σ ( z ) σ ( z ) 的形状:由于 σ ( z ) 左右两端变化慢,中间段斜率很大,所以 σ ( z ) 的两端趋近于 0 ,在中间位置达到最大值,如下图。

z n w k σ ( z n ) 代入上式,则损失函数 L 对权重参数 w k 的偏导数可以化简为:

L w k = n = 1 N [ y ^ n ( 1 σ ( z n ) ) ( 1 y ^ n ) σ ( z n ) ] x k n
= n = 1 N [ y ^ n σ ( z n ) ] x k n = n = 1 N [ y ^ n f w , b ( x n ) ] x k n



按照梯度下降法,将参数 w k 从第 g 个更新到第 g + 1 个,其迭代公式为:

w k ( g + 1 ) = w k ( g ) η L w k = w k ( g ) + η n = 1 N [ y ^ n f w , b ( x n ) ] x k n
注意到, w k 的更新取决于三个因素:

  1. 学习率 η ,是主观调整的
  2. n 个样本的第 k 个特征值 x k n ,取决于样本数据
  3. [ y ^ n f w , b ( x n ) ] ,这一项代表模型的预测分布 f w , b ( x n ) 与真实分布 y ^ n 的差距有多大。假如 f w , b ( x n ) 距离真实分布还很远,亦即预测误差还很大,那么整体更新步伐就应该设大一点,这一参数更新理念也符合逻辑

【Logistic回归 vs. 线性回归】

在机器学习第三个步骤——寻找最佳函数/参数,Logistic回归和线性回归更新参数的方式是一样的,唯一不同的是数值输出:

  • Logistic回归中, y ^ n 的取值只能是 0 1 f w , b ( x n ) 是一个介于 [ 0 , 1 ] 之间的概率值
  • 线性回归中,真实值 y ^ n 和预测值 f w , b ( x n ) 可以是任意实数

Logistic回归的损失函数:交叉熵还是平均误差?

为什么Logistic回归的损失函数要取交叉熵,而不按照线性回归那样直接取平方误差?如果Logistic回归的损失函数取平方误差会造成什么问题?

假设Logistic回归的损失函数取平方误差,则损失函数写为:

L ( f ) = 1 N n = 1 N ( f w , b ( x n ) y ^ n ) 2 = 1 N n = 1 N ( σ ( z n ) y ^ n ) 2

损失函数对参数 w k 求偏导时:

L w k = 1 N n = 1 N ( σ ( z n ) y ^ n ) 2 w k
= 2 N n = 1 N ( σ ( z n ) y ^ n ) σ ( z n ) z n z n w k
其中, σ ( z n ) z n = σ ( z n ) ( 1 σ ( z n ) ) z n w k = x k n

代入得偏导结果:

L w k = 2 N n = 1 N ( σ ( z n ) y ^ n ) σ ( z n ) ( 1 σ ( z n ) ) x k n
= 2 N n = 1 N ( f w , b ( x n ) y ^ n ) f w , b ( x n ) ( 1 f w , b ( x n ) ) x k n

观察偏导结果,考察如下情况:

  • 当第 n 个样本 x n 的真实类别是 C 1 ,有 y ^ n = 1

    f w , b ( x n ) = 1 ,说明预测的分类结果很接近真实类别,参数无需继续更新。而此时偏导结果 L w k = 0 ,确实是停止了参数的更新,很合理

    但若 f w , b ( x n ) = 0 ,说明预测的分类结果与真实类别截然相反,参数距离目标还有很远,应该加大更新步伐。而此时偏导结果 L w k = 0 ,参数不再更新,显然不对

  • 当第 n 个样本 x n 的真实类别是 C 2 ,有 y ^ n = 0
    f w , b ( x n ) = 1 ,说明预测的分类结果与真实类别截然相反,参数距离目标还有很远,应该加大更新步伐。而此时偏导结果 L w k = 0 ,参数不再更新,显然不对

    f w , b ( x n ) = 0 ,说明预测的分类结果很接近真实类别,参数无需继续更新。此时偏导结果 L w k = 0 ,确实是停止了参数的更新,很合理

因此,当Logistic回归的损失函数取平方误差时,可能会出现参数更新无效率的问题。把参数与总损失(Total Loss)之间的变化作图可以更直观地反映问题,在损失函数分别取交叉熵和平均误差的情况下,假设中心位置是损失函数最低点:

  • 黑色曲面为损失函数取交叉熵的情况,距离最低点越远,损失函数曲面越陡峭,偏导值越大,参数更新的步伐/速度也越快,这很合理。
  • 红色曲面为损失函数取平均误差的情况,整个损失函数曲面比较平坦。在离最低点很远的地方,偏导值很小,参数更新的速度非常缓慢。而随机找一个参数初始值开始迭代,通常离最低点是很远的,如果参数更新很慢,就相当于卡在原地,很难到达最低点。虽然可以通过调整学习率使更新步伐变大,但偏导值很小的时候,我们并不能确定参数到底是在距离最低点很远的地方,还是已经到达最低点附近。如果已经到达最低点附近,学习率就不能调大,否则容易错过最低点。

所以,虽然损失函数取平方误差是可操作的,但不容易得到理想的参数结果,主要败在了参数更新效率上。

参考资料
维基百科:交叉熵
交叉熵(Cross-Entropy)
交叉熵代价函数

猜你喜欢

转载自blog.csdn.net/Joyliness/article/details/80051852