如何手算通过时间反向传播计算梯度
时间: 2023-07-27 11:07:04 浏览: 167
反向传播算法是一种有效的计算神经网络参数梯度的方法,它利用链式法则将输出误差逐层反向传播,最终计算出每个参数的梯度。下面是手动计算梯度的步骤:
假设我们有一个单隐藏层的神经网络,输入为 $x$,输出为 $y$,隐藏层的激活函数为 $f(x)$,输出层的激活函数为 $g(x)$。我们定义损失函数为 $L(y, t)$,其中 $t$ 为目标输出。
1.正向传播:计算出网络的输出 $y$。
$$h = f(wx+b)$$
$$y = g(vh+c)$$
其中 $w$ 和 $v$ 是权重矩阵,$b$ 和 $c$ 是偏置向量。
2.计算损失函数对输出 $y$ 的梯度 $\frac{\partial L}{\partial y}$。
$$\frac{\partial L}{\partial y} = \frac{\partial L}{\partial t} \frac{\partial t}{\partial y}$$
其中 $\frac{\partial L}{\partial t}$ 表示损失函数对目标输出的梯度,$\frac{\partial t}{\partial y}$ 表示目标输出对网络输出的导数。对于均方误差损失函数,$\frac{\partial L}{\partial t} = 2(y-t)$。
3.计算损失函数对输出层输入的梯度 $\frac{\partial L}{\partial v}$。
$$\frac{\partial L}{\partial v} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial v}$$
其中 $\frac{\partial y}{\partial v}$ 表示输出层输入对输出的导数,可以根据输出层的激活函数求出。对于 sigmoid 激活函数,$\frac{\partial y}{\partial v} = y(1-y)$。
4.计算损失函数对输出层偏置的梯度 $\frac{\partial L}{\partial c}$。
$$\frac{\partial L}{\partial c} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial c}$$
其中 $\frac{\partial y}{\partial c}$ 表示输出层偏置对输出的导数,为 1。
5.计算损失函数对隐藏层输出的梯度 $\frac{\partial L}{\partial h}$。
$$\frac{\partial L}{\partial h} = \frac{\partial L}{\partial y} \frac{\partial y}{\partial h}$$
其中 $\frac{\partial y}{\partial h}$ 表示输出层输入对隐藏层输出的导数,可以根据权重矩阵和输出层激活函数求出。
6.计算损失函数对隐藏层输入的梯度 $\frac{\partial L}{\partial w}$。
$$\frac{\partial L}{\partial w} = \frac{\partial L}{\partial h} \frac{\partial h}{\partial w}$$
其中 $\frac{\partial h}{\partial w}$ 表示隐藏层输入对权重矩阵的导数,可以根据输入和隐藏层激活函数求出。
7.计算损失函数对隐藏层偏置的梯度 $\frac{\partial L}{\partial b}$。
$$\frac{\partial L}{\partial b} = \frac{\partial L}{\partial h} \frac{\partial h}{\partial b}$$
其中 $\frac{\partial h}{\partial b}$ 表示隐藏层输入对偏置向量的导数,为 1。
通过以上步骤,我们可以手动计算出每个参数的梯度,从而更新网络参数以提高模型性能。
阅读全文