Skip to content

Commit 1ae6b11

Browse files
committed
rnn and backprop fix
1 parent e1b21f2 commit 1ae6b11

File tree

6 files changed

+37
-34
lines changed

6 files changed

+37
-34
lines changed

chapter_deep-learning-basics/backprop.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ $$J = L + s.$$
6363

6464
为了表述方便,对输入输出$\mathsf{X}, \mathsf{Y}, \mathsf{Z}$为任意形状张量的函数$\mathsf{Y}=f(\mathsf{X})$和$\mathsf{Z}=g(\mathsf{Y})$,我们使用
6565

66-
$$\frac{\partial \mathsf{Z}}{\partial \mathsf{X}} = \text{prod}(\frac{\partial \mathsf{Z}}{\partial \mathsf{Y}}, \frac{\partial \mathsf{Y}}{\partial \mathsf{X}})$$
66+
$$\frac{\partial \mathsf{Z}}{\partial \mathsf{X}} = \text{prod}\left(\frac{\partial \mathsf{Z}}{\partial \mathsf{Y}}, \frac{\partial \mathsf{Y}}{\partial \mathsf{X}}\right)$$
6767

6868
来表达链式法则。
6969

@@ -79,7 +79,7 @@ $$\frac{\partial J}{\partial s} = 1.$$
7979

8080
$$
8181
\frac{\partial J}{\partial \boldsymbol{o}}
82-
= \text{prod}(\frac{\partial J}{\partial L}, \frac{\partial L}{\partial \boldsymbol{o}})
82+
= \text{prod}\left(\frac{\partial J}{\partial L}, \frac{\partial L}{\partial \boldsymbol{o}}\right)
8383
= \frac{\partial L}{\partial \boldsymbol{o}}.
8484
$$
8585

@@ -95,7 +95,7 @@ $J$分别通过$\boldsymbol{o}$和$s$依赖$\boldsymbol{W}^{(2)}$。依据链式
9595

9696
$$
9797
\frac{\partial J}{\partial \boldsymbol{W}^{(2)}}
98-
= \text{prod}(\frac{\partial J}{\partial \boldsymbol{o}}, \frac{\partial \boldsymbol{o}}{\partial \boldsymbol{W}^{(2)}}) + \text{prod}(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \boldsymbol{W}^{(2)}})
98+
= \text{prod}\left(\frac{\partial J}{\partial \boldsymbol{o}}, \frac{\partial \boldsymbol{o}}{\partial \boldsymbol{W}^{(2)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \boldsymbol{W}^{(2)}}\right)
9999
= \frac{\partial J}{\partial \boldsymbol{o}} \boldsymbol{h}^\top + \lambda \boldsymbol{W}^{(2)}.
100100
$$
101101

@@ -104,7 +104,7 @@ $$
104104

105105
$$
106106
\frac{\partial J}{\partial \boldsymbol{h}}
107-
= \text{prod}(\frac{\partial J}{\partial \boldsymbol{o}}, \frac{\partial \boldsymbol{o}}{\partial \boldsymbol{h}})
107+
= \text{prod}\left(\frac{\partial J}{\partial \boldsymbol{o}}, \frac{\partial \boldsymbol{o}}{\partial \boldsymbol{h}}\right)
108108
= {\boldsymbol{W}^{(2)}}^\top \frac{\partial J}{\partial \boldsymbol{o}}.
109109
$$
110110

@@ -113,15 +113,15 @@ $$
113113

114114
$$
115115
\frac{\partial J}{\partial \boldsymbol{z}}
116-
= \text{prod}(\frac{\partial J}{\partial \boldsymbol{h}}, \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{z}})
117-
= \frac{\partial J}{\partial \boldsymbol{h}} \odot \phi'(\boldsymbol{z}).
116+
= \text{prod}\left(\frac{\partial J}{\partial \boldsymbol{h}}, \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{z}}\right)
117+
= \frac{\partial J}{\partial \boldsymbol{h}} \odot \phi'\left(\boldsymbol{z}\right).
118118
$$
119119

120120
最终,我们可以得到最靠近输入层的模型参数的梯度$\partial J/\partial \boldsymbol{W}^{(1)} \in \mathbb{R}^{h \times d}$。在图3.6中,$J$分别通过$\boldsymbol{z}$和$s$依赖$\boldsymbol{W}^{(1)}$。依据链式法则,我们得到
121121

