深度学习与神经网络-邱锡鹏 第4章 前馈神经网络

tech2023-12-05  85

文章目录

引言4.1 神经元4.2 网络结构4.3 前馈神经网络4.4 反向传播算法4.5 自动梯度计算4.6 优化问题

引言

Q:连接主义中的分布式并行处理(Parallel Distributed Processing, PDP)模型是的3个主要特性是什么? 1.信息表示是分布式的(非局部的)2.记忆和知识是存储在单元之间的连接上3.通过逐渐改变单元之间的连接强度来学习新的知识

4.1 神经元

Q:神经元的结构是怎样?

Q:一个神经元从输入到获得活性值的过程是怎样的?

接受一个D维输入向量 x = [ x 1 ; x 2 ; ⋯   ; x D ] \boldsymbol{x}=\left[x_{1} ; x_{2} ; \cdots ; x_{D}\right] x=[x1;x2;;xD]然后用净输入(Net Input) z ∈ R z \in \mathbb{R} zR表示一个神经元获得的输入信号x的加权和 z = ∑ d = 1 D w d x d + b = w ⊤ x + b \begin{aligned} z &=\sum_{d=1}^{D} w_{d} x_{d}+b \\ &=\boldsymbol{w}^{\top} \boldsymbol{x}+b \end{aligned} z=d=1Dwdxd+b=wx+b其中 w = [ w 1 ; w 2 ; ⋯   ; w D ] ∈ R D \boldsymbol{w}=\left[w_{1} ; w_{2} ; \cdots ; w_{D}\right] \in \mathbb{R}^{D} w=[w1;w2;;wD]RD是D维的权重向量, z ∈ R z \in \mathbb{R} zR是偏置净输入z在经过激活函数 f ( ⋅ ) f(\cdot) f()后,得到神经元的活性值(Activation)a a = f ( z ) a=f(z) a=f(z)

Q:激活函数需要具备哪3点性质和原因?

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

Q:函数饱和的概念是什么意思?

对于函数f(x),若 x → − ∞ x \rightarrow-\infty x,其导数 f ′ ( x ) → 0 f^{\prime}(x) \rightarrow 0 f(x)0,称其为左饱和,右饱和同理,同时满足左右饱和为两端饱和

Q:Sigmoid型函数是什么?包含哪两个函数?

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

“Q:标准Logistic函数的定义是?”

“当参数为 ( k = 1 , x 0 = 0 , L = 1 ) \left(k=1, x_{0}=0, L=1\right) (k=1,x0=0,L=1),Logistic函数称为标准Logistic函数” σ ( x ) = 1 1 + exp ⁡ ( − x ) \sigma(x)=\frac{1}{1+\exp (-x)} σ(x)=1+exp(x)1

“Q:标准Logistic函数的导数是?”

σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma^{\prime}(x)=\sigma(x)(1-\sigma(x)) σ(x)=σ(x)(1σ(x))

Q:Logistic函数的特点?

可看作一个“挤压”函数:把一个实数域的输入“挤压”到(0,1)当输入值在0附近时,Sigmoid型函数近似为线性函数当输入值靠近两端时,对输入进行抑制,输入越小,越接近于0;输入越大,越接近1Logistic函数连续可导Logistic函数的输出恒大于0

Q:Logistic函数的性质使得装备Logistic激活函数有哪两个性质?

1.其输出直接看作概率分布,使得神经网络可以更好地和统计学习模型结合2.可看作一个软性门(Soft Gate),用来控制其它神经元输出信息的数量3.非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢

Q:Tanh函数的定义和特点是?

tanh ⁡ ( x ) = exp ⁡ ( x ) − exp ⁡ ( − x ) exp ⁡ ( x ) + exp ⁡ ( − x ) \tanh (x)=\frac{\exp (x)-\exp (-x)}{\exp (x)+\exp (-x)} tanh(x)=exp(x)+exp(x)exp(x)exp(x)Tanh函数可看作放大并平移的Logistic函数,值域为(-1, 1) tanh ⁡ ( x ) = 2 σ ( 2 x ) − 1 \tanh (x)=2 \sigma(2 x)-1 tanh(x)=2σ(2x)1Tanh函数的输出是零中心化的(Zero-Centered)

Q:Logistic函数和Tanh函数的对比图?

Q:Hard Logistic函数是什么?

