人工神经网络:多层感知器

535 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

单层的感知器在使用的过程中,人们发现它存在很多的问题,以及无法解决一些复杂的问题,正如一些线性分类模型一样。于是在发展中发现了可以堆叠感知器来解决一些问题,从而形成了多层感知器(MLP)。

多层感知器

在ANN中,可以通过堆叠多个感知器来消除感知器的某些局限性。如原本感知器无法解决异或问题,但是可在MLP中解决,大致如下图:

图1 解决XOR问题的MLP

MLP由一层输入层、一层或多层TLU(称为隐藏层)和一个TLU的最后一层输出层组成。除了输出层外,每一层都有一个偏置神经元,并完全连接到下一层。这里需要注意一点,如果信号仅沿着一个方法流动,因此也称为前馈神经网络(FNN)。

当一个ANN包含一个深层的隐藏层时,它称为深度神经网络(DNN)。深度学习领域研究DNN,或者说包含深度计算堆栈的模型。

反向传播训练算法

随着对MLP的深入研究,也发明了反向传播训练算法,在数据前向流动进行预测后,还能够根据损失函数一层一层反向回来修正输入与输出之间的权值。

算法的流程主要是:

  • 他一次处理一个小批量,并且多次遍历整个训练集。
  • 每个小批量都传递到网络的输入层,然后再一层一层计算后送到隐藏层,最后到输出层,这就是前向。同时会保留下中间每层的计算结果,用于反向遍历。
  • 算法会测量出网络的输出误差,然后计算没和输出连接对错误的贡献程度。从上往下,反向传递网络中的传播误差。
  • 最后执行梯度下降,根据误差梯度不断调整网络中的连接权重。

这里也需要注意就是初始化输入时,如果设置相同数字会导致每一层好像只有一个神经元再工作,需要随机初始化输入,打破这个对称性。

在之前讲过神经元输出之前需要使用激活函数,一般的激活函数会用到如阶跃函数、sigmoid函数、和ReLU等,他们如下图所示:

图2 各种激活函数

RELU(z) = max(0,z),因为它的运作良好并且具有计算快速的优点,它成为了默认的激活函数。