122122
$$
123123
\frac{\partial J}{\partial \boldsymbol{W}^{(1)}}
124-
= \text{prod}(\frac{\partial J}{\partial \boldsymbol{z}}, \frac{\partial \boldsymbol{z}}{\partial \boldsymbol{W}^{(1)}}) + \text{prod}(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \boldsymbol{W}^{(1)}})
124+
= \text{prod}\left(\frac{\partial J}{\partial \boldsymbol{z}}, \frac{\partial \boldsymbol{z}}{\partial \boldsymbol{W}^{(1)}}\right) + \text{prod}\left(\frac{\partial J}{\partial s}, \frac{\partial s}{\partial \boldsymbol{W}^{(1)}}\right)
125125
= \frac{\partial J}{\partial \boldsymbol{z}} \boldsymbol{x}^\top + \lambda \boldsymbol{W}^{(1)}.
126126
$$
127127

chapter_recurrent-neural-networks/bi-rnn.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ $$\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hy} + \boldsymbol{b}_y,$$
2121

2222
其中权重$\boldsymbol{W}_{hy} \in \mathbb{R}^{2h \times q}$和偏差$\boldsymbol{b}_y \in \mathbb{R}^{1 \times q}$为输出层的模型参数。
2323

24-
双向循环神经网络架构如图6.5所示。和前面介绍的单向循环神经网络不同,给定一段时间序列,双向循环神经网络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。
24+
双向循环神经网络架构如图6.12所示。和前面介绍的单向循环神经网络不同,给定一段时间序列,双向循环神经网络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。
2525

2626
![双向循环神经网络架构。](../img/birnn.svg)
2727

@@ -36,7 +36,7 @@ $$\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hy} + \boldsymbol{b}_y,$$
3636

3737
## 练习
3838

39-
* 参考图6.4和图6.5,设计含多个隐藏层的双向循环神经网络。
39+
* 参考图6.11和图6.12,设计含多个隐藏层的双向循环神经网络。
4040

4141

4242
## 扫码直达[讨论区](https://discuss.gluon.ai/t/topic/6732)

chapter_recurrent-neural-networks/bptt.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ $$\frac{\partial L}{\partial \boldsymbol{o}_t} = \frac{\partial \ell (\boldsymb
4646

4747
$$
4848
\frac{\partial L}{\partial \boldsymbol{W}_{yh}}
49-
= \sum_{t=1}^T \text{prod}(\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{W}_{yh}})
49+
= \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{W}_{yh}}\right)
5050
= \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{o}_t} \boldsymbol{h}_t^\top
5151
$$
5252

@@ -55,7 +55,7 @@ $$
5555
在图6.3中,$L$只通过$\boldsymbol{o}_T$依赖最终时间步$T$的隐藏状态$\boldsymbol{h}_T$。因此,我们先计算目标函数有关最终时间步隐藏状态的梯度$\partial L/\partial \boldsymbol{h}_T \in \mathbb{R}^h$。依据链式法则,我们得到
5656

5757
$$
58-
\frac{\partial L}{\partial \boldsymbol{h}_T} = \text{prod}(\frac{\partial L}{\partial \boldsymbol{o}_T}, \frac{\partial \boldsymbol{o}_T}{\partial \boldsymbol{h}_T} ) = \boldsymbol{W}_{yh}^\top \frac{\partial L}{\partial \boldsymbol{o}_T}.
58+
\frac{\partial L}{\partial \boldsymbol{h}_T} = \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_T}, \frac{\partial \boldsymbol{o}_T}{\partial \boldsymbol{h}_T} \right) = \boldsymbol{W}_{yh}^\top \frac{\partial L}{\partial \boldsymbol{o}_T}.
5959
$$
6060

6161

@@ -67,16 +67,16 @@ $$
6767

6868
$$
6969
\frac{\partial L}{\partial \boldsymbol{h}_t}
70-
= \text{prod}(\frac{\partial L}{\partial \boldsymbol{h}_{t+1}}, \frac{\partial \boldsymbol{h}_{t+1}}{\partial \boldsymbol{h}_t} )
71-
+ \text{prod}(\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{h}_t} )
70+
= \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t+1}}, \frac{\partial \boldsymbol{h}_{t+1}}{\partial \boldsymbol{h}_t} \right)
71+
+ \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_t}, \frac{\partial \boldsymbol{o}_t}{\partial \boldsymbol{h}_t} \right)
7272
= \boldsymbol{W}_{hh}^\top \frac{\partial L}{\partial \boldsymbol{h}_{t+1}} + \boldsymbol{W}_{yh}^\top \frac{\partial L}{\partial \boldsymbol{o}_t}.
7373
$$
7474

