当前位置:   article > 正文

NLP入门之路(2):Softmax回归_nlp softmax

nlp softmax

NLP入门之路(2):Softmax回归

在上一章中,我们简单的介绍了什么是线性回归,并且也从头手动的实现了线性回归。那么,在实际的生活中,我们的预测结果有时候并不是一个单一的数量,也有可能是关于某一个类别的预测。比如给模型一张动物照片,让它去识别这张照片是关于猫还是关于狗或者其他,这是线性回归貌似就不起什么作用了,因为它每一次只能根据输入结果预测出一个值。所以再次基础上,我们将提出一个新的方法,叫做softmax回归,也是未来深度学习中经常使用到的方法

分类问题

首先我们要知道的是,对于上一章中提到的线性回归,一般属于回归类问题,而本章中提到的则属于分类问题。
比如对一个动物图像的分类问题,我们这里的动物假设只涉及到“猫”,“狗”,“鸡”这三种。输入的这个图像是一个 2 × 2 2\times 2 2×2的一个灰度图像,那么这个灰度图像应该是有四个像素,每一个标量表示每个像素值,那么相当于这个图像一个有四个特征: x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4
[ x 1 x 2   x 3 x 4 ]

[x1x2 x3x4]
[x1 x3x2x4]
我们的数据就会像这样,并且由上述这样的二维数据所表示的每一个图像就是上述三种动物中的某一个。
有了上述的features,那么我们还需要标签就是labels,一般我们想到的就是用一个数量集合,比如对于上述三个种类,就是 y ∈ { 1 , 2 , 3 } y\in
{1,2,3}
y{1,2,3}
,其中对应的整数就代表 { 猫,狗,鸡 }
{}
{猫,狗,鸡}
。这好像是一个很好的方法,并且比如我们要根据某些特征去预测一些有自然顺序的类别时,看起来更方便,例如 { 婴儿, 儿童, 青少年, 青年人, 中年人,老年人}。
上述表示labels的方式看似解决了问题,但实际上,我们可以想一下,首先在很多分类问题上,都是与自然顺序无关的,其次,对于动物类别的预测按道理应该都同等级别的,但是一旦使用上述表示后,在计算的过程中,因为数字的大小很有可能会影响最终的计算结果或者误差,使得模型可能会偏向于某些数字,这都是不好的。因此这里需要提出一个很有名的概念,就是“独热编码”,独热编码是一个向量,它的分量和类别一样多。 类别对应的分量设置为1,其他所有分量设置为0。 在我们的例子中,标签 y y y将是一个三维向量,其中 ( 1 , 0 , 0 ) (1,0,0) (1,0,0)对应于“猫”、 ( 0 , 1 , 0 ) (0,1,0) (0,1,0)对应于“狗”、 ( 0 , 0 , 1 ) (0,0,1) (0,0,1)对应于“鸡",这样的话最终标签结果就是
y ∈ { ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) } y\in
{(1,0,0),(0,1,0),(0,0,1)}
y{(1,0,0),(0,1,0),(0,0,1)}

网络架构

为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。 每个输出对应于它自己的仿射函数。 在我们的例子中,由于我们有4个特征和3个可能的输出类别,我们将需要12个标量来表示权重(带下标的 w w w),3个标量来表示偏置(带下标的 b b b)。 下面我们为每个输入计算三个未规范化的预测(logit): o 1 o_1 o1 o 2 o_2 o2 o 3 o_3 o3
o 1 = x 1 w 11 + x 2 w 12 + x 3 w 13 + x 4 w 14 + b 1 o 2 = x 2 w 21 + x 2 w 22 + x 3 w 23 + x 4 w 24 + b 2 o 3 = x 3 w 31 + x 2 w 32 + x 3 w 33 + x 4 w 34 + b 3 o_1=x_1w_{11}+x_2w_{12}+x_3w_{13}+x_4w_{14}+b_1 \\ o_2=x_2w_{21}+x_2w_{22}+x_3w_{23}+x_4w_{24}+b_2\\ o_3=x_3w_{31}+x_2w_{32}+x_3w_{33}+x_4w_{34}+b_3 o1=x1w11+x2w12+x3w13+x4w14+b1o2=x2w21+x2w22+x3w23+x4w24+b2o3=x3w31+x2w32+x3w33+x4w34+b3
原理都和线性回归一样,只是从原来的一个变成了多个,相应的权重以及偏置这些参数增多了而已。与线性回归一样,softmax回归也是一个单层神经网络。 由于计算每个输出 o 1 o_1 o1 o 2 o_2 o2 o 3 o_3 o3取决于所有输入 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4,所以softmax回归的输出层也是全连接层。如下图所示在这里插入图片描述
当然,上述这样的多行表示不管是在书写还是理解上都过于的繁杂,所以我们还是需要使用线性代数去巧妙的表示如上的表达式。
我们使用 o \textbf{o} o来表示 [ o 1   o 2   o 3 ]

