【AI】深度学习——前馈神经网络——全连接前馈神经网络

文章目录


1.1 全连接前馈神经网络

前馈神经网络(Feedforward Neural Network,FNN)也称为多层感知器(实际上前馈神经网络由多层Logistic回归模型组成)

在这里插入图片描述

前馈神经网络中,各个神经元属于不同的层

每层神经元接收前一层神经元的信号,并输出到下一层

  • 输入层:第0层
  • 输出层:最后一层
  • 隐藏层:其他中间层

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

1.1.1 符号说明

超参数
符号含义
L L L神经网络层数
M l M_l Ml l l l 层神经元个数
f l ( ⋅ ) f_l(\cdot) fl() l l l 层神经元的激活函数
参数
符号含义
W ( l ) ∈ R M l × M l − 1 W^{(l)}\in \R^{M_l\times M_{l-1}} W(l)RMl×Ml1 l − 1 l-1 l1 层到第 l l l 层的权重矩阵
b ( l ) ∈ R M l × M l − 1 b^{(l)}\in \R^{M_l\times M_{l-1}} b(l)RMl×Ml1 l − 1 l-1 l1 层到第 l l l 层的偏置
活性值
符号含义
z ( l ) ∈ R M l z^{(l)}\in\R^{M_l} z(l)RMl l l l 层神经元的净输入(净活性值)
a ( l ) ∈ R M l a^{(l)}\in \R^{M_{l}} a(l)RMl l l l 层神经元的输出(活性值)

1.1.2 信息传播公式

神经网络的第 l l l 层有 M l M_l Ml 个神经元,相应的有 M l M_l Ml 个净输入和活性值,所以二者需要由 R M l \R^{M_l} RMl 向量来表示

l l l 层的输入为第 l − 1 l-1 l1 层的活性值,相应的为 R M l − 1 \R^{M_{l-1}} RMl1 向量,即 z ( l − 1 ) , a ( l − 1 ) ∈ R M l − 1 z^{(l-1)},a^{(l-1)}\in \R^{M_{l-1}} z(l1),a(l1)RMl1

故第 l l l 层神经元的净输入需要经过一个 仿射变换,即
z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) ,其中 W ( l ) ∈ R M l × M l − 1 = W ( l − 1 ) f l − 1 ( z ( l − 1 ) ) + b ( l ) \begin{aligned} z^{(l)}&=W^{(l)}a^{(l-1)}+b^{(l)},其中 W^{(l)}\in \R^{M_l\times M_{l-1}}\\ &=W^{(l-1)}f_{l-1}(z^{(l-1)})+b^{(l)} \end{aligned} z(l)=W(l)a(l1)+b(l),其中W(l)RMl×Ml1=W(l1)fl1(z(l1))+b(l)
活性值 a ( l ) a^{(l)} a(l) 需要经过一个 非线性变换
a ( l ) = f l ( z ( l ) ) = f l ( W ( l ) a ( l − 1 ) + b ( l ) ) \begin{aligned} a^{(l)}&=f_l(z^{(l)})\\ &=f_l(W^{(l)}a^{(l-1)}+b^{(l)}) \end{aligned} a(l)=fl(z(l))=fl(W(l)a(l1)+b(l))
进而可知,由输入到网络最后的输出 a ( L ) a^{(L)} a(L)
x = a ( 0 ) → W 1 z ( 1 ) → f 1 ( ) a ( 1 ) ⋯ → f L − 1 ( ) a ( L − 1 ) → W L z ( L ) → f L ( ) a ( L ) = ϕ ( x ; W ; b ) x=a^{(0)}\xrightarrow{W_1}z^{(1)}\xrightarrow{f_1()}a^{(1)}\cdots\xrightarrow{f_{L-1}()}a^{(L-1)}\xrightarrow{W_{L}}z^{(L)}\xrightarrow{f_L()}a^{(L)}=\phi(x;W;b) x=a(0)W1 z(1)f1() a(1)fL1() a(L1)WL z(L)fL() a(L)=ϕ(x;W;b)
其中 W , b W,b W,b 表示网络中所有层的连接权重和偏置

前馈神经网络可以通过逐层的信息传递,整个网络可以看做一个复合函数 ϕ ( x ; W ; b ) \phi(x;W;b) ϕ(x;W;b)

通用近似定理

在这里插入图片描述

根据通用近似定理,对于具有 线性输出层 z ( l ) z^{(l)} z(l) 和至少一个 具有挤压性质的激活函数 ϕ ( ⋅ ) \phi(\cdot) ϕ() 的隐藏层组成的前馈神经网络,只要隐藏层的神经元数量足够,就可以以任意精度来近似任何一个定义在实数空间中的有界闭函数

1.1.3 神经网络与机器学习结合

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

在机器学习中,输入样本的特征对分类器性能的影响很大

若要获得很好的分类效果,需要将样本的原始特征向量 x x x 转换到更有效的特征向量 ϕ ( x ) \phi(x) ϕ(x) ——特征抽取