7575
将上面的递归公式展开,对任意时间步$1 \leq t \leq T$,我们可以得到目标函数有关隐藏状态梯度的通项公式
7676

7777
$$
7878
\frac{\partial L}{\partial \boldsymbol{h}_t}
79-
= \sum_{i=t}^T {(\boldsymbol{W}_{hh}^\top)}^{T-i} \boldsymbol{W}_{yh}^\top \frac{\partial L}{\partial \boldsymbol{o}_{T+t-i}}.
79+
= \sum_{i=t}^T {\left(\boldsymbol{W}_{hh}^\top\right)}^{T-i} \boldsymbol{W}_{yh}^\top \frac{\partial L}{\partial \boldsymbol{o}_{T+t-i}}.
8080
$$
8181

8282
由上式中的指数项可见,当时间步数$T$较大或者时间步$t$较小,目标函数有关隐藏状态的梯度较容易出现衰减和爆炸。这也会影响其他计算中包含$\partial L / \partial \boldsymbol{h}_t$的梯度,例如隐藏层中模型参数的梯度$\partial L / \partial \boldsymbol{W}_{hx} \in \mathbb{R}^{h \times d}$和$\partial L / \partial \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h}$。
@@ -86,10 +86,10 @@ $$
8686
$$
8787
\begin{aligned}
8888
\frac{\partial L}{\partial \boldsymbol{W}_{hx}}
89-
&= \sum_{t=1}^T \text{prod}(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hx}})
89+
&= \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hx}}\right)
9090
= \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{h}_t} \boldsymbol{x}_t^\top,\\
9191
\frac{\partial L}{\partial \boldsymbol{W}_{hh}}
92-
&= \sum_{t=1}^T \text{prod}(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hh}})
92+
&= \sum_{t=1}^T \text{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_t}, \frac{\partial \boldsymbol{h}_t}{\partial \boldsymbol{W}_{hh}}\right)
9393
= \sum_{t=1}^T \frac{\partial L}{\partial \boldsymbol{h}_t} \boldsymbol{h}_{t-1}^\top.
9494
\end{aligned}
9595
$$

chapter_recurrent-neural-networks/deep-rnn.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ $$\boldsymbol{O}_t = \boldsymbol{H}_t^{(L)} \boldsymbol{W}_{hy} + \boldsymbol{b}
2525

2626
其中权重$\boldsymbol{W}_{hy} \in \mathbb{R}^{h \times q}$和偏差$\boldsymbol{b}_y \in \mathbb{R}^{1 \times q}$为输出层的模型参数。
2727

28-
深度循环神经网络的架构如图6.4所示。隐藏状态的信息不断传递至当前层的下一时间步和当前时间步的下一层。
28+
深度循环神经网络的架构如图6.11所示。隐藏状态的信息不断传递至当前层的下一时间步和当前时间步的下一层。
2929

3030
![深度循环神经网络的架构。](../img/deep-rnn.svg)
3131

chapter_recurrent-neural-networks/gru.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
### 重置门和更新门
1414

15-
门控循环单元引入了重置门(reset gate)和更新门(update gate)。如图6.4所示,重置门和更新门均由输入为当前时间步输入$\boldsymbol{X}_t$与上一时间步隐藏状态$\boldsymbol{H}_{t-1}$、激活函数为sigmoid函数的全连接层分别计算得出
15+
门控循环单元引入了重置门(reset gate)和更新门(update gate)。如图6.4所示,重置门和更新门均由输入为当前时间步输入$\boldsymbol{X}_t$与上一时间步隐藏状态$\boldsymbol{H}_{t-1}$,且激活函数为sigmoid函数的全连接层计算得出
1616

1717