Logistic函数的导数为" σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma^{\prime}(x)=\sigma(x)(1-\sigma(x)) σ(x)=σ(x)(1σ(x))"Logistic函数在0附近的一阶泰勒展开(Taylor expansion)为 g l ( x ) ≈ σ ( 0 ) + x × σ ′ ( 0 ) = 0.25 x + 0.5 \begin{aligned} g_{l}(x) & \approx \sigma(0)+x \times \sigma^{\prime}(0) \\ &=0.25 x+0.5 \end{aligned} gl(x)σ(0)+x×σ(0)=0.25x+0.5这样的Logistic函数可以用分段函数hard-logistic(x)来近似  hard-logistic  ( x ) = { 1 g l ( x ) ≥ 1 g l 0 < g l ( x ) < 1 0 g l ( x ) ≤ 0 = max ⁡ ( min ⁡ ( g l ( x ) , 1 ) , 0 ) = max ⁡ ( min ⁡ ( 0.25 x + 0.5 , 1 ) , 0 ) \begin{aligned} \text { hard-logistic }(x) &=\left\{\begin{array}{ll} 1 & g_{l}(x) \geq 1 \\ g_{l} & 0<g_{l}(x)<1 \\ 0 & g_{l}(x) \leq 0 \end{array}\right.\\ &=\max \left(\min \left(g_{l}(x), 1\right), 0\right) \\ &=\max (\min (0.25 x+0.5,1), 0) \end{aligned}  hard-logistic (x)=1gl0gl(x)10<gl(x)<1gl(x)0=max(min(gl(x),1),0)=max(min(0.25x+0.5,1),0)

Q:Hard Tanh函数是什么?

Tanh函数在0附近的一阶泰勒展开为 g t ( x ) ≈ tanh ⁡ ( 0 ) + x × tanh ⁡ ′ ( 0 ) = x \begin{aligned} g_{t}(x) & \approx \tanh (0)+x \times \tanh ^{\prime}(0) \\ &=x \end{aligned} gt(x)tanh(0)+x×tanh(0)=x这样Tanh函数也可用分段函数hard-tanh(x)来近似 hard ⁡ − tanh ⁡ ( x ) = max ⁡ ( min ⁡ ( g t ( x ) , 1 ) , − 1 ) = max ⁡ ( min ⁡ ( x , 1 ) , − 1 ) \begin{aligned} \operatorname{hard}-\tanh (x) &=\max \left(\min \left(g_{t}(x), 1\right),-1\right) \\ &=\max (\min (x, 1),-1) \end{aligned} hardtanh(x)=max(min(gt(x),1),1)=max(min(x,1),1)Q:ReLU(Rectified Linear Unit,修正线性单元)或Rectifier函数是什么? 实际上是一个斜坡(ramp)函数 ReLU ⁡ ( x ) = { x x ≥ 0 0 x < 0 = max ⁡ ( 0 , x ) \begin{aligned} \operatorname{ReLU}(x) &=\left\{\begin{array}{ll} x & x \geq 0 \\ 0 & x<0 \end{array}\right.\\ &=\max (0, x) \end{aligned} ReLU(x)={x0x0x<0=max(0,x)

Q:ReLU(Rectified Linear Unit)函数,也叫Rectifier函数是什么?

ReLU ⁡ ( x ) = { x x ≥ 0 0 x < 0 = max ⁡ ( 0 , x ) \begin{aligned} \operatorname{ReLU}(x) &=\left\{\begin{array}{ll} x & x \geq 0 \\ 0 & x<0 \end{array}\right.\\ &=\max (0, x) \end{aligned} ReLU(x)={x0x0x<0=max(0,x)

Q:ReLU的优点是什么?

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

Q:ReLU的缺点是什么?

1.ReLU函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率2.ReLU神经元在训练时比较容易“死亡”

Q:死亡ReLU问题(Dying ReLU Problem)是什么?

在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活,并且也有可能发生在其他隐藏层

Q:带泄露的ReLU(Leaky ReLU)是什么?

在输入x<0时,保持一个很小的梯度 γ \gamma γ。这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活  LeakyReLU  ( x ) = { x  if  x > 0 γ x  if  x ≤ 0 = max ⁡ ( 0 , x ) + γ min ⁡ ( 0 , x ) \begin{aligned} \text { LeakyReLU }(x) &=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \gamma x & \text { if } x \leq 0 \end{array}\right.\\ &=\max (0, x)+\gamma \min (0, x) \end{aligned}  LeakyReLU (x)={xγx if x>0 if x0=max(0,x)+γmin(0,x)其中 γ \gamma γ是一个很小的常数,比如0.01当 γ < 1 \gamma < 1 γ<1时,带泄露的ReLU可写为  LeakyReLU  ( x ) = max ⁡ ( x , γ x ) \text { LeakyReLU }(x)=\max (x, \gamma x)  LeakyReLU (x)=max(x,γx)相当于一个比较简单的maxout单元“”

Q:带参数的ReLU(Parametric ReLU)是什么?

引入一个可学习的参数,不同神经元可以有不同的参数对于第i个神经元,其PReLU的定义为 PReLU ⁡ i ( x ) = { x  if  x > 0 γ i x  if  x ≤ 0 = max ⁡ ( 0 , x ) + γ i min ⁡ ( 0 , x ) \begin{aligned} \operatorname{PReLU}_{i}(x) &=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \gamma_{i} x & \text { if } x \leq 0 \end{array}\right.\\ &=\max (0, x)+\gamma_{i} \min (0, x) \end{aligned} PReLUi(x)={xγix if x>0 if x0=max(0,x)+γimin(0,x)其中 γ i \gamma_i γi x ≤ 0 x \leq 0 x0时函数的斜率。因此,PReLU是非饱和函数如果 γ i = 0 \gamma_i = 0 γi=0,那么PReLU久退化为ReLU如果 γ i \gamma_i γi是一个很小的常数,则PReLU可看作带泄露的ReLUPReLU可允许不同神经元具有不同的参数,也可以一组神经元共享一个参数

Q:ELU(Exponential Linear Unit,指线性单元)函数是什么?

一个近似的零中心化的非线性函数 E L U ( x ) = { x  if  x > 0 γ ( exp ⁡ ( x ) − 1 )  if  x ≤ 0 = max ⁡ ( 0 , x ) + min ⁡ ( 0 , γ ( exp ⁡ ( x ) − 1 ) ) \begin{aligned} \mathrm{ELU}(x) &=\left\{\begin{array}{ll} x & \text { if } x>0 \\ \gamma(\exp (x)-1) & \text { if } x \leq 0 \end{array}\right.\\ &=\max (0, x)+\min (0, \gamma(\exp (x)-1)) \end{aligned} ELU(x)={xγ(exp(x)1) if x>0 if x0=max(0,x)+min(0,γ(exp(x)1))其中 γ ≥ 0 \gamma \geq 0 γ0是一个超参数,决定 x ≤ 0 x \leq 0 x0时的饱和曲线,并调整输出均值在0附近“”

Q:Softplus函数是什么?

可看作Rectifier函数的平滑版本  Softplus  ( x ) = log ⁡ ( 1 + exp ⁡ ( x ) ) \text { Softplus }(x)=\log (1+\exp (x))  Softplus (x)=log(1+exp(x))Softplus函数其导数刚好是Logistic函数Softplus函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活性

Q:Swish函数是什么?

是一种门自控(Self-Gated)激活函数 swish ⁡ ( x ) = x σ ( β x ) \operatorname{swish}(x)=x \sigma(\beta x) swish(x)=xσ(βx)其中 σ ( ⋅ ) \sigma(\cdot) σ()为Logistic函数, β \beta β为可学习的参数或一个固定超参数 σ ( ⋅ ) ∈ ( 0 , 1 ) \sigma(\cdot) \in(0,1) σ()(0,1)可看作一种软性的门控机制,当 σ ( β x ) \sigma(\beta x) σ(βx)接近于1时,门处于“开”状态,激活函数的输出近似于x本身;当 σ ( β x ) \sigma(\beta x) σ(βx)接近于0时,门的状态为“关”,激活函数的输出近似于0当 β = 0 \beta = 0 β=0时,Swish函数变成线性函数x/2当 β = 1 \beta=1 β=1时,Swish函数在x>0时近似线性,在x<0时近似饱和,同时具有一定的非单调性当 β → + ∞ \beta \rightarrow +\infty β+时, σ ( β x ) \sigma(\beta x) σ(βx)趋向于离散的0-1函数,Swish函数近似为ReLU函数因此,Swish函数可看作线性函数和ReLU函数之间的非线性插值函数,其程度由参数 β \beta β控制

Q:GELU(Gaussian Error Linear Unit,高斯误差线性单元)函数是什么?

一种通过门控机制来调整其输出值的激活函数,和Swish函数比较类似 GELU ⁡ ( x ) = x P ( X ≤ x ) \operatorname{GELU}(x)=x P(X \leq x) GELU(x)=xP(Xx)其中 P ( X ≤ x ) P(X \leq x) P(Xx)是高斯分布 N ( μ , σ 2 ) \mathcal{N}\left(\mu, \sigma^{2}\right) N(μ,σ2)的累积分布函数,其中 μ , σ \mu, \sigma μ,σ为超参数,一般设为 μ = 0 , σ = 1 \mu=0,\sigma=1 μ=0,σ=1即可由于高斯分布的累积分布函数为S型函数,因此GELU函数可以用Tanh函数或Logistic函数来近似 GELU ⁡ ( x ) ≈ 0.5 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \operatorname{GELU}(x) \approx 0.5 x\left(1+\tanh \left(\sqrt{\frac{2}{\pi}}\left(x+0.044715 x^{3}\right)\right)\right) GELU(x)0.5x(1+tanh(π2 (x+0.044715x3))) GELU ⁡ ( x ) ≈ x σ ( 1.702 x ) \operatorname{GELU}(x) \approx x \sigma(1.702 x) GELU(x)xσ(1.702x)当使用Logistic函数来近似时,GELU相当于一种特殊的Swish函数

Q:Maxout单元是什么?

一种分段线性函数它的输入是上一层神经元的全部原始输出,是一个向量 x = [ x 1 ; x 2 ; ⋯   ; x D ] \boldsymbol{x}=\left[x_{1} ; x_{2} ; \cdots ; x_{D}\right] x=[x1;x2;;xD]每个Maxout单元有K个权重向量 w k ∈ R D \boldsymbol{w}_{k} \in \mathbb{R}^{D} wkRD和偏置 b k ( 1 ≤ k ≤ K ) b_{k}(1 \leq k \leq K) bk(1kK)。对于输入x,可得到K个净输入 z k , 1 ≤ k ≤ K z_{k}, 1 \leq k \leq K zk,1kK z k = w k ⊤ x + b k z_{k}=\boldsymbol{w}_{k}^{\top} \boldsymbol{x}+b_{k} zk=wkx+bk其中 w k = [ w k , 1 , ⋯   , w k , D ] ⊤ \boldsymbol{w}_{k}=\left[w_{k, 1}, \cdots, w_{k, D}\right]^{\top} wk=[wk,1,,wk,D]为第k个权重向量Maxout单元的非线性函数定义为 maxout ⁡ ( x ) = max ⁡ k ∈ [ 1 , K ] ( z k ) \operatorname{maxout}(\boldsymbol{x})=\max _{k \in[1, K]}\left(z_{k}\right) maxout(x)=k[1,K]max(zk)Maxout单元不单是净输入到净输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系Maxout激活函数可看作任意凸函数的分段线性近似,并且在有限的点上是不可微的

4.2 网络结构

Q:神经网络是什么?

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

Q:前馈网络是什么?

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

Q:记忆网络,也称反馈网络是什么?

网络中的神经元不但可以接收其它神经元的信息,也可以接收自己的历史信息和前馈网络相比,记忆网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。记忆神经网络中的信息传递可以是单向或双向传递,因此可用一个有向循环图或无向图表示记忆网络包括循环神经网络、Hopfield网络、玻尔兹曼机、受限玻尔兹曼机可看作一个程序,具有更强的计算和记忆能力为了增强记忆网络的记忆容量,可以引入外部记忆单元和读写机制,用来保存一些网络的中间状态,称为记忆增强神经网络,如神经图灵机和记忆网络

Q:图网络是什么?

定义在图结构数据上的神经网络,图中每个节点都由一个或一组神经元构成。节点之间的连接可以是有向或无向的。每个节点可以收到来自相邻节点或自身的信息

4.3 前馈神经网络

Q:前馈神经网络的组成是怎样?

各神经元分别属于不同的层,每一层的神经元可以接收前一层神经元的信息,并产生信号输出到下一层。第0层称为输入层,最后一层称为输出层,其它中间层称为隐藏层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示

Q:前馈神经网络的函数表示是怎样?

a ( 0 ) = x \boldsymbol{a}^{(0)}=\boldsymbol{x} a(0)=x,前馈神经网络通过不断迭代下面公式进行信息传播: z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) \boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} z(l)=W(l)a(l1)+b(l) a ( l ) = f l ( z ( l ) ) \boldsymbol{a}^{(l)}=f_{l}\left(\mathbf{z}^{(l)}\right) a(l)=fl(z(l))首先根据第l-1层神经元的活性值(Activation) a ( l − 1 ) \boldsymbol{a}^{(l-1)} a(l1)计算出第l层神经元的净活性值(Net Activation) z ( l ) \boldsymbol{z}^{(l)} z(l),然后经过一个激活函数得到第l层神经元的活性值因此,可把每个神经层看作一个仿射变换(Affine Transformation)和一个非线性变换以上两个公式可合并写为 z ( l ) = W ( l ) f l − 1 ( z ( l − 1 ) ) + b ( l ) \boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} f_{l-1}\left(\boldsymbol{z}^{(l-1)}\right)+\boldsymbol{b}^{(l)} z(l)=W(l)fl1(z(l1))+b(l) a ( l ) = f l ( W ( l ) a ( l − 1 ) + b ( l ) ) \boldsymbol{a}^{(l)}=f_{l}\left(\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)}\right) a(l)=fl(W(l)a(l1)+b(l))这样,前馈神经网络可通过逐层的信息传递,得到网络最后的输出 a ( L ) \boldsymbol{a}^{(L)} a(L)。整个网络可看作一个复合函数 ϕ ( x ; W , b ) \phi(\boldsymbol{x} ; \boldsymbol{W}, \boldsymbol{b}) ϕ(x;W,b),将向量x作为第1层的输入 a ( 0 ) \boldsymbol{a}^{(0)} a(0),将第L层的输出 a ( L ) \boldsymbol{a}^{(L)} a(L)作为整个函数的输出 x = a ( 0 ) → z ( 1 ) → a ( 1 ) → z ( 2 ) → ⋯ → a ( L − 1 ) → z ( L ) → a ( L ) = ϕ ( x ; W , b ) \boldsymbol{x}=\boldsymbol{a}^{(0)} \rightarrow \mathbf{z}^{(1)} \rightarrow \boldsymbol{a}^{(1)} \rightarrow \mathbf{z}^{(2)} \rightarrow \cdots \rightarrow \boldsymbol{a}^{(L-1)} \rightarrow \mathbf{z}^{(L)} \rightarrow \boldsymbol{a}^{(L)}=\phi(\boldsymbol{x} ; \boldsymbol{W}, \boldsymbol{b}) x=a(0)z(1)a(1)z(2)a(L1)z(L)a(L)=ϕ(x;W,b)其中W,b表示网络中所有层的连接权重和偏置

Q:通用近似定理(Universal Approximation Theorem)是什么?

ϕ ( ⋅ ) \phi(\cdot) ϕ()是一个非常数、有界、单调递增的连续函数, J D \mathcal{J}_{D} JD是一个D维的单位超立方体 [ 0 , 1 ] D [0,1]^{D} [0,1]D C ( J D ) C\left(\mathcal{J}_{D}\right) C(JD)是定义在 J D \mathcal{J}_{D} JD上的连续函数集合。对于任意给定的一个函数 f ∈ C ( J D ) f \in C\left(\mathcal{J}_{D}\right) fC(JD),存在一个整数M,和一组实数 v m , b m ∈ R v_{m}, b_{m} \in \mathbb{R} vm,bmR以及实数向量 w m ∈ R D , m = 1 , ⋯   , M \boldsymbol{w}_{m} \in \mathbb{R}^{D}, m=1, \cdots, M wmRD,m=1,,M,以至于我们可以定义函数 F ( x ) = ∑ m = 1 M v m ϕ ( w m ⊤ x + b m ) F(\boldsymbol{x})=\sum_{m=1}^{M} v_{m} \phi\left(\boldsymbol{w}_{m}^{\top} \boldsymbol{x}+b_{m}\right) F(x)=m=1Mvmϕ(wmx+bm)作为函数 f f f的近似实现,即 ∣ F ( x ) − f ( x ) ∣ < ϵ , ∀ x ∈ J D |F(\boldsymbol{x})-f(\boldsymbol{x})|<\epsilon, \forall \boldsymbol{x} \in \mathcal{J}_{D} F(x)f(x)<ϵ,xJD其中 ϵ > 0 \epsilon>0 ϵ>0是一个很小的正数通用近似定理在实数空间 R D \mathbb{R}^{D} RD中的有界闭集上依然成立

Q:通用近似定理说明了什么?

对于具有线性输出层和至少一个使用“挤压”性质的激活函数(如Sigmoid函数的有界函数等)的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何一个定义在实数空间 R D \mathbb{R}^D RD中的有界闭集函数

Q:通用近似定理说明了什么?缺点是什么?

只说明了神经网络的计算能力可以去近似一个给定的连续函数缺点:1.并没有给出如何找到这样一个网络,以及是否是最优的2.应用到机器学习时,真实的映射函数并不知道,一般是通过经验风险最小化和正则化来进行参数学习3.因为神经网络的强大能力,反而容易在训练集上过拟合

Q:特征抽取是什么?

在机器学习中,输入样本的特征对分类器的影响很大以监督学习为例,好的特征可以极大提高分类器的性能,因此,要取得好的分类效果,需要将样本的原始特征向量 x \boldsymbol{x} x转换到更有效的特征向量 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x),这个过程即特征抽取

Q:多层前馈神经网络如何应用到机器学习中?

可以看作一个非线性复合函数 ϕ : R D → R D ′ \phi: \mathbb{R}^{D} \rightarrow \mathbb{R}^{D^{\prime}} ϕ:RDRD,将输入 x ∈ R D \boldsymbol{x} \in \mathbb{R}^{D} xRD映射到输出 ϕ ( x ) ∈ R D ′ \phi(\boldsymbol{x}) \in \mathbb{R}^{D^{\prime}} ϕ(x)RD因此,多层前馈神经网络可看成一种特征转换方法,其输出 ϕ ( x ) \phi (\boldsymbol{x}) ϕ(x)作为分类器的输入进行分类给定一个训练样本 ( x , y ) (\boldsymbol{x}, y) (x,y),先利用多层前馈神经网络将 x \boldsymbol{x} x映射成 ϕ ( x ) \phi (\boldsymbol{x}) ϕ(x),然后再将 ϕ ( x ) \phi (\boldsymbol{x}) ϕ(x)输入到分类器 g ( ⋅ ) g(\cdot) g(),即 y ^ = g ( ϕ ( x ) ; θ ) \hat{y}=g(\phi(\boldsymbol{x}) ; \theta) y^=g(ϕ(x);θ)其中 g ( ⋅ ) g(\cdot) g()为线性或非线性的分类器, θ \theta θ为分类器 g ( ⋅ ) g(\cdot) g()的参数, y ^ \hat{y} y^为分类器的输出若分类器 g ( ⋅ ) g(\cdot) g()为Logistic回归分类器或Softmax回归分类器,那么 g ( ⋅ ) g(\cdot) g()也可以看成是网络的最后一层,即神经网络直接输出不同类别的条件概率 p ( y ∣ x ) p(y \mid \boldsymbol{x}) p(yx)

Q:神经网络的参数学习过程是怎样?

若使用交叉熵损失函数,对于样本 ( x , y ) (\boldsymbol{x}, y) (x,y),其损失函数为 L ( y , y ^ ) = − y ⊤ log ⁡ y ^ \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})=-\boldsymbol{y}^{\top} \log \hat{\boldsymbol{y}} L(y,y^)=ylogy^其中 y ∈ { 0 , 1 } C \boldsymbol{y} \in\{0,1\}^{C} y{0,1}C为标签y对应的one-hot向量表示给定训练集为 D = { ( x ( n ) , y ( n ) ) } n = 1 N \mathcal{D}=\left\{\left(\boldsymbol{x}^{(n)}, y^{(n)}\right)\right\}_{n=1}^{N} D={(x(n),y(n))}n=1N,将每个样本 x ( n ) \boldsymbol{x}^{(n)} x(n)输入给前馈神经网络,得到网络输出为 y ^ ( n ) \hat{\boldsymbol{y}}^{(n)} y^(n),其在数据集 D \mathcal{D} D上的结构化风险函数为 R ( W , b ) = 1 N ∑ n = 1 N L ( y ( n ) , y ^ ( n ) ) + 1 2 λ ∥ W ∥ F 2 \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})=\frac{1}{N} \sum_{n=1}^{N} \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{\boldsymbol{y}}^{(n)}\right)+\frac{1}{2} \lambda\|\boldsymbol{W}\|_{F}^{2} R(W,b)=N1n=1NL(y(n),y^(n))+21λWF2其中 W \boldsymbol{W} W b \boldsymbol{b} b分别表示网络中所有的权重矩阵和偏置向量; ∥ W ∥ F 2 \|\boldsymbol{W}\|_{F}^{2} WF2是正则化项,用来防止过拟合; λ > 0 \lambda > 0 λ>0为超参数, λ \lambda λ越大, W \boldsymbol{W} W越接近于0.这里的 ∥ W ∥ F 2 \|\boldsymbol{W}\|_{F}^{2} WF2一般使用Frobenius范数 ∥ W ∥ F 2 = ∑ l = 1 L ∑ i = 1 M l ∑ j = 1 M l − 1 ( w i j ( l ) ) 2 \|\boldsymbol{W}\|_{F}^{2}=\sum\limits_{l=1}^{L} \sum\limits_{i=1}^{M_{l}} \sum\limits_{j=1}^{M_{l-1}}\left(w_{i j}^{(l)}\right)^{2} WF2=l=1Li=1Mlj=1Ml1(wij(l))2有了学习准则和训练样本,网络参数可以通过梯度下降法来进行学习在梯度下降法的每次迭代中,第 l l l层的参数 W ( l ) \boldsymbol{W}^{(l)} W(l)和$ \boldsymbol{b}^{(l)}$参数更新方式为 W ( l ) ← W ( l ) − α ∂ R ( W , b ) ∂ W ( l ) = W ( l ) − α ( 1 N ∑ n = 1 N ( ∂ L ( y ( n ) , y ( n ) ) ∂ W ( l ) ) + λ W ( l ) ) \begin{aligned} \boldsymbol{W}^{(l)} & \leftarrow \boldsymbol{W}^{(l)}-\alpha \frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{W}^{(l)}} \\ &=\boldsymbol{W}^{(l)}-\alpha\left(\frac{1}{N} \sum_{n=1}^{N}\left(\frac{\partial \mathcal{L}\left(\boldsymbol{y}^{(n)}, \boldsymbol{y}^{(n)}\right)}{\partial \boldsymbol{W}^{(l)}}\right)+\lambda \boldsymbol{W}^{(l)}\right) \end{aligned} W(l)W(l)αW(l)R(W,b)=W(l)α(N1n=1N(W(l)L(y(n),y(n)))+λW(l)) b ( l ) ← b ( l ) − α ∂ R ( W , b ) ∂ b ( l ) = b ( l ) − α ( 1 N ∑ n = 1 N ∂ L ( y ( n ) , y ^ ( n ) ) ∂ b ( l ) ) \begin{aligned} \boldsymbol{b}^{(l)} & \leftarrow \boldsymbol{b}^{(l)}-\alpha \frac{\partial \mathcal{R}(\boldsymbol{W}, \boldsymbol{b})}{\partial \boldsymbol{b}^{(l)}} \\ &=\boldsymbol{b}^{(l)}-\alpha\left(\frac{1}{N} \sum_{n=1}^{N} \frac{\partial \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{\boldsymbol{y}}^{(n)}\right)}{\partial \boldsymbol{b}^{(l)}}\right) \end{aligned} b(l)b(l)αb(l)R(W,b)=b(l)αN1n=1Nb(l)L(y(n),y^(n))其中 α \alpha α是学习率

4.4 反向传播算法

Q:假设采用随机梯度下降进行神经网络参数学习,给定一个样本 ( x , y ) (x, y) (x,y),将其输入到神经网络模型中,得到网络输出为 y ^ \hat{\boldsymbol{y}} y^,假设损失函数为 L ( y , y ^ ) \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}}) L(y,y^),如何计算损失函数关于每个参数的导数?即反向传播算法

