分类|深度学习(李宏毅)

Posted ccqun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分类|深度学习(李宏毅)相关的知识,希望对你有一定的参考价值。

一、生成模型

假设有两个类别(C_{1}、C_{2})(P(C_{1}|x)=frac{P(x|C_{1})P(C_{1})}{P(x|C_{1})P(C_{1})+P(x|C_{2})P(C_{2})})其中(P(C_{1})、P(C_{2}))为先验分布,(P(x|C_{1})、P(x|C_{2}))都是高斯分布,服从以下分布:

[f_{mu ,Sigma }(x)=frac{1}{(2pi )^{D/2}|Sigma |^{1/2}}exp^{-frac{1}{2}(x-u)^{T}Sigma ^{-1}(x-u)} ]

二、计算某一类样本的高斯分布

根据已有的标签数据可以求得每一类均值和方差的估计,由于该类样本服从高斯分布,则其似然如下:

[L(mu ,Sigma )=f_{mu ,Sigma }(x_{1})f_{mu ,Sigma }(x_{2})f_{mu ,Sigma }(x_{1})cdots f_{mu ,Sigma }(x_{N}) ]

[mu ^{*},Sigma^{*}=underset{mu ^{*},Sigma^{*}}{argmax}L(mu ,Sigma ) ]

求解可得:

[mu ^{*}=frac{1}{N}sum_{1}^{N}x^{n} ]

[Sigma^{*}=frac{1}{N}sum_{1}^{N}(x^{n}-mu ^{*})(x^{n}-mu ^{*})^{T} ]

三、逻辑回归(判别模型)推导

这里的推导假设(P(C_{1})、P(C_{2}))具有同样的方差,且(Sigma)是对角线矩阵(即假设特征之间相互独立),证明如下:

后验概率(P(C_{1}|x)=frac{P(x|C_{1})P(C_{1})}{P(x|C_{1})P(C_{1})+P(x|C_{2})P(C_{2})}=frac{1}{1+frac{P(x|C_{2})P(C_{2})}{P(x|C_{1})P(C_{1})}})

[令z=lnfrac{P(x|C_{2})P(C_{2})}{P(x|C_{1})P(C_{1})} ]

[Rightarrow e^{-z}=frac{P(x|C_{1})P(C_{1})}{P(x|C_{2})P(C_{2})} ]

[Rightarrow P(C_{1}|x)=frac{1}{1+e^{-z}}=sigma (z) ]

(sigma (z))即是sigmoid函数,其图像为:

技术图片

另外(z=lnfrac{P(x|C_{1})}{P(x|C_{2})}+lnfrac{P(C_{1})}{P(C_{2})}),其中

(lnfrac{P(x|C_{1})}{P(x|C_{2})}=lnfrac{frac{1}{(2pi )^{D/2}|Sigma ^{1}|^{1/2}}exp^{-frac{1}{2}(x-mu ^{1})^{T}(Sigma^{1}) ^{-1}(x-mu ^{1})}}{frac{1}{(2pi )^{D/2}|Sigma ^{2}|^{1/2}}exp^{-frac{1}{2}(x-mu ^{2})^{T}(Sigma^{2}) ^{-1}(x-mu ^{2})}})
(=lnfrac{|Sigma ^{1}|^{1/2}}{|Sigma ^{2}|^{1/2}}exp^{-frac{1}{2}(x-mu ^{1})^{T}(Sigma^{1}) ^{-1}(x-mu ^{1})+frac{1}{2}(x-mu ^{2})^{T}(Sigma^{2}) ^{-1}(x-mu ^{2})})
(=lnfrac{|Sigma ^{1}|^{1/2}}{|Sigma ^{2}|^{1/2}}-frac{1}{2}[(x-mu ^{1})^{T}(Sigma^{1}) ^{-1}(x-mu ^{1})-(x-mu ^{2})^{T}(Sigma^{2}) ^{-1}(x-mu ^{2})])
其中

