• (人工)神经网络:由人工神经元和神经元之间的连接组成
    • 早期,是一种连接主义模型,更进一步,是一种分布式并行处理模型,分布式并行处理模型有 3 个特性
      • 信息表示是分布式的(非局部的)
      • 记忆和知识是存储在单元之间的连接上
      • 通过逐渐改变单元之间的连接强度来学习新的知识
    • 从机器学习角度,神经网络可以看作一个非线性模型
      • 基本组成单元为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络成为一种高度非线性的模型
      • 神经元之间的连接权重就是需要学习的参数
      • 采用误差反向传播梯度下降进行学习

4.1 神经元

  • (人工)神经元:是构成神经网络的基本单元,接收一组信息输入并产生输出
概念 定义
净输入 z ,表示一个神经元所获得的输入信号 x 的加权和
活性值 a , 是非线性的激活函数
激活函数 现代神经网络的激活函数通常要求是连续可导的非线性函数

image.png

  • 为了增强网络的表示能力和学习能力,激活函数需要具备的特点:

    • 连续并可导(允许少数点少不可导)的非线性函数,可导的激活函数可以直接利用数值优化的方法来学习网络参数
    • 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
    • 激活函数地导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定新
  • 几种常见的激活函数 第 4 章 前馈神经网络 - 图2

    4.1.1 Sigmoid 型函数

    Sigmoid 型函数是一类 S 型曲线函数,为两端饱和函数,常用的 Sigmoid 函数有 Logistic 函数和 Tanh 函数。

    • 左饱和:函数 f(x),当 第 4 章 前馈神经网络 - 图3 时,其导数 第 4 章 前馈神经网络 - 图4
    • 右饱和:函数 f(x),当 第 4 章 前馈神经网络 - 图5 时,其导数 第 4 章 前馈神经网络 - 图6
    • 两端饱和:同时满足左、右饱和
  • Logistic 函数第 4 章 前馈神经网络 - 图7,值域为 (0, 1)

    • (优点)装备了 Logistic 激活函数的神经元具有两点性质:
      • 其输出直接可以看作概率分布(将实数域的输入“挤压”到 (0, 1)),使得神经网络可以更好地和统计学习模型进行结合
      • 其可以看作一个软性门,用来控制其他神经元输出信息的数量
    • 缺点:输出恒大于 0,非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移,并进一步使得梯度下降的收敛速度变慢
  • Tanh 函数第 4 章 前馈神经网络 - 图8,值域为 (-1, 1)

    • 优点:输出是零中心化

image.png

Logistic 函数和 Tanh 函数具有饱和性,但计算开销较大。这两个函数在 0 附近近似线性,两端饱和,因此可以用分段函数来近似:

  • Hard-Logistic 函数第 4 章 前馈神经网络 - 图10

  • Hard-Tanh 函数第 4 章 前馈神经网络 - 图11

4.1.2 ReLU 函数

ReLU 函数/Rectifier 函数,修正线性单元,是一个斜坡函数,定义:第 4 章 前馈神经网络 - 图12

  • 优点:
    • 采用 ReLU 的神经元只需进行加、乘、比较的操作,计算上更加高效
    • 具有生物和理性:ReLU 具有很好的稀疏性,大约 50% 的神经元处于激活状态,而 Sigmoid 型函数会导致 一个非稀疏的神经网络
    • 在优化方面,Sigmoid 型函数是两端饱和的,可能导致梯度消失的问题;而 ReLU 函数为左饱和函数,且在 x>0 时导数为 1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度
  • 缺点:
    • ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率
    • 死亡 ReLU 问题:由于当 第 4 章 前馈神经网络 - 图13 时,函数恒等于 0,所以当一个 ReLU 神经元在一次不恰当更新后梯度变为 0,则永远不能再被激活