[o1 o2 o3]
o1 o2 o3 使用 W \textbf{W} W来表示 [ w 11 w 12 w 13 w 14   w 21 w 22 w 23 w 24   w 31 w 32 w 33 w 34 ]
[w11w12w13w14 w21w22w23w24 w31w32w33w34]
w11 w21 w31w12w22w32w13w23w33w14w24w34
使用 x \textbf{x} x来表示 [ x 1   x 2   x 3   x 4 ]
[x1 x2 x3 x4]
x1 x2 x3 x4
使用 b \textbf{b} b来表示 [ b 1   b 2   b 3   b 4 ]
[b1 b2 b3 b4]
b1 b2 b3 b4
这样上述表示就是一个 o = Wx + b \textbf{o}=\textbf{W}\textbf{x}+\textbf{b} o=Wx+b,注意每个矩阵相对应的形状,实际计算中可以根据自己喜好来,用行表示也可以。实际上在后面我们确实去用每一行代表每个样本在每一类别上的概率。

softmax运算

上小节中,我们最后得出该网络模型的输出结果为一个 o \textbf{o} o的向量,对于动物分类的例子而言,这个向量所表示的含义及是对输入的 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4,所处理出的输出 o 1 o_1 o1 o 2 o_2 o2 o 3 o_3 o3代表该网络模型对于这个输入所预测的该输入是哪种动物的各个可能性。之后根据常识我们肯定会选择出这个最大的可能性作为三个值的代表。比如对于输出 o 1 , o 2 , o 3 o_1,o_2,o_3 o1,o2,o3,分别为 0.1 , 0.8 , 0.1 0.1,0.8,0.1 0.1,0.8,0.1,那么很明显我们选择第二个狗。
那么是否可以将上述未经处理的输出值 o \textbf{o} o直接作为最终的结果呢,答案肯定是否定的,我们这里来说明一下原因。首先,如果不经处理的话,网络模型不能保证每次输出的 o 1 , o 2 , o 3 o_1,o_2,o_3 o1,o2,o3的和正好为1,这也就不符合概率和为1的定义。第二,我们同样在不经处理的情况下保证输出的值为非负,这也不符合概率非负的定义。因此在这里我们要提到一个叫softmax运算的方法,这个方法就是为我们处理上述的输出,使得输出值能满足我们所需要的条件。公式如下:
y ^ = s o f t m a x ( o ) 其中 y j ^ = e x p ( o j ) ∑ k e x p ( o k ) \hat{\textbf{y}}=softmax(\textbf{o})\quad其中\quad\hat{y_{j}}=\frac{exp(o_j)}{\sum_{k}exp(o_k)} y^=softmax(o)其中yj^=kexp(ok)exp(oj)
经过上述操作以后,我们保证了每个输出的值既非负又非零。比如还是上述的动物分类,我们假设最终的输出为-0.3,0.8,0.4。那么
o 1 ^ = e x p ( − 0.3 ) e x p ( − 0.3 ) + e x p ( 0.8 ) + e x p ( 0.4 )   o 2 ^ = e x p ( 0.8 ) e x p ( − 0.3 ) + e x p ( 0.8 ) + e x p ( 0.4 )   o 3 ^ = e x p ( 0.4 ) e x p ( − 0.3 ) + e x p ( 0.8 ) + e x p ( 0.4 ) \hat{o_1}=\frac{exp(-0.3)}{exp(-0.3)+exp(0.8)+exp(0.4)}\\\ \hat{o_2}=\frac{exp(0.8)}{exp(-0.3)+exp(0.8)+exp(0.4)}\\\ \hat{o_3}=\frac{exp(0.4)}{exp(-0.3)+exp(0.8)+exp(0.4)} o1^=exp(0.3)+exp(0.8)+exp(0.4)exp(0.3) o2^=exp(0.3)+exp(0.8)+exp(0.4)exp(0.8) o3^=exp(0.3)+exp(0.8)+exp(0.4)exp(0.4)

损失函数

还记得我们在线性回归里提到过的损失函数嘛,一个二次的函数形式。但是在分类问题里,显然是不适用的,因此这里我们需要提出一个新的损失函数,大家知道会用即可。还是使用上述动物分类问题举例,假设最终的输出 o \textbf{o} o o 1 , o 2 , o 3 o_1,o_2,o_3 o1,o2,o3,那我们怎么去表示这个输出的损失呢,换句话说,我们如何衡量这个输出和真实值之间的差距呢?这里涉及到信息论的基础,有一个叫熵的概念,但是还是为了新手小白考虑,我将用一个例子说明这个损失函数,让大家用起来不会有障碍。我们假设输出为 0.1 , 0.8 , 0.1 0.1,0.8,0.1 0.1,0.8,0.1,而真实的label对应的是狗,那么根据上述提出的独热编码,狗对应的应该为 0 , 1 , 0 0,1,0 0,1,0。那么我们的损失函数 l ( y , y ^ ) = − ∑ j = 1 q y j l o g y j ^ l(y,\hat{y})=-\sum_{j=1}^{q}y_jlog\hat{y_j} l(y,y^)=j=1qyjlogyj^,不是很难理解吧。我们代入真实的值就可以发现, l ( y , y ^ ) = ( − 0 ∗ l o g 0.1 ) + ( − 1 ∗ l o g 0.8 ) + ( − 0 ∗ l o g 0.1 ) l(y,\hat{y})=(-0*log0.1)+(-1*log0.8)+(-0*log0.1) l(y,y^)=(0log0.1)+(1log0.8)+(0log0.1),那么实际上最终的值就是对应标签的那个概率值的负对数,及 − l o g 0.8 -log0.8 log0.8

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/906967
推荐阅读
相关标签
  

闽ICP备14008679号