softmax:

根据之前对于逻辑回归的了解可知,分类模型的输出是该样本为某个类别的置信度。对于更一般的分类问题,比如进行缺陷的分类时,可能的缺陷会有划痕、变色、缺角等。假设共有N个类别,那么可以将输出o定义为长为N的向量,向量中的每一个元素都代表了该样本为某一个类的置信度。对于真实的样本,其对应标签就是一个只有一个元素为1,其他元素全部为0的向量。

因此,模型的要求是:对于确实属于某一类别的的样本,其对应的在这个类别上的置信度要尽可能大于其他非正确类别,对应表达式即:

o_{y}-o_{i} \geq \Delta (y,i )

对于当前的输出O,还需要经过一些转换,将其转换为长仍然为i,但对应每个元素非负,且和为1的向量,即将输出转换为匹配概率,因此,我们引入softmax函数作为此时模型的激活函数。

\hat{y}=softmax(o)

\hat{y}_{i}=\frac{e^{o_{i}}}{\sum e^{o_{k}}}

上述转换即可满足输出要求,损失则定义为概率y\hat{y}之间的区别

损失函数:

注意,上面提到的损失定义是两个概率之间的区别而不是差,一般对于概率的区别采用交叉熵来衡量,具体表达式如下,其中p和q是具有多个元素的离散概率:

H(p,q)=\sum (-p_{i}logq_{i})

将其作为此时分类模型的损失可得:

L(y,\hat{y})=\sum (-y_{i}log\hat{y}_{i})

根据此时损失表达式的形式,联系到之前逻辑回归时对应的损失函数:

L(y,\hat{y})=(-ylog\hat{y})-(1-y)log((1-\hat{y}))

对比上述两式可以发现,对于分类问题,因为真实概率中只有一个元素值为1,若该样本对应到第k类,单个样本的损失其实就是:

L(y,\hat{y})=-log\hat{y}_{k}

输出层:

若总共的类别有N类,那么对应的输出层中就有N个神经元,每一个神经元的输出对应的就是该样本是否属于此类的概率。对比之前提到的三种常用的激活函数,可以发现,只有softmax函数它的输出与所有的Z(\vec{w}\vec{x}+b)值有关,而其他的激活函数都是只与自己神经元的Z值有关。

多标签分类:

上面提到的softmax回归实际上是将一个样本分类到N个可能的类别中的一个类别,而多标签分类则与之不同。例如,对于智能无人车的识别模型,我们可能需要同时判别某一张图像中是否存在车辆、公交车以及行人。对于这种情况有两种方案:1.单独构建三个不同的模型来进行逻辑回归;2.构建一个可以同时检测多个分类的模型。相比而言,方案2可以节约训练成本,并且探索不同类别标签之间的相关性等,因此实际建模中我们也会选择方案2来训练模型。此时对应的输出层中将有与类别标签个数相同的神经元,而输出层的激活函数则是与逻辑回归一致,最终得到的输出就分别是每个类别是否存在的概率。

其他优化方法:

之前所有的模型中采用的优化算法都是梯度下降,即根据原始参数值、学习率以及偏导数来更新参数。在普通的梯度下降中,学习率都是一个固定值,不过,在某些情况下,固定的学习率并不利于快速收敛。比如下图左侧,当某个参数始终朝一个方向移动时,我们可以适当的增大学习率来快速收敛;下图右侧,当目前学习率较大,已经开始振荡时,应该要适当的减小学习率以保证收敛。



卷积层:

之前所有的模型中的“层”,其中的神经元都是接收前一个层的全部输出作为输入,这样的层称之为“密集层”,而除此之外,还有另一种“卷积层”。

与密集层不同的是,卷积层中的神经元只接收前一层的部分输出作为输入。相较而言,卷积层由于接收的数据量小,计算速度会更快;同时,它还适用于小样本情况,并且可以一定程度上避免过拟合。对于卷积神经网络的架构,我们可以通过调整每一层的神经元个数以及“窗口”的大小(部分输出的多少)来得到不同的模型。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