文章目录
1. 什么是RNN
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)
1.1 RNN的应用
- 文本生成(生成序列)
- 机器翻译
- 看图说话
- 文本(情感)分析
- 智能客服
- 聊天机器人
- 语音识别
- 搜索引擎
- 个性化推荐
1.2 为什么有了CNN,还要RNN?
- 传统神经网络(包括CNN),输入和输出都是互相独立的。图像上的猫和狗是分隔开的,但有些任务,后续的输出和之前的内容是相关的。例如:我是中国人,我的母语是____。这是一道填空题,需要依赖于之前的输入。
- 所以,RNN引入“记忆”的概念,也就是输出需要依赖于之前的输入序列,并把关键输入记住。循环2字来源于其每个元素都执行相同的任务。
- 它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来存储之前时间步的信息。
1.3 RNN的网络结构
首先先上图,然后再解释:
现在我们考虑输⼊数据存在时间相关性的情况。假设 X t ∈ R n ∗ d X_t\in_{}\mathbb{R}^{n*d} Xt∈Rn∗d 是序列中时间步t的小批量输⼊, H t ∈ R n ∗ h H_t\in_{}\mathbb{R}^{n*h} Ht∈Rn∗h 是该时间步的隐藏变量。那么根据以上结构图当前的隐藏变量的公式如下:
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=\phi(X_tW_{xh}+H_{t-1}W_{hh}+b_h) Ht=ϕ(XtWxh+Ht−1Whh+bh)
从以上公式我们可以看出,这⾥我们保存上⼀时间步的隐藏变量 H t − 1 H_{t-1} Ht−1,并引⼊⼀个新的权重参数,该参数⽤来描述在当前时间步如何使⽤上⼀时间步的隐藏变量。具体来说,时间步 t 的隐藏变量的计算由当前时间步的输⼊和上⼀时间步的隐藏变量共同决定。 ϕ \phi ϕ 函数其实就是激活函数。
我们在这⾥添加了 H t − 1 W h h H_{t-1}W_{hh} Ht−1Whh ⼀项。由上式中相邻时间步的隐藏变量 H t 和 H t − 1 H_t 和H_{t-1} H