不失一般性,对第l层中的参数$\boldsymbol{W}^{(l)} 和 和 \boldsymbol{b}^{(l)}$计算偏导数因为 ∂ L ( y , y ^ ) ∂ W ( l ) \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{W}^{(l)}} W(l)L(y,y^)的计算涉及向量对矩阵的微分,因此先计算 L ( y , y ^ ) \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}}) L(y,y^)关于参数矩阵中每个元素的偏导数 ∂ L ( y , y ^ ) ∂ w i j ( l ) \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial w_{i j}^{(l)}} wij(l)L(y,y^)根据链式法则 ∂ L ( y , y ^ ) ∂ w i j ( l ) = ∂ z ( l ) ∂ w i j ( l ) ∂ L ( y , y ^ ) ∂ z ( l ) \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial w_{i j}^{(l)}}=\frac{\partial \boldsymbol{z}^{(l)}}{\partial w_{i j}^{(l)}} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}} wij(l)L(y,y^)=wij(l)z(l)z(l)L(y,y^) ∂ L ( y , y ^ ) ∂ b ( l ) = ∂ z ( l ) ∂ b ( l ) ∂ L ( y , y ^ ) ∂ z ( l ) \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{b}^{(l)}}=\frac{\partial \mathbf{z}^{(l)}}{\partial \boldsymbol{b}^{(l)}} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l)}} b(l)L(y,y^)=b(l)z(l)z(l)L(y,y^)上述两个公式中的第二项都是目标函数关于第 l l l层的神经元 z ( l ) \boldsymbol{z}^{(l)} z(l)的偏导数,称为误差项,可以计算一次得到,只需计算三个偏导数,即 ∂ z ( l ) ∂ w i j ( l ) ≜ ⫿ i ( a j ( l − 1 ) ) ∈ R 1 × M l \frac{\partial \mathbf{z}^{(l)}}{\partial w_{i j}^{(l)}} \triangleq{⫿}_{i}\left(a_{j}^{(l-1)}\right) \quad \in \mathbb{R}^{1 \times M_{l}} wij(l)z(l)⫿i(aj(l1))R1×Ml ∂ z ( l ) ∂ b ( l ) = I M l ∈ R M l × M l \frac{\partial z^{(l)}}{\partial \boldsymbol{b}^{(l)}}=\boldsymbol{I}_{M_{l}} \quad \in \mathbb{R}^{M_{l} \times M_{l}} b(l)z(l)=IMlRMl×Ml δ ( l ) ≜ ∂ L ( y , y ^ ) ∂ z ( l ) = f l ′ ( z ( l ) ) ⊙ ( ( W ( l + 1 ) ) ⊤ δ ( l + 1 ) ) ∈ R M l \delta^{(l)} \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l)}} =f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right) \odot\left(\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \delta^{(l+1)}\right) \in \mathbb{R}^{M_{l}} δ(l)z(l)L(y,y^)=fl(z(l))((W(l+1))δ(l+1))RMl综上可得 ∂ L ( y , y ^ ) ∂ w i j ( l ) = ∂ z ( l ) ∂ w i j ( l ) ∂ L ( y , y ^ ) ∂ z ( l ) = ⫿ i ( a j ( l − 1 ) ) δ ( l ) = [ 0 , ⋯   , a j ( l − 1 ) , ⋯   , 0 ] [ δ 1 ( l ) , ⋯   , δ i ( l ) , ⋯   , δ M l ( l ) ] ⊤ = δ i ( l ) a j ( l − 1 ) \begin{aligned} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial w_{i j}^{(l)}} &=\frac{\partial \boldsymbol{z}^{(l)}}{\partial w_{i j}^{(l)}} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}} \\ &=⫿_{i}\left(a_{j}^{(l-1)}\right) \delta^{(l)} \\ &=\left[0, \cdots, a_{j}^{(l-1)}, \cdots, 0\right]\left[\delta_{1}^{(l)}, \cdots, \delta_{i}^{(l)}, \cdots, \delta_{M_{l}}^{(l)}\right]^{\top} \\ &=\delta_{i}^{(l)} a_{j}^{(l-1)} \end{aligned} wij(l)L(y,y^)=wij(l)z(l)z(l)L(y,y^)=⫿i(aj(l1))δ(l)=[0,,aj(l1),,0][δ1(l),,δi(l),,δMl(l)]=δi(l)aj(l1)其中 δ i ( l ) a j ( l − 1 ) \delta_{i}^{(l)} a_{j}^{(l-1)} δi(l)aj(l1)相当于向量 δ ( l ) \delta^{(l)} δ(l)和向量 a ( l − 1 ) \boldsymbol{a}^{(l-1)} a(l1)的外积的第 i , j i,j i,j个元素,上式可进一步写为 [ ∂ L ( y , y ^ ) ∂ W ( l ) ] i j = [ δ ( l ) ( a ( l − 1 ) ) ⊤ ] i j \left[\frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{W}^{(l)}}\right]_{i j}=\left[\delta^{(l)}\left(\boldsymbol{a}^{(l-1)}\right)^{\top}\right]_{i j} [W(l)L(y,y^)]ij=[δ(l)(a(l1))]ij因此, L ( y , y ^ ) \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}}) L(y,y^)关于第l层权重 W ( l ) \boldsymbol{W}^{(l)} W(l)的梯度为 ∂ L ( y , y ^ ) ∂ W ( l ) = δ ( l ) ( a ( l − 1 ) ) ⊤ ∈ R M l × M l − 1 \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{W}^{(l)}}=\delta^{(l)}\left(\boldsymbol{a}^{(l-1)}\right)^{\top} \quad \in \mathbb{R}^{M_{l} \times M_{l-1}} W(l)L(y,y^)=δ(l)(a(l1))RMl×Ml1同理, L ( y , y ^ ) \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}}) L(y,y^)关于第l层权重 b ( l ) \boldsymbol{b}^{(l)} b(l)的梯度为 ∂ L ( y , y ^ ) ∂ b ( l ) = δ ( l ) ∈ R M l \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{b}^{(l)}}=\delta^{(l)} \in \mathbb{R}^{M_{l}} b(l)L(y,y^)=δ(l)RMl在计算出每一层的误差项之后,即可得到每一层参数的梯度