1818
![门控循环单元中重置门和更新门的计算。](../img/gru_1.svg)
@@ -23,7 +23,7 @@
2323
$$
2424
\begin{aligned}
2525
\boldsymbol{R}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xr} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hr} + \boldsymbol{b}_r),\\
26-
\boldsymbol{Z}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xz} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hz} + \boldsymbol{b}_z).
26+
\boldsymbol{Z}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xz} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hz} + \boldsymbol{b}_z),
2727
\end{aligned}
2828
$$
2929

@@ -46,7 +46,7 @@ $$\tilde{\boldsymbol{H}}_t = \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xh} +
4646

4747
### 隐藏状态
4848

49-
最后,隐藏状态$\boldsymbol{H}_t \in \mathbb{R}^{n \times h}$的计算使用更新门$\boldsymbol{Z}_t$来对上一时间步的隐藏状态$\boldsymbol{H}_{t-1}$和当前时间步的候选隐藏状态$\tilde{\boldsymbol{H}}_t$做组合:
49+
最后,时间步$t$的隐藏状态$\boldsymbol{H}_t \in \mathbb{R}^{n \times h}$的计算使用当前时间步的更新门$\boldsymbol{Z}_t$来对上一时间步的隐藏状态$\boldsymbol{H}_{t-1}$和当前时间步的候选隐藏状态$\tilde{\boldsymbol{H}}_t$做组合:
5050

5151
$$\boldsymbol{H}_t = \boldsymbol{Z}_t \odot \boldsymbol{H}_{t-1} + (1 - \boldsymbol{Z}_t) \odot \tilde{\boldsymbol{H}}_t.$$
5252

chapter_recurrent-neural-networks/lstm.md

+17-14
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,24 @@
66

77
## 长短期记忆
88

9-
我们先介绍长短期记忆的设计。它修改了循环神经网络隐藏状态的计算方式,并引入了与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊的隐藏状态),其可以用来记录额外的历史信息
9+
我们先介绍长短期记忆的设计。它修改了循环神经网络隐藏状态的计算方式,并引入了与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊的隐藏状态),从而记录额外的历史信息
1010

1111

1212
### 输入门、遗忘门和输出门
1313

14-
同门控循环单元一样,输入门(input gate)、遗忘门(forget gate)和输出门(output gate)的计算,入下图所示,均是通过合并输入和上一时间步的隐藏状态后进入激活函数为sigmoid的全连接层而来,这样它们元素的值域均为$[0,1]$。
14+
同门控循环单元中的重置门和更新门一样,如图6.7所示,长短期记忆的输入门(input gate)、遗忘门(forget gate)和输出门(output gate)均由输入为当前时间步输入$\boldsymbol{X}_t$与上一时间步隐藏状态$\boldsymbol{H}_{t-1}$,且激活函数为sigmoid函数的全连接层计算得出。如此一来,这三个门元素的值域均为$[0,1]$。
1515

16-
![LSTM中的输入门、遗忘门和输出门的计算。](../img/lstm_0.svg)
1716

18-
假设隐藏单元个数为$h$,给定时间步$t$的小批量输入$\boldsymbol{X}_t \in \mathbb{R}^{n \times d}$(样本数为$n$,输入个数为$d$)和上一时间步隐藏状态$\boldsymbol{H}_{t-1} \in \mathbb{R}^{n \times h}$。
17+
![长短期记忆中输入门、遗忘门和输出门的计算。](../img/lstm_0.svg)
18+
19+
具体来说,假设隐藏单元个数为$h$,给定时间步$t$的小批量输入$\boldsymbol{X}_t \in \mathbb{R}^{n \times d}$(样本数为$n$,输入个数为$d$)和上一时间步隐藏状态$\boldsymbol{H}_{t-1} \in \mathbb{R}^{n \times h}$。
1920
时间步$t$的输入门$\boldsymbol{I}_t \in \mathbb{R}^{n \times h}$、遗忘门$\boldsymbol{F}_t \in \mathbb{R}^{n \times h}$和输出门$\boldsymbol{O}_t \in \mathbb{R}^{n \times h}$分别计算如下:
2021

2122
$$
2223
\begin{aligned}
2324
\boldsymbol{I}_t &= \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xi} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hi} + \boldsymbol{b}_i),\\
2425
\boldsymbol{F}_t &= \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xf} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hf} + \boldsymbol{b}_f),\\
25-
\boldsymbol{O}_t &= \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xo} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{ho} + \boldsymbol{b}_o).
26+
\boldsymbol{O}_t &= \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xo} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{ho} + \boldsymbol{b}_o),
2627
\end{aligned}
2728
$$
2829

