Idea

人工神经网络(ANN,Artificial Neural Networks)是在人类对大脑神经网络认识理解的基础上,人工构造的能够实现某种功能的神经网络。它是理论化的人脑神经网络的数学模型,是基于模仿大脑神经网络结构和功能而建立起来的一种信息处理系统。

  • 并行分布式的处理结构
  • 具有局部内存,可以完成局部操作
  • 每个处理单元有一个单一的输出连接;

神经网络结构和工作机理基本上是以人脑的组织结构和活动规律为背景的,它反映了脑的某些基本特征,但并不是要对人脑部分的真正实现,可以说它是某种抽象、简化或模仿。

如果将大量功能简单的形式神经元通过一定的拓扑结构组织起来,构成群体并行分布式处理的计算结构,那么这种结构就是人工神经网络,在不引起混淆的情况下,统称为神经网络。

ANN有三大要素如下:

  • 神经元的激活规则:主要是指神经元输入到输出之间的映射关系,一般为非线性函数
  • 网络的拓扑结构:不同神经元之间的连接关系
  • 学习算法:通过训练数据来学习神经网络的参数

激活函数

性质要求

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

Logistic函数系

它有一个良好的性质:

它具有挤压的功能,输出可以看作某种概率分布;

Logistic函数

有一个线性近似函数

可降低计算开销image-20250523204548285

Tanh函数系

特点是零中心化,可以提升收敛速度

Tanh函数

也存在如下线性近似

hardTanh函数

ReLU函数系

性质如下:

  1. ReLU:是目前最常用的激活函数,具有单侧抑制、宽兴奋边界的生物学合理性,可缓解梯度消失问题,但有可能导致神经元的死亡
  2. 带泄露的ReLU:在时也保持一个很小的梯度,避免 永远不能被激活的情况,为超参
  3. 指数线性单元ELU:近似零中心化,为超参
  4. Softplus可以看成ReLU的平滑版本,其导数刚好为Logistic函数 也有单侧抑制、宽兴奋边界的特性,但不具有稀疏性

多层感知机

两层感知机构造

要解决复杂问题,单层神经网络是不够用的,因此引入隐层和多层前反馈神经网络:其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;

采用多层感知机可以解决异或问题;输入仍为

  • 隐藏层:包含两个神经元
  • 输出层包含一个神经元
  • 隐藏层采用线性整流激活函数ReLU

能解决异或问题的多层感知机

可以看到,学习的隐藏空间时一个非线性的空间变换

隐藏空间变换

万能近似定理

万能近似定理(universal approximation theorem)表述如下:一个两层人工神经网络如果具有足够多的隐藏单元,它可以以任意的精度来近似任何一个函数(即可以表示任意的复杂输入-输出关系)。

神经网络可以作为一个万能函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布。

根据万能近似定理,对于具有线性输出层和至少一个使用"挤压"性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何从一个定义在实数空间中的有界闭集函数。因此神经网络经常被当作一个万能函数使用,进行复杂的特征转换,或者逼近一个复杂的条件分布;

前馈神经网络如何学习分类器?

  • 为Logistic回归,那么Logistic回归分类器可以看成神经网络的最后一层;
  • 如果使用softmax回归分类器,相当于网络最后一层设置 个神经元,其输出经过softmax函数进行归一化后可以作为每个类的后验概率,\hat{\mathbf{y}}=\mathrm{softmax}(\mathbf{z}^{(L)})
  • 采用交叉熵损失函数,对于样本(x, y),其损失函数为

神经网络能够通过训练,改变其内部表示,使输入-输出变换朝好的方向发展。训练实质是用同一个训练集的样本反复作用于网络,网络按照一定的训练规则(学习规则或学习算法),自动调节神经元之间的连接强度或拓扑结构,当网络的实际输出满足期望的要求,或者趋于稳定,这认为训练圆满结束。神经网络的学习成果蕴含在权值和阈值当中;

但是有如下潜在问题:

  • 单隐层网络可以近似任何函数,但其规模可能巨大,在最坏的情况下,需要指数级的隐藏单元才能近似某个函数;

  • 随着深度的增加,网络的表示能力呈指数增加,一个具有个输入、深度为、每个隐藏层具有个单元的深度整流网络可以描述线性区域的数量为

有研究注意到,更深层的网络具有更好的泛化能力,参数数量的增加未必一定会带来模型效果的提升;

更深的模型往往表现更好,不仅仅是因为模型更大。 想要学得的函数应该由许多更简单的函数复合在一起而得到

多层感知机