多层前馈神经网络恰好可以看做一个非线性函数 ϕ ( ⋅ ) \phi(\cdot) ϕ() ,将输入 x ∈ R D x\in \R^D xRD 映射到输出 ϕ ( x ) ∈ R D ′ \phi(x)\in \R^{D'} ϕ(x)RD ,因此可将多层前馈神经网络看作一种特殊的特征转换方法,其输出 ϕ ( x ) \phi(x) ϕ(x) 作为分类器的输入
y ^ = g ( ϕ ( x ) ; θ ) \hat{y}=g(\phi(x);\theta) y^=g(ϕ(x);θ)

  • g ( ⋅ ) g(\cdot) g() 为线性或非线性分类器
  • θ \theta θ 为分类器 g ( ⋅ ) g(\cdot) g() 的参数
  • y ^ \hat{y} y^ 为分类器输出

若分类器 g ( ⋅ ) g(\cdot) g() L o g i s t i c 回归 Logistic回归 Logistic回归 S o f t m a x 回归 Softmax回归 Softmax回归 ,则相当于在输出层引入分类器,神经网络直接输出在不同类别的条件概率 p ( y ∣ x ) p(y\vert x) p(yx)

二分类问题

对于二分类问题 y ∈ { 0 , 1 } y\in \{0,1\} y{0,1} ,且采用 L o g i s t i c 回归 Logistic回归 Logistic回归 ,那么 L o g i s t i c Logistic Logistic 相当与神经网络的输出层,只需要一个神经元,其激活函数就是 L o g i s t i c 函数 Logistic函数 Logistic函数 ,可直接作为类别 y = 1 y=1 y=1 的条件概率
p ( y = 1 ∣ x ) = a ( L ) ∈ R p(y=1\vert x)=a^{(L)}\in \R p(y=1∣x)=a(L)R

多分类问题

对于多分类问题 y ∈ { 1 , ⋯ , C } y\in \{1,\cdots,C\} y{1,,C} ,如果使用 S o f t m a x 回归 Softmax回归 Softmax回归 ,相当于网络最后一层设置 C C C 个神经元,其激活函数为 S o f t m a x 函数 Softmax函数 Softmax函数 ,网络最后一层的输出可以作为每个类的条件概率
y ^ = s o f t m a x ( z ( l ) ) \hat{y}=softmax(z^{(l)}) y^=softmax(z(l))
其中, z ( L ) ∈ R C z^{(L)}\in \R^C z(L)RC 为第 L L L 层神经元的净输入

y ^ ∈ R C \hat{y}\in\R^C y^RC 为第 L L L 层神经元的活性值,每一维分别表示不同类别标签的预测条件概率

1.1.4 参数学习

如果采用交叉熵损失函数,对于样本 ( x , y ) (x,y) (x,y) ,其损失函数为
L ( y , y ^ ) = − y log ⁡ y ^ , y ∈ { 0 , 1 } C \mathcal{L}(y,\hat{y})=-y\log \hat{y},y\in \{0,1\}^C L(y,y^)=ylogy^,y{0,1}C
给定训练集 D = { ( x i , y i ) } i = 1 N \mathcal{D}=\{(x_i,y_i)\}_{i=1}^N D={(xi,yi)}i=1N ,将每个样本 x i x_i xi 输入给前馈网络得到 y ^ i \hat{y}_i y^i ,其结构化风险函数为
R ( W , b ) = 1 N ∑ i = 1 N L ( y i , y ^ i ) + 1 2 λ ∥ W ∥ F 2 \mathcal{R}(W,b)=\frac{1}{N}\sum\limits_{i=1}^N\mathcal{L}(y_i,\hat{y}_i)+\frac{1}{2}\lambda\Vert W\Vert_F^2 R(W,b)=N1i=1NL(yi,y^i)+21λWF2

  • λ \lambda λ 为超参数, λ \lambda λ 越大, W W W 越接近于0

  • 一般用 F r o b e n i u s Frobenius Frobenius 范数(F范数)作为惩罚项
    ∥ W ∥ F 2 = ∑ l = 1 L ∑ i = 1 M l ∑ j = 1 M l − 1 ( ω i j ( l ) ) 2 \Vert W\Vert_F^2=\sum\limits_{l=1}^L\sum\limits_{i=1}^{M_l}\sum\limits_{j=1}^{M_{l-1}}\left(\omega_{ij}^{(l)}\right)^2 WF2=l=1Li=1Mlj=1Ml1(ωij(l))2

对于网络参数,可以通过梯度下降的方法学习
W ( l ) ← W ( l ) − α ∂ R ( W , b ) ∂ W ( l ) ← W ( l ) − α ( 1 N ∑ i = 1 N ∂ L ( y i , y ^ i ) ∂ W ( l ) + λ W ( l ) ) b ( l ) ← b ( l ) − α ∂ R ( W , b ) ∂ b ( l ) ← b ( l ) − α ( 1 N ∑ i = 1 N ∂ L ( y i , y ^ i ) ∂ b ( l ) ) \begin{aligned} W^{(l)}&\leftarrow W^{(l)}-\alpha\frac{\partial \mathcal{R}(W,b)}{\partial W^{(l)}}\\ &\leftarrow W^{(l)}-\alpha\left(\frac{1}{N}\sum\limits_{i=1}^N\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}}+\lambda W^{(l)}\right)\\ b^{(l)}&\leftarrow b^{(l)}-\alpha\frac{\partial \mathcal{R}(W,b)}{\partial b^{(l)}}\\ &\leftarrow b^{(l)}-\alpha\left(\frac{1}{N}\sum\limits_{i=1}^N\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial b^{(l)}}\right) \end{aligned} W(l)b(l)W(l)αW(l)R(W,b)W(l)α(N1i=1NW(l)L(yi,y^i)+λW(l))b(l)αb(l)R(W,b)b(l)α(N1i=1Nb(l)L(yi,y^i))

矩阵求导

根据求导的自变量和因变量是标量, 列向量 列向量 列向量 还是矩阵 ,我们有9种可能的矩阵求导定义:

在这里插入图片描述

含标量情况:

  1. ∂ 标量 ∂ 标量 = 标量 \frac{\partial 标量}{\partial 标量}=标量 标量标量=标量
  2. ∂ 标量 ∂ 向量 = 向量 \frac{\partial 标量}{\partial 向量}=向量 向量标量=向量 ∂ 标量 ∂ 矩阵 = 矩阵 \frac{\partial 标量}{\partial 矩阵}=矩阵 矩阵标量=矩阵
  3. ∂ 向量 ∂ 标量 = 向量 \frac{\partial 向量}{\partial 标量}=向量 标量向量=向量 ∂ 矩阵 ∂ 标量 = 矩阵 \frac{\partial 矩阵}{\partial 标量}=矩阵 标量矩阵=矩阵

标量情况,第2种和第3种情况,引出信息的两种布局方式

  • 分子布局:结果的行维度与分子行维度相同
  • 分母布局:结果的行维度与分母行维度相同

不论是向量也好,矩阵也好,对向量求导也好,对矩阵求导也好,结果都可以转化成标量之间的求导,最后把结果按照一定的方式拼接起来,以向量或者矩阵的形式表达出来。

在这里插入图片描述

分子布局和分母布局的结果相差一个转置

在机器学习的算法推导中,通常遵循以下布局规则:

  • 如果向量或矩阵对标量求导,则以分子布局为主
  • 如果标量对向量或矩阵求导,则以分母布局为主
  • 向量对向量求导,有些分歧,一般以分子布局的雅克比矩阵为主。

本文沿用nndl的思路,以分母布局为主