[(x-mu ^{1})^{T}(Sigma^{1})^{-1}(x-mu ^{1})\=x^{T}(Sigma ^{1})^{-1}x{color{Red} {-x^{T}(Sigma ^{1})^{-1}mu ^{1}-(mu ^{1})^{T}(Sigma ^{1})^{-1}x}}+(mu ^{1})^{T}(Sigma ^{1})^{-1}mu ^{1}\=x^{T}(Sigma ^{1})^{-1}x{color{Red} {-2(mu^{1})^{T}(Sigma ^{1})^{-1}x}}+(mu ^{1})^{T}(Sigma ^{1})^{-1}mu ^{1} ]

同理

[(x-mu ^{2})^{T}(Sigma^{2})^{-1}(x-mu ^{2})=x^{T}(Sigma ^{2})^{-1}x{color{Red} {-2(mu^{2})^{T}(Sigma ^{2})^{-1}x}}+(mu ^{2})^{T}(Sigma ^{2})^{-1}mu ^{2} ]

因为前面假设(Sigma^{1}=Sigma^{2}=Sigma),所以(lnfrac{|Sigma ^{1}|^{1/2}}{|Sigma ^{2}|^{1/2}}=0),(x^{T}(Sigma ^{1})^{-1}x=x^{T}(Sigma ^{2})^{-1}x)

[z=(mu^{1})^{T}(Sigma ^{1})^{-1}x-frac{1}{2}(mu ^{1})^{T}(Sigma ^{1})^{-1}mu ^{1}-(mu^{2})^{T}(Sigma ^{2})^{-1}x+frac{1}{2}(mu ^{2})^{T}(Sigma ^{2})^{-1}mu ^{2}+lnfrac{P(C^{1})}{P(C^{2})} ]

[=underset{w}{underbrace{(mu ^{1}-mu ^{2})^{T}Sigma ^{-1}}}xunderset{b}{underbrace{-frac{1}{2}(mu ^{1})^{T}Sigma ^{-1}mu ^{1}+frac{1}{2}(mu ^{2})^{T}Sigma ^{-1}mu ^{2}+lnfrac{P(C_{1})}{P(C_{2})}}} ]

(P(C_{1}|x)=sigma (wx+b))

在使用生成模型时需要估计(mu_{1}、mu_{2}、Sigma),现在可以直接估计(w)(b)

四、逻辑回归的损失函数

  1. 交叉熵损失函数
    (f_{w,b}(x)=sigma (wx+b)),则逻辑回归的损失函数(即似然)为:

[L (w,b)=f_{w,b}(x^{1})f_{w,b}(x^{2})(1-f_{w,b}(x^{3}))cdots f_{w,b}(x^{N}) ]

[w^{*},b^{*}=underset{w,b}{argmax}L (w,b)=underset{w,b}{argmin}(-lnL (w,b)) ]

上式中

[lnL (w,b)\=-[hat{y}^{1}lnf(x^{1})+(1-hat{y}^{1})ln(1-f(x^{1}))]\-[hat{y}^{2}lnf(x^{2})+(1-hat{y}^{2})ln(1-f(x^{2}))]\-[hat{y}^{3}lnf(x^{3})+(1-hat{y}^{3})ln(1-f(x^{3}))]\cdots \=sum-[hat{y}^{n}lnf(x^{n})+(1-hat{y}^{n})ln(1-f(x^{n}))] ]

上式即为交叉熵损失函数:

[H(p,q)=-sum_{x}p(x)lnq(x) ]

接下来对参数进行求导:

[frac{partial -Lnf(w,b)}{partial w_{i}}=sum-[hat{y}^{n}frac{partial lnf(x^{n})}{partial w_{i}}+(1-hat{y}^{n})frac{partial ln(1-f(x^{n})))}{partial w_{i}}] ]

