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

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

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

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

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

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

在这里插入图片描述
其中 y∈Rmy\\in\\mathbb{R}^myRm 是真实标签向量,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_2W2b2b_2b2 的偏导数。根据链式法则,我们可以得到:

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

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

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

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

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


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

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

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