x ( i ) ∈ R x^{(i)}\in \R x(i)R ,向量 x = [ x ( 1 ) x ( 2 ) ⋮ x ( M ) ] ∈ R M × 1 x=\left[\begin{matrix}x^{(1)}\\x^{(2)}\\\vdots\\x^{(M)}\end{matrix}\right]\in \R^{M\times 1} x= x(1)x(2)x(M) RM×1

  • y = g ( x ) ∈ R 1 × 1 y=g(x)\in\R^{1\times 1} y=g(x)R1×1 ,则
    ∂ y ∂ x = [ ∂ y ∂ x ( 1 ) ∂ y ∂ x ( 2 ) ⋮ ∂ y ∂ x ( M ) ] ∈ R M × 1 \frac{\partial y}{\partial x}=\left[\begin{matrix} \frac{\partial y}{\partial x^{(1)}}\\ \frac{\partial y}{\partial x^{(2)}}\\ \vdots\\ \frac{\partial y}{\partial x^{(M)}} \end{matrix} \right]\in \R^{M\times 1} xy= x(1)yx(2)yx(M)y RM×1

  • y i = g i ( x ) y_i=g_i(x) yi=gi(x) y = [ y 1 y 2 ⋮ y N ] ∈ R N × 1 y=\left[\begin{matrix}y_1\\y_2\\\vdots\\y_N\end{matrix}\right]\in \R^{N\times 1} y= y1y2yN RN×1 ,则
    ∂ y ∂ x = [ ∂ y 1 ∂ x , ∂ y 2 ∂ x , ⋯ , ∂ y N ∂ x ] = [ ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y N ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y N ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x M ∂ y 2 ∂ x M ⋯ ∂ y N ∂ x M ] ∈ R M × N \frac{\partial y}{\partial x}=\left[ \begin{matrix} \frac{\partial y_1}{\partial x},\frac{\partial y_2}{\partial x},\cdots,\frac{\partial y_N}{\partial x} \end{matrix} \right]=\left[ \begin{matrix} \frac{\partial y_1}{\partial x_1}&\frac{\partial y_2}{\partial x_1}&\cdots&\frac{\partial y_N}{\partial x_1}\\ \frac{\partial y_1}{\partial x_2}&\frac{\partial y_2}{\partial x_2}&\cdots&\frac{\partial y_N}{\partial x_2}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial y_1}{\partial x_M}&\frac{\partial y_2}{\partial x_M}&\cdots&\frac{\partial y_N}{\partial x_M}\\ \end{matrix} \right]\in \R^{M\times N} xy=[xy1,xy2,,xyN]= x1y1x2y1xMy1x1y2x2y2xMy2x1yNx2yNxMyN RM×N

链式法则

y = f 5 ( f 4 ( f 3 ( f 2 ( f 1 ( x ) ) ) ) ) → ∂ y ∂ x = ∂ f 5 ∂ f 4 ∂ f 4 ∂ f 3 ∂ f 3 ∂ f 2 ∂ f 2 ∂ f 1 ∂ f 1 ∂ x y=f_5(f_4(f_3(f_2(f_1(x)))))\rightarrow \frac{\partial y}{\partial x}=\frac{\partial f_5}{\partial f_4}\frac{\partial f_4}{\partial f_3}\frac{\partial f_3}{\partial f_2}\frac{\partial f_2}{\partial f_1}\frac{\partial f_1}{\partial x} y=f5(f4(f3(f2(f1(x)))))xy=f4f5f3f4f2f3f1f2xf1


x ∈ R x\in \R xR
{ y i = g i ( x ) y = [ g 1 ( x ) , g 2 ( x ) , ⋯ , g M ( x ) ] ∈ R M z i = f i ( y ) z = [ f 1 ( y ) , f 2 ( y ) , ⋯ , f N ( y ) ] ∈ R N \begin{cases} y_i=g_i(x)&y=[g_1(x),g_2(x),\cdots,g_M(x)]\in \R^{M}\\ z_i=f_i(y)&z=\left[f_1(y),f_2(y),\cdots,f_N(y)\right]\in \R^{N} \end{cases} {yi=gi(x)zi=fi(y)y=[g1(x),g2(x),,gM(x)]RMz=[f1(y),f2(y),,fN(y)]RN
则有
∂ z ∂ x = ∂ y ∂ x 1 × M ∂ z ∂ y M × N ∈ R 1 × N \frac{\partial z}{\partial x}=\frac{\partial y}{\partial x}_{1\times M}\frac{\partial z}{\partial y}_{M\times N}\in\R^{1\times N} xz=xy1×MyzM×NR1×N


x ∈ R M x\in \R^{M} xRM
{ y i = g i ( x ) y = [ g 1 ( x ) , g 2 ( x ) , ⋯ , g K ( x ) ] ∈ R K z i = f i ( y ) z = [ f 1 ( y ) , f 2 ( y ) , ⋯ , f N ( y ) ] ∈ R N \begin{cases} y_i=g_i(x)&y=[g_1(x),g_2(x),\cdots,g_K(x)]\in \R^{K}\\ z_i=f_i(y)&z=\left[f_1(y),f_2(y),\cdots,f_N(y)\right]\in \R^{N} \end{cases} {yi=gi(x)zi=fi(y)y=[g1(x),g2(x),,gK(x)]RKz=[f1(y),f2(y),,fN(y)]RN
则有
∂ z ∂ x = ∂ y ∂ x M × K ∂ z ∂ y K × N ∈ R M × N \frac{\partial z}{\partial x}=\frac{\partial y}{\partial x}_{M\times K}\frac{\partial z}{\partial y}_{K\times N}\in \R^{M\times N} xz=xyM×KyzK×NRM×N


X ∈ R M × N X\in R^{M\times N} XRM×N
{ y i = g i ( X ) y = [ g 1 ( X ) , g 2 ( X ) , ⋯ , g K ( X ) ] ∈ R K z i = f ( y ) ∈ R \begin{cases} y_i=g_i(X)&y=[g_1(X),g_2(X),\cdots,g_K(X)]\in \R^{K}\\ z_i=f(y)\in \R \end{cases} {yi=gi(X)zi=f(y)Ry=[g1(X),g2(X),,gK(X)]RK
则有
∂ z ∂ x i j = ∂ y ∂ x i j 1 × K ∂ z ∂ y K × 1 ∈ R \frac{\partial z}{\partial x_{ij}}=\frac{\partial y}{\partial x_{ij}}_{1\times K}\frac{\partial z}{\partial y}_{K\times 1}\in \R xijz=xijy1×KyzK×1R

更为高效的参数学习

梯度下降法需要计算损失函数对参数的偏导数,如果通过链式法则逐一对每个参数求偏导,会很低效

  • 反向传播算法
  • 自动梯度计算
反向传播算法
目标

求解
W ( l ) ← W ( l ) − α ∂ R ( W , b ) ∂ W ( l ) ← W ( l ) − α ( 1 N ∑ i = 1 N ∂ L ( y i , y ^ i ) ∂ W ( l ) + λ W ( l ) ) b ( l ) ← b ( l ) − α ∂ R ( W , b ) ∂ b ( l ) ← b ( l ) − α ( 1 N ∑ i = 1 N ∂ L ( y i , y ^ i ) ∂ b ( l ) ) \begin{aligned} W^{(l)}&\leftarrow W^{(l)}-\alpha\frac{\partial \mathcal{R}(W,b)}{\partial W^{(l)}}\\ &\leftarrow W^{(l)}-\alpha\left(\frac{1}{N}\sum\limits_{i=1}^N\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}}+\lambda W^{(l)}\right)\\ b^{(l)}&\leftarrow b^{(l)}-\alpha\frac{\partial \mathcal{R}(W,b)}{\partial b^{(l)}}\\ &\leftarrow b^{(l)}-\alpha\left(\frac{1}{N}\sum\limits_{i=1}^N\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial b^{(l)}}\right) \end{aligned} W(l)b(l)W(l)αW(l)R(W,b)W(l)α(N1i=1NW(l)L(yi,y^i)+λW(l))b(l)αb(l)R(W,b)b(l)α(N1i=1Nb(l)L(yi,y^i))
可见参数求解的核心部分为 ∂ L ( y i , y ^ i ) ∂ W ( l ) \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}} W(l)L(yi,y^i) ,对于矩阵求导,可以对逐个元素求导,再排列为矩阵形式,根据链式法则
∂ L ( y i , y ^ i ) ∂ w i j ( l ) = ∂ z ( l ) ∂ w i j ( l ) ∂ L ( y i , y ^ i ) ∂ z ( l ) ∂ L ( y i , y ^ i ) ∂ b ( l ) = ∂ z ( l ) ∂ b ( l ) ∂ L ( y i , y ^ i ) ∂ z ( l ) \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial w_{ij}^{(l)}}=\frac{\partial z^{(l)}}{\partial w^{(l)}_{ij}}\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z^{(l)}}\\ \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial b^{(l)}}=\frac{\partial z^{(l)}}{\partial b^{(l)}}\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z^{(l)}} wij(l)L(yi,y^i)=wij(l)z(l)z(l)L(yi,y^i)b(l)L(yi,y^i)=b(l)z(l)z(l)L(yi,y^i)

