多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机...

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第1张图片

大名鼎鼎多层感知机登场!

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第2张图片
多层感知机结构图

我们来看一下这个结构。输入信号通过各个网络层的隐节点产生输出的过程称为前向传播,用以下符号表示:

定义第

层的输入为
,输出为
。在每一层中,首先利用
和偏置
计算仿射变换
,然后利用激活函数
作用于
,得到
直接作为下一层的输入,也就是
。设
为m维的向量,
为n维的向量,则
维的矩阵。

我们分别用

表示其中第一个元素。

在网络训练中,前向传播最终产生一个标量损失函数,反向传播算法(Back Propagation)则将损失函数的信息沿网络层向后传播用以计算梯度,达到优化网络参数的目的。

好的,以上是多层感知机的一些描述。接下来通过几个sections来进一步了解一些细节。


Section 1 : 多层感知机的平方误差和交叉熵损失函数

给定包含m个样本的集合

,其整体代价函数为:

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第3张图片

其中,第一项为平方误差项,第二项为

正则化项,在功能上可称作是权重衰减项,目的是减少权重的幅度,防止过拟合。该项之前的系数
为权重衰减参数,用于控制损失函数中两项的相对权重。

以二分类场景为例:交叉熵损失函数定义为如下形式:

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第4张图片

其中,正则项于上式是相同的;第一项衡量了预测

与真实类别
之间的交叉熵,当它们俩相等时,熵最大,损失函数达到最小。

在多分类的场景中,可以类似的写出相应的损失函数:

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第5张图片

其中

代表第i个样本的预测属于类别k的概率,
为实际的概率(如果第i个样本 的真实类别为k,则
,否则为0)。

Section 2:根据1中定义的损失函数,推导各层参数更新的梯度计算公式

根据开篇的时候的定义,再来陈述一遍:

层的参数为
;每一层的线性变换为
;输出为
,其中,
为非线性激活函数(如Sigmoid、Tanh、ReLU等)。
直接作为下一层的输入,也就是

我们可以利用批量梯度下降法来优化网络参数。梯度下降法中每次迭代对参数

(网络连接权重)和
(偏置)进行更新:

其中,

为学习率,控制每次迭代中梯度变换的幅度。

问题的核心在于求解

。为了得到递推公式,我们还需要计算损失函数对隐藏层的偏导:

其中,

为 第
层的节点数,而

多层感知机和神经网络的区别_百面机器学习笔记 | 第九章:前向神经网络 | 03 多层感知机..._第6张图片

其中,

无关可以省去,
,因此,上式可以改写为:

可以看作是损失函数在第
层第
个节点产生的残差量,记作
,从而递推公式可以表示为:

12fdf453a3c85d5ffd0c40e11f6a5786.png

损失对参数函数的梯度可以写为:

1015de3b995a2dde58a0c18415b14d8b.png

4d39c64319f0fc032f2f4fcfd62e1bec.png

下面针对两种不同的损失函数计算最后一层的残差δ(L);得到δ(L)之后,其他层的残 差δ(L−1),…, δ(1)可以根据上面得到的递推公式计算。为了简化起见,这里暂时忽略 Batch样本集合和正则化项的影响,重点关注这两种损失函数产生的梯度。

平方误差损失:

交叉熵损失:

30b56ef983fdbef02acbe11d1647a2bc.png

在分类问题中,

仅在一个类别k时取值为1,其余为0。设实际的类别为
,则:

取softmax激活函数时,
,因此有:

Section 3 :平方误差损失函数和交叉熵损失函数分别适合什么场景?

一般来说,平方损失函数更适合输出为连续,并且最后一层不含Sigmoid或 Softmax激活函数的神经网络。交叉熵损失则更适合二分类或多分类的场景

那为何平方损失函数不适合最后一层含有Sigmoid或Softmax激活函数的神经网络呢?

可以回顾之前推导出的平方误差损失函数相对于输出层的导数:

f8952af58c6afaee180b2025bf27b0fc.png

其中最后一项

为激活函数的导数。当激活函数为Sigmoid函数时,如果
的 绝对值较大,函数的梯度会趋于饱和,即
的绝对值非常小,导致
的取值也非常小,使得基于梯度的学习速度非常缓慢。当使用交叉熵损失函数时,相对于输出层的导数(也可以被认为是残差)为
,此时的导数是线性的,因此不会存在学习速度过慢的问题。

你可能感兴趣的:(多层感知机和神经网络的区别)