文章和代码曾经归档至【Github 仓库:https://github.com/timerring/dive-into-AI】或者公众号【AIShareLab】回复 神经网络根底 也可获取。
循环神经网络
序列数据
序列数据是常见的数据类型,前后数据通常具备关联性
例如“Cats average 15 hours of sleep a day”
语言模型
语言模型是自然语言解决 (NLP, Natural Language Processing) 重要技术。
NLP 中常把文本看为离散工夫序列,一段长度为 T 的文本的词顺次为 $\mathrm{W}_{1}, \mathrm{~W}_{2}, \ldots, \mathrm{W}_{\mathrm{T}}$, 其中 $\mathrm{w}_{\mathrm{t}}(1 \leq \mathrm{t} \leq \mathrm{T})$ 是 ** 工夫步 (Time Step)**t 的输入或标签。
语言模型将会计算该序列概率 $\mathrm{P}\left(\mathrm{w}_{1}, \mathrm{w}_{2}, \ldots, \mathrm{w}_{\mathrm{T}}\right)$,例如 Cats average 15 hours of sleep a day,这句话中 T = 8.
语言模型计算序列概率:
$$
\mathrm{P}\left(\mathrm{w}_{1}, \mathrm{w}_{2}, \ldots, \mathrm{w}_{\mathrm{T}}\right)=\prod_{\mathrm{t}=1}^{\mathrm{T}} \mathrm{P}\left(\mathrm{w}_{\mathrm{t}} \mid \mathrm{w}_{1}, \ldots, \mathrm{w}_{\mathrm{t}-1}\right)
$$
例如:P(我, 在, 听, 课) = P(我) * P(在|我)* P(听|我,在)* P(课 | 我,在,听)
统计 ** 语料库(Corpus)** 中的词频,失去以上概率,最终失去 P(我, 在, 听, 课)
毛病:工夫步 t 的词须要思考 t - 1 步的词,其计算量随 t 呈指数增长。
RNN—循环神经网络(Recurrent neural network)
RNN 是针对序列数据而生的神经网络构造,外围在于循环应用网络层参数,防止工夫步增大带来的参数激增,并引入 ** 暗藏状态(Hidden State)** 用于记录历史信息,无效解决数据的前后关联性。
** 暗藏状态(Hidden State)** 用于记录历史信息,无效解决数据的前后关联性,** 激活函数采纳 Tanh,将输入值域限度在(-1,1),避免数值呈指数级变动。** 能够进行如下比照:
RNN 构建语言模型,实现文本生成。假如文本序列:“想”,“要”,“有”,“直”,“升”,“机”。
RNN 个性:
- 循环神经网络的 暗藏状态 能够捕获截至以后工夫步的序列的历史信息;
- 循环神经网络模型参数的数量不随工夫步的减少而增长。(始终是 $W_{hh}$、$W_{xh}$、$W_{hq}$)
$$
\begin{aligned}
\boldsymbol{H}_{t} & =\phi\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h h}+\boldsymbol{b}_{h}\right) \\
\boldsymbol{O}_{t} & =\boldsymbol{H}_{t} \boldsymbol{W}_{h q}+\boldsymbol{b}_{q}
\end{aligned}
$$
RNN 的 通过(穿梭)工夫反向流传(backpropagation through time)
有几条通路,就几项相加。
不便起见,一下别离称为式 1 -4.
$$
\begin{aligned}
\frac{\partial L}{\partial \boldsymbol{W}_{q h}} & =\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{t}}, \frac{\partial \boldsymbol{o}_{t}}{\partial \boldsymbol{W}_{q h}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{o}_{t}} \boldsymbol{h}_{t}^{\top} \\
\frac{\partial L}{\partial \boldsymbol{h}_{T}} & =\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{T}}, \frac{\partial \boldsymbol{o}_{T}}{\partial \boldsymbol{h}_{T}}\right)=\boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{T}} \\
\frac{\partial L}{\partial \boldsymbol{h}_{t}} & =\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t+1}}, \frac{\partial \boldsymbol{h}_{t+1}}{\partial \boldsymbol{h}_{t}}\right)+\operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{o}_{t}}, \frac{\partial \boldsymbol{o}_{t}}{\partial \boldsymbol{h}_{t}}\right) \\
& =\boldsymbol{W}_{h h}^{\top} \frac{\partial L}{\partial \boldsymbol{h}_{t+1}}+\boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{t}} \\
\frac{\partial L}{\partial \boldsymbol{h}_{t}} & =\sum_{i=t}^{T}\left(\boldsymbol{W}_{h h}^{\top}\right)^{T-i} \boldsymbol{W}_{q h}^{\top} \frac{\partial L}{\partial \boldsymbol{o}_{T+t-i}}
\end{aligned}
$$
如上,T=3。能够由第二个式子算出 $L$ 对于 $h_T$ 的偏导。
而后由第三个式子计算 $L$ 对于 $h_t$ 的偏导,留神其中的 $L$ 对于 $h_T$ 的偏导曾经计算实现了,间接带入即可。
而后以此类推,失去一个 $L$ 对于 $h_t$ 的偏导的通式,见第四个式子。
这里能够用第四个通式计算一下 $L$ 对于 $h_1$ 的偏导,如下:
计算残余两个参数,因为通路过多,因而这里再计算通路就相对来说简单了,只须要采纳反向流传的思维即可,将问题拆解。然而后果还是很简单的,如下所示,计算 $W_{hx}$ 的梯度,应用了 $h_t$ 的偏导,同时如上,求 $h_t$ 的偏导还会波及 $h_{t+1}$ 的偏导, 递归上来 … 梯度的计算穿梭了工夫。
不便起见,一下别离称为式 5 -6.
$$
\begin{aligned}
\frac{\partial L}{\partial \boldsymbol{W}_{h x}} & =\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t}}, \frac{\partial \boldsymbol{h}_{t}}{\partial \boldsymbol{W}_{h x}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{h}_{t}} \boldsymbol{x}_{t}^{\top}, \\
\frac{\partial L}{\partial \boldsymbol{W}_{h h}} & =\sum_{t=1}^{T} \operatorname{prod}\left(\frac{\partial L}{\partial \boldsymbol{h}_{t}}, \frac{\partial \boldsymbol{h}_{t}}{\partial \boldsymbol{W}_{h h}}\right)=\sum_{t=1}^{T} \frac{\partial L}{\partial \boldsymbol{h}_{t}} \boldsymbol{h}_{t-1}^{\top} .
\end{aligned}
$$
因而会存在一个问题:梯度随工夫 t 呈指数变动,易引发 梯度隐没 或梯度爆炸。(例如 $W_{hh}$,见式 4${W}_{h h}^{\top}$ 波及一个次方问题,那么 $W_{hh}$ < 1 会使最终趋于 0,引发梯度隐没,而若 $W_{hh}$ > 1 会使最终趋于无穷,引发梯度爆炸)。
GRU—门控循环单元
引入门的循环网络缓解 RNN 梯度隐没带来的问题,引入门概念,来管制信息流动,使模型更好的记住久远期间的信息,并缓解梯度隐没。
- 重置门:哪些信息须要忘记
- 更新门:哪些信息须要留神
激活函数为:sigmoid,值域为 (0, 1),0 示意忘记,1 示意保留。可知,门的值域是(0, 1) 之间。
重置门 是用于候选暗藏状态计算过程当中忘记上一时间步暗藏状态中的哪一些信息。
更新门 的作用是更新以后工夫步暗藏状态的时候,组合上一时间步暗藏状态 $\boldsymbol{H}_{t-1}$。以及以后工夫步的候选暗藏状态 $\tilde{\boldsymbol{H}}_{\mathrm{t}}$ 失去最终的 $\boldsymbol{H}_{t}$。
$$
\begin{aligned}
\boldsymbol{R}_{t} & =\sigma\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x r}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h r}+\boldsymbol{b}_{r}\right) \\
\boldsymbol{Z}_{t} & =\sigma\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x z}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h z}+\boldsymbol{b}_{z}\right)
\end{aligned}
$$
侯选暗藏状态
输出与上一时间步暗藏状态独特计算失去候选暗藏状态,用于暗藏状态计算。通过重置门,对上一时间步暗藏状态进行 选择性忘记,对历史信息更好的抉择。
GRU:
$$
\tilde{\boldsymbol{H}}_{\mathrm{t}}=\tanh \left(\boldsymbol{X}_{\mathrm{t}} \boldsymbol{W}_{\mathrm{xh}}+\left(\boldsymbol{R}_{\mathrm{t}} \odot \boldsymbol{H}_{\mathrm{t}-1}\right) \boldsymbol{W}_{\mathrm{hh}}+\boldsymbol{b}_{\mathrm{h}}\right)
$$
试比拟原来的 RNN:
$$
\boldsymbol{H}_{\mathrm{t}}=\phi\left(\boldsymbol{X}_{\mathrm{t}} \boldsymbol{W}_{\mathrm{xh}}+\boldsymbol{H}_{\mathrm{t}-1} \boldsymbol{W}_{\mathrm{hh}}+\boldsymbol{b}_{\mathrm{h}}\right)
$$
暗藏状态
暗藏状态由 候选暗藏状态 及上一时间步暗藏状态 组合得来
$$
\boldsymbol{H}_{\mathrm{t}}=\boldsymbol{Z}_{\mathrm{t}} \odot \boldsymbol{H}_{\mathrm{t}-1}+\left(1-\boldsymbol{Z}_{\mathrm{t}}\right) \odot \tilde{\boldsymbol{H}}_{\mathrm{t}}
$$
GRU 特点:
门机制采纳 Sigmoid 激活函数,使门值为(0,1),0 示意忘记,1 示意保留。
若更新门自第一个工夫步到 t – 1 工夫过程中,始终放弃为 1,信息可无效传递到以后工夫步。
$$
\boldsymbol{H}_{\mathrm{t}}=\boldsymbol{Z}_{\mathrm{t}} \odot \boldsymbol{H}_{\mathrm{t}-1}+\left(1-\boldsymbol{Z}_{\mathrm{t}}\right) \odot \tilde{\boldsymbol{H}}_{\mathrm{t}}
$$
重置门:用于忘记上一时间步暗藏状态
$$
\tilde{\boldsymbol{H}}_{\mathrm{t}}=\tanh \left(\boldsymbol{X}_{\mathrm{t}} \boldsymbol{W}_{\mathrm{xh}}+\left(\boldsymbol{R}_{\mathrm{t}} \odot \boldsymbol{H}_{\mathrm{t}-1}\right) \boldsymbol{W}_{\mathrm{hh}}+\boldsymbol{b}_{\mathrm{h}}\right)
$$
更新门:用于更新以后工夫步暗藏状态
$$
\boldsymbol{H}_{\mathrm{t}}=\boldsymbol{Z}_{\mathrm{t}} \odot \boldsymbol{H}_{\mathrm{t}-1}+\left(1-\boldsymbol{Z}_{\mathrm{t}}\right) \odot \tilde{\boldsymbol{H}}_{\mathrm{t}}
$$
LSTM—长短期记忆网络
LSTM
引入 3 个门 和记忆细胞,管制信息传递
- 忘记门:哪些信息须要忘记
- 输出门:哪些信息须要流入以后 记忆细胞
- 输入门:哪些记忆信息流入暗藏状态
- 记忆细胞:非凡的暗藏状态,记忆历史信息
$$
\begin{aligned}
\boldsymbol{I}_{t} & =\sigma\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x i}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h i}+\boldsymbol{b}_{i}\right) \\
\boldsymbol{F}_{t} & =\sigma\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x f}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h f}+\boldsymbol{b}_{f}\right) \\
\boldsymbol{O}_{t} & =\sigma\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x o}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h o}+\boldsymbol{b}_{o}\right)
\end{aligned}
$$
候选记忆细胞
记忆细胞:可了解为 非凡暗藏状态,贮存历史时刻信息
$$
\tilde{\boldsymbol{C}}_{\mathrm{t}}=\tanh \left(\boldsymbol{X}_{\mathrm{t}} \boldsymbol{W}_{\mathrm{xc}}+\boldsymbol{H}_{\mathrm{t}-1} \boldsymbol{W}_{\mathrm{hc}}+\boldsymbol{b}_{\mathrm{c}}\right)
$$
记忆细胞与暗藏状态
记忆细胞由 候选记忆细胞 及上一时间步记忆细胞 组合得来
$$
\boldsymbol{C}_{t}=\boldsymbol{F}_{t} \odot \boldsymbol{C}_{t-1}+\boldsymbol{I}_{t} \odot \tilde{\boldsymbol{C}}_{\mathrm{t}}
$$
由输入门管制记忆细胞信息流入 暗藏状态
$$
\boldsymbol{H}_{\mathrm{t}}=\boldsymbol{O}_{\mathrm{t}} \odot \tanh \left(\boldsymbol{C}_{\mathrm{t}}\right)
$$