计算 ∂ z ( l ) ∂ w i j ( l ) \frac{\partial z^{(l)}}{\partial w^{(l)}_{ij}} wij(l)z(l)

z M l × 1 ( l ) = W M l × M l − 1 ( l ) a M l − 1 × 1 ( l − 1 ) + b M l ( l ) z^{(l)}_{M_l\times 1}=W^{(l)}_{M_{l}\times M_{l-1}}a^{(l-1)}_{M_{l-1}\times 1}+b^{(l)}_{M_{l}} zMl×1(l)=WMl×Ml1(l)aMl1×1(l1)+bMl(l)

在这里插入图片描述

  • 分母布局,故需要将 z ( l ) z^{(l)} z(l) 转置求偏导,第 i i i 个元素为 a j ( l − 1 ) a_j^{(l-1)} aj(l1)
计算 ∂ z ( l ) ∂ b ( l ) \frac{\partial z^{(l)}}{\partial b^{(l)}} b(l)z(l)

在这里插入图片描述

计算 ∂ L ( y i , y ^ i ) ∂ z ( l ) \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z^{(l)}} z(l)L(yi,y^i)

计算误差项 ∂ L ( y i , y ^ i ) ∂ z ( l ) \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z^{(l)}} z(l)L(yi,y^i) 表示第 l l l 层神经元对最终损失的影响,也反映了最终损失对第 l l l 层神经元的敏感程度,不同神经元对网络能力的贡献程度,从而比较好地解决了贡献度分配问题
δ ( l ) = Δ ∂ L ( y i , y ^ i ) ∂ z ( l ) = [ ∂ L ( y i , y ^ i ) ∂ z 1 ( l ) ∂ L ( y i , y ^ i ) ∂ z 2 ( l ) ⋮ ∂ L ( y i , y ^ i ) ∂ z M l ( l ) ] = Δ [ δ 1 ( l ) δ 2 ( l ) ⋮ δ M l ( l ) ] ∈ R M l × 1 \delta^{(l)}\overset{\Delta}{=}\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z^{(l)}}=\left[ \begin{matrix} \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z_1^{(l)}}\\ \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z_2^{(l)}}\\ \vdots\\ \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial z_{M_l}^{(l)}} \end{matrix} \right]\overset{\Delta}{=}\left[ \begin{matrix} \delta_1^{(l)}\\ \delta_2^{(l)}\\ \vdots\\ \delta_{M_l}^{(l)} \end{matrix} \right]\in \R^{M_l\times 1} δ(l)=Δz(l)L(yi,y^i)= z1(l)L(yi,y^i)z2(l)L(yi,y^i)zMl(l)L(yi,y^i) =Δ δ1(l)δ2(l)δMl(l) RMl×1


在这里插入图片描述

  • z ( l + 1 ) ∈ R M l + 1 z^{(l+1)}\in \R^{M_{l+1}} z(l+1)RMl+1​ , a ( l ) ∈ R M l a^{(l)}\in \R^{M_l} a(l)RMl​ ,所以
    z ( l + 1 ) a ( l ) = 分母布局 [ w 11 w 21 ⋯ w M l + 1 1 w 12 w 22 ⋯ w M l + 1 2 ⋮ ⋮ ⋱ ⋮ w 1 M l w 2 M l ⋯ w M l + 1 M l ] ∈ R M l × M l + 1 \frac{z^{(l+1)}}{a^{(l)}}\xlongequal{分母布局}\left[ \begin{matrix} w_{11}&w_{21}&\cdots &w_{M_{l+1}1}\\ w_{12}&w_{22}&\cdots &w_{M_{l+1}2}\\ \vdots&\vdots&\ddots&\vdots\\ w_{1M_l}&w_{2M_l}&\cdots &w_{M_{l+1}M_l}\\ \end{matrix} \right]\in \R^{M_l\times M_{l+1}} a(l)z(l+1)分母布局 w11w12w1Mlw21w22w2MlwMl+11wMl+12wMl+1Ml RMl×Ml+1

