3.4.前馈神经网络

    人工神经网络(Artificial Neural Network, ANN)是一系列受生物学和神经科学启发的数学模型,在人工只能领域,人工神经网络称为神经网络(Neural Network, NN)或神经模型(Neural Model)。

1.神经元

    人工神经元(Artificial Neuron),简称神经元(Neuron),是构成神经网络的基本单元。假设一个神经元接收DD个输入x1,x2,...,xDx_1,x_2,...,x_D,令向量x=[x1;x2;...;xD]x = [x_1;x_2;...;x_D]来表示这组输入,并用净输入(Net Input)表示一个神经元所获得的输入信号xx的加权和:

z=d=1Dwdxd+b=wTx+bz = \sum\limits_{d=1}^D w_d x_d + b = w^T x + b

  • w=[w1;w2;...;wD]RDw = [w_1;w_2;...;w_D] \in R^DDD维的权重向量

  • bRb \in R是偏置

    净输入zz经过非线性函数f()f(\cdot)之后,得到神经元的活性值(Activation)a:

a=f(z)a = f(z)

    所以非线性函数f()f(\cdot)为激活函数(Activiation Function)。

    激活函数(Activiation Function)性质:

  • 连续并可导(允许少数点上不可导)的非线性函数,可导的激活函数可直接利用数值优化的方法来学习网络参数。

  • 激活函数以及导函数要尽可能的简单,有利于提高网络计算效率。

  • 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

1.1.Sigmoid型函数

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

对于函数f(x)f(x),若xx \rightarrow -\infty时,其导数f(x)0f^{'}(x) \rightarrow 0,则称其为左饱和;若x+x \rightarrow +\infty时,其导数f(x)0f^{'}(x) \rightarrow 0,则称其为右饱和;同时满足左右饱和,就为两端饱和。

    Logistic函数

σ(x)=11+exp(x)\sigma(x) = \frac{1}{1 + \exp(-x)}

    Logistic函数是一个压缩函数,把一个实数域的输入压缩(0,1),当输入值在0附近,Sigmoid近似为线性函数,当输入值接近两端时,对输入抑制,输入越小越接近于0,输入越大越接近于1。Logistic激活函数有如下两个性质:

  1. 其输出直接可以看做概率分布,使得神经网络可以更好地和统计学习模型进行结合。

  2. 其可以看做一个软性门(Soft Gate),用来控制其他神经网络输出信息的数量。

    Tanh函数

tanh(x)=exp(x)exp(x)exp(x)+exp(x)tanh(x) = \frac{exp(x) - exp(-x)}{exp(x) + exp(-x)}

    Tanh函数可以看做放大并平移的Logistic函数,其值域是(-1,1)

tanh(x)=2σ(2x)1tanh(x) = 2\sigma(2x) - 1

    从图上可知Tanh函数输出是零中心化的(Zero-Centered),而Logistic函数输出恒大于0,非零中心化的输出会使得后一层神经元的输入发生偏置偏移(Bias Shift)。

