两层和多层神经网络训练中参数更新时梯度的求解,注意: 包括两层神经网络和多层神经网络 建议画出神经网络的结构并描述清楚对应的符号
时间: 2023-07-08 08:39:47 浏览: 73
好的,我会为您解答这个问题。
首先,我们来看两层神经网络的参数更新过程。假设我们的网络有一个输入层、一个隐藏层和一个输出层,那么其结构如下所示:
![两层神经网络结构](https://img-blog.csdnimg.cn/20210923102359301.png)
其中,$x$ 表示输入向量,$h$ 表示隐藏层的输出,$y$ 表示输出层的输出,$W_1$ 和 $W_2$ 分别表示输入层和隐藏层之间、隐藏层和输出层之间的权重矩阵,$b_1$ 和 $b_2$ 分别表示隐藏层和输出层的偏置向量。
我们使用交叉熵损失函数来评估模型的性能,假设样本的真实标签为 $y_{true}$,网络的预测标签为 $y_{pred}$,那么交叉熵损失函数可以表示为:
$$
L = -y_{true} \log y_{pred} - (1 - y_{true}) \log (1 - y_{pred})
$$
我们的目标是最小化损失函数,因此需要求出损失函数对网络参数的梯度,然后使用梯度下降法来更新参数。具体来说,对于每个参数 $p$,我们需要计算出其对损失函数的偏导数 $\frac{\partial L}{\partial p}$,然后根据链式法则,计算出其对每个中间节点的偏导数,最终得到网络中每个节点的梯度。然后使用梯度下降法更新参数,具体更新公式如下:
$$
p \leftarrow p - \eta \frac{\partial L}{\partial p}
$$
其中,$\eta$ 表示学习率,控制每次参数更新的步长。
现在,我们来具体看一下两层神经网络中参数更新时梯度的求解过程。
1. 隐藏层到输出层的权重矩阵 $W_2$ 的梯度
根据链式法则,$W_2$ 对损失函数的偏导数可以表示为:
$$
\frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial y_{pred}} \frac{\partial y_{pred}}{\partial z_{2}} \frac{\partial z_{2}}{\partial W_2}
$$
其中,$z_{2} = W_2 h + b_2$,$y_{pred} = \sigma(z_{2})$,$\sigma$ 表示 sigmoid 函数。根据导数的链式法则:
$$
\frac{\partial y_{pred}}{\partial z_{2}} = \sigma(z_{2}) (1 - \sigma(z_{2}))
$$
$$
\frac{\partial z_{2}}{\partial W_2} = h
$$
代入上式可得:
$$
\frac{\partial L}{\partial W_2} = (y_{pred} - y_{true}) \sigma(z_{2}) (1 - \sigma(z_{2})) h
$$
2. 隐藏层到输出层的偏置向量 $b_2$ 的梯度
根据链式法则,$b_2$ 对损失函数的偏导数可以表示为:
$$
\frac{\partial L}{\partial b_2} = \frac{\partial L}{\partial y_{pred}} \frac{\partial y_{pred}}{\partial z_{2}} \frac{\partial z_{2}}{\partial b_2}
$$
其中,$z_{2} = W_2 h + b_2$,$y_{pred} = \sigma(z_{2})$。根据导数的链式法则:
$$
\frac{\partial z_{2}}{\partial b_2} = 1
$$
代入上式可得:
$$
\frac{\partial L}{\partial b_2} = (y_{pred} - y_{true}) \sigma(z_{2}) (1 - \sigma(z_{2}))
$$
3. 输入层到隐藏层的权重矩阵 $W_1$ 的梯度
根据链式法则,$W_1$ 对损失函数的偏导数可以表示为:
$$
\frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial y_{pred}} \frac{\partial y_{pred}}{\partial z_{2}} \frac{\partial z_{2}}{\partial h} \frac{\partial h}{\partial z_{1}} \frac{\partial z_{1}}{\partial W_1}
$$
其中,$z_{1} = W_1 x + b_1$,$h = \sigma(z_{1})$。根据导数的链式法则:
$$
\frac{\partial h}{\partial z_{1}} = \sigma(z_{1}) (1 - \sigma(z_{1}))
$$
$$
\frac{\partial z_{1}}{\partial W_1} = x
$$
代入上式可得:
$$
\frac{\partial L}{\partial W_1} = (y_{pred} - y_{true}) \sigma(z_{2}) (1 - \sigma(z_{2})) W_2 \sigma(z_{1}) (1 - \sigma(z_{1})) x
$$
4. 输入层到隐藏层的偏置向量 $b_1$ 的梯度
根据链式法则,$b_1$ 对损失函数的偏导数可以表示为:
$$
\frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial y_{pred}} \frac{\partial y_{pred}}{\partial z_{2}} \frac{\partial z_{2}}{\partial h} \frac{\partial h}{\partial z_{1}} \frac{\partial z_{1}}{\partial b_1}
$$
其中,$z_{1} = W_1 x + b_1$,$h = \sigma(z_{1})$。根据导数的链式法则:
$$
\frac{\partial z_{1}}{\partial b_1} = 1
$$
代入上式可得:
$$
\frac{\partial L}{\partial b_1} = (y_{pred} - y_{true}) \sigma(z_{2}) (1 - \sigma(z_{2})) W_2 \sigma(z_{1}) (1 - \sigma(z_{1}))
$$
5. 更新参数
根据梯度下降法的公式,我们可以得到每个参数的更新公式:
$$
W_2 \leftarrow W_2 - \eta \frac{\partial L}{\partial W_2}
$$
$$
b_2 \leftarrow b_2 - \eta \frac{\partial L}{\partial b_2}
$$
$$
W_1 \leftarrow W_1 - \eta \frac{\partial L}{\partial W_1}
$$
$$
b_1 \leftarrow b_1 - \eta \frac{\partial L}{\partial b_1}
$$
以上就是两层神经网络训练中参数更新时梯度的求解过程。
接着,我们来看一下多层神经网络中参数更新时梯度的求解过程。多层神经网络的训练过程与两层神经网络类似,只是其结构更加复杂,需要使用反向传播算法来求解梯度。反向传播算法的基本思想是,先正向计算出网络的输出结果,然后反向计算出每个节点的梯度,最终使用梯度下降法来更新网络参数。
具体来说,对于一个 $L$ 层的神经网络,我们可以将其分为输入层、$L-2$ 个隐藏层和输出层。假设第 $l$ 层的输出为 $h^{(l)}$,第 $l+1$ 层的输入为 $z^{(l+1)}$,输出为 $h^{(l+1)}$,那么反向传播算法的具体步骤如下:
1. 计算输出层的梯度
输出层的梯度可以通过损失函数对输出层输出的偏导数来计算,具体公式如下:
$$
\delta^{(L)} = \frac{\partial L}{\partial h^{(L)}} \odot \sigma'(z^{(L)})
$$
其中,$\odot$ 表示逐元素相乘,$\sigma'$ 表示激活函数的导数。
2. 计算隐藏层的梯度
对于第 $l$ 层的隐藏层,其梯度可以表示为:
$$
\delta^{(l)} = (\delta^{(l+1)} W^{(l+1)}) \odot \sigma'(z^{(l)})
$$
其中,$W^{(l+1)}$ 表示第 $l+1$ 层到第 $l$ 层的权重矩阵。
3. 计算权重矩阵的梯度
对于第 $l$ 层到第 $l+1$ 层之间的权重矩阵 $W^{(l+1)}$,其梯度可以表示为:
$$
\frac{\partial L}{\partial W^{(l+1)}} = h^{(l)} (\delta^{(l+1)})^T
$$
4. 计算偏置向量的梯度
对于第 $l+1$ 层的偏置向量 $b^{(l+1)}$,其梯度可以表示为:
$$
\frac{\partial L}{\partial b^{(l+1)}} = \delta^{(l+1)}
$$
5. 更新参数
根据梯度下降法的公式,我们可以得到每个参数的更新公式:
$$
W^{(l+1)} \leftarrow W^{(l+1)} - \eta \frac{\partial L}{\partial W^{(l+1)}}
$$
$$
b^{(l+1)} \leftarrow b^{(l+1)} - \eta \frac{\partial L}{\partial b^{(l+1)}}
$$
以上就是多层神经网络训练中参数更新时梯度的求解过程。
阅读全文