@@ -31,37 +32,39 @@ $$
3132

3233
### 候选记忆细胞
3334

34-
和门控循环单元中的隐藏状态前需要计算候选隐藏状态一样,LSTM首先计算候选记忆细胞$\tilde{\boldsymbol{C}}_t$。它的计算同其他门一样,但使用了值域在$[-1, 1]$的tanh函数做激活函数,其入下图所示
35+
接下来,长短期记忆需要计算候选记忆细胞$\tilde{\boldsymbol{C}}_t$。它的计算同上面介绍的三个门类似,但使用了值域在$[-1, 1]$的tanh函数做激活函数,如图6.8所示
3536

36-
![LSTM中的候选记忆细胞计算](../img/lstm_1.svg)
37+
![长短期记忆中候选记忆细胞的计算](../img/lstm_1.svg)
3738

3839

39-
具体来说,候选记忆细胞$\tilde{\boldsymbol{C}}_t \in \mathbb{R}^{n \times h}$的计算为
40+
具体来说,时间步$t$的候选记忆细胞$\tilde{\boldsymbol{C}}_t \in \mathbb{R}^{n \times h}$的计算为
4041

41-
$$\tilde{\boldsymbol{C}}_t = \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xc} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hc} + \boldsymbol{b}_c).$$
42+
$$\tilde{\boldsymbol{C}}_t = \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xc} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hc} + \boldsymbol{b}_c),$$
4243

4344
其中的$\boldsymbol{W}_{xc} \in \mathbb{R}^{d \times h}$和$\boldsymbol{W}_{hc} \in \mathbb{R}^{h \times h}$是权重参数,$\boldsymbol{b}_c \in \mathbb{R}^{1 \times h}$是偏移参数。
4445

4546

4647
### 记忆细胞
4748

48-
当前时间步记忆细胞$\boldsymbol{C}_t \in \mathbb{R}^{n \times h}$的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动:
49+
我们可以通过元素值域在$[0, 1]$的输入门、遗忘门和输出门来控制隐藏状态中信息的流动:这通常可以应用按元素乘法符$\odot$。当前时间步记忆细胞$\boldsymbol{C}_t \in \mathbb{R}^{n \times h}$的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动:
4950

5051
$$\boldsymbol{C}_t = \boldsymbol{F}_t \odot \boldsymbol{C}_{t-1} + \boldsymbol{I}_t \odot \tilde{\boldsymbol{C}}_t.$$
5152

52-
![LSTM中的记忆细胞计算。](../img/lstm_2.svg)
5353

54-
这里遗忘门控制上一步的记忆信息是否传递到这一步,输入门则控制记录多少当前信息。如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。这个设计可以应对循环神经网络中的梯度衰减问题,并更好地捕捉时序数据中间隔较大的依赖关系。
54+
如图6.9所示,遗忘门控制上一时间步的记忆细胞信息是否传递到当前时间步,而输入门则可以控制当前时间步的输入通过候选记忆细胞流入当前时间步。如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。这个设计可以应对循环神经网络中的梯度衰减问题,并更好地捕捉时序数据中间隔较大的依赖关系。
55+
56+
![长短期记忆中记忆细胞的计算。这里的乘号是按元素乘法。](../img/lstm_2.svg)
57+
5558

5659
### 隐藏状态
5760

5861
有了记忆细胞以后,接下来我们还可以通过输出门来控制从记忆细胞到隐藏状态$\boldsymbol{H}_t \in \mathbb{R}^{n \times h}$的信息的流动:
5962

6063
$$\boldsymbol{H}_t = \boldsymbol{O}_t \odot \text{tanh}(\boldsymbol{C}_t).$$
6164

62-
![LSTM中的隐藏状态计算。](../img/lstm_3.svg)
65+
这里的tanh函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出门近似1,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0,记忆细胞信息只自己保留。图6.10展示了长短期记忆中隐藏状态的计算。
6366

64-
这里的tanh函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出门近似1,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0,记忆细胞信息只自己保留。
67+
![长短期记忆中隐藏状态的计算。这里的乘号是按元素乘法。](../img/lstm_3.svg)
6568

6669

6770
### 输出层

0 commit comments

Comments
 (0)