Q:如何计算偏导数 ∂ z ( l ) ∂ w i j ( l ) \frac{\partial z^{(l)}}{\partial w_{i j}^{(l)}} wij(l)z(l)

z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) \boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} z(l)=W(l)a(l1)+b(l),偏导数 ∂ z ( l ) ∂ w i j ( l ) = [ ∂ z 1 ( l ) ∂ w i j ( l ) , ⋯   , ∂ z i ( l ) ∂ w i j ( l ) ⋯   , ∂ z M l ( l ) ∂ w i j ( l ) ] = [ 0 , ⋯   , ∂ ( w i : ( l ) a ( l − 1 ) + b i ( l ) ) ∂ w i j ( l ) , ⋯   , 0 ] = [ 0 , ⋯   , a j ( l − 1 ) , ⋯   , 0 ] ≜ ⫿ i ( a j ( l − 1 ) ) ∈ R 1 × M l \begin{aligned} \frac{\partial z^{(l)}}{\partial w_{i j}^{(l)}} &=\left[\frac{\partial z_{1}^{(l)}}{\partial w_{i j}^{(l)}}, \cdots,\frac{\partial z_{i}^{(l)}}{\partial w_{i j}^{(l)}} \cdots, \frac{\partial z_{M_{l}}^{(l)}}{\partial w_{i j}^{(l)}}\right]\\ &=\left[0, \cdots, \frac{\partial\left(\boldsymbol{w}_{i:}^{(l)} \boldsymbol{a}^{(l-1)}+b_{i}^{(l)}\right)}{\partial w_{i j}^{(l)}}, \cdots, 0\right] \\ &=\left[0, \cdots, a_{j}^{(l-1)}, \cdots, 0\right] \\ & \triangleq{⫿}_{i}\left(a_{j}^{(l-1)}\right) \quad \in \mathbb{R}^{1 \times M_{l}} \end{aligned} wij(l)z(l)=[wij(l)z1(l),,wij(l)zi(l),wij(l)zMl(l)]=0,,wij(l)(wi:(l)a(l1)+bi(l)),,0=[0,,aj(l1),,0]⫿i(aj(l1))R1×Ml其中 w i : ( l ) \boldsymbol{w}_{i:}^{(l)} wi:(l)为权重矩阵 W ( l ) \boldsymbol{W}^{(l)} W(l)的第i行, ⫿ i ( a j ( l − 1 ) ) {⫿}_{i}(a_{j}^{(l-1)}) ⫿i(aj(l1))表示第i个元素为 a j ( l − 1 ) a_{j}^{(l-1)} aj(l1),其余为0的行向量