不过,有以下几种变种 ReLU 函数可以解决死亡 ReLU 问题 or 非零中心化的问题:

  • 带泄露的 ReLU第 4 章 前馈神经网络 - 图14
    • 第 4 章 前馈神经网络 - 图15 时,也能保持一个很小的梯度 γ,使得神经元非激活时也能有一个非零的梯度可以更新参数,避免死亡 ReLU 问题
  • 带参数的 ReLU第 4 章 前馈神经网络 - 图16
    • i 代表第 i 个神经元,每个神经元可以有不同的可学习的参数
  • ELU 函数(指数线性单元)第 4 章 前馈神经网络 - 图17
    • 使一个近似的零中心化的非线性函数,γ≥0 是一个超参数,决定 x≤0 时的包和曲线,并调整输出均值在 0 附近
  • Softplus 函数第 4 章 前馈神经网络 - 图18,其导数刚好是 Logistic 函数
    • 可以看作 ReLU 函数的平滑版本

image.png

4.1.3 Swish 函数

Swish 函数,是一种自控门激活函数,定义:第 4 章 前馈神经网络 - 图20

  • 前面提到 Logistic 函数 σ(·) 可以看作一种软性的门控机制,当 第 4 章 前馈神经网络 - 图21 接近于 1 时,门的状态为“开”,swish 函数的输出接近于 x 本身;当 第 4 章 前馈神经网络 - 图22 接近于 0 时,门的状态为“关”,swish 函数的输出接近于 0

image.png

4.1.4 GELU 函数

GELU,高斯误差线性单元,也是一种通过门控机制来调整输出值的激活函数
定义:第 4 章 前馈神经网络 - 图24第 4 章 前馈神经网络 - 图25 是高斯分布 第 4 章 前馈神经网络 - 图26 的累积分布函数

  • 一般设 第 4 章 前馈神经网络 - 图27
  • 高斯分布的累积分布函数为 S 型函数,因此 GELU 函数可以用 Tanh 函数或 Logistic 函数近似
    • 第 4 章 前馈神经网络 - 图28
    • 第 4 章 前馈神经网络 - 图29

4.1.5 Maxout 单元

Maxout 单元也是一种分段线性函数

  • Sigmoid 型函数、ReLU 函数等激活函数的输入是神经元的净输入 第 4 章 前馈神经网络 - 图30,是一个标量;而 Maxout 单元的输入是上一层神经元的全部原始输入,是一个向量 第 4 章 前馈神经网络 - 图31
  • 每个 Maxout 单元有 K 个权重向量 第 4 章 前馈神经网络 - 图32 和偏置 第 4 章 前馈神经网络 - 图33,可以得到 K 个净输入 第 4 章 前馈神经网络 - 图34
  • Maxout 单元的定义第 4 章 前馈神经网络 - 图35

4.2 网络结构

第 4 章 前馈神经网络 - 图36image.png

4.2.1 前馈网络

  • 神经层:前馈网络中各个神经元按接收信息的先后分为不同的组,每一组可以看作一个神经层
  • 前馈网络每一层的神经元接收前一层神经元的输出,并输出到下一层神经元,整个网络没有反向的信息传播,可以用有向无环路图表示
  • 前馈网络包括:
  • 前馈网络可以看作一个函数,通过简单非线性函数的多次符合,实现输入空间到输出空间的复杂映射
  • 优点:这种网络结构简单,易于实现

4.2.2 记忆网络/反馈网络

  • 记忆网络/前馈网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息(神经元具有记忆功能)
  • 记忆网络的信息传播可以是单向或双向传递,可以用有向循环图或无环图表示
  • 记忆网络包括:
    • 循环神经网络
    • Hopfield网络(8.6.1节)
    • 玻尔兹曼机(12.1节)
    • 受限玻尔兹曼机(12.2节)
  • 记忆网络可以看作一个程序,具有更强的计算和记忆能力

4.2.3 图网络

  • 图网络(6.8节)是定义在图结构数据上的神经网络,用于处理图结构的输入数据,比如知识图谱、社交网络、分子网络等
  • 图网络的每个节点都由一个或一组神经元构成
  • 图网络的节点之间可以是有向的,也可以是无向的,每个节点可以收到来自相邻节点或自身的信息

