前馈神经网络.pdf
来源链接

深度前馈网络

深度前馈网络(Deep Feedforward Network )也被称之为前馈神经网络(Feedforward Neural Network)或者多层感知机(Mutiplayer Perceptron)。是最典型的深度学习模型。
目标是拟合一个函数,如有一个分类器♠ 深度前馈网络学习 - 图1将输入♠ 深度前馈网络学习 - 图2映射到输出类别♠ 深度前馈网络学习 - 图3。深度前馈网将这个映射 定义为:♠ 深度前馈网络学习 - 图4,把那个且学习这个参数♠ 深度前馈网络学习 - 图5的值来得到最好的函数拟合。
前馈并不意味着网络中的信号不能反转,而是指网络拓扑中不能存在回路或环(反馈)。
深度前馈网络中信息从♠ 深度前馈网络学习 - 图6流入,通过中间♠ 深度前馈网络学习 - 图7的计算,最后达到输出♠ 深度前馈网络学习 - 图8。如图所示,假设由♠ 深度前馈网络学习 - 图9这三个函数链式链接,这个链式连接可以表示为♠ 深度前馈网络学习 - 图10,这种链式结构是神经网络最常用的结构。♠ 深度前馈网络学习 - 图11被称为神经网络的第一层,第二层,也为网络的隐藏层(Hidden Layer),深度前馈网络最后一层♠ 深度前馈网络学习 - 图12就是输出层(Output Layer)。这个链的长度就是神经网络的深度,输入向量的每个元素均视作一个神经元。

image.png

神经元模型

在介绍神经网络之前,我们先来看一下神经元的结构。
下图中 ♠ 深度前馈网络学习 - 图14 代表输入, ♠ 深度前馈网络学习 - 图15 代表权重,b代表偏置,g代表非线性激活函数。♠ 深度前馈网络学习 - 图16 叫做带权输入,a叫做激活值,是神经元的输出。
♠ 深度前馈网络学习 - 图17
♠ 深度前馈网络学习 - 图18

神经网络的结构

前馈神经网络之所以被称为网络(network),是因为它们通常用许多不同函数复合在一起来表示。该模型与一个有向无环图相关联,而图描述了函数是如何复合在一起的。
我们以下图为例子说明神经网络的结构。神经网络分为输入层隐藏层输出层。前馈网络最前面的层称作输入层,最后一层称作输出层,中间既不是输入也不是输出的层叫做隐藏层。
下图是一个3层的神经网络,输入层不计入层数。神经网络的层数称为模型的深度,正是因为这个术语才出现了“深度学习”这个名字。每一层的节点都代表一个神经元(neuron),每层的单元数代表了模型的宽度
♠ 深度前馈网络学习 - 图19

神经网络的标记

我们首先以神经元为基本单位给出权重,偏置,带权输入,激活值的表示。然后以神经元的层为单位给出其矩阵表示。最后我们给出实际软件中使用的表示方法,这样的表示能够帮助我们处理多个输入向量。

单个神经元角度

我们首先给出网络中权重的清晰定义。我们使用 ♠ 深度前馈网络学习 - 图20 表示从 ♠ 深度前馈网络学习 - 图21♠ 深度前馈网络学习 - 图22 个神经元到 ♠ 深度前馈网络学习 - 图23 层的 ♠ 深度前馈网络学习 - 图24 个神经元的连接上的权重。例如下图给出了网络中第二层的第四个神经元到第三层的第二个神经元的连接上的权重:
♠ 深度前馈网络学习 - 图25
我们对网络的偏置,激活值也会使用类似的表示。显式的,我们使 ♠ 深度前馈网络学习 - 图26 表示在 ♠ 深度前馈网络学习 - 图27 层的第 ♠ 深度前馈网络学习 - 图28 个神经元的偏置,使用 ♠ 深度前馈网络学习 - 图29 表示 ♠ 深度前馈网络学习 - 图30 层第 ♠ 深度前馈网络学习 - 图31 个神经元的激活值, ♠ 深度前馈网络学习 - 图32 表示 ♠ 深度前馈网络学习 - 图33 层第 ♠ 深度前馈网络学习 - 图34 个神经元的激活函数的带权输入。下面的图清楚地解释了这样表示的含义:
♠ 深度前馈网络学习 - 图35
有了这些表示, ♠ 深度前馈网络学习 - 图36层的第 ♠ 深度前馈网络学习 - 图37 个神经元的激活值 ♠ 深度前馈网络学习 - 图38 就和 ♠ 深度前馈网络学习 - 图39 层的激活值通过方程关联起来:
♠ 深度前馈网络学习 - 图40
♠ 深度前馈网络学习 - 图41