Q:如何计算偏导数 ∂ z ( l ) ∂ b ( l ) \frac{\partial z^{(l)}}{\partial \boldsymbol{b}^{(l)}} b(l)z(l)

z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) \boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} z(l)=W(l)a(l1)+b(l),偏导数 ∂ z ( l ) ∂ b ( l ) = I M l ∈ R M l × M l \frac{\partial z^{(l)}}{\partial \boldsymbol{b}^{(l)}}=\boldsymbol{I}_{M_{l}} \quad \in \mathbb{R}^{M_{l} \times M_{l}} b(l)z(l)=IMlRMl×Ml ∂ z ( l ) ∂ b ( l ) = I M l ∈ R M l × M l \frac{\partial z^{(l)}}{\partial \boldsymbol{b}^{(l)}}=\boldsymbol{I}_{M_{l}} \quad \in \mathbb{R}^{M_{l} \times M_{l}} b(l)z(l)=IMlRMl×Ml的单位矩阵

Q:如何计算偏导数 ∂ L ( y , y ^ ) ∂ z ( l ) \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}} z(l)L(y,y^)

表示第 l l l层神经元对最终损失的影响,也反映了最终损失对第l层神经元的敏感程度,因此一般称为第 l l l层神经元的误差项,用 δ ( l ) \delta^{(l)} δ(l)来表示 δ ( l ) ≜ ∂ L ( y , y ^ ) ∂ z ( l ) ∈ R M l \delta^{(l)} \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l)}} \in \mathbb{R}^{M_{l}} δ(l)z(l)L(y,y^)RMl误差项 δ ( l ) \delta^{(l)} δ(l)间接反映了不同神经元对网络能力的贡献程度,从而比较好地解决了贡献度分配问题(Credit Assignment Problem, CAP)根据 z ( l + 1 ) = W ( l + 1 ) a ( l ) + b ( l + 1 ) \boldsymbol{z}^{(l+1)}=\boldsymbol{W}^{(l+1)} \boldsymbol{a}^{(l)}+\boldsymbol{b}^{(l+1)} z(l+1)=W(l+1)a(l)+b(l+1),有 ∂ z ( l + 1 ) ∂ a ( l ) = ( W ( l + 1 ) ) ⊤ ∈ R M l × M l + 1 \frac{\partial \mathbf{z}^{(l+1)}}{\partial \boldsymbol{a}^{(l)}}=\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \quad \in \mathbb{R}^{M_{l} \times M_{l+1}} a(l)z(l+1)=(W(l+1))RMl×Ml+1根据 a ( l ) = f l ( z ( l ) ) \boldsymbol{a}^{(l)}=f_{l}\left(\mathbf{z}^{(l)}\right) a(l)=fl(z(l)),其中 f l ( ⋅ ) f_{l}(\cdot) fl()为按位计算的函数,因此有 ∂ a ( l ) ∂ z ( l ) = ∂ f l ( z ( l ) ) ∂ z ( l ) = diag ⁡ ( f l ′ ( z ( l ) ) ) ∈ R M l × M l \begin{aligned} \frac{\partial \boldsymbol{a}^{(l)}}{\partial \mathbf{z}^{(l)}} &=\frac{\partial f_{l}\left(\mathbf{z}^{(l)}\right)}{\partial \mathbf{z}^{(l)}} \\ &=\operatorname{diag}\left(f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right)\right) \quad \in \mathbb{R}^{M_{l} \times M_{l}} \end{aligned} z(l)a(l)=z(l)fl(z(l))=diag(fl(z(l)))RMl×Ml δ ( l ) ≜ ∂ L ( y , y ^ ) ∂ z ( l ) = ∂ a ( l ) ∂ z ( l ) ⋅ ∂ z ( l + 1 ) ∂ a ( l ) ⋅ ∂ L ( y , y ^ ) ∂ z ( l + 1 ) = diag ⁡ ( f l ′ ( z ( l ) ) ) ⋅ ( W ( l + 1 ) ) ⊤ ⋅ δ ( l + 1 ) = f l ′ ( z ( l ) ) ⊙ ( ( W ( l + 1 ) ) ⊤ δ ( l + 1 ) ) ∈ R M l \begin{aligned} \delta^{(l)} & \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l)}} \\ &=\frac{\partial \boldsymbol{a}^{(l)}}{\partial \mathbf{z}^{(l)}} \cdot \frac{\partial \mathbf{z}^{(l+1)}}{\partial \boldsymbol{a}^{(l)}} \cdot \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l+1)}} \\ &=\operatorname{diag}\left(f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right)\right)\cdot\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \cdot \delta^{(l+1)} \\ &=f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right) \odot\left(\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \delta^{(l+1)}\right) \in \mathbb{R}^{M_{l}} \end{aligned} δ(l)z(l)L(y,y^)=z(l)a(l)a(l)z(l+1)z(l+1)L(y,y^)=diag(fl(z(l)))(W(l+1))δ(l+1)=fl(z(l))((W(l+1))δ(l+1))RMl其中 ⊗ \otimes 是向量的点积运算符,表示每个元素相乘从上式可知,第l层误差项可以通过第l+1层的误差项计算得到,这就是误差的反向传播(BackPropagatoin, BP)反向传播算法的含义是:第l层的一个神经元的误差项(或敏感性)是所有与该神经元相连的第l+1层的神经元的误差项的权重和。然后,再乘上该神经元激活函数的梯度