4.3 前馈神经网络 FNN

  • 前馈神经网络也称多层感知机,但其实前馈神经网络是由多层的 Logistic 回归模型(连续的非线性函数)组成,而不是由多层的感知机(不连续的非线性函数)组成
  • 前馈神经网络可以用有向无环图表示,整个网络中无反馈,信号从输入层向输出层单向传播

image.png

  • 前馈神经网络的记号 | 记号 | 含义 | | —- | —- | | | 神经网络的层数 | | | 第 层神经元的个数 | |
    | 第 层神经元的激活函数 | | | 第 层到第 层的权重矩阵 | |
    | 第 层到第 层的偏置 | |
    | 第 层神经元的净输入 | | | 第 层神经元的输出(活性值) |

  • 前馈神经网络逐层信息传递的公式:

    • 初始(输入层的活性值):第 4 章 前馈神经网络 - 图39
    • 第 4 章 前馈神经网络 - 图40 层神经元的净输入:第 4 章 前馈神经网络 - 图41
    • 第 4 章 前馈神经网络 - 图42 层神经元的输出(活性值):第 4 章 前馈神经网络 - 图43
    • 合并以上两个公式:
      • 第 4 章 前馈神经网络 - 图44
      • 第 4 章 前馈神经网络 - 图45
    • 最后得到网络的输出 第 4 章 前馈神经网络 - 图46

4.3.1 通用近似定理

通用近似定理说明了:神经网络的计算能力可以去近似一个给定的连续函数

4.3.2 应用到机器学习

  • 多层前馈神经网络可以看作一种特征转换方法,将 D 维的输入空间映射到 D’ 的输出空间。其输出 第 4 章 前馈神经网络 - 图47 作为分类器 第 4 章 前馈神经网络 - 图48 的输入再进行分类,输出 第 4 章 前馈神经网络 - 图49
  • 如果分类器 第 4 章 前馈神经网络 - 图50 为 Logisitic 回归分类器或 Softmax 回归分类器,则 第 4 章 前馈神经网络 - 图51 也可以看成是多层前馈神经网络的最后一层,即神经网络直接输出不同类别的条件概率 第 4 章 前馈神经网络 - 图52
    • 对于二分类问题,采用 Logisitic 回归,神经网络最后一层只用一个神经元,且激活函数为 Logisitic 函数,网络的输出可直接作为类别 y=1 的条件概率
    • 对于多分类问题,采用 Softmax 回归,神经网络最后一层设置 C 个神经元(C 个类别),且激活函数为 Softmax 函数,输出可作为每个类的条件概率

4.3.3 参数学习

  • 交叉熵损失函数: 第 4 章 前馈神经网络 - 图53
  • 结构化风险函数:第 4 章 前馈神经网络 - 图54
    • 第 4 章 前馈神经网络 - 图55 为正则化项,用来防止过拟合,一般使用 Frobenius 范数:第 4 章 前馈神经网络 - 图56
    • 第 4 章 前馈神经网络 - 图57 为超参数,λ 越大,W 越接近于 0
  • 网络参数通过梯度下降法进行学习,每次迭代中,第 第 4 章 前馈神经网络 - 图58 层的参数更新方式:
    • 第 4 章 前馈神经网络 - 图59
    • 第 4 章 前馈神经网络 - 图60
    • 使用反向传播算法来高效地计算梯度

4.4 反向传播算法

用随机梯度下降法进行参数学习,需要计算损失函数关于每个参数的梯度

第 4 章 前馈神经网络 - 图61 关于参数矩阵中每个元素的偏导数:

  • 第 4 章 前馈神经网络 - 图62
  • 第 4 章 前馈神经网络 - 图63