在多层感知机(Multi-layer Perceptron, MLP)中,更常见的名字是前馈神经网络(Feedforward Neural Network, FNN)

  • 输入层神经元接收外界输入,隐层与输出层神经元对信号进行 加工,最终结果由输出层神经元输出;
  • 各神经元分别属于不同的层,层内无连接
  • 相邻两层之间的神经元全部两两连接
  • 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示

FNN图示

FNN一般采取交叉熵损失函数,对样本

其中, 为标签的one-hot编码表示;

考察结构化风险函数

正则化项

前馈神经网络信息向前(单向)传递,层内节点之间并不连接,适合于处理静态数据分析,如回归、分类等任务;

对于全连接前馈神经网络来说,有不少缺点:

  1. 容易过拟合;
  2. 训练比较慢,可解释性差;
  3. 权重矩阵参数非常多,不满足局部不变性特征;

局部不变性特征:自然图像中的物体都具有局部不变性特征,比如尺度缩放、平 移、旋转等操作不影响其语义信息。而全连接前馈网络很难提取这些局部不变性 特征,一般需要进行数据增强来提高性能。

其他网络结构

记忆网络/反馈网络

神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息神经元具有记忆功能,在不同的时刻具有不同的状态,信息传播可以是单向或者双向传递,可用一个有向循环图或无向图来表示记忆网络包括循环神经网络、Hopfield网络、玻尔兹曼机、受限玻尔兹曼机等

记忆网络图示

图网络

图网络是定义在图结构数据上的神经网络,图中的每个节点都是由一个或者一组神经元构成节点之间的连接可以是有向的,也可以是无向的,每个节点可以接收来自相邻节点或者自身的信息,图网络是前馈网络和记忆网络的方法,包含许多 不同的实现方式,如图卷积网络、图注意力网络、消息传递网络等

图神经网络图示

残差连接

残差连接 (residual connection)是指,增加跳跃连接从第层与第层甚至更高层之间建立连接 ,使得梯度更容易从输出层流向更接近输入的层,利于模型优化

残差连接图示

除残差连接外,还可以改变层与层之间的连接方式

  • 前一层的每个单元仅与后一层的一个小单元子集相连
  • 可以极大地减少参数的数量
  • 具体的连接方式高度依赖于具体的问题

改变层与层间的连接方式

梯度计算

误差反向传播算法

BP(误差反向传播)算法是指,一个BP网络(BP算法训练的多层前反馈神经网络) 会连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐逼近目标的。 每一次权值和偏差的变化都与网络误差的影响成正比,并以反向传播的方式传递到每一层的。

具体来说,设置学习率,将阈值看作固定输入-1的 dummy node;将对权重和阈值的学习统一看成权重的调整,前向计算迭代过程为:

学习率控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢.

  • 各神经元分别属于不同的层,层内无连接

  • 相邻两层之间的神经元全部两两连接

  • 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示

对于训练样例,ANN的预测结果为

BP算法的目标是最小化均方误差:

BP算法的策略是基于梯度下降的,也即,以目标的负梯度方向对参数进行调整:

数学上:

得到BP算法的迭代方程:

如果取损失函数为结构化风险函数:

那么梯度下降策略可表示为:

算法流程:

  1. 将输入样本提供给输入层神经元
  2. 逐层将信号前传至隐层、输出层,产生输出层的结果
  3. 计算输出层误差
  4. 将误差反向传播至隐藏层神经元行调整
  5. 根据隐层神经元对连接权重和阈值进
  6. 上述过程循环进行,直至达到某些停止条件为止

BP算法流程

自动梯度计算

自动微分将符号微分法应用于最基本的算子,比如常数、幂函数、指数函数、对 数函数、三角函数等,将其代入数值,保留中间结果,最后再应用于整个函数;

现代深度学习框架(Pytorch, Tensorflow etc)多采用计算图(computer graph)的方式进行自动梯度计算

  • 将复合函数分解为一系列基本操作,并以图的形式连接起来
  • 是数学运算的图结构表示,每个非叶子节点代表一个基本操作,每个叶子节点代表一个输入变量或常量

计算图

通常分为静态计算图和动态计算图,在当前深度学习框架中,Theano和Tensorflow采用的是静态计算图,而DyNet、Chainer和PyTorch采用的是动态计图。Tensorflow 2.0 也开始支持动态计算图。

  • 静态计算图在编译时构建计算图,构建好后在程序运行时不能改变,在构建时可以进行优化、并行能力强,灵活性较差
  • 动态计算图 在程序运行时动态构建计算图,不容易优化,当不同输入所使用的网络结构不一样时,难以并行计算,灵活性比较高