《神经网络与深度学习》第四章 前馈神经网络

第四章 前馈神经网络

人工神经网络(ANN):指一系列受生物学和神经科学启发的数学模型。简称为神经网络(NN)or神经模型。

  • 连接主义模型:
  • 最早的连接主义模型:20世纪80年代后期,分布式并行处理模型(PDP);

​ 特点:

(1)信息表示是分布式的(非局部的)

(2)记忆和知识是存储在单元之间的连接上

(3)通过逐渐改变单元之间的连接强度来学习新的知识。

4.1 神经元

image-20220324210136998

  • 1943年,McCulloch和Pitts提出MP神经元,与现代神经元不同的是激活函数的选取,MP使用的是不可导的0或1阶跃函数,现代神经元通常使用连续可导的函数。
  • \(a = f(z),z = w^Tx + b\)
  • 激活函数的性质:
  1. 连续可导(允许少数点上不可导)的非线性函数,可导的激活函数可以直接利用数值优化的方法来学习网络参数;
  2. 激活函数及其导函数要尽可能的简单,利于提高网络计算效率;
  3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

常见激活函数:

4.1.1 sigmoid型函数(两端饱和函数)

image-20220325100805305

1)logistic函数\(\sigma(x) = \frac{1}{1+exp(-x)}\) ,值域为(0,1),非零中心化,会使得其最后一层的神经元的输入发生偏置漂移,使得梯度下降的收敛速度变慢;

性质:

  1. 其输出可以看作是概率分布,使得神经网络可以更好地和统计模型进行结合;
  2. 其可以看作是一个软性门,用来控制其他神经元输出信息的数量。

2)Tanh函数: \(tanh(x) = \frac{exp(x)-exp(-x)}{exp(x)+exp(-x)}=2\sigma(2x)-1\) ,值域为(-1,1),是零中心化的;Tanh函数优于logistic函数

sigmoid函数具有饱和性,但计算开销较大。但这两个函数可以通过分段函数来近似,因此有下面的Hard-Logistic和Hard-Tanh函数。

3)Hard-Logistic函数:由于Logistic函数在0处的一阶泰勒展开为 \(g_l(x)\approx \sigma(0)+x\times\sigma^{'}(0)= 0.25x+0.5\) ,因此有

\(hard-logistic(x)=\begin{cases} 1 \quad g_l(x) \geq 1 \\ g_l \quad 0<g_l(x)<1 \\ 0 \quad g_l(x) \leq 0 \end{cases}= max(min(g_l(x),1),0)=max(min(0.25x+0.5,1),0).\)

4)Hard-Tanh函 数:由于Tanh函数在0处的一阶泰勒展开为 \(g_l(x)\approx tanh(0) x\times+tanh^{'}(0)=x\) ,因此有 \(hard-tanh(x)=max(min(g_t(x),1),-1)=max(min(x,1),-1).\)

image-20220325102700324

4.1.2. ReLu函数(ramp函数)

  • \(ReLu(x) = \begin{cases} x \quad x\geq 0\\ 0 \quad x <0\end{cases}=max(0,x).\)

  • 特点:左饱和;

  • 优点:

    (1)只需要进行加、乘和比较的操作,计算上更加高效;

    (2)有生物上的解释,比如单侧抑制、宽兴奋边界。

    (3)稀疏性[生物神经网络中,同时处于兴奋状态的神经元非常稀疏,sigmoid函数会导致一个非稀疏的神经网络],约50%的神经元会处于激活状态

    (4)避免梯度消失的问题。

  • 缺点:

    (1)非零中心化,给最后一层的神经网络引入偏置漂移,会影响梯度下降的效率;

    (2)死亡ReLu问题(如一个隐藏层中的某个ReLu神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。输入值为负数时,其输出值和导数均为0,这意味着该神经元出于熄灭状态,且在逆向参数调整过程中不产生梯度调整值。

为了解决这些缺点,提出了以下修正的ReLu函数。

1) 带泄露的ReLu(Leaky ReLu)

在输入 𝑥 < 0时,保持一个很小的梯度𝛾.这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活。带泄露的ReLU的定义如下:
\(LeakyReLu(x)=\begin{cases} x \quad if\quad x > 0 \\ \gamma x \quad if \quad x\leq 0\end{cases}=max(0,x)+\gamma min(0,x).,当\gamma < 1时,LeakyReLu(x)=max(x,\gamma+x)\) ,相当于是一个比较简单的maxout单元。

2) 带参数的ReLu(PReLu)

带参数的 ReLU(Parametric ReLU,PReLU)引入一个可学习的参数同神经元可以有不同的参数。对于第 𝑖 个神经元,其PReLU的定义为:

\(PReLu_i(x)=\begin{cases} x \quad if\quad x > 0 \\ \gamma_i x \quad if \quad x\leq 0\end{cases} = max(0,x)+\gamma_i+min(0,x)\) .不同神经元具有不同的参数,也可以一组神经元共享一个参数。

3) ELU函数(近似的零中心化的非线性函数)\(ELU(x) = \begin{cases} x \quad if \quad x >0\\ \gamma(exp(x)-1) \quad if \quad x\leq 0 \end{cases}=max(0,x)+min(0,\gamma(exp(x)-1)),\gamma \geq 0\) .

4) Softplus函数

  • \(Softplus(x)=log(1+exp(x))\)
  • 特点:单侧抑制、宽兴奋边界,但没有稀疏激活性。

