手算在线性RNN上通过时间反向传播计算梯度
时间: 2023-07-31 20:03:49 浏览: 130
rnn梯度计算过程
假设我们有一个简单的一层线性RNN模型,输入为 $x_t$,隐藏状态为 $h_t$,输出为 $y_t$。其中,$W_{hx}$ 和 $W_{hh}$ 分别是输入权重和隐藏状态权重,$b$ 是偏置。我们的目标是计算损失函数 $L$ 对于模型参数 $\theta = \{W_{hx}, W_{hh}, b\}$ 的梯度。
首先,我们需要计算损失函数关于输出的梯度 $\frac{\partial L}{\partial y_t}$。假设我们的损失函数是均方误差(MSE)损失函数,即 $L = \frac{1}{2}(y_t - \hat{y}_t)^2$,其中 $\hat{y}_t$ 是目标输出。那么,我们有:
$$\frac{\partial L}{\partial y_t} = y_t - \hat{y}_t$$
然后,我们可以通过反向传播算法逐个时间步骤计算梯度。我们从最后一个时间步骤 $T$ 开始,假设当前时间步骤为 $t$,我们已经计算出了 $\frac{\partial L}{\partial y_t}$。现在,我们需要计算 $\frac{\partial L}{\partial h_t}$、$\frac{\partial L}{\partial W_{hx}}$、$\frac{\partial L}{\partial W_{hh}}$ 和 $\frac{\partial L}{\partial b}$。
1. 计算 $\frac{\partial L}{\partial h_t}$:
根据链式法则,我们有:
$$\frac{\partial L}{\partial h_t} = \frac{\partial L}{\partial y_t} \frac{\partial y_t}{\partial h_t} + \frac{\partial L}{\partial h_{t+1}} \frac{\partial h_{t+1}}{\partial h_t}$$
其中,$\frac{\partial y_t}{\partial h_t} = W_{hh}$,$\frac{\partial h_{t+1}}{\partial h_t} = \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))$(这里 $\text{diag}$ 表示将向量转化为对角矩阵),$\sigma'(x)$ 表示 sigmoid 函数的导数。因此,我们可以得到:
$$\frac{\partial L}{\partial h_t} = (y_t - \hat{y}_t)W_{hh} + \frac{\partial L}{\partial h_{t+1}} \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))W_{hh}$$
2. 计算 $\frac{\partial L}{\partial W_{hx}}$:
同样地,根据链式法则,我们有:
$$\frac{\partial L}{\partial W_{hx}} = \frac{\partial L}{\partial y_t} \frac{\partial y_t}{\partial W_{hx}} + \frac{\partial L}{\partial h_{t+1}} \frac{\partial h_{t+1}}{\partial W_{hx}}$$
其中,$\frac{\partial y_t}{\partial W_{hx}} = h_t$,$\frac{\partial h_{t+1}}{\partial W_{hx}} = \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))W_{hx}$。因此,我们可以得到:
$$\frac{\partial L}{\partial W_{hx}} = (y_t - \hat{y}_t)h_t + \frac{\partial L}{\partial h_{t+1}} \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))W_{hx}$$
3. 计算 $\frac{\partial L}{\partial W_{hh}}$:
同样地,根据链式法则,我们有:
$$\frac{\partial L}{\partial W_{hh}} = \frac{\partial L}{\partial y_t} \frac{\partial y_t}{\partial W_{hh}} + \frac{\partial L}{\partial h_{t+1}} \frac{\partial h_{t+1}}{\partial W_{hh}}$$
其中,$\frac{\partial y_t}{\partial W_{hh}} = h_t$,$\frac{\partial h_{t+1}}{\partial W_{hh}} = \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))W_{hh}$。因此,我们可以得到:
$$\frac{\partial L}{\partial W_{hh}} = (y_t - \hat{y}_t)h_t + \frac{\partial L}{\partial h_{t+1}} \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))W_{hh}$$
4. 计算 $\frac{\partial L}{\partial b}$:
同样地,根据链式法则,我们有:
$$\frac{\partial L}{\partial b} = \frac{\partial L}{\partial y_t} \frac{\partial y_t}{\partial b} + \frac{\partial L}{\partial h_{t+1}} \frac{\partial h_{t+1}}{\partial b}$$
其中,$\frac{\partial y_t}{\partial b} = 1$,$\frac{\partial h_{t+1}}{\partial b} = \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))$。因此,我们可以得到:
$$\frac{\partial L}{\partial b} = (y_t - \hat{y}_t) + \frac{\partial L}{\partial h_{t+1}} \text{diag}(\sigma'(W_{hh}h_{t} + W_{hx}x_{t+1} + b))$$
这样,我们就完成了在线性RNN模型上通过时间反向传播计算梯度的过程。
阅读全文