Q:使用误差反向传播算法的随机梯度下降训练过程是怎样?

输入:训练集 D = { ( x ( n ) , y ( n ) ) } n = 1 N \mathcal{D}=\left\{\left(\boldsymbol{x}^{(n)}, y^{(n)}\right)\right\}_{n=1}^{N} D={(x(n),y(n))}n=1N,验证集 V \mathcal{V} V,学习率 α \alpha α,正则化系数 λ \lambda λ,网络层数L,神经元数量 M l , 1 ≤ l ≤ L M_{l}, 1 \leq l \leq L Ml,1lL随机初始化 W , b \boldsymbol{W}, \boldsymbol{b} W,brepeat 对训练集 D \mathcal{D} D中样本随机重排序for n = 1 … N do 从训练集 D \mathcal{D} D中选取样本 ( x ( n ) , y ( n ) ) \left(\boldsymbol{x}^{(n)}, y^{(n)}\right) (x(n),y(n))前馈计算每一层的净输入 z ( l ) \boldsymbol{z}^{(l)} z(l)和激活值 a ( l ) \boldsymbol{a}^{(l)} a(l),直到最后一层反向传播计算每一层的误差项" δ ( l ) ≜ ∂ L ( y , y ^ ) ∂ z ( l ) = f l ′ ( z ( l ) ) ⊙ ( ( W ( l + 1 ) ) ⊤ δ ( l + 1 ) ) ∈ R M l \delta^{(l)} \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \mathbf{z}^{(l)}} =f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right) \odot\left(\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \delta^{(l+1)}\right) \in \mathbb{R}^{M_{l}} δ(l)z(l)L(y,y^)=fl(z(l))((W(l+1))δ(l+1))RMl"// 计算每一层参数的导数 ∀ l , ∂ L ( y ( n ) , y ^ ( n ) ) ∂ W ( l ) = δ ( l ) ( a ( l − 1 ) ) ⊤ \forall l, \quad \frac{\partial \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{y}^{(n)}\right)}{\partial \boldsymbol{W}^{(l)}}=\delta^{(l)}\left(\boldsymbol{a}^{(l-1)}\right)^{\top} l,W(l)L(y(n),y^(n))=δ(l)(a(l1)) ∀ l , ∂ L ( y ( n ) , y ^ ( n ) ) ∂ b ( l ) = δ ( l ) \forall l, \quad \frac{\partial \mathcal{L}\left(\boldsymbol{y}^{(n)}, \hat{y}^{(n)}\right)}{\partial \boldsymbol{b}^{(l)}}=\delta^{(l)} l,b(l)L(y(n),y^(n))=δ(l)// 更新参数 W ( l ) ← W ( l ) − α ( δ ( l ) ( a ( l − 1 ) ) ⊤ + λ W ( l ) ) \boldsymbol{W}^{(l)} \leftarrow \boldsymbol{W}^{(l)}-\alpha\left(\delta^{(l)}\left(\boldsymbol{a}^{(l-1)}\right)^{\top}+\lambda \boldsymbol{W}^{(l)}\right) W(l)W(l)α(δ(l)(a(l1))+λW(l)) b ( l ) ← b ( l ) − α δ ( l ) \boldsymbol{b}^{(l)} \leftarrow \boldsymbol{b}^{(l)}-\alpha \delta^{(l)} b(l)b(l)αδ(l) end until神经网络模型在验证集 V \mathcal{V} V上的错误率不再下降输出: W , b \boldsymbol{W}, \boldsymbol{b} W,b

4.5 自动梯度计算

Q:舍入误差(Round-off Error)是什么?