image-20220325104455437

4.1.3 Swish函数(自门控激活函数)

  • 可作为线性函数和ReLU函数之间的非线性插值函数,其程度由参数\(\beta\) 控制。

  • \(swish(x) = x\sigma(\beta+x)\) ,其中 \(\sigma(\cdot)\) 是Logistic函数, \(\beta\) 为可学习的参数或一个固定超参数。当\(\sigma(\beta x)\)接近于1时,门处于“开”状态,激活函数的输出近似于x本身;当\(\sigma(\beta x)\)接近于0时,门的状态为“关”,激活函数的输出近似于0,下图为Swish函数的示意图。

    image-20220325104949090

4.1.4 高斯误差线性单元(GELU)

  • 与Swish函数类似,是一种通过门控机制来调整其输出值的激活函数。

  • \(GELU(x) =xP(X\leq x), P(X\ leqx)\approx \mathcal{N}(\mu,\sigma^2)\) ,常取 \(\mu = 0, \sigma=1\),因为高斯分布的累积分布函数为S型函数,因此GELU可以用Tanh函数和Logistic函数来近似。

    \(GELU(x)\approx 0.5x(1+tanh(\sqrt{\frac{2}{\pi}}(x+0.044715x^3))) \\ 或 \quad GELU(x)\approx x\sigma(1.702x)\)

    (后者是一种特殊的swish函数)

4.1.5 Maxout单元

  • 输入:不同于sigmoid、ReLU函数的输入是一个标量,Maxout单元的输入是上一层神经元的全部原始输出,是一个向量 \(x=[x_1;x_2;...;x_D]\);
  • 每个Maxout单元有K个权重向量\(w_k\in+R^D\) 和偏置\(b_k\) ,对于输入x可以得到K个净输出\(z_k,z_k = w^T_k x + b_k\);
  • \(maxout(x) = \mathop{max}(z_k) {k\in[1,K]}\)
  • 特点:Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。Maxout激活函数可以看作任意凸函数的分段线性近似。

4.2 网络结构

神经网络:通过一定的连接方式或信息传递方式进行协作的神经元可以看作是一个网络,就是神经网络。

目前常用的神经网络结构有以下三种:

4.2.1 前馈网络

可以视作函数,通过非线性函数的多次复合,实现输入空间到输出空间的复杂映射。该网络结构简单,易于实现。

前馈网络中各个神经元按接收信息的先后分为不同的组。每一组可以看作一个神经层。每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播,可以用一个有向无环路图表示.前馈网络包括全连接前馈网络(本章中的第4.3节)和卷积神经网络(第5章)等。

4.2.2 记忆网络(反馈网络)

  • 可视作程序,具有更强的计算和记忆力。
  • 不但接收其他神经元的信息,也可以接收自己的历史信息。具有记忆功能,在不同的时刻具有不同的状态。传播方向可以双向可单向。
  • 包含的网络有:RNN、Hopfield网络、玻尔兹曼机、受限波尔兹曼机等。
  • 为了增强记忆网络的记忆容量,引入外部记忆单元和读写机制,用来保存一些网络的中间状态,称为记忆增强神经网络,比如神经图灵机和记忆网络。

4.2.3 图网络

  • 是前馈网络和记忆网络的泛化;
  • 前馈网络和记忆网络的输入都可以表示为向量或向量序列.但实际应用中很多数据是图结构的数据,比如知识图谱、社交网络、分子(Molecular )网络等.
  • 包含:图卷积网络(GCN)、图注意力网络(GAT)、消息传递神经网络(MPNN)等;

image-20220325105318034

​ 其中圆形表示一个神经元,方形表示一组神经元。

4.3 前馈神经网络(FNN)

image-20220325115152746

  • 也称为多层感知器Multi-Layer Perceptron,MLP(但实质由多层的Logistic回归组成)、全连接神经网络;

  • 各神经元分别属于不同的层,层内无连接。
    相邻两层之间的神经元全部两两连接。
    整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。

  • 信息传播过程: \(z^{(l)} = W^{(l)}a^{(l-1)}+b^{(l)},\\or\quad a^{(l)}=f_l(z^{(l)}).\\ \rightarrow z^{(l)}=W^{(l)}\cdot f_{l-1}(z^{(l-1)}) b^{(l)},\\ \rightarrow or \quad a^{(l)}=f_l(W^{(l)}\cdot a^{(l-1)}+b^{(l)}).\)

  • 前馈神经网络可以通过逐层的信息传递,得到网络最后的输出。

    image-20220325115820945

  • 深层前馈神经网络:

    image-20220325115948000

