> 文章列表 > 两层神经网络的参数求导过程

两层神经网络的参数求导过程

两层神经网络的参数求导过程

假设输入数据 x∈Rnx\\in\\mathbb{R}^nx∈Rn,两层神经网络有以下形式:

在这里插入图片描述
其中 W1∈Rh×nW_1\\in\\mathbb{R}^{h\\times n}W1​∈Rh×n 和 W2∈Rm×hW_2\\in\\mathbb{R}^{m\\times h}W2​∈Rm×h 分别是第一层和第二层的权重矩阵,b1∈Rhb_1\\in\\mathbb{R}^hb1​∈Rh 和 b2∈Rmb_2\\in\\mathbb{R}^mb2​∈Rm 分别是第一层和第二层的偏置向量,σ\\sigmaσ 是激活函数。

梯度是一个关于参数的向量,指出每个参数的变化方向,以便在优化过程中更新参数。对于每个参数,可以计算它对目标函数的梯度。在这里,我们将使用交叉熵损失函数作为目标函数:

在这里插入图片描述
其中 y∈Rmy\\in\\mathbb{R}^my∈Rm 是真实标签向量,y^∈Rm\\hat{y}\\in\\mathbb{R}^my^​∈Rm 是模型预测标签向量。

我们需要求出每个参数的偏导数,以计算梯度。下面是各参数的偏导数:

在这里插入图片描述
其中 ⊙\\odot⊙ 是哈达玛积,σ′\\sigma'σ′ 是 σ\\sigmaσ 的导数。

最终,对于每个参数,我们可以将其梯度表示为:
在这里插入图片描述
使用梯度下降等算法,可以通过调整参数来最小化损失函数。


为了更好地理解上面公式中的符号和求导过程,下面进行一些详细的解释和推导。

首先,对于神经网络中的每个节点,都有一个加权和和一个激活函数。对于第一层,输入 xxx 经过加权和后得到:

其中,W1W_1W1​ 是第一层的权重矩阵,b1b_1b1​ 是第一层的偏置向量。然后,z1z_1z1​ 经过激活函数 σ\\sigmaσ 得到:

在这里插入图片描述

h1h_1h1​ 作为第二层的输入,经过加权和后得到:

在这里插入图片描述
最后,z2z_2z2​ 经过激活函数 σ\\sigmaσ 得到网络的输出:
在这里插入图片描述
这个输出向量 y^\\hat{y}y^​ 是模型对输入 xxx 的预测结果。

现在,我们来推导损失函数对参数的梯度。首先,我们需要求出损失函数关于网络输出 y^\\hat{y}y^​ 的偏导数:

在这里插入图片描述
然后,根据链式法则,我们可以计算出损失函数对最后一层加权和 z2z_2z2​ 的偏导数:

在这里插入图片描述
其中,σ′(z2,i)\\sigma'(z_{2,i})σ′(z2,i​) 表示 σ\\sigmaσ 函数在 z2,iz_{2,i}z2,i​ 处的导数。

接下来,我们需要计算损失函数对第二层参数 W2W_2W2​ 和 b2b_2b2​ 的偏导数。根据链式法则,我们可以得到:

在这里插入图片描述
对于第一层,根据链式法则,我们可以计算出损失函数对第一层加权和 z1z_1z1​ 的偏导数:

在这里插入图片描述
其中,W2,i,jW_{2,i,j}W2,i,j​ 表示第二层的权重矩阵中第 iii 行第 jjj 列的元素。

最后,我们可以计算损失函数对第一层参数 W1W_1W1​ 和 b1b_1b1​ 的偏导数:

在这里插入图片描述
其中,xkx_kxk​ 表示输入向量 xxx 中第 kkk 个元素。

综上所述,我们可以得到损失函数关于所有参数的偏导数公式。利用这些公式,我们可以使用梯度下降等优化算法来更新参数,从而不断改进神经网络的性能。


⊙\\odot⊙ 符号表示矩阵的按元素乘法,也称为哈达玛积。例如,如果有两个同样大小的矩阵 AAA 和 BBB,则它们的哈达玛积为:

在这里插入图片描述
其中,ai,ja_{i,j}ai,j​ 和 bi,jb_{i,j}bi,j​ 分别表示矩阵 AAA 和 BBB 中第 iii 行第 jjj 列的元素。

在神经网络中,哈达玛积的应用比较广泛。例如,在反向传播算法中,我们需要计算两个矩阵的按元素乘积,以便计算损失函数对权重参数的偏导数。具体地,对于两个相同大小的矩阵 AAA 和 BBB,它们的按元素乘积 C=A⊙BC = A \\odot BC=A⊙B 的每个元素 ci,j=ai,j⋅bi,jc_{i,j} = a_{i,j} \\cdot b_{i,j}ci,j​=ai,j​⋅bi,j​,然后将 CCC 作为中间变量用于计算梯度。