数值计算中由于数字舍入造成的近似值和精确值之间的差异,比如用浮点数来表示实数

Q:截断误差(Truncation Error)是什么?

数学模型的理论解与数值计算问题的精确解之间的误差

Q:如何使用数值微分(Numerical Differentiation)自动计算梯度?

函数 f ( x ) f(x) f(x)的点x的导数定义是 f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f^{\prime}(x)=\lim \limits_{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x)}{\Delta x} f(x)=Δx0limΔxf(x+Δx)f(x)要计算 f ( x ) f(x) f(x)在点x的导数,可以在x加上一个很小的非零扰动 Δ x \Delta x Δx,通过上述定义来直接计算函数 f ( x ) f(x) f(x)的梯度实际应用使用下面公式计算梯度以减少截断误差 f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x − Δ x ) 2 Δ x f^{\prime}(x)=\lim \limits_{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x-\Delta x)}{2 \Delta x} f(x)=Δx0lim2Δxf(x+Δx)f(xΔx)

Q:数值微分自动计算梯度的优缺点是什么?

优点 非常容易实现 缺点 1.找到一个合适的扰动 Δ x \Delta x Δx十分困难,实用性比较差2.如果 Δ x \Delta x Δx过小,会引起数值计算问题,如舍入误差3.如果 Δ x \Delta x Δx过大,会增加截断误差4.计算复杂度高,假设参数数量为N,则每个参数都需要单独施加扰动,并计算梯度。假设每次正向传播的计算复杂度为O(N),则计算数值微分的总体时间复杂度为 O ( N 2 ) O(N^2) O(N2)

Q:如何使用符号微分(Symbolic Differentiation)(也叫代数计算)自动计算梯度?

一种基于符号计算的自动求导方法,指用计算机来处理带有变量的数学表达式这里的变量被看作符号(Symbols),一般不需要代入具体的值符号计算的输入和输出都是数学表达式,一般包括对数学表达式的化简、因式分解、微分、积分、解代数方程、求解常微分方程等运算符号计算一般是对输入的表达式,通过迭代或递归使用一些事先定义的规则进行转换。当转换结果不能再继续使用变换规则时,便停止计算。可以在编译时计算梯度的数学表示,并进一步利用符号计算方法进行优化

Q:符号计算自动计算梯度的优缺点是什么?

优点 和平台无关 缺点 1.编译时间较长,特别是对于循环,需要很长时间进行编译2.一般需要设计一种专门的语言来表示数学表达式,并且要对变量(符号)进行预先生命3.很难对程序进行调试

Q:如何使用自动微分(Automatic Differentiation, AD)自动计算梯度?

这是可以对一个(程序)函数进行计算导数的方法自动微分的基本原理是说有的数值计算可以分解为一些基本操作,包含 + , − , × , / +,-, \times, / +,,×,/和一些初等函数exp,log,sin,cos等,然后利用链式法则来自动计算一个复合函数的梯度

Q:以神经网络中的复合函数 f ( x ; w , b ) = 1 exp ⁡ ( − ( w x + b ) ) + 1 f(x ; w, b)=\frac{1}{\exp (-(w x+b))+1} f(x;w,b)=exp((wx+b))+11为例,说明自动微分的过程,其中x为输入标量,w和b分别为权重和偏置参数

将符合 函数 f ( x ; w , b ) f(x;w,b) f(x;w,b)分解为一系列的基本操作,并构成一个计算图(Computational Graph)计算图是数学运算的图形化表示,计算图中的每个非叶子节点表示一个基本操作,每个叶子节点为一个输入变量或常量。如图中的给出了当 x = 1 , w = 0 , b = 0 x=1,w=0,b=0 x=1,w=0,b=0时复合函数 f ( x ; w , b ) f(x;w,b) f(x;w,b)的计算图,其中连边上的红色数字表示前向计算时复合函数中每个变量的实际取值从计算图上看,复合函数 f ( x ; w , b ) f(x;w,b) f(x;w,b)由6个基本函数 h i , 1 ≤ i ≤ 6 h_{i}, 1 \leq i \leq 6 hi,1i6组成。如表所示,每个基本函数的导数都十分简单,可通过规则实现整个复合函数 f ( x ; w , b ) f(x;w,b) f(x;w,b)关于参数w和b的导数可以通过计算图上的节点 f ( x ; w , b ) f(x;w,b) f(x;w,b)与参数w和b之间路径上所有的导数连乘来得到 ∂ f ( x ; w , b ) ∂ w = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ h 1 ∂ h 1 ∂ w \frac{\partial f(x ; w, b)}{\partial w}=\frac{\partial f(x ; w, b)}{\partial h_{6}} \frac{\partial h_{6}}{\partial h_{5}} \frac{\partial h_{5}}{\partial h_{4}} \frac{\partial h_{4}}{\partial h_{3}} \frac{\partial h_{3}}{\partial h_{2}} \frac{\partial h_{2}}{\partial h_{1}} \frac{\partial h_{1}}{\partial w} wf(x;w,b)=h6f(x;w,b)h5h6h4h5h3h4h2h3h1h2wh1 ∂ f ( x ; w , b ) ∂ b = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ b \frac{\partial f(x ; w, b)}{\partial b}=\frac{\partial f(x ; w, b)}{\partial h_{6}} \frac{\partial h_{6}}{\partial h_{5}} \frac{\partial h_{5}}{\partial h_{4}} \frac{\partial h_{4}}{\partial h_{3}} \frac{\partial h_{3}}{\partial h_{2}} \frac{\partial h_{2}}{\partial b} bf(x;w,b)=h6f(x;w,b)h5h6h4h5h3h4h2h3bh2 ∂ f ( x ; w , b ) ∂ w \frac{\partial f(x ; w, b)}{\partial w} wf(x;w,b)为例,当 x = 1 , w = 0 , b = 0 x=1,w=0,b=0 x=1,w=0,b=0时,可以得到 ∂ f ( x ; w , b ) ∂ w ∣ x = 1 , w = 0 , b = 0 = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ h 1 ∂ h 1 ∂ w = 1 × − 0.25 × 1 × 1 × − 1 × 1 × 1 = 0.25 \begin{aligned} \left.\frac{\partial f(x ; w, b)}{\partial w}\right|_{x=1, w=0, b=0} &=\frac{\partial f(x ; w, b)}{\partial h_{6}} \frac{\partial h_{6}}{\partial h_{5}} \frac{\partial h_{5}}{\partial h_{4}} \frac{\partial h_{4}}{\partial h_{3}} \frac{\partial h_{3}}{\partial h_{2}} \frac{\partial h_{2}}{\partial h_{1}} \frac{\partial h_{1}}{\partial w} \\ &=1 \times-0.25 \times 1 \times 1 \times-1 \times 1 \times 1 \\ &=0.25 \end{aligned} wf(x;w,b)x=1,w=0,b=0=h6f(x;w,b)h5h6h4h5h3h4h2h3h1h2wh1=1×0.25×1×1×1×1×1=0.25其中 f ( x ; w , b ) f(x;w,b) f(x;w,b) h 6 h_6 h6相等,即为1如果函数和参数之间有多条路径,可以将这多条路径上的导数再进行相加,得到最终的梯度

Q:自动微分的前向模式是怎样?