4.3.1 通用近似定理

  • 很强的拟合能力
  • 根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何从一个定义在实数空间中的有界闭集函数

image-20220325120016114

4.3.2 应用到机器学习上

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

image-20220325120110258

如果g(⋅)为Logistic回归,那么Logistic回归分类器可以看成神经网络的最后一层。

4.3.3 参数学习

image-20220325120852886

梯度下降:

image-20220325120944425

  • 但是梯度下降算法更新参数较慢,因此使用反向传播算法。

4.4 反向传播算法

4.4.1 链式法则

链式法则(Chain Rule)是在微积分中求复合函数导数的一种常用方法。

image-20220326103555660

神经网络为一个复杂的复合函数

image-20220326103708768

4.4.2 矩阵微积分

矩阵微积分(Matrix Calculus)是多元微积分的一种表达方式,即使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数

  • 标量关于向量的偏导数

image-20220326103852634

  • 向量关于向量的偏导数

    image-20220326103921599

4.4.3 反向传播算法

image-20220326104146529

(1) 计算偏导数\(\frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}}\),因 \(z^{(l)} = W^{(l)}a^{(l-1)}+b^{(l)}\)

img

(2)计算偏导数\(\frac{\partial z^{(l)}}{\partial b^{(l)}} = I_{M_l} \in R^{M_l \times M_l}\)

(3)计算偏导数 \(\frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}\)该偏导数表示第l层神经元对最终损失的影响,也反映了最终损失对第l层神经元的敏感程度,称为“误差项”

\(\delta^{(l)}, \delta^{(l)}\triangleq \frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}\in R^{M_l}\) 该误差项也间接反映了不同神经元对网络能力的贡献度,从而比较好地解决了贡献度分配问题(CAP)。由 [公式]

  • 因此

    [公式]

  • BP解释:从上式中可以发现第l层的误差项可以通过第l+1层的误差项计算得到,即BP的含义是第l层的一个神经元的误差项(或敏感度)是所有与该神经元相连的第l+1层的神经元的误差项的权重和再乘上该神经元激活函数的梯度。

image-20220326105841204

image-20220326105649542

4.5 自动梯度计算

  1. 数值微分

    \(f^{'}(x)=lim_{\Delta x\rightarrow 0} \frac{f(x+\Delta x)-f(x)}{\Delta x}\) 但是难以找到合适的\(\Delta x\),过小会引起舍入误差,过大会增加截断误差。常使用

\(f^{'}(x)=lim_{\Delta x \rightarrow 0}\frac{f(x+\Delta)-f(x-\Delta x)}{2\Delta x}\)

  • 缺点:计算复杂,导致计算数值微分总时间复杂度为 \(O(N^2)\)

2. 符号微分(基于符号计算的自动求导方法,即代数计算)

  • 对输入的表达式,通过迭代或递归使用一些事先定义的规则进行转换,当转换结果不能再使用变化规则时,则停止计算,
  • 处理对象:数学表达式;
  • 优点:符号计算与平台(CPU、GPU)无关;
  • 缺点:
  1. 编译时间较长,特别是对于循环;

  2. 需要设计专门的语言来表示数学表达式,并且要对变量进行预先声明;

  3. 很难对程序进行调试;

3. 自动微分(AD)

  • 处理对象:一个函数或一段程序;
  • 可以直接在原始代码上进行微分,为DL首选;
  • 基本原理:所有的数值计算可以分解为一些基本操作,然后利用链式法则来自动计算一个复合函数的梯度。
  • 按照计算导数的顺序分类,对于函数形式 \(f:R^{N}\rightarrow R^{M}\)

​ 1) 前向模式:需要对每一个输入变量都进行一遍遍历,共需要N遍。

​ 2) 反向模式:需要对每一个输出进行一个遍历,共需要M遍。

  • 计算图

    1) 静态计算图:在编译时构建计算图,构建好之后在程序运行时不能改变。在构建时可以进行优化、并行能力强,但灵活性差。Tensorflow 1.0、Theano。

    2) 动态计算图:在程序运行时动态构建。不容易优化,灵活性比较高。PyTorch、Tensorflow 2.0。

4.5 优化问题

  • 神经网络参数学习的难点:(1)非凸优化问题;(2)梯度消失问题。

  • 常见激活函数及其导数总结如下表:

    image-20220326104451128

  • 设计不同形式的函数组合方式 Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprintarXiv:1710.05941, 2017.

  • 通用近似定理 Haykin S. Neural networks and learning machines[M]. 3rd edition. Pearson, 2009.

4.6 参考资料

  • 设计不同形式的函数组合方式 Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprintarXiv:1710.05941, 2017.
  • 通用近似定理 Haykin S. Neural networks and learning machines[M]. 3rd edition. Pearson, 2009.
posted @ 2022-03-29 20:51  王陸  阅读(547)  评论(0编辑  收藏  举报