1.2.Hard-Logistic/Hard-Tanh

    Logistic函数和Tanh函数都是Sigmoid型的,具有饱和性,但计算开销很大,因为这两个函数都在中间近似线性,因此,两个函数可通过分段函数来近似。

    Logistic函数σ(x)\sigma(x)

  1. 它导数为σ(x)=σ(x)(1σ(x))\sigma^{'}(x) = \sigma(x)(1 - \sigma(x))

  2. 该函数在0附近的一阶泰勒展开(Taylor expansion)为:gl(x)σ(0)+x×σ(0)=0.25x+0.5g_l(x) \approx \sigma(0) + x \times \sigma^{'}(0) = 0.25x + 0.5

  3. 所以Logistic使用分段函数hard-logistic(x)来近似:

    hardlogistic(x)={1,gl(x)1gl,0<gl(x)<10,gl(x)0=max(min(gl(x),1),0)=max(min(0.25x+0.5,1),0)hard-logistic(x) = \left\{ \begin{aligned} & 1, g_l(x) \ge 1 \\ & g_l, 0 < g_l(x) < 1 \\ & 0, g_l(x) \le 0 \end{aligned} \right. = max(min(g_l(x),1), 0) = max(min(0.25x + 0.5, 1), 0)

    Tanh函数在0附近的泰勒展开为:

  1. gt(x)tanh(0)+x×tanh(0)=xg_t(x) \approx tanh(0) + x \times tanh^{'}(0) = x

  2. 所以Tanh使用分段函数hard-tanh(x)来近似:

    hardtanh(x)=max(min(gt(x),1),1)=max(min(x,1),1)hard-tanh(x) = max(min(g_t(x), 1), -1) = max(min(x, 1), -1)

1.2.ReLU函数

    ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier函数,是目前深度神经网络中经常使用的激活函数。ReLU实际上是一个斜坡(Ramp)函数,定义如:

ReLU(x)={x,x00,x<0=max(0,x)ReLU(x) = \left\{ \begin{aligned} & x, x \ge 0 \\ & 0, x < 0 \end{aligned} \right. = max(0,x)

    优点:采用ReLU的神经元只需要进行加、乘比较的操作,计算上更加高效。ReLU函数被认为具有生物学合理性(Biological Plausibility),比如单侧抑制宽兴奋边界(兴奋程度可以很高)。Sigmoid型激活函数会导致一个非稀疏的神经网络,而ReLU却具有良好稀疏性,大约50%的神经元会处于激活状态。优化时,相比于Sigmoid型函数的两端饱和,ReLU函数为左饱和函数,在x > 0时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降收敛速度。

    缺点:ReLU函数输出是非零中心化,给后一层神经网络引入了偏置偏移,会影响梯度下降效率,此外,ReLU神经元在训练时容易死亡。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,那么该神经元自身参数的梯度永远都是0,在之后训练中再也不可被激活——这种现象称为死亡ReLU问题(Dying ReLU Problme)。

1.2.1.带泄漏的ReLU

    带泄漏的ReLU(Leaky ReLU)在输入x<0x < 0时,保持一个很小的梯度γ\gamma,这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活,它的定义如下:

LeakyReLU(x)={x,x>0γx,x0=max(0,x)+γmin(0,x)LeakyReLU(x) = \left\{ \begin{aligned} & x, x > 0 \\ & \gamma x, x \le 0 \end{aligned} \right. = max(0,x) + \gamma min(0, x)

其中γ\gamma是一个很小常数,如0.01,带泄漏的ReLU也可以写成:LeakyReLU(x)=max(x,γx)LeakyReLU(x) = max(x, \gamma x),相当于是一个比较简单的maxoutmaxout单元。

1.2.2.带参数的ReLU

    带参数的ReLU(Parametric ReLU, PReLU)引入一个可学习的参数,不同神经元可以有不同参数,对第i个神经元,它的定义如:

PReLUi(x)={x,x>0γix,x0=max(0,x)+γimin(0,x)PReLU_i(x) = \left\{ \begin{aligned} & x, x > 0 \\ & \gamma_i x, x \le 0 \end{aligned} \right. = max(0,x) + \gamma_i min(0, x)

由于γi\gamma_ix0x \le 0时函数斜率,所以PReLU是非饱和函数

  1. 如果γi=0\gamma_i = 0,那么PReLU等价于ReLU。

  2. 如果γi\gamma_i是很小常数,那么PReLU等价于一个带泄漏的ReLU。

PReLU允许不同神经元具有不同参数,也可以一组神经元共享一个参数。

1.2.3.ELU函数

    ELU(Exponential Linear Unit,指数线性单元)是一个近似零中心化的非线性函数:

ELU(x)={x,x>0γi(exp(x)1),x0=max(0,x)+min(0,γ(exp(x)1))ELU(x) = \left\{ \begin{aligned} & x, x > 0 \\ & \gamma_i(exp(x) - 1), x \le 0 \end{aligned} \right. = max(0,x) + min(0, \gamma(exp(x) - 1))

γ0\gamma \ge 0是一个超参数,决定x0x \le 0时的饱和曲线,并调整输出均值在0附近。

1.2.4.Softplus函数

    Softplus函数可以看做Rectifier函数的平滑版本,定义如:

Softplus(x)=log(1+exp(x))Softplus(x) = \log(1 + exp(x))

    Softplus函数其导数刚好是Logistic函数,Softplus函数虽然也具有单抑制、宽兴奋边界特性,无稀疏激活性。

1.3.Swish函数

    Swish函数是一种自控门(Self-Gated)激活函数:

swish(x)=xσ(βx)swish(x) = x \sigma(\beta x)

  • σ()\sigma(\cdot)为Logistic函数,σ()(0,1)\sigma(\cdot) \in (0, 1)可当做软性的门控机制

    • 它处于“开”状态,激活函数输出近似于xx本身。

    • 它处于“关”状态,激活函数输出近似于00

  • β\beta为可学习的参数或一个固定超参数

  • β=0\beta = 0,Swish函数变成线性函数x/2。

  • β=1\beta = 1,Swish函数在x > 0时近似线性,在x < 0时近似饱和,同时具有一定非单调性。

  • β+\beta \rightarrow +\inftyσ(βx)\sigma(\beta x)趋向于离散的0-1函数,Swish函数近似为ReLU函数。

因此Swish函数可以看做线性函数和ReLU函数之间的非线性插值函数,由β\beta参数控制。

1.4.GELU函数

    GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种通过门控机制来调整输出值的激活函数,和Swish函数类似:

GELU(x)=xP(Xx)GELU(x) = xP(X \le x)

    其中P(Xx)P(X \le x)是高斯分布N(μ,σ2)N(\mu, \sigma^2)的累积分布函数,其中μ,σ\mu, \sigma为超参数,μ=0,σ=1\mu = 0, \sigma = 1即可,由于高斯分布累积分布函数为S型函数,因此GELU函数可和Tanh函数或Logistic函数近似

GELU(x)0.5x(1+tanh(2π(x+0.044715x3)))GELU(x) \approx 0.5x(1 + tanh(\sqrt{\frac{2}{\pi}}( x + 0.044715 x^3)))

GELU(x)xσ(1.702x)GELU(x) \approx x \sigma(1.702x)

    当使用Logistic函数近似时,GELU相当于一种特殊的Swish函数。

1.5.Maxout单元

    Maxout单元也是一种分段线性函数,Sigmoid型函数、ReLU等激活函数的输入是神经元的净输入zz,是一个标量,而Maxout单元的输入是上一层神经元的全部输出,是一个向量x=[x1;x2;...;xD]x = [x_1;x_2;...;x_D]

    每个Maxout单元有KK个权重向量wkRDw_k \in R^D和偏置bk(1kK)b_k(1 \le k \le K),对于输入xx,可以得到KK个净输入zkz_k1kK1 \le k \le K

zk=wkTx+bkz_k = w_k^Tx + b_k

    其中wk=[wk1,...,wkD]Tw_k = [w_{k_1},...,w_{k_D}]^T为第kk个权重向量,Maxout单元的非线性函数定义为:

maxout(x)=maxk[1,K](zk)maxout(x) = \underset{k \in [1,K]}{max}(z_k)

    Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性关系映射,它的激活函数可以看做任意凸函数的分段线性近似,并且在有限点上不可微的。

2.网络结构

2.1.前馈网络

    前馈网络中各个神经元按照接收信息的先后分为不同组,每一组可看做一个神经层,每一层接收前一层的输出,并且输出到下一层,整个网络中信息是一个方向传播,没有反向传播,通常包括:

  • 全连接前馈网络

  • 卷积神经网络

    它可以看做一个函数,通过简单非线性函数多次组合,实现复杂映射。

2.2.记忆网络

    记忆网络,又称反馈网络,神经元不仅可接受其他神经元的信息,也可以接收自己的历史信息——记忆网络中神经元具有记忆功能,不同时刻状态不一样,通常包括:

  • 循环神经网络

  • Hopfield网络

  • 玻尔兹曼机

  • 受限波尔兹曼机

    它可以看做一个程序,有更强的计算能力以及记忆能力,如果记忆单元使用了外部的读写,那么这种网络称为记忆增强神经网络(Memory Augmented Neural Network, MANN):

  • 神经图灵机

  • 记忆网络

2.3.图网络

    前馈网络和记忆网络中输入最终都表示成了向量向量序列,都很难处理图结构的数据,图网络是定义在图结构之上的神经网络,节点之间可有向,也可无向。它包含:

  • 图卷积网络(Graph Convolutional Network, GCN)

  • 图注意力网络(Graph Attention Network, GAT)

  • 消息传递神经网络(Message Passing Neural Network, MPNN)

3.前馈网络

记号
含义

L

神经网络的层数

MlM_l

ll层神经元的个数

fl()f_l(\cdot)

ll层神经元的激活函数

W(l)RMl×RMl1W^{(l)} \in R^{M_l} \times R^{M_{l-1}}

l1l-1层到ll层的权重矩阵

b(l)RMlb^{(l)} \in R^{M_l}

l1l-1层到第ll层的偏置项

z(l)RMlz^{(l)} \in R^{M_l}

ll层神经元净输入

a(l)RMla^{(l)} \in R^{M_l}

ll层神经元的输出(活性值)

    前馈神经网络(Feedforward Neural Network, FNN)是最早发明的简单人工神经网络,通常也称为多层感知机(Multi-Layer Perceptron, MLP)——其实这种叫法欠妥,因为它由多层Logistic回归模型组成,并非多层的感知机构成。

  • 逻辑Logistic回归模型:连续的非线性函数

  • 感知机:不连续的非线性函数

    该网络中主要包含三层:输入层(第0层)、隐藏层、输出层(最后一层)。令a(0)=xa^{(0)} = x,前馈神经网络通过不断迭代下边两个公式来传播

z(l)=W(l)a(l1)+blz^{(l)} = W^{(l)} a^{(l - 1)} + b^{l}

a(l)=fl(z(l))a^{(l)} = f_l(z^{(l)})

    步骤:

  1. 先根据l1l - 1层神经元的活性值(Activation)a(l1)a^{(l - 1)}计算出第ll层神经元的净活性值(Net Activation)z(l)z^{(l)}

  2. 经过一个激活函数得到第ll层神经元的活性值——所以可以把每个神经层看做一个仿射变换(Affine Transformation)和一个非线性变换。

    合并后的表达:

z(l)=W(l)fl1(z(l1))+b(l)z^{(l)} = W^{(l)}f_{l-1}(z^{(l-1)}) + b^{(l)}

    所以前馈神经网络逐层传递,整个网络可以当做一个复合函数ϕ(x;W,b)\phi(x;W,b)

x=a(0)z(0)a(1)z(1)...a(L1)z(L)a(L)=ϕ(x;W,b)x = a^{(0)} \rightarrow z^{(0)} \rightarrow a^{(1)} \rightarrow z^{(1)} \rightarrow ... \rightarrow a^{(L-1)} \rightarrow z^{(L)} \rightarrow a^{(L)} = \phi(x;W,b)

  • W,bW,b表示网络中所有层的链接权重和偏置。

3.1.通用近似定理

定理4.1——通用近似定理(Universal Approximation Theorem),令ϕ()\phi(\cdot)是一个非常数、有界、单调递增的连续函数,JDJ_D是一个DD维的单位超立方体[0,1]T[0,1]^TC(JD)C(J_D)是定义在JDJ_D上的连续函数集合,对于任一给定的一个函数fC(JD)f \in C(J_D),存在一个整数MM,和一组实数vm,bmRv_m, b_m \in R以及实数向量wmRD,m=1,...,Mw_m \in R^D, m = 1,...,M,以至于我们可以定义函数: F(x)=m=1Mvmϕ(wmTx+bm)F(x) = \sum\limits_{m=1}^M v_m \phi(w_m^T x + b_m) 作为函数ff的近似实现,即 F(x)f(x)<ϵ,xJD|F(x) - f(x)| < \epsilon, \forall x \in J_D 其中ϵ>0\epsilon > 0是一个很小的正数

    根据通用近似定理,对于具有线性输出层和至少一个使用“积压”性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何一个定义在实数空间RDR^D中有界闭集函数。该定理只说明神经网络的计算能力可以去近似一个给定的连续函数,但并没给出如何找到这样的一个网络。

3.2.机器学习

    根据上述定理,神经网络在某种程度上可作为一个“万能”函数,可进行复杂的特征转换。机器学习中,要取得很好的分类效果,需将样本原始特征向量xx转换到更有效的特征向量ϕ(x)\phi(x)中,这个过程就是特征抽取

    给定一个训练样本(x,y)(x,y)

y^=g(ϕ(x);θ)\hat{y} = g(\phi(x);\theta)

  • g()g(\cdot)是一个线性或非线性分类器

  • θ\theta是分类器g()g(\cdot)的参数

  • (^y)\hat(y)就是分类器的输出

    如果 g()g(\cdot)是Logistic回归或Softmax函数,则可认为是网络最后一层。

  • 如果是二分类,使用Logistic回归:p(y=1x)=α(L)p(y = 1|x) = \alpha^{(L)}

  • 如果是多分类,使用Softmax函数:(^y)=softmax(z(L))\hat(y) = softmax(z^{(L)})

3.3.参数学习

    该算法可使用交叉熵损失函数,对样本(x,y)(x,y)而言,损失函数如:

L(y,y^)=yTlogy^L(y, \hat y) = - y ^T \log \hat{y}

    结构化风险函数

R(W,b)=1Nn=1NL(yn,yn^)+12λWF2R(W,b) = \frac{1}{N} \sum\limits_{n=1}^N L(y_n, \hat{y_n}) + \frac{1}{2}\lambda||W||_F^2

  • 其中W,bW,b分别标识网络中所有权重矩阵和偏置向量

  • WF2||W||_F^2是正则化项,防止过拟合

  • λ>0\lambda > 0是超参数,它越大,WW越接近于0。

    此处WF2||W||_F^2一般使用Frobenius范数:

WF2=l=1Li=1Mlj=1Ml+1(wij(l))2||W||_F^2 = \sum\limits_{l=1}^L\sum\limits_{i=1}^{M_l}\sum\limits_{j=1}^{M_{l+1}} (w_{ij}^{(l)})^2

    梯度下降公式:

W(l)W(l)α(1Nn=1N(L(yn,yn^)W(l))+λW(l))W^{(l)} \leftarrow W^{(l)} - \alpha(\frac{1}{N} \sum\limits_{n=1}^N(\frac{\partial L(y_n, \hat{y_n})}{\partial W^{(l)}}) + \lambda W^{(l)})

b(l)b(l)α(1Nn=1NL(yn,yn^)b(l))b^{(l)} \leftarrow b^{(l)} - \alpha(\frac{1}{N} \sum\limits_{n=1}^N \frac{\partial L(y_n, \hat{y_n})}{\partial b^{(l)}})

    梯度下降法需计算损失函数对参数的偏导,如果对链式法则逐一求解效率很低,因此经常使用反向传播算法来计算梯度。

4.反向传播算法

    上述公式根据链式法则会得到两个偏导数:

L(y,y^)wij(l)=z(l)wij(l)L(y,y^)z(l)\frac{\partial L (y, \hat{y})}{\partial w_{ij}^{(l)}} = \frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}} \frac{\partial L (y, \hat{y})}{\partial z^{(l)}}

L(y,y^)b(l)=z(l)b(l)L(y,y^)z(l)\frac{\partial L (y, \hat{y})}{\partial b^{(l)}} = \frac{\partial z^{(l)}}{\partial b^{(l)}} \frac{\partial L (y, \hat{y})}{\partial z^{(l)}}

    上边第二项都是目标函数关于第ll层神经元z(l)z^{(l)}的偏导数,又称为误差项,所以只需计算如下三个:

  1. 计算偏导数z(l)wij(l)\frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}}

  2. 计算偏导数z(l)b(l)\frac{\partial z^{(l)}}{\partial b^{(l)}},结果为一个Ml×MlM_l \times M_l的单位矩阵

  3. 计算偏导数L(y,y^)z(l)\frac{\partial L (y, \hat{y})}{\partial z^{(l)}},它表示第ll层神经元对最终损失的影响,也反应了敏感层度,所以一般称为误差项,该项反应了不同神经元对网络的贡献程度,所以很好解决了贡献度分配问题(Credit Assignment Problme, CAP)

    最终得到第ll层的误差项:

δ(l)L(y,y^)z(l)=fl(z(l))((W(l+1))Tδ(l+1))RMl\delta^{(l)} \triangleq \frac{\partial L(y, \hat{y})}{\partial z^{(l)}} = f_l^{'}(z^{(l)}) \odot ((W^{(l + 1)})^T \delta^{(l + 1)}) \in R^{M_l}

\odot是哈达玛积(Hadamard),表示每个元素相乘。

    上述公式可以知道,ll层的误差项可通过l+1l+1层的误差项进行计算,这就是误差的反向传播(BackPropagation, BP),所以反向传播的含义为:第ll层神经网络的误差项是第l+1l+1层神经网络的所有误差项的权重和,然后再乘以该神经元激活函数的梯度。

    l(y,y^)l(y, \hat{y})关于权重W(l)W^{(l)}权重梯度为:

L(y,y^)W(l)=δ(l)(α(l1))TRMl×Ml+1\frac{\partial L (y, \hat{y})}{\partial W^{(l)}} = \delta^{(l)}(\alpha^{(l - 1)})^T \in R^{M_l \times M_{l + 1}}

    l(y,y^)l(y, \hat{y})关于偏置b(l)b^{(l)}偏置梯度为:

L(y,y^)b(l)=δ(l)RMl\frac{\partial L (y, \hat{y})}{\partial b^{(l)}} = \delta^{(l)}\in R^{M_l}

    误差反向传播算法的前馈神经网络训练步骤:

  1. 前馈计算每一层的净输入z(l)z^{(l)}和激活值α(l)\alpha^{(l)},直到最后一层

  2. 反向传播计算每一层的误差项δ(l)\delta^{(l)}

  3. 计算每一层参数的偏导数,并更新参数

算法细节略

5.自动梯度计算

5.1.数值微分

    数值微分(Numerical Differentiation)是用数值方法来计算f(x)f(x)的导数,它在点xx的导数定义如:

f(x)=limΔx0f(x+Δx)f(x)Δxf^{'}(x) = \underset{\Delta x \rightarrow 0}{lim} \frac{f(x + \Delta x) - f(x)}{\Delta x}

  • 如果Δx\Delta x过小,会引起数值计算问题,舍入误差

  • 如果Δx\Delta x过大,会增加截断误差

    因为上述原因,数值微分实用性不高,实际应用中,会使用下边公式来计算精度,减少截断误差:

f(x)=limΔx0f(x+Δx)f(xΔx)2Δxf^{'}(x) = \underset{\Delta x \rightarrow 0}{lim} \frac{f(x + \Delta x) - f(x - \Delta x)}{2 \Delta x}

5.2.符号微分

    符号微分(Symbolic Differentiation)是一种基于符号计算的自动求导方法,符号计算也称代数计算,表示用计算机处理带有变量的数学表达式。此处变量为符号,一般不用具体值,它的输入和输出都是数学表达式如:化简、因式分解、微分、积分、方程、常微分等。

    符号微分的优点是具有平台无关性,可同时在CPU和GPU上运行。

    缺点

  1. 编译时间长,特别是对于循环需要很长时间编译

  2. 为了进行符号微分,需设计一种专门的语言来表示数学表达式,并对符号变量预声明

  3. 很难对程序进行调试

5.3.自动微分

    自动微分(Automatic Differentiation, AD)是一个可以对一个(程序)函数进行计算导数的方法,符号微分处理数学表达式,而自动微分处理一个函数或一段程序:将符合函数分解为一系列的基本操作,构成一个计算图(Computational Graph)。

    (示例略),自动微分分为两种模式:前向模式和后向模式

  • 前向模式:按照计算图中计算方向的相同方向递归计算梯度

  • 反向模式:按照计算图中计算方向的相反方向递归计算梯度

反向模式和反向传播的计算梯度的方式相同。

    静态计算图和动态计算图:计算图按构建方式可分为静态计算图(Static Computational Graph)和动态计算图(Dynamic Computational Graph),静态计算图是在编译时构建,而动态计算图是在运行时构建。

    符号微分和自动微分(略)

6.优化问题

    神经网络优化难点:

  1. 非凸优化问题

  2. 梯度消失问题

误差经过每一层会不断衰减,当网络层数很深,梯度就会衰减甚至消失,这就是梯度消失问题(Vanishing Gradient Problem),也称梯度弥散问题。

7.小结

    常见激活函数

激活函数
函数
导数

Logistic函数

f(x)=11+exp(x)f(x) = \frac{1}{1 + \exp{(-x)}}

f(x)=f(x)(1f(x))f^{'}(x) = f(x)(1 - f(x))

Tanh函数

f(x)=exp(x)exp(1)exp(x)+exp(x)f(x) = \frac{\exp(x) - \exp(-1)}{\exp(x) + \exp(-x)}

f(x)=1f(x)2f^{'}(x) = 1 - f(x)^2

ReLU函数

f(x)=max(0,x)f(x) = \max(0,x)

f(x)=I(x>0)f^{'}(x) = I(x > 0)

ELU函数

f(x)=max(0,x)+min(0,γ(exp(x)1))f(x) = \max(0,x) + \min(0, \gamma(\exp(x) - 1))

f(x)=I(x>0)+I(x0)γexp(x)f^{'}(x) = I(x > 0) + I( x \le 0) \cdot \gamma \exp(x)

SoftPlus函数

f(x)=log(1+exp(x))f(x) = \log(1 + \exp(x))

f(x)=11+exp(x)f^{'}(x) = \frac{1}{1 + \exp(-x)}

最后更新于