昨日训练一个二分类的神经网络,最后一层忘记加sigmoid,发现自己一直做回归的任务,对分类这块还真不太熟练,因此写下这篇博文作为回顾。
定义
KL散度
KL散度是机器学习中常用的一个指标,用于衡量两个概率分布之间的距离,其必须拥有相同的支集,定义为KL(P∣∣Q)=Ex∼P[logP(x)Q(x)]KL(P||Q)=\mathbb{E}_{x\sim P}[log \frac{P(x)}{Q(x)}]KL(P∣∣Q)=Ex∼P[logQ(x)P(x)]。
交叉熵
交叉熵定义为:H[P,Q]=H[P]+KL(P∣∣Q)=−Ex∼PlogQ(x)H[P,Q]=H[P]+KL(P||Q)=-\mathbb{E}_{x \sim P}logQ(x)H[P,Q]=H[P]+KL(P∣∣Q)=−Ex∼PlogQ(x)
最大似然估计
学习的基本原则就是最大似然估计,学习的其实是概率分布pmodel(x;θ)p_{model}(x;\theta)pmodel(x;θ),记数据为X={x1,x2,⋯ ,xn}X=\{x_1, x_2, \cdots, x_n\}X={x1,x2,⋯,xn},则最大似然估计表示为:
θ=arg maxpmodel(X;θ)\theta = \argmax p_{model}(X;\theta)θ=argmaxpmodel(X;θ)
从贝叶斯的角度考虑,这等价于均匀先验下的最大后验估计。将上式改写为对数似然的形式,是:
θ=arg max∑i=1nlogpmodel(xi;θ)\theta = \argmax \sum_{i=1}^{n}logp_{model}(x_i;\theta)θ=argmaxi=1∑nlogpmodel(xi;θ)
在等式前乘以常数的行为并不影响最大化过程,因此:
θ=arg max1n∑i=1nlogpmodel(xi;θ)\theta = \argmax \frac{1}{n}\sum_{i=1}^{n}logp_{model}(x_i;\theta)θ=argmaxn1i=1∑nlogpmodel(xi;θ)
这等价于:
θ=arg maxEx∼p^datalogpmodel(xi;θ)\theta = \argmax \mathbb{E}_{x\sim \hat{p}_{data}}logp_{model}(x_i;\theta)θ=argmaxEx∼p^datalogpmodel(xi;θ)
与交叉熵的公式对比,会发现最大似然估计实际上在最小化交叉熵。进一步的,最小化了KL散度,也就是:
θ=arg minEx∼p^data[−logpmodel(xi;θ)data+p^data(x;θ)]\theta = \argmin \mathbb{E}_{x\sim \hat{p}_{data}}[-logp_{model}(x_i;\theta)data+\hat{p}_{data}(x;\theta)]θ=argminEx∼p^data[−logpmodel(xi;θ)data+p^data(x;θ)]
这是由于第二项与θ\thetaθ无关,在最小化的过程中可以忽略。
二分类问题
对于二分类问题,我们实际上在最小化数据经验分布和伯努利分布之间的交叉熵,也就是
pmodel(x;θ)=θx(1−θ)1−x,x∈{0,1},θ∈[0,1]p_{model}(x;\theta)=\theta^x(1-\theta)^{1-x}, x\in\{0,1\}, \theta \in [0,1]pmodel(x;θ)=θx(1−θ)1−x,x∈{0,1},θ∈[0,1]
则最小化交叉熵表示为:
θ=arg maxEx∼p^data[xlogθ+(1−x)log(1−θ)]=argmax1n∑i=1n[xilogθ+(1−xi)log(1−θ)]\theta = \argmax \mathbb{E}_{x\sim \hat{p}_{data}}[xlog\theta+(1-x)log(1-\theta)]\\
=argmax \frac{1}{n}\sum_{i=1}^{n}[x_ilog\theta+(1-x_i)log(1-\theta)]θ=argmaxEx∼p^data[xlogθ+(1−x)log(1−θ)]=argmaxn1i=1∑n[xilogθ+(1−xi)log(1−θ)]
神经网络在这里起到的作用实际上是提供参数θ\thetaθ,也就是θ=f(x;w)\theta = f(x;w)θ=f(x;w)
因此,我们对于二分类问题,实际的优化是:
θ=arg max1n∑i=1n[xilogf(x;w)+(1−xi)log(1−f(x;w))]\theta = \argmax \frac{1}{n}\sum_{i=1}^{n}[x_ilogf(x;w)+(1-x_i)log(1-f(x;w))]θ=argmaxn1i=1∑n[xilogf(x;w)+(1−xi)log(1−f(x;w))]
伯努利分布中的参数θ\thetaθ代表的含义是x=1x=1x=1的概率,因此是一个介于(0,1)(0,1)(0,1)之间的数字。因此,在设计神经网络结构的时候,需要在最后加上一个sigmoid激活函数,使神经网络的输出值归一化。而在损失函数的选择上,我们选择所谓的交叉熵。实际上,回归问题的损失函数也是交叉熵,只不过可以推导出均方损失。
本文回顾了在二分类任务中如何通过神经网络结合KL散度和交叉熵进行模型训练,强调了sigmoid激活函数在输出归一化中的关键作用。
6533

被折叠的 条评论
为什么被折叠?