按计算图中计算方式的相同方向来递归地计算梯度,以 ∂ f ( x ; w , b ) ∂ w \frac{\partial f(x ; w, b)}{\partial w} wf(x;w,b)为例,当 x = 1 , w = 0 , b = 0 x=1,w=0,b=0 x=1,w=0,b=0时,前向模式的累积计算顺序如下: ∂ h 1 ∂ w = x = 1 ∂ h 2 ∂ w = ∂ h 2 ∂ h 1 ∂ h 1 ∂ w = 1 × 1 = 1 ∂ h 3 ∂ w = ∂ h 3 ∂ h 2 ∂ h 2 ∂ w = − 1 × 1 ⋮ ∂ h 6 ∂ w = ∂ h 6 ∂ h 5 ∂ h 5 ∂ w = − 0.25 × − 1 = 0.25 \begin{aligned} &\frac{\partial h_{1}}{\partial w}=x =1 \\ \frac{\partial h_{2}}{\partial w}=&\frac{\partial h_{2}}{\partial h_{1}} \frac{\partial h_{1}}{\partial w} =1 \times 1=1 \\ \frac{\partial h_{3}}{\partial w} =&\frac{\partial h_{3}}{\partial h_{2}} \frac{\partial h_{2}}{\partial w}=-1 \times 1 \\ &\vdots \\ \frac{\partial h_{6}}{\partial w}=&\frac{\partial h_{6}}{\partial h_{5}} \frac{\partial h_{5}}{\partial w} =-0.25 \times-1=0.25 \end{aligned} wh2=wh3=wh6=wh1=x=1h1h2wh1=1×1=1h2h3wh2=1×1h5h6wh5=0.25×1=0.25 ∂ f ( x ; w , b ) ∂ w = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ w = 1 × 0.25 = 0.25 \frac{\partial f(x ; w, b)}{\partial w}=\frac{\partial f(x ; w, b)}{\partial h_{6}} \frac{\partial h_{6}}{\partial w}=1 \times 0.25=0.25 wf(x;w,b)=h6f(x;w,b)wh6=1×0.25=0.25

Q:自动微分的反向模式是怎样?

按计算图中计算方式的相反方向来递归地计算梯度,以 ∂ f ( x ; w , b ) ∂ w \frac{\partial f(x ; w, b)}{\partial w} wf(x;w,b)为例,当 x = 1 , w = 0 , b = 0 x=1,w=0,b=0 x=1,w=0,b=0时,反向模式的累积计算顺序如下: ∂ f ( x ; w , b ) ∂ h 6 = 1 ∂ f ( x ; w , b ) ∂ h 5 = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 = 1 × − 0.25 ∂ f ( x ; w , b ) ∂ h 4 = ∂ f ( x ; w , b ) ∂ h 5 ∂ h 5 ∂ h 4 = − 0.25 × 1 = − 0.25 ⋮ ∂ f ( x ; w , b ) ∂ w = ∂ f ( x ; w , b ) ∂ h 1 ∂ h 1 ∂ w = 0.25 × 1 = 0.25 \begin{aligned} \frac{\partial f(x ; w, b)}{\partial h_{6}}&=1 \\ \frac{\partial f(x ; w, b)}{\partial h_{5}}&= \frac{\partial f(x ; w, b)}{\partial h_{6}} \frac{\partial h_{6}}{\partial h_{5}}=1 \times-0.25 \\ \frac{\partial f(x ; w, b)}{\partial h_{4}}&=\frac{\partial f(x ; w, b)}{\partial h_{5}} \frac{\partial h_{5}}{\partial h_{4}}=-0.25 \times 1=-0.25 \\ \vdots & \\ \frac{\partial f(x ; w, b)}{\partial w}&=\frac{\partial f(x ; w, b)}{\partial h_{1}} \frac{\partial h_{1}}{\partial w}=0.25 \times 1=0.25 \end{aligned} h6f(x;w,b)h5f(x;w,b)h4f(x;w,b)wf(x;w,b)=1=h6f(x;w,b)h5h6=1×0.25=h5f(x;w,b)h4h5=0.25×1=0.25=h1f(x;w,b)wh1=0.25×1=0.25反向模式和反向传播的计算梯度的方向相同对于一般的函数形式 f : R N → R M f: \mathbb{R}^{N} \rightarrow \mathbb{R}^{M} f:RNRM,前向模式需要对每一个输入变量都进行一遍遍历,共需要N遍。而反向模式需要对每一个输出都进行一个遍历,共需要M遍。当N>M时,反向模式更高效。在前馈神经网络的参数学习中,风险函数为 f : R N → R f: \mathbb{R}^{N} \rightarrow \mathbb{R} f:RNR,输出为标量,因此采用反向模式为最有效的计算方式,只需要一遍计算

Q:静态计算图(Static Computational Graph)是什么,优缺点是什么?

在编译时构建计算图,构建好之后在程序运行时不能改变优点:在构建时可以进行优化,并行能力强缺点:灵活性比较差

Q:动态计算图(Dynamic Computational Graph)是什么,优缺点是什么?

在程序运行时动态构建优点:灵活性比较高缺点:不容易优化,当不同输入的网络结构不一致时,难以并行计算

Q:符号微分和自动微分的对比是怎样?

都利用计算图和链式法则来自动求解导数符号微分: 处理对象是数学表达式在编译阶段先构造一个符合函数的计算图,通过符号计算得到导数的表达式,还可以对导数表达式进行优化,在程序运行阶段才代入变量的具体数值来计算导数 自动微分: 处理对象是一个函数或一段程序无须事先编译,在程序运行阶段边计算边记录计算图,计算图上的局部梯度都直接代入数值进行计算,然后用前向或反向模式来计算最终的梯度

4.6 优化问题

Q:神经网络的参数学习比线性模型更困难的两点原因是什么?

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

Q:神经网络的非凸优化问题指的是什么?

以一个最简单的1-1-1结构的两层神经网络为例, y = σ ( w 2 σ ( w 1 x ) ) y=\sigma\left(w_{2} \sigma\left(w_{1} x\right)\right) y=σ(w2σ(w1x))其中 w 1 w_1 w1 w 2 w_2 w2为网络参数, σ ( ⋅ ) \sigma(\cdot) σ()为Logistic函数给定一个输入样本(1,1),分别使用两种损失函数,第一种损失函数为平方误差损失: L ( w 1 , w 2 ) = ( 1 − y ) 2 \mathcal{L}\left(w_{1}, w_{2}\right)=(1-y)^{2} L(w1,w2)=(1y)2,第二种损失函数为交叉熵损失 L ( w 1 , w 2 ) = log ⁡ y \mathcal{L}\left(w_{1}, w_{2}\right)=\log y L(w1,w2)=logy x = 1 , y = 1 x = 1, y = 1 x=1,y=1时,两种损失函数与参数 w 1 w_1 w1 w 2 w_2 w2的关系如图,可知两种损失函数都是关于参数的非凸函数

Q:神经网络的梯度消失问题(Vanishing Gradient Problem)指的是什么?

在神经网络中误差反向传播的迭代公式为 δ ( l ) = f l ′ ( z ( l ) ) ⊙ ( W ( l + 1 ) ) ⊤ δ ( l + 1 ) \delta^{(l)}=f_{l}^{\prime}\left(\mathbf{z}^{(l)}\right) \odot\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \delta^{(l+1)} δ(l)=fl(z(l))(W(l+1))δ(l+1)误差从输出层反向传播时,在每一层都要乘以该层的激活函数的导数当使用Sigmoid型函数:Logistic函数 σ ( x ) \sigma(x) σ(x)或Tanh函数时,其导数为 σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) ∈ [ 0 , 0.25 ] \sigma^{\prime}(x)=\sigma(x)(1-\sigma(x)) \in[0,0.25] σ(x)=σ(x)(1σ(x))[0,0.25] tanh ⁡ ′ ( x ) = 1 − ( tanh ⁡ ( x ) ) 2 ∈ [ 0 , 1 ] \tanh ^{\prime}(x)=1-(\tanh (x))^{2} \in[0,1] tanh(x)=1(tanh(x))2[0,1]Sigmoid型函数的导数值域都小于或等于1由于Sigmoid型函数的饱和性,饱和区的导数更是接近于0。这样,误差经过每一层传递都会不断衰减。当网络层数很深时,梯度就会不停衰减,甚至消失,是的整个网络很难训练,即梯度消失问题或梯度弥散问题比较简单的减轻的方法是使用导数比较大的激活函数如ReLU
最新回复(0)