层的角度(单个输入样本)

  1. ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891808-c87de38a-3936-4379-b430-6c9f016edae5.svg#align=left&display=inline&height=20&margin=%5Bobject%20Object%5D&originHeight=20&originWidth=6&size=0&status=done&style=none&width=6) 代表神经网络的第 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891824-e33d1a53-6650-4ad2-a93a-ec394e53d3a0.svg#align=left&display=inline&height=24&margin=%5Bobject%20Object%5D&originHeight=24&originWidth=22&size=0&status=done&style=none&width=22) 层。 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891833-e4eb322e-74cf-4fb3-978b-592519c9d51b.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=27&size=0&status=done&style=none&width=27) 代表第 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891839-51661ac8-65be-4cfc-8b8d-4180df00c6de.svg#align=left&display=inline&height=24&margin=%5Bobject%20Object%5D&originHeight=24&originWidth=22&size=0&status=done&style=none&width=22) 层神经元的个数。<br />我们对每一层 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891851-ad73feda-ddbe-4540-85b2-64ab23326a8c.svg#align=left&display=inline&height=20&margin=%5Bobject%20Object%5D&originHeight=20&originWidth=6&size=0&status=done&style=none&width=6) 都定义**权重矩阵** ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891849-2852f84f-4a7c-49a3-ad79-e3c9a2e763b8.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=37&size=0&status=done&style=none&width=37),偏置向量 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891846-7f6f28fe-db02-47ce-82d3-256f2eeb7410.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=24&size=0&status=done&style=none&width=24) ,带权输入向量 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891848-79ef30de-dae1-45b8-ad24-7f9373f75114.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=25&size=0&status=done&style=none&width=25) ,激活值向量 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891854-04f69eda-08a6-4f18-b5e0-e29c7f3d4542.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=26&size=0&status=done&style=none&width=26)。<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891900-bb720cac-c168-48af-8e73-118f809091e0.svg#align=left&display=inline&height=152&margin=%5Bobject%20Object%5D&originHeight=152&originWidth=353&size=0&status=done&style=none&width=353)<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891871-a426d258-7531-4a1a-9471-c4d587eef4d8.svg#align=left&display=inline&height=32&margin=%5Bobject%20Object%5D&originHeight=32&originWidth=31&size=0&status=done&style=none&width=31) 是第 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891868-ffa4e366-49b6-4256-939e-7d8ec737816b.svg#align=left&display=inline&height=27&margin=%5Bobject%20Object%5D&originHeight=27&originWidth=25&size=0&status=done&style=none&width=25) 行第 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891903-a2dff5f4-1efd-4692-829c-e799b9d258cc.svg#align=left&display=inline&height=24&margin=%5Bobject%20Object%5D&originHeight=24&originWidth=27&size=0&status=done&style=none&width=27) 列的元素。<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891903-535fd6b4-0b6f-4632-ac5f-176e0acabcb6.svg#align=left&display=inline&height=26&margin=%5Bobject%20Object%5D&originHeight=26&originWidth=37&size=0&status=done&style=none&width=37) 的大小是 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891921-09377fcc-4f85-49ea-930c-0ac584c6765b.svg#align=left&display=inline&height=30&margin=%5Bobject%20Object%5D&originHeight=30&originWidth=99&size=0&status=done&style=none&width=99)<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891921-804b07aa-d585-4355-b558-8aa2f4a840ce.svg#align=left&display=inline&height=137&margin=%5Bobject%20Object%5D&originHeight=137&originWidth=118&size=0&status=done&style=none&width=118) ,![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891928-bd0dc745-459d-4ed8-a378-deb4aa5dc89e.svg#align=left&display=inline&height=137&margin=%5Bobject%20Object%5D&originHeight=137&originWidth=120&size=0&status=done&style=none&width=120) ,![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009892107-55f823cf-2c4b-4d7e-994a-fb2a77bde32c.svg#align=left&display=inline&height=137&margin=%5Bobject%20Object%5D&originHeight=137&originWidth=122&size=0&status=done&style=none&width=122)<br /> ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891930-01383cca-7671-491b-9ddf-658a29a8372e.svg#align=left&display=inline&height=29&margin=%5Bobject%20Object%5D&originHeight=29&originWidth=93&size=0&status=done&style=none&width=93) 的大小都是 ![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891960-de692fe8-e447-4b3d-8e3e-fe8c65318d82.svg#align=left&display=inline&height=30&margin=%5Bobject%20Object%5D&originHeight=30&originWidth=63&size=0&status=done&style=none&width=63)<br />我们将**前向传播公式**写为如下矩阵形式:<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891981-2c3450ca-82a1-4c80-9130-c1258b547b53.svg#align=left&display=inline&height=27&margin=%5Bobject%20Object%5D&originHeight=27&originWidth=184&size=0&status=done&style=none&width=184)<br />![](https://cdn.nlark.com/yuque/0/2020/svg/1238812/1593009891950-bb3cbf5f-2c38-46d1-98d3-036cc72c1bac.svg#align=left&display=inline&height=30&margin=%5Bobject%20Object%5D&originHeight=30&originWidth=105&size=0&status=done&style=none&width=105)