因此需要计算三个偏导数:

  • 第 4 章 前馈神经网络 - 图64第 4 章 前馈神经网络 - 图65,是第 i 个元素为 第 4 章 前馈神经网络 - 图66,其余为 0 的行向量
  • 第 4 章 前馈神经网络 - 图67第 4 章 前馈神经网络 - 图68
  • 第 4 章 前馈神经网络 - 图69 第 4 章 前馈神经网络 - 图70 层神经元的误差项,表示第 第 4 章 前馈神经网络 - 图71 层神经元对最终损失的影响,也反映了最终损失对第 第 4 章 前馈神经网络 - 图72 层神经元的敏感程度;也间接反映了不同神经元对网络能力的贡献程度,从而比较好地解决了贡献度分配问题
    • 第 4 章 前馈神经网络 - 图73第 4 章 前馈神经网络 - 图74 是点积运算符,表示每个元素相乘
    • 也就是第 第 4 章 前馈神经网络 - 图75 层的误差项可以通过第 第 4 章 前馈神经网络 - 图76 层的误差项计算得到,这就是误差的反向传播
    • 反向传播算法的含义:第 第 4 章 前馈神经网络 - 图77 层的一个神经元的误差项(或敏感性)是所有与该神经元相连的第 第 4 章 前馈神经网络 - 图78 层的神经元的误差项的权重和,然后,再乘上该神经元激活函数的梯度

所以 第 4 章 前馈神经网络 - 图79

第 4 章 前馈神经网络 - 图80 关于参数矩阵的梯度

  • 第 4 章 前馈神经网络 - 图81
  • 第 4 章 前馈神经网络 - 图82

使用误差反向传播算法的前馈神经网络的训练过程分为三步

  • 前馈计算每一层的净输入 第 4 章 前馈神经网络 - 图83 和激活值 第 4 章 前馈神经网络 - 图84,直到最后一层
  • 反向传播计算每一层的误差项 第 4 章 前馈神经网络 - 图85
  • 计算每一层参数的偏导数 第 4 章 前馈神经网络 - 图86第 4 章 前馈神经网络 - 图87,并更新参数

image.png

4.5 自动梯度计算

第 4 章 前馈神经网络 - 图89

4.5.1 数值微分

函数 第 4 章 前馈神经网络 - 图90 在点 x 的导数 第 4 章 前馈神经网络 - 图91,数值微分要找这个 第 4 章 前馈神经网络 - 图92
缺点:

  • 如果 第 4 章 前馈神经网络 - 图93 过小,会引起数值计算问题,比如舍入误差
  • 如果 第 4 章 前馈神经网络 - 图94 过大,会增加截断误差,使得导数计算不准确
  • 计算复杂度高

4.5.2 符号微分

符号微分是一种基于符号计算的自动求导方法

  • 处理的对象是数学表达式
  • 在编译阶段先构造一个复合函数的计算图,通过符合计算得到导数的表达式,还可以对导数表达式进行优化,在程序运行阶段才代入变量的具体数值来计算导数

优点:

  • 符号计算与平台无关,可以在 CPU 或 GPU 上运行

不足:

  • 编译时间较长,特别是对于循环,需要很长时间进行编译
  • 为了进行符号微分,一般要设计一种专门的语言来表示数学表达式,并且要对变量(符号)进行预先声明
  • 很难对程序进行调试

4.5.3 自动微分

自动微分是一种可以对一个(程序)函数进行计算导数的方法

  • 处理的对象是一个函数或一段程序
  • 是目前大多数深度学习框架的首选
  • 基本原理:所有的数值计算可以分解为一些基本操作,包括第 4 章 前馈神经网络 - 图95 和一些初等函数 第 4 章 前馈神经网络 - 图96 等,并构成一个计算图,然后用链式法则来自动计算一个复合函数的梯度
  • 无需事先编译,在程序运行阶段边计算边记录计算图,计算图上的局部梯度都直接代入数值进行计算,然后用前向模式或反向模式计算最终的梯度

image.png

自动微分分为:

  • 前向模式:按计算图中计算方向的相同方向来递归地计算梯度
  • 反向模式:按计算图中计算方向的相反方向来递归地计算梯度
    • 反向模式和反向传播的计算梯度的方式相同

计算图按构建方式可分为:

  • 静态计算图:在编译时构建计算图,构建好后在程序运行时不能改变
    • 特性:构建时可以进行优化,并行能力强,但灵活性比较差
    • 实例:Tensorflow
  • 动态计算图:在程序运行时动态构建
    • 特性:不容易优化,难以并行计算,但灵活性比较高
    • 实例:Pytorch、Tensorflow 2.0

image.png

4.6 优化问题

