1

神经网络的分类模型

 2 years ago
source link: http://www.blackedu.vip/911/shen-jing-wang-luo-de-fen-lei-mo-xing/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

神经网络的分类模型

NLP的入门算法应该是文本分类了,笔者最早接触文本分类的模型是采用keras框架搭建的分类,用了TextCNN和LSTM,很轻松的在短文本分类上取得很好的效果,很有成就感。后续完成了很多算法模型,较少关注理论层面去深入理解算法的原理。本文从原理层面介绍文本分类算法,重点在于介绍softmax+交叉熵为什么可以取得很好的效果,希望能够帮助读者理解算法的原理。

本文作为文本分类的入门篇,首先介绍神经网络如何建模条件概率,后续的文章再来介绍经典算法如朴素贝叶斯以及KNN如何完成文本分类,作为对比,帮助读者更加深入的理解神经网络建模的方法。

假设有一批标记数据xi,yii=1N{x_i, y_i}_{i=1}^Nxi​,yi​i=1N​,其中xix_ixi​表示输入文本,yi∈C1,C2,⋯ ,Cky_i \in {C_1, C_2, \cdots, C_k}yi​∈C1​,C2​,⋯,Ck​,文本的单标签多分类问题。文本分类问题就是建模条件概率P(Y=C∣X)P(Y=C|X)P(Y=C∣X),得到概率分布,选择标签最大的概率作为分类结果。

-w846

不同的分类算法建模条件概率方法不同,神经网络建模条件概率使用softmax函数,模型有K个分类,神经网络的输出有KKK个,假设输出层第iii个神经元的输出为sis_isi​表示分类为CiC_iCi​的打分,那么p(y=Ci∣x)p(y=C_i|x)p(y=Ci​∣x)表示分类为CiC_iCi​的概率

p(y=Ci∣x)=esi∑jkesj p(y=C_i|x) = \frac{e^{s_i}}{\sum_ j ^k e^{s_j}} p(y=Ci​∣x)=∑jk​esj​esi​​

得到概率分布以后,选择概率最大的标签作为分类标签即可。按照上面搭建好神经网络,最后输出层激活函数用softmax,解决了网络的前向传播,参数都是初始化的。必须要确定优化目标,更新参数,也就是训练模型。直观来说我们希望目标分类的打分sis_isi​是最大的,这样计算出来的目标分类概率也是最大的。

标记数据xi,yii=1N{x_i, y_i}_{i=1}^Nxi​,yi​i=1N​,认为这组样本是从真实的概率分布P(X,Y)P(X,Y)P(X,Y)采样得到的,也就意味着这组样本出现的概率应该是最大的

∏i=1mp(yi=Ct∣xi) \prod _{i=1} ^m p(y_i=C_t|x_i)i=1∏m​p(yi​=Ct​∣xi​)

上面的概率就是似然概率,通过最大化似然概率来优化参数,通常会对似然概率取负号对数,优化的目标函数为最小化负对数似然函数
L(w)=−∑imlog⁡p(yi=Ct∣xi) L(w)= -\sum_i ^ m\log p(y_i=C_t|x_i) L(w)=−i∑m​logp(yi​=Ct​∣xi​)

上面一共有m个样本,只考虑一个样本目标函数简化为
−log⁡p(y=Ct∣x)=−log⁡est∑jkesj=log⁡∑jkesj–st≈max⁡(s1,s2,⋯ ,sk)–st -\log p(y=C_t|x) = -\log \frac{e^{s_t}}{\sum_ j ^k e^{s_j}} \\ =\log \sum_ j ^k e^{s_j} – s_t \approx \max(s_1, s_2, \cdots, s_k) – s_t −logp(y=Ct​∣x)=−log∑jk​esj​est​​=logj∑k​esj​–st​≈max(s1​,s2​,⋯,sk​)–st​

最小化上面的目标函数,其中max⁡(s1,s2,⋯ ,sk)\max(s_1, s_2, \cdots, s_k)max(s1​,s2​,⋯,sk​) 如果最大值不是目标类sts_tst​,意味着某个sj,j≠ts_j, j\ne tsj​,j​=t是最大值,则损失函数结果为sj–st>0s_j – s_t > 0sj​–st​>0,最小化目标函数很明显可以取得最小值为0,当且仅当max⁡(s1,s2,⋯ ,sk)\max(s_1, s_2, \cdots, s_k)max(s1​,s2​,⋯,sk​)就是sts_tst​。

实际上优化上面的目标函数,意味着目标类大于非目标的得分,不断优化目标函数会接近0,此时分类目标sts_tst​远远大于其余得分,神经网络就能给出正确的分类。

我们在搭建神经网络时,对于多分类问题采用交叉熵作为目标函数,其实最小化上述的负对数似然函数等价于最小化交叉熵,下面简单推导一下。交叉熵的写法是
L=−∑imyt(i)log⁡yp(i) L=-\sum_i ^m y_t ^{(i)} \log y_p^{(i)} L=−i∑m​yt(i)​logyp(i)​

依然只考虑一个样本的交叉熵
L=−ytlog⁡yp L=- y_t \log y_p L=−yt​logyp​
其中yt,ypy_t, y_pyt​,yp​分别为样本的概率分布和网络输出的概率分布,目标类为ttt,那么yty_tyt​为one-hot向量,ttt位置为1其余为0,而yp=(p1,p2,⋯ ,pt,⋯ ,pk)y_p=(p_1, p_2, \cdots, p_t, \cdots, p_k)yp​=(p1​,p2​,⋯,pt​,⋯,pk​)

于是单个样本的交叉熵
L=−ytlog⁡yp=−log⁡pt=−log⁡p(y=Ct∣x) L=- y_t \log y_p = -\log p_t = -\log p(y=C_t|x) L=−yt​logyp​=−logpt​=−logp(y=Ct​∣x)

可以看到最小化交叉熵和最大化似然函数是等价的


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK