反向传播算法的数学推导

反向传播算法的数学推导

视频链接:[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩

本篇文章中将对于以下网络进行说明。

image-20220224144801424

假设网络总共有三层,假设输入层有 n [ 0 ] n^{[0]} n[0]个神经元,隐藏层有 n [ 1 ] n^{[1]} n[1]个神经元,输出层有 n [ 2 ] n^{[2]} n[2]个神经元。

这里先假设 x x x为单样本,待推出结果后我们再进行向量化的推导。

这里对各个参数的维数进行说明,方便后面再推导过程中的理解:

参数维数
x x x ( n [ 0 ] , 1 ) (n^{[0]},1) (n[0],1)
W [ 1 ] W^{[1]} W[1] ( n [ 1 ] , n [ 0 ] ) (n^{[1]},n^{[0]}) (n[1],n[0])
b [ 1 ] b^{[1]} b[1] ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1)
z [ 1 ] z^{[1]} z[1] ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1)
a [ 1 ] a^{[1]} a[1] ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1)
W [ 2 ] W^{[2]} W[2] ( n [ 2 ] , n [ 1 ] ) (n^{[2]},n^{[1]}) (n[2],n[1])
b [ 2 ] b^{[2]} b[2] ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1)
z [ 2 ] z^{[2]} z[2] ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1)
a [ 2 ] a^{[2]} a[2] ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1)

在这里,我们假设这是一个二分类问题,那么损失函数可以取 L ( a , y ) = − y log ⁡ ( a ) − ( 1 − y ) l o g ( 1 − a ) L(a,y)=-y\log(a)-(1-y)log(1-a) L(a,y)=ylog(a)(1y)log(1a)

反向传播算法即是损失函数对于模型中的权重矩阵和偏置的偏导数,我们可以使用链式法则一步一步去求导。

首先我们需要先求出来两个最基本的偏导数:
∂ L ∂ a = − y a + 1 − y 1 − a = a − y a ( 1 − a ) (1) \begin{aligned} \frac {\partial L} {\partial a} &= - \frac{y}{a} + \frac{1-y}{1-a}\\ &=\frac{a-y}{a(1-a)} \end{aligned} \tag{1} aL=ay+1a1y=a(1a)ay(1)

σ ′ = e − z ( 1 + e − z ) 2 = 1 1 + e − z × e − z 1 + e − z = a ( 1 − a ) (2) \begin{aligned} \sigma ' &=\frac{e^{-z}}{(1+e^{-z})^2}\\ &=\frac {1}{1+e^{-z}} \times \frac{e^{-z}}{1+e^{-z}}\\ &=a(1-a) \end{aligned} \tag{2} σ=(1+ez)2ez=1+ez1×1+ezez=a(1a)(2)

有了这两个最基本的偏导数之后,我们就可以使用链式法则依次对各个参数求偏导:

在这里我们约定符号 d a da da即代表着损失函数 L L L对于参数 a a a的偏导数,以简化我们的公式表示。

在下面的推导中

  • ⋅ \cdot 代表点乘,即正常的矩阵乘法
  • ∗ * 代表按元素乘,即对应位置的元素进行乘法

d a [ 2 ] = ∂ L ∂ a [ 2 ] = a [ 2 ] − y a [ 2 ] ( 1 − a [ 2 ] ) ( n [ 2 ] , 1 ) d z [ 2 ] = ∂ L ∂ z [ 2 ] = ∂ L ∂ a [ 2 ] ⋅ d a [ 2 ] d z = d a [ 2 ] ⋅ σ ′ = a [ 2 ] − y ( n [ 2 ] , 1 ) d W [ 2 ] = ∂ L ∂ W [ 2 ] = ∂ L ∂ z [ 2 ] ⋅ ∂ z [ 2 ] ∂ W [ 2 ] = d z [ 2 ] ⋅ a [ 1 ] T ( n [ 2 ] , 1 ) ⋅ ( n [ 1 ] , 1 ) T = ( n [ 2 ] , n [ 1 ] ) d b [ 2 ] = ∂ L ∂ b [ 2 ] = ∂ L ∂ z [ 2 ] ⋅ ∂ z [ 2 ] ∂ b [ 2 ] = d z [ 2 ] ( n [ 2 ] , 1 ) d a [ 1 ] = ∂ L ∂ a [ 1 ] = ∂ L ∂ z [ 2 ] ⋅ d z [ 2 ] d a [ 1 ] = W [ 2 ] T ⋅ d z [ 2 ] ( n [ 2 ] , n [ 1 ] ) T ⋅ ( n [ 2 ] , 1 ) = ( n [ 1 ] , 1 ) d z [ 1 ] = ∂ L ∂ z [ 1 ] = ∂ L ∂ a [ 1 ] ⋅ d a [ 1 ] d z [ 1 ] = d a [ 1 ] ⋅ σ ′ ( z [ 1 ] ) = W [ 2 ] T ⋅ d z [ 2 ] ∗ σ ′ ( z [ 1 ] ) ( n [ 1 ] , 1 ) ∗ ( n [ 1 ] , 1 ) = ( n [ 1 ] , 1 ) d W [ 1 ] = ∂ L ∂ W [ 1 ] = ∂ L ∂ z [ 1 ] ⋅ d z [ 1 ] d W [ 1 ] = d z [ 1 ] ⋅ x T ( n [ 1 ] , 1 ) ⋅ ( n [ 0 ] , 1 ) T = ( n [ 1 ] , n [ 0 ] ) d b [ 1 ] = ∂ L ∂ b [ 1 ] = ∂ L ∂ z [ 1 ] ⋅ d z [ 1 ] d b [ 1 ] = d z [ 1 ] ( n [ 1 ] , 1 ) \begin{aligned} &da^{[2]}=\frac{\partial L}{\partial a^{[2]}}=\frac{a^{[2]}-y}{a^{[2]}(1-a^{[2]})} \qquad & (n^{[2]},1) \\ &dz^{[2]}=\frac {\partial L}{\partial z^{[2]}}=\frac{\partial L}{\partial a^{[2]}}\cdot \frac{da^{[2]}}{dz}=da^{[2]}\cdot \sigma' = a^{[2]}-y \qquad & (n^{[2]},1) \\ &dW^{[2]}=\frac{\partial L}{\partial W^{[2]}}=\frac{\partial L}{\partial z^{[2]}}\cdot \frac{\partial z^{[2]}}{\partial W^{[2]}} = dz^{[2]}\cdot a^{[1]^T} \qquad &(n^{[2]},1) \cdot (n^{[1]},1)^T=(n^{[2]},n^{[1]}) \\ &db^{[2]}=\frac{\partial L}{\partial b^{[2]}}=\frac{\partial L}{\partial z^{[2]}}\cdot \frac{\partial z^{[2]}}{\partial b^{[2]}} = dz^{[2]} \qquad &(n^{[2]},1) \\ &da^{[1]}=\frac {\partial L}{\partial a^{[1]}}=\frac{\partial L}{\partial z^{[2]}}\cdot \frac{dz^{[2]}}{da^{[1]}}=W^{[2]^T}\cdot dz^{[2]} \qquad &(n^{[2]},n^{[1]})^T\cdot (n^{[2]},1)= (n^{[1]},1) \\ &dz^{[1]}=\frac {\partial L}{\partial z^{[1]}} = \frac{\partial L}{\partial a^{[1]}}\cdot \frac{da^{[1]}}{dz^{[1]}}=da^{[1]}\cdot \sigma'(z^{[1]}) = W^{[2]^T}\cdot dz^{[2]} * \sigma'(z^{[1]}) \qquad &(n^{[1]},1) * (n^{[1]},1)= (n^{[1]},1) \\ &dW^{[1]}=\frac {\partial L}{\partial W^{[1]}} = \frac{\partial L}{\partial z^{[1]}}\cdot \frac{dz^{[1]}}{dW^{[1]}}=dz^{[1]}\cdot x^T \qquad & (n^{[1]},1) \cdot (n^{[0]},1)^T=(n^{[1]},n^{[0]}) \\ &db^{[1]}=\frac {\partial L}{\partial b^{[1]}} = \frac{\partial L}{\partial z^{[1]}}\cdot \frac{dz^{[1]}}{db^{[1]}}=dz^{[1]} \qquad & (n^{[1]},1)\\ \end{aligned} da[2]=a[2]L=a[2](1a[2])a[2]ydz[2]=z[2]L=a[2]Ldzda[2]=da[2]σ=a[2]ydW[2]=W[2]L=z[2]LW[2]z[2]=dz[2]a[1]Tdb[2]=b[2]L=z[2]Lb[2]z[2]=dz[2]da[1]=a[1]L=z[2]Lda[1]dz[2]=W[2]Tdz[2]dz[1]=z[1]L=a[1]Ldz[1]da[1]=da[1]σ(z[1])=W[2]Tdz[2]σ(z[1])dW[1]=W[1]L=z[1]LdW[1]dz[1]=dz[1]xTdb[1]=b[1]L=z[1]Ldb[1]dz[1]=dz[1](n[2],1)(n[2],1)(n[2],1)(n[1],1)T=(n[2],n[1])(n[2],1)(n[2],n[1])T(n[2],1)=(n[1],1)(n[1],1)(n[1],1)=(n[1],1)(n[1],1)(n[0],1)T=(n[1],n[0])(n[1],1)

上面这个过程建议如果有微积分基础的话自己推导一下,同时在推导的过程中要把维数带着进行验证,看最后的维度是不是这里需要的维度。

例如对于 d W [ 1 ] dW^{[1]} dW[1] d W [ 2 ] dW^{[2]} dW[2]而言,后面乘的是 a [ 1 ] T a^{[1]^T} a[1]T而不是 a [ 1 ] a^{[1]} a[1],就是为了满足 W [ 1 ] , W [ 2 ] W^{[1]},W^{[2]} W[1],W[2]的维度

接下来展示一下向量化的表示方法,也就是在深度学习代码中用到的计算方式:

其中np.sum(dZ^{[2]},axis=1,keepdims=True)是python中numpy库中的求和函数

d Z [ 2 ] = A [ 2 ] − Y d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T d b [ 2 ] = 1 m ∗ n p . s u m ( d Z [ 2 ] , a x i s = 1 , k e e p d i m s = T r u e ) d Z [ 1 ] = W [ 2 ] T d Z [ 2 ] ∗ g [ 1 ] ′ ( Z [ 1 ] ) d W [ 1 ] = 1 m d Z [ 1 ] X T d b [ 1 ] = 1 m ∗ n p . s u m ( d Z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) \begin{aligned} &dZ^{[2]}=A^{[2]}-Y\\ &dW^{[2]}=\frac {1}{m}dZ^{[2]}A^{[1]^T}\\ &db^{[2]}=\frac {1}{m}*np.sum(dZ^{[2]},axis=1,keepdims=True)\\ &dZ^{[1]}=W^{[2]^T}dZ^{[2]}*g^{[1]'}(Z^{[1]})\\ &dW^{[1]}=\frac{1}{m}dZ^{[1]}X^T\\ &db^{[1]}=\frac {1}{m}*np.sum(dZ^{[1]},axis=1,keepdims=True)\\ \end{aligned} dZ[2]=A[2]YdW[2]=m1dZ[2]A[1]Tdb[2]=m1np.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](Z[1])dW[1]=m1dZ[1]XTdb[1]=m1np.sum(dZ[1],axis=1,keepdims=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 卷积神经网络(Convolutional Neural Network,简称CNN)是一种基于数学推导深度学习算法,主要用于图像识别和处理。其数学推导包括了卷积运算、非线性激活函数、池化操作等。 在卷积神经网络中,卷积运算是其中一个核心概念。它通过对输入数据和滤波器(也称为卷积核)进行卷积操作,实现对输入数据的特征提取。卷积运算通过在输入数据上滑动滤波器,并将滤波器与输入数据中的对应部分相乘,然后将所有相乘的结果相加。这个过程可以通过数学推导和矩阵运算来实现,通过矩阵的乘法和求和操作,可以高效地进行卷积运算。 非线性激活函数是卷积神经网络中的另一个重要部分。它的作用是在卷积运算的结果上引入非线性变换,从而增加网络的表达能力。常见的非线性激活函数包括ReLU、Sigmoid和Tanh等。这些激活函数通过数学推导和函数的运算,将卷积运算的结果映射到一定范围内,以实现非线性的特征表示。 池化操作是卷积神经网络中的另一个关键步骤。它通过对输入数据进行降采样,减少数据的维度,从而进一步提取图像的特征。常见的池化操作包括最大池化和平均池化。最大池化选择输入数据中的最大值作为输出,而平均池化则取输入数据的均值作为输出。这些操作可以通过数学推导和简单的运算实现。 除了上述推导,卷积神经网络还包括了多层的神经网络结构、损失函数的定义、反向传播算法等。通过这些推导,我们可以更好地理解卷积神经网络的原理和工作原理,为图像处理和识别提供理论基础和数学支持。 ### 回答2: 卷积神经网络(Convolutional Neural Network, CNN)是一种主要应用于图像和语音识别等领域的深度学习算法。卷积神经网络的数学推导在一定程度上可以帮助我们理解其工作原理和运行机制。 卷积神经网络的数学推导主要涉及卷积操作和反向传播算法。首先,我们需要了解卷积操作。卷积操作是卷积神经网络中最重要的运算之一,它通常用于提取输入数据的特征。在数学推导中,卷积操作可以通过定义卷积核(或滤波器)和输入数据的卷积来实现。卷积操作的数学推导可以详细解释如何通过卷积核对输入数据进行滤波和特征提取。 另外,数学推导还包括了卷积神经网络的反向传播算法反向传播算法是用于更新网络参数的关键步骤,通过计算损失函数对网络参数的导数,可以得到参数的梯度并进行参数更新。反向传播算法数学推导可以详细解释如何计算网络参数的导数,并通过链式法则将梯度从输出层传播到输入层。 卷积神经网络的数学推导是一项复杂和深奥的任务,需要对线性代数、微积分和概率统计等数学知识有一定的了解。在理解和应用卷积神经网络时,对其数学推导的掌握可以提供清晰的思路和直观的认识。同时,掌握卷积神经网络的数学推导还可以帮助我们理解和处理网络中的各个参数和运算过程,进而优化和改进网络的性能。 总而言之,卷积神经网络的数学推导在一定程度上可以帮助我们理解网络的工作原理和运行机制。通过学习卷积操作和反向传播算法数学推导,我们可以更加清晰地理解卷积神经网络的各个组成部分,为进一步的研究和应用提供基础和指导。 ### 回答3: 卷积神经网络(Convolutional Neural Networks, CNN)是一种深度学习模型,特别适用于图像处理任务。其数学推导主要集中在卷积运算和反向传播算法两个方面。 卷积运算是CNN的核心操作,它基于滤波器(Filter)对输入数据进行局部感知和特征提取。假设输入数据为二维矩阵(如图像),滤波器为一个小的二维矩阵,卷积运算通过将滤波器与输入数据的不同位置进行逐元素相乘,然后将结果求和,得到一个输出特征值。通过滑动窗口的方式,可以在整个输入数据上进行卷积运算,得到一个特征图。 在数学上,卷积运算可以表示为: \[f(i, j) = \sum_{m} \sum_{n} g(m, n) \cdot w(i-m, j-n)\] 其中,\(f(i, j)\)表示输出特征图上的某个位置的值,\(g(m, n)\)表示输入数据上的某个位置的值,\(w(i-m, j-n)\)表示滤波器的权重。这个公式可以看作是对输入数据与滤波器进行一次像素级的逐元素相乘,然后将结果求和得到输出特征图上对应位置的值。 反向传播算法是CNN中的训练算法,用于在已知标签的样本上,通过更新网络参数来最小化损失函数。数学上,反向传播算法主要涉及到对损失函数求导的过程,以确定每一层网络参数的更新方向和大小。 通过链式法则,我们可以将总损失对某一层参数的导数表示为前一层参数的导数与该层输出对该层参数的导数的乘积,这样便可以通过逐层反向传播,计算每一层参数的梯度,并利用梯度下降等优化算法来更新参数。 总结起来,卷积神经网络的数学推导主要包括卷积运算和反向传播算法。卷积运算利用滤波器对输入数据进行特征提取,而反向传播算法则用于训练网络参数。这些数学推导为CNN在图像处理等领域的应用提供了理论基础,并为算法改进和网络设计提供了方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值