反向传播中bptt数学公式详解
时间: 2023-12-20 09:08:24 浏览: 47
反向传播算法中的 BPTT(Backpropagation Through Time,透过时间反向传播)方法主要用来训练循环神经网络(RNN)。BPTT算法的基本思想是将RNN展开成一个非循环的前馈神经网络,然后使用标准的反向传播算法进行训练。
在BPTT算法中,我们将一个长度为T的输入序列$x_{1:T}=(x_1,x_2,...,x_T)$传入RNN,得到一个长度为T的输出序列$y_{1:T}=(y_1,y_2,...,y_T)$。假设我们的RNN有L层,其中第l层包含$h_l$个隐藏单元,则我们可以将其表示为:
$h_t^{(l)}=f(W_{xh}^{(l)}x_t+W_{hh}^{(l)}h_{t-1}^{(l)}+b_h^{(l)})$
其中,$W_{xh}^{(l)}$、$W_{hh}^{(l)}$和$b_h^{(l)}$分别表示第l层的输入权重矩阵、隐藏状态权重矩阵和偏置向量。$f$是激活函数,通常采用Tanh或ReLU函数。
得到每一时刻的隐藏状态后,我们可以计算输出$y_t$:
$y_t=W_{hy}h_t^{(L)}+b_y$
其中,$W_{hy}$和$b_y$是输出层的权重矩阵和偏置向量。
BPTT算法的目标是最小化输出序列$y_{1:T}$与目标序列$y_{1:T}^*$之间的误差。假设我们使用平方误差作为损失函数,则损失函数为:
$L=\frac{1}{2}\sum_{t=1}^T\|y_t-y_t^*\|^2$
接下来,我们需要计算每个参数对损失函数的梯度,然后使用梯度下降算法进行更新。为了计算梯度,我们需要使用链式法则对网络中的每个参数求偏导数。
具体地,我们以权重矩阵$W_{hy}$为例,假设$t=T$时,损失函数$L$对输出$y_T$的偏导数为:
$\frac{\partial L}{\partial y_T}=y_T-y_T^*$
然后,我们可以使用链式法则依次计算出$L$对每一时刻的隐藏状态$h_t^{(L)}$、每一层的权重矩阵$W_{hh}^{(l)}$和$W_{xh}^{(l)}$,以及每一层的偏置向量$b_h^{(l)}$和输出层的偏置向量$b_y$的偏导数。
最后,我们可以根据每个参数的偏导数使用梯度下降算法进行更新。
需要注意的是,由于RNN的展开长度可能非常长,因此在实际应用中,我们通常采用BPTT的截断版本,即只计算一部分时刻的梯度,而不是对整个序列进行计算。这样可以有效地减少计算量,同时还可以防止梯度消失或爆炸的问题。