[frac{partial lnf(x^{n})}{partial w_{i}}=frac{partial lnf(x^{n})}{partial z}frac{partial z}{partial w_{i}}=frac{partial lnsigma (z)}{partial z}frac{partial z}{partial w_{i}}=frac{1}{sigma (z)}sigma (z)(1-sigma (z))frac{partial z}{partial w_{i}}\(注意:frac{partial sigma (z)}{partial z}=sigma (z)(1-sigma (z)),sigmoid函数的导数) ]

[frac{partial ln(1-f_{w,b}(x^{n}))}{partial w_{i}}=frac{-1}{1-sigma (z)}(1-sigma (z))sigma (z)x_{i}=-sigma (z)x_{i} ]

所以(-frac{partial lnL(w,b)}{partial w_{i}}=sum-[hat{y}^{n}(1-f_{w,b}(x^{n}))x_{i}^{n}-(1-hat{y}^{n})f_{w,b}(x^{n})x_{i}^{n}]=sum-(hat{y}^{n}-f_{w,b}(x^{n}))x_{i}^{n})
更新梯度

[w_{i}leftarrow w_{i}-eta sum-(hat{y}^{n}-f_{w,b}(x^{n}))x_{i}^{n}\(这表明当使用交叉熵作为损失函数是,如果预测值与实际值有较大的差距时会产生较大的梯度更新。) ]

  1. 均方误差损失函数

[L (w,b)=frac{1}{2}sum (f_{w,b}(x)-hat{y}^{n})^{2} ]

接下来对参数进行求导:

[frac{partial (f_{w,b}(x)-hat{y}^{n})^{2}}{partial w_{i}}=2(f_{w,b}(x)-hat{y}^{n})frac{partial f_{w,b}(x)}{partial z}frac{partial z}{partial w_{i}}=2(f_{w,b}(x)-hat{y}^{n}){color{Red} {f_{w,b}(x)(1-f_{w,b}(x))}}x_{i} ]

由于上式红色部分的存在会导致当(f_{w,b}(x)=0)(frac{partial L}{partial w_{i}}=0),而当(f_{w,b}(x)=1)时也有(frac{partial L}{partial w_{i}}=0)

交叉熵与均方误差的图像如下:

技术图片

  1. 总结
    关于为什么使用交叉熵而不使用均方误差,总结如下:
  • 神经网络中如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛,如果预测值与实际值的误差小,各种参数调整的幅度就要小,从而减少震荡。
  • 使用平方误差损失函数,误差增大参数的梯度会增大,但是当误差很大时,参数的梯度就会又减小了。
  • 使用交叉熵损失是函数,误差越大参数的梯度也越大,能够快速收敛。

五、判别模型 vs 生成模型

[P(C_{1}|x)=sigma (wx+b) ]

判别模型会直接估计(w,b)
生成模型会估计(mu_{1}、mu_{2}、Sigma),其中

[w^{T}=(mu ^{1}-mu ^{2})Sigma ^{-1},b=-frac{1}{2}(mu ^{1})^{T}Sigma ^{-1}mu ^{1}+frac{1}{2}(mu ^{2})^{T}Sigma ^{-1}mu ^{2}+lnfrac{P(C_{1})}{P(C_{2})} ]

一般情况下两种(w和b)不一定相同。

生成模型的优点:

  • 因为生成模型有一个先验的假设,所以需要更少的训练数据,而且对噪声有更高的鲁棒性。
  • 先验分布和类别依赖的概率分布可以从不同的来源估计。

参考资料

ref:分类问题为什么要使用交叉熵损失函数而不是均方误差

公众号同步更新


技术图片









以上是关于分类|深度学习(李宏毅)的主要内容,如果未能解决你的问题,请参考以下文章

深度学习 -- 1天搞懂深度学习,李宏毅,lecture 2

《深度学习》 --李宏毅学习笔记总结 (待更新)

深度学习李宏毅《机器学习》学习笔记

一天搞懂深度学习--李宏毅教程分享

李宏毅《深度学习》P1----机器学习介绍

300 页干货!李宏毅《一天搞懂深度学习》(附下载)