神经网络的参数学习比线性模型要更加困难,主要原因有两点:

  • 非凸优化问题
  • 梯度消失问题

4.6.1 非凸优化问题

神经网络的优化问题是一个非凸优化问题

4.6.2 梯度消失问题/梯度弥散问题

神经网络中误差反向传播的迭代公式:第 4 章 前馈神经网络 - 图99,每一层都要乘以该层的激活函数的导数 第 4 章 前馈神经网络 - 图100
Sigmoid 型函数的导数的值域都 ≤1,且由于 Sigmoid 型函数的饱和性,饱和区的导数趋近于 0,因此误差经过每一层传递都会不断衰减,甚至直到梯度消失,使得整个网络很难训练
image.png

减轻梯度消失问题的方法:使用导数比较大的激活函数,eg. ReLU

4.7 总结和深入阅读

常见的激活函数及其导数:
image.png

习题

习题讨论,解答参考:邱锡鹏《神经网络与深度学习》—— 部分习题答案整理

习题 4-1 对于一个神经元 第 4 章 前馈神经网络 - 图103,并使用梯度下降优化参数 𝒘 时, 如果输入 𝒙 恒大于 0,其收敛速度会比零均值化的输入更慢

如果输入 𝒙 恒大于 0,即非零中心化的输入,会导致反向传播计算得到的 w 的梯度值全为正或全为负,这样的梯度值用于权重更新时,不是平缓的迭代变化,而是总朝着同一方向抖动(锯齿状变化),影响梯度下降速度。
image.png


习题 4-2 试设计一个前馈神经网络来解决 XOR 问题(异或), 要求该前馈神经网络具有两个隐藏神经元和一个输出神经元, 并使用 ReLU 作为激活函数.

image.png


习题 4-3 试举例说明“死亡ReLU问题”, 并提出解决方法

解决方法:

  • 带泄露的 ReLU
  • 带参数的 ReLU
  • ELU 函数
  • Softplus 函数

习题 4-4 计算 Swish 函数和 GELU 函数的导数(参见 4.1.3 节


习题 4-5 如果限制一个神经网络的总神经元数量(不考虑输入层)为 𝑁 + 1,输入层大小为 第 4 章 前馈神经网络 - 图106,输出层大小为 1,隐藏层的层数为 𝐿,每个隐藏层的神经元数量为 第 4 章 前馈神经网络 - 图107,试分析参数数量和隐藏层层数 𝐿 的关系.

  • N + 1 个神经元每个神经元都有偏置参数,即共有 N + 1 个偏置参数
  • 输入层连接隐藏层的权重参数数量为 第 4 章 前馈神经网络 - 图108
  • 隐藏层内部之间连接的权重参数数量为 第 4 章 前馈神经网络 - 图109
  • 隐藏层连接输出层的权重参数数量为 第 4 章 前馈神经网络 - 图110

所以,参数数量的和为 第 4 章 前馈神经网络 - 图111


习题 4-6 证明通用近似定理对于具有线性输出层和至少一个使用 ReLU 激活函数的隐藏层组成的前馈神经网络,也都是适用的


习题 4-7 为什么在神经网络模型的结构化风险函数中不对偏置 𝒃 进行正则化?

加入正则化项的目的是为了防止过拟合, 防止它对于输入的微小变化过于敏感, 但偏置对任意的输入都产生同样的效应, 加入他们对于防止过拟合没有什么帮助


习题 4-8 为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令 𝑾 = 0, 𝒃 = 0?

若将𝑾和𝒃都初始化为0,则在输入层之后的所有隐藏层神经元接收到的输入都是一样的,那么在使用反向传播算法进行梯度的传递时,每一隐藏层的权重梯度值都是相同的,这就导致了权重只能向同一方向下降,这和问题4-1有一定的相似性,只不过是从权重和偏置方面导致了输入X值的非零均值化(更极端的是所有值相同)


习题 4-9 梯度消失问题是否可以通过增加学习率来缓解?

可以缓解, 但不一定能得到理想的效果, 增大学习率可能使最优值被跨越, 也可能造成梯度爆炸