多个样本的表示

当我们像让多个样本同时在网络中计算时,权重和偏置的表示方式没有变化。带权输入和激活值会有一些变化。我们假设同时输入的样本数为 ♠ 深度前馈网络学习 - 图42 ,对于第 ♠ 深度前馈网络学习 - 图43 个样本我们用上标 ♠ 深度前馈网络学习 - 图44 标记。
♠ 深度前馈网络学习 - 图45♠ 深度前馈网络学习 - 图46 的不同列代表不同样本在该层的带权输入、激活值。
♠ 深度前馈网络学习 - 图47 ,shape= ♠ 深度前馈网络学习 - 图48
♠ 深度前馈网络学习 - 图49 , shape= ♠ 深度前馈网络学习 - 图50
前向传播公式如下:
♠ 深度前馈网络学习 - 图51
♠ 深度前馈网络学习 - 图52

非线性激活函数

sigmoid函数

♠ 深度前馈网络学习 - 图53
♠ 深度前馈网络学习 - 图54
导数: ♠ 深度前馈网络学习 - 图55
sigmoid函数在a接近0或者1时,函数的导数很小(接近0),会使模型收敛速度变慢。
我们一般不使用sigmoid函数,只在以下两种情况时使用:

  • 1.二分类的时候,输出层使用
  • 2.需要输出值在0到1之间,输出层使用

    tanh函数

    ♠ 深度前馈网络学习 - 图56
    ♠ 深度前馈网络学习 - 图57
    tanh函数和sigmoid函数的关系。 ♠ 深度前馈网络学习 - 图58
    导数: ♠ 深度前馈网络学习 - 图59
    tanh几乎在任何情况下效果都比sigmoid要好。tanh函数的值在-1和1之间,输出的结果的平均值为0。tanh函数和sigmoid函数的共同缺点是在z接近无穷大或无穷小时,这两个函数的导数也就是梯度变得非常小,此时梯度下降的速度也会变得非常慢。

    ReLu函数

    ♠ 深度前馈网络学习 - 图60
    ♠ 深度前馈网络学习 - 图61
    导数: ♠ 深度前馈网络学习 - 图62
    ReLU函数是非线性激活函数的默认选择,如果你不知道该选择哪个激活函数,ReLU很可能是个好的选择。
    当z大于0时,ReLU的导数一直为1,所以采用ReLU函数作为激活函数时,随机梯度下降的收敛速度会比sigmoid及tanh快得多。

    Leaky ReLU函数

    **

♠ 深度前馈网络学习 - 图63
♠ 深度前馈网络学习 - 图64
导数: ♠ 深度前馈网络学习 - 图65

为什么需要非线性激活函数

如果没有非线性激活函数,得到的输出仅仅是输入的线性组合。这样多层的神经网络的模型复杂度就和单层神经网络一样了。

反向传播

给出4个方向传播公式。( ♠ 深度前馈网络学习 - 图66 是损失值)

下面是单个神经元的公式。

**♠ 深度前馈网络学习 - 图67
♠ 深度前馈网络学习 - 图68
♠ 深度前馈网络学习 - 图69
♠ 深度前馈网络学习 - 图70

下面是向量化的公式(单个样本)。


♠ 深度前馈网络学习 - 图71
♠ 深度前馈网络学习 - 图72
♠ 深度前馈网络学习 - 图73
♠ 深度前馈网络学习 - 图74

最后我们给出同时输入多个样本时的公式,也是我们在编写程序时使用的公式。

**♠ 深度前馈网络学习 - 图75
♠ 深度前馈网络学习 - 图76
♠ 深度前馈网络学习 - 图77
♠ 深度前馈网络学习 - 图78

具体实现

具体实现时,可以按照下图的流程和我们得到的公式进行前向和反向传播。这里就不详细说明了。
♠ 深度前馈网络学习 - 图79

神经网络与神经科学

这些网络之所以被称为神经网络,是因为它们或多或少地受到神经科学的启发。然而,现代神经网络研究受到更多的是来自数学和工程学科的指引,并且神经网络的目标并不是完美的给大脑建模。我们最好将前馈神经网络想成是为了实现统计泛化而设计出的函数近似机,它偶尔从我们了解的大脑中提取灵感,但并不是大脑功能的模型。