根据 a ( l ) = f l ( z ( l ) ) = ( f l ( z 1 ( l ) ) f l ( z 2 ( l ) ) ⋮ f l ( z M l ( l ) ) ) a^{(l)}=f_l(z^{(l)})=\left(\begin{matrix}f_l(z_1^{(l)})\\f_l(z_2^{(l)})\\\vdots\\f_l(z_{M_l}^{(l)})\\\end{matrix}\right) a(l)=fl(z(l))= fl(z1(l))fl(z2(l))fl(zMl(l)) z ( l ) = ( z 1 ( l ) z 2 ( l ) ⋮ z M l ( l ) ) z^{(l)}=\left(\begin{matrix}z_1^{(l)}\\z^{(l)}_2\\\vdots\\z_{M_l}^{(l)}\end{matrix}\right) z(l)= z1(l)z2(l)zMl(l) ,分母布局
∂ a ( l ) ∂ z ( l ) = ∂ f l ( z ( l ) ) ∂ z ( l ) = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) ∂ f l ( z 2 ( l ) ) ∂ z 1 ( l ) ⋯ ∂ f l ( z M l ( l ) ) ∂ z 1 ( l ) ∂ f l ( z 1 ( l ) ) ∂ z 2 ( l ) ∂ f l ( z 2 ( l ) ) ∂ z 2 ( l ) ⋯ ∂ f l ( z M l ( l ) ) ∂ z 2 ( l ) ⋮ ⋮ ⋱ ⋮ ∂ f l ( z 1 ( l ) ) ∂ z M l ∂ f l ( z 2 ( l ) ) ∂ z M l ( l ) ⋯ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ] = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) 0 ⋯ 0 0 ∂ f l ( z 2 ( l ) ) ∂ z 2 ( l ) ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ] = d i a g ( ∂ f l ( z i ( l ) ) ∂ z i ( l ) ) ∈ R M l × M l , i = 1 , ⋯ , M l \begin{aligned} \frac{\partial a^{(l)}}{\partial z^{(l)}}&=\frac{\partial f_l(z^{(l)})}{\partial z^{(l)}}\\ &=\left[ \begin{matrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}&\frac{\partial f_l(z_2^{(l)})}{\partial z_1^{(l)}}&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{1}^{(l)}}\\ \frac{\partial f_l(z_1^{(l)})}{\partial z_2^{(l)}}&\frac{\partial f_l(z_2^{(l)})}{\partial z_2^{(l)}}&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{2}^{(l)}}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial f_l(z_1^{(l)})}{\partial z_{M_l}}&\frac{\partial f_l(z_2^{(l)})}{\partial z_{M_l}^{(l)}}&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}}\\ \end{matrix} \right]=\left[ \begin{matrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}&0&\cdots&0\\ 0&\frac{\partial f_l(z_2^{(l)})}{\partial z_2^{(l)}}&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}}\\ \end{matrix} \right]\\ &=diag \left(\frac{\partial f_l(z^{(l)}_i)}{\partial z_i^{(l)}}\right)\in \R^{M_l\times M_l},i=1,\cdots,M_l \end{aligned} z(l)a(l)=z(l)fl(z(l))= z1(l)fl(z1(l))z2(l)fl(z1(l))zMlfl(z1(l))z1(l)fl(z2(l))z2(l)fl(z2(l))zMl(l)fl(z2(l))z1(l)fl(zMl(l))z2(l)fl(zMl(l))zMl(l)fl(zMl(l)) = z1(l)fl(z1(l))000z2(l)fl(z2(l))000zMl(l)fl(zMl(l)) =diag(zi(l)fl(zi(l)))RMl×Ml,i=1,,Ml


在这里插入图片描述

