这一段在学习RNN和LSTM,做一个学习笔记,免得遗忘了。
RNN会没有限制的进行更新,因此知识的更新会变得很混乱。比如在一个时刻,模型知道一个人在美国,下一个时刻看到这个人在吃寿司,会认为他在日本,再下一个时刻看到北极熊,会把这个人的地点更新为北极。
混乱意味着信息会快速的改变、消失,模型很难保持长时的记忆。所以我们需要这个神经网络去学习如何更新它的信息,让这些知识的更新变得平和一点。
下面是解决的方法。
一、添加遗忘机制。例如,如果一个场景结束的时候,模型应该忘记当前场景的位置,时间,任何关于当前场景的信息。然而,如果一个角色在场景中死掉了,那么模型应该继续记住这个人已经死了。因此,我们需要模型去学习遗忘、记住的机制:当有新的输入时,模型应该知道哪些知识应该保留,哪些应该丢弃。
二、添加保留机制。当模型看到一个新的图片时,它应该去学习是否图片的所有信息都值得使用和保存。
三、根据一和二,当有新输入时,模型会忘记它不再需要的长期记忆,然后学习输入信息的哪些部分值得使用,把这些信息保存到它的长期记忆中。
四、最后,模型需要学习长期记忆的哪一方面需要立即使用。例如,一个人的年龄是一个有用的信息,需要被长期保存(小孩子更可能正在地上爬,成年人可能正在工作),但是年龄信息跟当前的场景可能不相关。因此,模型只是学习它需要关注的部分,而不是一次使用所有的记忆。
RNN会在每一时序步骤中以一个相当不受控制的方式过度改写它的记忆,而LSTM以一个相当精确的方式转换它的记忆:通过应用特殊的学习机制来确定哪些信息应该记住,哪些信息应该更新,应该注重哪些信息。这使得模型可以记录更长时间的信息。
一个前向过程中更新的参数Ct和ht,Ct表示长期记忆,从刚开始到t时刻全部的记忆,ht表示工作记忆,当前t状态需要用到的记忆。
数学表达
1)学习哪些信息需要保留,哪些需要遗忘。
Sigmoid函数是用来筛选信息的,范围(0,1),0表示信息完全丢弃,1表示信息完全继承。
2)接下来我们需要计算可以从当前输入Xt中学习到的信息。Φ是激活函数,通常是tanh。
3)当我们要把从Xt中学习到的信息ltmt’加入到记忆中之前,我们需要学习ltmt’中的哪些信息是有用的,因为不一定输入的Xt中的所有信息都是有用的。使用Sigmoid函数产生的向量进行筛选。
4)接下来更新一下长期记忆。
遗忘后的前一个状态的长期记忆+当前输入信息筛选后的信息。∘表示元素相乘。
5)更新在本状态工作的工作记忆。在这一步骤中,我们学习如何从含有所有记忆信息的长期记忆中,获取对本状态有用的工作记忆。
首先需要学习到一个关注向量。
那么工作向量更新为:
长期记忆,ltmt,通常被称为细胞状态,符号是Ct.
工作记忆,wmt,通常被称为隐状态,符号ht.
记忆向量,remembert,通常被称为忘记门,符号ft.
保留向量,savet,通常被称为输入门(因为它决定了多少的输入可以进入细胞状态),符号it.
关注向量,focust,通常被称为输出门,符号Ot.
一个关于NN的形象例子:
一个关于RNN的形象例子:
一个关于LSTM的形象例子: