GRU Gated Recurrent Unit门控循环单元
先回顾之前学习的重要概念
最简单的神经网络定义
RNN
传统机器翻译:
传统的基于统计的机器学习系统是非常复杂的集合 传统的机器学习基于简单贝叶斯 后验概率等于其先验概率乘上似然 然后除以边缘概率
第一步想要翻译就要做翻译模型 但是翻译的匹配的难度很大 单词可能会一对一 一对多 还有多对多 会形成潜在的组合爆炸 而且不同语言的语序并不一致
解码:实际上就是很复杂的搜索问题 找到最大的假设
深度学习可能会改变上述的问题
定义一个简单的模型
模型的定义 Φ后面跟两个向量 代表会有2个分开的w矩阵在每个向量里
RNN翻译模型扩展:
第一步对于不同的递归神经网络需要配置不同的权重 对于encoding和decoding需要分别设置W
第二:decoder中的隐藏层的输入来自3个方面:前一个时刻的隐藏层、encoder的最后一个隐藏层 c=h_t 前一个预测结果y_t-1
不同的图片相同的思想
第三:使用深度RNN
第四:使用bidirectional encoder
第五:把训练序列用逆序传入可以简化优化器 因为A更可能翻译为X,而梯度消失导致A无法影响输出,倒过来A离输出近一些。逆转词序不会带来“语法语义上的改变”,因为模型学习的就是如何从逆序的原文翻译顺序的译文。但相应的,C就离Y更远了
第六 :主要提高:更好的单元 GRU Gated Recurrent Units 主要思想:保存一些记忆去捕获一些较长依赖的关系 需要有一个模型去学习何时以及如何去做那个 同时还允许错误消息流转 flow 基于输入 这些流转会向不同的方向以不同的强度传递
GRUs :先根据当前输入的词向量和隐藏层计算一个update gate 然后利用相同的方法不同的权重计算reset gate 然后利用reset gate 计算新的记忆
这里的意思是,之前的记忆由reset gate控制,如果reset gate元素都是0,则遗忘之前的事情。比如电影评论的情感分析,“有个文艺的少男爱死了一个平凡的少女,这个平凡的少女也爱死了那个文艺的少男,可两个人就是无法相会巴拉巴拉,真是个无聊的电影”。无论前面说了多少话,起决定性作用的可能就是“无聊”这个词。那么一些GRU可能会说,我遇到了一个情感强烈的词语,我不想让它被之前的记忆冲淡(求和),所以我把reset gate设为0,之前的记忆不起作用,把这个情感词汇写成新的记忆。 而update gate的作用是调节最后的更新,到底时刻t的记忆多少来自之前,多少来自当前:如果z_t是单位向量的话,则隐藏层只是复制前一个时刻的隐藏层,梯度不发生变化(衰减)。
下图中,虚线代表某个gate的调节作用。隐藏层取决于上一个时刻的隐藏层和新的记忆,而update gate负责调节它们的比例,reset gate和输入共同决定新的记忆……
对于GRU 的一些直觉上的感受
Long short term memorise (LSTMs)
基本的结构 输出门 意味着 信息与当前时点是否有关 遗忘门告诉模型什么时候会保留信息和什么时候会忘记
一些可视化
LSTM非常潮 是序列标注、seq2seq任务的首选模型,可以层叠起来形成更深的模型。在数据量特别大的时候特别有用。
那时候的NN模型还是仅限于重新排序传统MT模型产生的结果,而最新的研究就是完全甩开了MT模型:前三用的都是NN。
深度LSTM用于机器翻译:输入原文序列,将最后一个时刻的隐藏层向量PCA降维后可视化 :发现无论词序如何,意义相同的句子在向量空间中更接近。
RNN的最新的进展:
sotfmax的问题 无法预测出从未见过的词对分类问题来讲,你无法指望分类模型给你分出一个训练集中不存在的类。即便是训练集中存在的类,如果样本数很少,模型也很难预测出该类。 对于预测下一个单词的语言模型来讲,也是如此。比如某某女士巴拉巴拉,然后自我介绍说我叫某某。如果某某不存在于训练集中,则模型无法预测出某某。 虽然可以用字符级的模型,但代价实在太大。
考虑用指针来解决这个问题 如果把某某替换为“向前数第10个单词”这样的指针,问题就迎刃而解了。具体做法是,以前100个时刻的隐藏层作为输入,用一个softmax去计算前100个单词是pointer的概率,与原来的词表上的分布混合。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:斯坦福CS224n NLP课程【九】——机器翻译和高级循环神经网络LSTMs和GRUs - Python技术站