[ W ( l + 1 ) ] T ⋅ δ ( l + 1 ) = [ w 11 w 21 ⋯ w M l + 1 1 w 12 w 22 ⋯ w M l + 1 2 ⋮ ⋮ ⋱ ⋮ w 1 M l w 2 M l ⋯ w M l + 1 M l ] [ δ 1 ( l + 1 ) δ 2 ( l + 1 ) ⋮ δ M l + 1 ( l + 1 ) ] = [ ∑ t = 1 M l + 1 w t 1 δ t ( l + 1 ) ∑ t = 1 M l + 1 w t 2 δ t ( l + 1 ) ⋮ ∑ t = 1 M l + 1 w t M l + 1 δ t ( l + 1 ) ] ∈ R M l d i a g ( ∂ f l ( z i ( l ) ) ∂ z i ( l ) ) [ W ( l + 1 ) ] T ⋅ δ ( l + 1 ) = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) 0 ⋯ 0 0 ∂ f l ( z 2 ( l ) ) ∂ z 2 ( l ) ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ] [ ∑ t = 1 M l + 1 w t 1 δ t ( l + 1 ) ∑ t = 1 M l + 1 w t 2 δ t ( l + 1 ) ⋮ ∑ t = 1 M l + 1 w t M l + 1 δ t ( l + 1 ) ] = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) ∑ t = 1 M l + 1 w t 1 δ t ( l + 1 ) ⋮ ∂ f l ( z i ( l ) ) ∂ z i ( l ) ∑ t = 1 M l + 1 w t i δ t ( l + 1 ) ⋮ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ∑ t = 1 M l + 1 w t M l δ t ( l + 1 ) ] = Δ [ δ 1 ( l ) ⋮ δ i ( l ) ⋮ δ M l ( l ) ] \begin{aligned} \left[W^{(l+1)}\right]^T\cdot \delta^{(l+1)}&=\left[ \begin{matrix} w_{11}&w_{21}&\cdots &w_{M_{l+1}1}\\ w_{12}&w_{22}&\cdots &w_{M_{l+1}2}\\ \vdots&\vdots&\ddots&\vdots\\ w_{1M_l}&w_{2M_l}&\cdots &w_{M_{l+1}M_l}\\ \end{matrix} \right]\left[ \begin{matrix} \delta_1^{(l+1)}\\ \delta_2^{(l+1)}\\ \vdots\\ \delta_{M_{l+1}}^{(l+1)} \end{matrix} \right]\\ &=\left[ \begin{matrix} \sum\limits_{t=1}^{M_{l+1}}w_{t1}\delta_t^{(l+1)}\\ \sum\limits_{t=1}^{M_{l+1}}w_{t2}\delta_t^{(l+1)}\\ \vdots\\ \sum\limits_{t=1}^{M_{l+1}}w_{tM_{l+1}}\delta_t^{(l+1)}\\ \end{matrix} \right]\in\R^{M_l}\\ diag \left(\frac{\partial f_l(z^{(l)}_i)}{\partial z_i^{(l)}}\right)\left[W^{(l+1)}\right]^T\cdot \delta^{(l+1)}&=\left[ \begin{matrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}&0&\cdots&0\\ 0&\frac{\partial f_l(z_2^{(l)})}{\partial z_2^{(l)}}&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}}\\ \end{matrix} \right]\left[ \begin{matrix} \sum\limits_{t=1}^{M_{l+1}}w_{t1}\delta_t^{(l+1)}\\ \sum\limits_{t=1}^{M_{l+1}}w_{t2}\delta_t^{(l+1)}\\ \vdots\\ \sum\limits_{t=1}^{M_{l+1}}w_{tM_{l+1}}\delta_t^{(l+1)}\\ \end{matrix} \right]\\ &=\left[\begin{matrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{t1}\delta_t^{(l+1)}\\ \vdots\\ \frac{\partial f_l(z_i^{(l)})}{\partial z_i^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{ti}\delta_t^{(l+1)}\\ \vdots\\ \frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{tM_{l}}\delta_t^{(l+1)} \end{matrix} \right]\overset{\Delta}{=}\left[\begin{matrix} \delta^{(l)}_1\\ \vdots\\ \delta^{(l)}_i\\ \vdots\\ \delta^{(l)}_{M_l}\\ \end{matrix} \right] \end{aligned} [W(l+1)]Tδ(l+1)diag(zi(l)fl(zi(l)))[W(l+1)]Tδ(l+1)= w11w12w1Mlw21w22w2MlwMl+11wMl+12wMl+1Ml δ1(l+1)δ2(l+1)δMl+1(l+1) = t=1Ml+1wt1δt(l+1)t=1Ml+1wt2δt(l+1)t=1Ml+1wtMl+1δt(l+1) RMl= z1(l)fl(z1(l))000z2(l)fl(z2(l))000zMl(l)fl(zMl(l)) t=1Ml+1wt1δt(l+1)t=1Ml+1wt2δt(l+1)t=1Ml+1wtMl+1δt(l+1) = z1(l)fl(z1(l))t=1Ml+1wt1δt(l+1)zi(l)fl(zi(l))t=1Ml+1wtiδt(l+1)zMl(l)fl(zMl(l))t=1Ml+1wtMlδt(l+1) =Δ δ1(l)δi(l)δMl(l)

合并求梯度

在这里插入图片描述

∂ L ( y i , y ^ i ) ∂ w i j ( l ) = [ 0 , ⋯ , a j ( l − 1 ) , ⋯ 0 ] [ δ 1 ( l ) ⋮ δ i ( l ) ⋮ δ M l ( l ) ] = a j ( l − 1 ) δ i ( l ) = a j ( l − 1 ) ∂ f l ( z i ( l ) ) ∂ z i ( l ) ∑ t = 1 M l + 1 w t i δ t ( l + 1 ) ⟺ [ δ ( l ) ⋅ a ( l − 1 ) ] i j 即 [ ∂ L ( y i , y ^ i ) ∂ W ( l ) ] i j = [ δ ( l ) ⋅ a ( l − 1 ) ] i j \begin{aligned} \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial w_{ij}^{(l)}}&=\left[0,\cdots,a_j^{(l-1)},\cdots 0\right]\left[\begin{matrix} \delta^{(l)}_1\\ \vdots\\ \delta^{(l)}_i\\ \vdots\\ \delta^{(l)}_{M_l}\\ \end{matrix} \right]\\ &=a_j^{(l-1)}\delta^{(l)}_i=a^{(l-1)}_j\frac{\partial f_l(z_i^{(l)})}{\partial z_i^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{ti}\delta_t^{(l+1)}\\ &\iff \left[\delta^{(l)}\cdot a^{(l-1)}\right]_{ij}\\ 即\left[\frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}}\right]_{ij}&=\left[\delta^{(l)}\cdot a^{(l-1)}\right]_{ij} \end{aligned} wij(l)L(yi,y^i)[W(l)L(yi,y^i)]ij=[0,,aj(l1),0] δ1(l)δi(l)δMl(l) =aj(l1)δi(l)=aj(l1)zi(l)fl(zi(l))t=1Ml+1wtiδt(l+1)[δ(l)a(l1)]ij=[δ(l)a(l1)]ij
故梯度 ∂ L ( y i , y ^ i ) ∂ W ( l ) \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}} W(l)L(yi,y^i) 关于第 l l l 层权重 W ( l ) W^{(l)} W(l) 的梯度为
∂ L ( y i , y ^ i ) ∂ W ( l ) = δ ( l ) ⋅ a ( l − 1 ) ∈ R M l × M l − 1 \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial W^{(l)}}=\delta^{(l)}\cdot a^{(l-1)}\in \R^{M_l\times M_{l-1}} W(l)L(yi,y^i)=δ(l)a(l1)RMl×Ml1
同理, L ( y , y ^ ) \mathcal{L}(y,\hat{y}) L(y,y^) 关于第 l l l 层偏置 b ( l ) b^{(l)} b(l) 的梯度为
∂ L ( y i , y ^ i ) ∂ b ( l ) = δ ( l ) ∈ R M l \frac{\partial \mathcal{L}(y_i,\hat{y}_i)}{\partial b^{(l)}}=\delta^{(l)}\in \R^{M_l} b(l)L(yi,y^i)=δ(l)RMl
其中
δ ( l ) = [ ∂ f l ( z 1 ( l ) ) ∂ z 1 ( l ) ∑ t = 1 M l + 1 w t 1 δ t ( l + 1 ) ⋮ ∂ f l ( z i ( l ) ) ∂ z i ( l ) ∑ t = 1 M l + 1 w t i δ t ( l + 1 ) ⋮ ∂ f l ( z M l ( l ) ) ∂ z M l ( l ) ∑ t = 1 M l + 1 w t M l δ t ( l + 1 ) ] = f l ′ ( z ( l ) ) ⊙ [ ( W ( l + 1 ) ) T δ ( l + 1 ) ] \delta^{(l)}=\left[\begin{matrix} \frac{\partial f_l(z_1^{(l)})}{\partial z_1^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{t1}\delta_t^{(l+1)}\\ \vdots\\ \frac{\partial f_l(z_i^{(l)})}{\partial z_i^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{ti}\delta_t^{(l+1)}\\ \vdots\\ \frac{\partial f_l(z_{M_l}^{(l)})}{\partial z_{M_l}^{(l)}}\sum\limits_{t=1}^{M_{l+1}}w_{tM_{l}}\delta_t^{(l+1)} \end{matrix} \right]=f'_l(z^{(l)})\odot \left[\left(W^{(l+1)}\right)^T\delta^{(l+1)}\right] δ(l)= z1(l)fl(z1(l))t=1Ml+1wt1δt(l+1)zi(l)fl(zi(l))t=1Ml+1wtiδt(l+1)zMl(l)fl(zMl(l))t=1Ml+1wtMlδt(l+1) =fl(z(l))[(W(l+1))Tδ(l+1)]

误差的反向传播

l l l 层的误差项可以通过第 l + 1 l+1 l+1 层的误差项计算得到,这就是 误差的反向传播

l l l 层的一个神经元的误差项是与该神经元相连的第 l + 1 l+1 l+1 层的神经元的误差项的权重和,然后,再乘上该神经元激活函数的梯度。

算法过程

在计算出每一层的误差项后,就可以求得本层的梯度,可以用随机梯度下降法来训练前馈神经网络

  1. 前馈计算每一层的净输入 z ( l ) z^{(l)} z(l) 和净激活值 a ( l ) a^{(l)} a(l) ,直至最后一层
  2. 反向传播计算每一层的误差项 δ ( l ) \delta^{(l)} δ(l)
  3. 计算每一层的偏导数,并更新参数

在这里插入图片描述

自动梯度计算

神经网络的参数主要通过梯度下降来优化,需要手动用链式求导来计算风险函数对每个参数的梯度,并转换为计算机程序。

  • 手动计算并转换为计算机程序的过程容易出错

目前,主流的深度学习框架都包含了自动梯度计算功能,只需要考虑网络结构并用代码实现,大大提高了开发效率

数值微分

用数值方法计算函数 f ( x ) f(x) f(x) 的导数
f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f'(x)=\lim\limits_{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} f(x)=Δx0limΔxf(x+Δx)f(x)

  1. 找到一个合适的 Δ x \Delta x Δx 十分困难

    • Δ x \Delta x Δx 过小,会引起数值计算问题,舍入误差
    • Δ x \Delta x Δx 过大,会增加截断误差(受模型影响的理论值与数值解之间的误差)

    在实际应用中,经常使用以下公式计算梯度,减少截断误差
    f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x + Δ x ) 2 Δ x f'(x)=\lim\limits_{\Delta x\rightarrow 0} \frac{f(x+\Delta x)-f(x+\Delta x)}{2\Delta x} f(x)=Δx0limxf(x+Δx)f(x+Δx)

  2. 数值微分另一个问题是计算复杂度

    假设参数数量为 N N N ,则每个参数都需要单独施加扰动,并计算梯度。假设每次正向传播的计算复杂度为 O ( N ) O(N) O(N) ,则计算数值微分的总体时间复杂度为 O ( N 2 ) O(N^2) O(N2)

符号微分

符号计算一般来讲是对输入的表达式,用计算机来通过迭代或递归使用一些事先定义的规则进行转换.当转换结果不能再继续使用变换规则时,便停止计算.

  • 一般包括对数学表达式的化简、因式分解、微分、积分、解代数方程、求解常微分方程等运算

符号微分可以在编译时就计算梯度的数学表示,并进一步利用符号计算方法进行优化

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

缺点:

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

符号微分:处理数学表达式

自动微分:处理一个函数或一段程序

基本原理:所欲偶的数值计算可以分解为一些基本操作,包含+, −, ×, / 和一些初等函数exp, log, sin, cos 等,然后利用链式法则来自动计算一个复合函数的梯度

f ( x ; w , b ) = 1 e x p ( − ( w x + b ) ) + 1 f(x;w,b)=\frac{1}{exp(-(wx+b))+1} f(x;w,b)=exp((wx+b))+11 为例,其中 x x x 为输入标量, w , b w,b w,b 为权重和偏置

计算图

在这里插入图片描述

在这里插入图片描述

复合函数关于参数的导数可以通过计算图路径上节点的所有导数连乘法得到

在这里插入图片描述

  • 在这里插入图片描述

如果函数与参数之间有多条路径,则将这些路径上的导数相加,可以得到最终的梯度


根据计算导数的顺序,自动微分可以分为:前向模式和反向模式

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

    在这里插入图片描述

  • 反向模式:按照计算图中与参数计算方向相反的方向来计算梯度

    在这里插入图片描述

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

准则:

当输入变量的数量大于输出变量的数量,用反向模式

  • 前向模式需要对每一个输入都进行遍历

  • 反向模式需要对每一个输出都进行遍历

在前馈神经网络中,风险函数为 f : R N → R f:\R^{N}\rightarrow \R f:RNR 输出为标量,采用反向模式,内存占用小,只需要计算一遍


静态计算图和动态计算图

静态计算图:在编译时构建计算图,运行过程中不可修改

  • 在构建时可以进行优化,并行能力强
  • 灵活性差

动态计算图:在程序运行时构建计算图

  • 不容易优化,输入不同结构的网络,难以并行计算
  • 灵活性高
自动微分与符号微分区别

在这里插入图片描述

符号微分和自动微分都用计算图和链式法则自动求导

符号微分:

  1. 符号微分在编译阶段先构造一个符合函数的计算图,通过符号计算得到导数表达式,并对表达式进行优化
  2. 在程序运行运行阶段才代入变量数值计算导数

自动微分:

  1. 无需事先编译,程序运行阶段,边计算边记录计算图
  2. 计算图上的局部梯度都直接代入数值进行计算,然后用前向或反向模式计算最终梯度
优化问题

神经网络的参数学习比线性模型更加困难

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

神经网络的优化问题是一个非凸优化问题
y = σ ( w 2 σ ( w 1 x ) ) y=\sigma(w_2\sigma(w_1x)) y=σ(w2σ(w1x))
在这里插入图片描述

梯度消失问题

在神经网络中,误差反向传播的迭代公式为
δ ( l ) = f l ′ ( z ( l ) ) ⊙ [ ( W ( l + 1 ) ) T δ ( l + 1 ) ] \delta^{(l)}=f'_l(z^{(l)})\odot \left[\left(W^{(l+1)}\right)^T\delta^{(l+1)}\right] δ(l)=fl(z(l))[(W(l+1))Tδ(l+1)]
误差在反向传播时,在每一层都要乘以该层激活函数的导数

在这里插入图片描述

S S S 型激活函数的导数值域都 ≤ 1 \le 1 1

在这里插入图片描述

在饱和区导数接近于0,这样误差经过每一层传递会不断衰减,当网络层数很深时,梯度就会不断衰减, 甚至消失,这就是梯度消失问题

  • 可以采用导数比较大的激活函数,ReLU函数

1.1.5 全连接的前馈神经网络问题

参数太多

应用于图像处理领域,如果输入图像的像素为 100 × 100 × 3 100\times 100\times 3 100×100×3 ,在全连接网络中,第一层隐藏层的每个神经元到输入层都有 100 × 100 × 3 = 30000 100\times 100\times3=30000 100×100×3=30000 个互相独立的连接,相应的有 30000 30000 30000 个权重参数,随着隐藏层的神经元数量增多,参数的规模也会急剧增加

局部不变性

自然图像中的问题有局部不变形,比如尺寸缩放、平移、旋转等操作不影响语义特征,但全连接的前馈神经网络很难提取这些局部不变的特征——数据增强

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端预览、下载二进制文件流(png、pdf)

前端请求设置 responseType: “blob” 后台接口返回的文件流如下&#xff1a; 拿到后端返回的文件流后&#xff1a; 预览 <iframe :src"previewUrl" frameborder"0" style"width: 500px; height: 500px;"></iframe>1、预览 v…

理解http中cookie!C/C++实现网络的HTTP cookie

HTTP嗅探&#xff08;HTTP Sniffing&#xff09;是一种网络监控技术&#xff0c;通过截获并分析网络上传输的HTTP数据包来获取敏感信息或进行攻击。其中&#xff0c;嗅探器&#xff08;Sniffer&#xff09;是一种用于嗅探HTTP流量的工具。 在HTTP嗅探中&#xff0c;cookie是一…

【Redis】Redis性能优化:理解与使用Redis Pipeline

原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 Pipeline介绍原生批命令(MSET, MGET) VS PipelinePipeline的优缺点一些疑问Pipeline代码实现 当我们谈论Redis数据处理和存储的优化方法时&#xff0c;「 Redis Pipeline」无疑是一个不能忽视的重要技术。…

Transformer预测 | Pytorch实现基于Transformer的时间序列预测(含单步与多步实验)

文章目录 效果一览文章概述模型描述程序设计单步实验多步实验参考资料效果一览 文章概述 Transformer预测 | Pytorch实现基于Transformer的时间序列预测(含单步与多步实验) Transformer-singlestep.py 包含单步预测模型 Transformer-multistep.py 包含多步预测模型 这是单步预…

基于ChatGPT+词向量/词嵌入实现相似商品推荐系统

最近一个项目有个业务场景是相似商品推荐&#xff0c;给一个商品描述(比如 WIENER A/B 7IN 5/LB FZN )&#xff0c;系统给出商品库中最相似的TOP 5种商品&#xff0c;这种单纯的推荐系统用词向量就可以实现&#xff0c;不过&#xff0c;这个项目特点是商品库巨大&#xff0c;有…

Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

本篇博客主要用于介绍如何使用seleniumphantomJS模拟登陆豆瓣&#xff0c;没有考虑验证码的问题&#xff0c;更多内容&#xff0c;请参考&#xff1a;Python学习指南 #-*- coding:utf-8 -*-from selenium import webdriver from selenium.webdriver.common.keys import Keysimp…

材质、纹理、贴图的区别和关联

1、材质、纹理、贴图的概念 材质&#xff08;Material&#xff09;、纹理&#xff08;Texture&#xff09;、贴图&#xff08;Texture Map&#xff09;是计算机图形学中的三个概念&#xff0c;它们之间存在关系但也有一些区别。 材质&#xff08;Material&#xff09;是描述物…

算法进阶——字符串的排列

题目 输入一个长度为 n 字符串&#xff0c;打印出该字符串中字符的所有排列&#xff0c;你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数据范围&#xff1a;n<10 要求&#xff1a;空间复…

设计模式 - 中介者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 中介者模式又叫调停模式&#xff0c;定义一个中介角色来封装一系列对象之间的交互&#xff0c;使原有对象之间的耦合松散&#xff0c;且可以独立地改变它们之间的交互。 中介者模式可以使对象之间的关系数量急剧减少&#xff0…

nginx开启https配置之后网页无法访问问题处理

背景说明 最近新购服务器部署nginx之后按照之前的方式部署前端项目并配置https之后访问页面显示:无法访问.新的服务器ECS系统和之前相同,nginx安装方式也相同,nginx配置方式也是相同.但是访问还是显示无法访问.下面简单记录一下问题处理过程. 处理过程 1.https访问之后无法访问…

php+html+js+ajax实现文件上传

phphtmljsajax实现文件上传 目录 一、表单单文件上传 1、上传页面 2、接受文件上传php 二、表单多文件上传 1、上传页面 2、接受文件上传php 三、表单异步xhr文件上传 1、上传页面 2、接受文件上传php 四、表单异步ajax文件上传 1、上传页面 2、接受文件上传ph…

Day-08 基于 Docker安装 Nginx 镜像-负载均衡

1、反向代理后&#xff0c;自然而然就引出了负载均衡,下面简单实现负载均衡的效果; 2、实现该效果需要再添加一个 Nginx &#xff0c;所以要增加一个文件夹。 /home|---mutou|----nginx|----conf.d|----html|----conf.d2|----html3 1.创建 html3 文件夹&#xff0c; 新建 index…

CART 算法——决策树

目录 1.CART的生成&#xff1a; &#xff08;1&#xff09;回归树的生成 &#xff08;2&#xff09;分类树的生成 ①基尼指数 ②算法步骤 2.CART剪枝&#xff1a; &#xff08;1&#xff09;损失函数 &#xff08;2&#xff09;算法步骤&#xff1a; CART是英文“class…

新的“HTTP/2 Rapid Reset”0day攻击打破了DDoS记录

导语 最近&#xff0c;一种名为“HTTP/2 Rapid Reset”的DDoS&#xff08;分布式拒绝服务&#xff09;攻击技术成为了热门话题&#xff0c;该技术自8月份以来被积极利用作为零日漏洞&#xff0c;打破了以往的攻击记录。亚马逊网络服务&#xff08;Amazon Web Services&#xff…

短视频账号矩阵系统源码saas===独立部署

前言&#xff1a; 短视频账号矩阵是指在不同的短视频平台上&#xff0c;一个个人或企业所拥有的账号数量和分布情况。由于不同的短视频平台受众人群和内容类型等因素不同&#xff0c;因此拥有更多账号可以在更广泛的受众中传播内容&#xff0c;提高曝光度和流量。短视频账号矩阵…

uniapp获取公钥、MD5,‘keytool‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

获取MD5、SHA1、SHA256指纹信息 通过命令的形式获取 winr调出黑窗口cd到证书所在目录输入keytool -list -v -keystore test.keystore,其中 test.keystore为你的证书名称加文件后缀按照提示输入你的证书密码&#xff0c;就可以查看证书的信息 通过uniapp云端查看(证书是在DClou…

给 Linux0.11 添加网络通信功能 (Day3: 完成 MIT6.S081 最终实验 网卡驱动(1. 安装工具链和依赖))

url: https://pdos.csail.mit.edu/6.S081/2020/labs/net.html 首先看 tools章节&#xff1a;https://pdos.csail.mit.edu/6.S081/2020/tools.html 浏览了一下&#xff0c;就是要我们安装依赖 执行以下命令 sudo apt-get install git build-essential gdb-multiarch qemu-syst…

创建一个基本的win32窗口

1.建立一个窗口的基本步骤 &#xff08;1&#xff09;向系统注册一个窗体类 &#xff08;2&#xff09;根据窗体类创建窗口 &#xff08;3&#xff09;进入消息循环 2.程序结构 (1)主函数的输入参数 int WINAPI WinMain( HISTANCE hInstance,//当前窗口的句柄 HINSTANCE hPr…

腾讯云2核4G轻量服务器5M带宽支持多少人同时在线?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;从CPU内存的角度&#xff0c;网站程序效…

界面组件DevExpress WinForms v23.2新功能预览 - 增强MVVM相关功能

本文主要描述了DevExpress WinForms即将在几个月之后发布的v23.2中包含的新功能&#xff0c;持续关注我们获取更多最新资讯哦~ DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用…