一. RNN
1. RNN作用是什么?
RNN是一种可以具有前后记忆的一种特殊的神经网络,它不仅考虑当前时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能.当前节点的输出是基于上一个节点的状态加上当前节点的输入。这样的神经网络是具有上下文关系对应的,后面的信息是基于前面的信息而得出的,几乎所有和时间序列有关的数据我们都可以用循环神经网络进行训练。
2. RNN的应用
之前已经说过:RNN的应用范围非常广泛,凡是考虑时间先后顺序的问题都可以使用RNN来解决,这里主要说一下几个常见的应用领域:
① 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理
② 机器翻译, 机器写小说
③ 语音识别
④ 图像描述生成
⑤ 文本相似度计算
⑥ 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域。
3. RNN模型
上图是一个折叠起来的RNN,我们看看他展开之后是怎样。
这里隐藏层展示了3个神经元节点,第一个节点的状态是St-1,下一个隐藏层节点的输出就是由St-1和下一个的输入Xt决定的。以此类推。 各个节点的参数计算公式:
其中,隐藏层神经元节点的个数代表着这一层神经网络的输出维度,同时也是下一层的输入维度。
假如,现在有一个28*28的矩阵,我设置,隐藏层为一层,隐藏层节点为28个,输入的维度为28,所以隐藏层的第一个节点输入为矩阵的第一行,第二个节点输入为矩阵第二行......以此类推,第28个节点的输入为矩阵第28行,这样就得到了28个输出,下一层假如定义一个全连接层,那么全连接层的输入就是28维度的。
二. LSTM(长短时间记忆)改进
1. 为何改进
我们知道神经网络的反向传播算法,RNN也不例外,它运用的也是反向传播算法,可是问题在于,如果隐藏层节点过多的情况下,如果梯度<1,每一层都小于0,那么乘起来可能就很接近于0了,那么就是说前面的因素对于后面的影响是非常小的。这就是梯度消失。相应的,梯度爆炸就是如果梯度>1,那么乘起来很有可能就是一个无限大的数,这就叫梯度爆炸。为了预防zhey这样的情况发生,LSTM应运而生。
2. 原理
普通的RNN只有一个状态码h,而LSTM增加了一个状态码C,也就是有两个状态码,C这个状态码就是可以去遗忘掉一些没用的信息的:
LSTM的原理就是有了三个门的概念:遗忘门,输入门,输出门。也就是说这个模型它可以过滤出前后关联不大的信息将其忘记掉,而只要前后文关联比较紧密的信息。
输入门决定了有多少信息可以保存到下一个Ct;
遗忘门决定了上一个Ct-1有多少信息可以保存到Ct。
3. 模型
(1)细胞状态:
(2)遗忘门:下图中输入的有上一序列的隐藏状态ht−1和本序列数据xt,通过一个**函数,一般是sigmoid,得到遗忘门的输出ft。由于sigmoid的输出ft在[0,1]之间,因此这里的输出ft代表了遗忘上一层隐藏细胞状态的概率。也可以理解为有(多少%)的数据可以保留下来。用数学表达式即为:
(3)输入门:
(4)细胞更新:正常RNN应该直接是Ct-1+it*at
(5)输出门:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:机器学习【3】:RNN(循环神经网络),LSTM改进 - Python技术站