61

论文笔记:Visualizing and understanding recurrent networks

 5 years ago
source link: http://www.zmonster.me/2018/11/10/visualizing-and-understanding-rnn.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者

  • Andrej Karpathy
  • Justin Johnson
  • Li Fei-Fei

观点

  • LSTM 在实践中表现出了非常好的结果,但我们对其性能的来源和限制理解地都还很不够
  • 过去的一些分析都是靠最终测试集上的全局困惑度来评价 LSTM 的效果,并没有在「真实数据」上进行分析,也不够直观

数据集

  • 托尔斯泰的《战争与和平》文本,共 3,258,246 字
  • Linux 内核代码,共 6,206,996 字

模型/实验/结论

模型:

  • RNN,分别尝试层数为 1 层、2 层和 3 层,隐层大小分别尝试 64, 128, 256 和 512,共 12 个模型
  • LSTM,同 RNN
  • GRU,同 RNN

实验和结论

  • 用上述模型在两个数据集上训练语言模型,最后在测试集上计算交叉熵误差,对比三类共 36 个模型之间的结果
  • 对 LSTM/GRU 的 gate 输出分布做可视化分析。如下图所示,图中的小圆圈代表一个神经元,横轴表示该神经元 gate 值超过 0.9 的比例,纵轴是 gate 值小于 0.1 的比例

    77BjqyA.png!web

    其中

    • forget gate 值超过 0.9 的比例很大的神经元,说明它能一直记住比较早之前的信息
    • input gate 值超过 0.9 的比例很大的神经元,说明它对当前输入比较敏感
    • output gate 的值超过 0.9 的比例很大的神经元,没什么意义,单纯的控制大小

    对 LSTM 而言

    • 第一层只有很少一部分 gate 值超过 0.9 或小于 0.1,其比例比较密集地分布在 0 附近,说明大部分都是在 0.1 到 0.9 之间
    • 有一些神经元 forget gate 值超过 0.9 的比例超级大,也就是说它一直都超过 0.9,一直记着很早以前的东西
    • 有一些神经元 forget gate 的值小于 0.1 的比例很大,但没有一直都小于 0.1 的,比例最大在 0.8 左右
    • input gate 倾向于超过 0.9(相对比例大的神经元更多), output gate 的值分布比较均匀

    对 GRU 来说

    • 第一层的 update gate 普遍比较大而 reset gate 普遍比较小,注意本文中的 update gate 相当于 LSTM 中的 input gate
    • 高层不像第一层那么极端,但总体形式差不多,就是 update gate 大而 reset gate 小这样
  • 分析了 LSTM 在《战争与和平》文本上的错误类型

    • ngram 错误,1-9 阶 ngram 模型能预测正确但 LSTM 预测失败的部分
    • 罕见词错误: 既由词频不大于 5 的词导致的错误。这部分错误通过扩充数据集和 pretraining 是可以得到缓解的
    • 词建模错误: 在遇到空格、换行、引号等词分隔符后,预测错了下一个词的第一个字符,和前面个动态长期记忆错误不一样的是,这个相当于在前面的词的基础上要选择一个词,而前面那个相当于是已经知道是什么词了,但是要补全它,这两者的信息量是完全不一样的
    • 标点符号预测错
    • 最后剩余的错误称为 boost error,

结论

  • 多个隐藏层模型比单个隐藏层模型的效果要好
  • LSTM 和 GRU 之间难分伯仲,但都显著好于 RNN
  • LSTM 表现出了对长程结构的记忆能力,如在处理被引号括起来的长文本时,对开头和结尾的引号有特殊的响应
  • 在多层的 LSTM/GRU 中,高层的神经元都开始分化,会有一部分倾向于接收新信息,有一部分则倾向于记住旧的信息
  • GRU 的第一层几乎不怎么使用旧的信息,即使到高层后也更倾向于使用当前输入
  • LSTM 建模长程依赖的能力大大超过 ngram 模型,一个 11MB 的 LSTM 模型效果能略微超过一个 3GB 的 20-gram 模型
  • 对本身明显包含结构的文本(如内核代码)进行建模,当序列长度在 10 以下时,LSTM 和 20-gram 模型的差异不大,但随着序列变长,两者之间的差距逐渐变大,在 Linux 内核代码上,LSTM 能记忆的最大约 70 左右的距离
  • LSTM 在迭代训练的过程中,首先建模了短程依赖,然后在此基础上逐渐地学习到对长程依赖的建模能力,这也是 seq2seq 论文中提到的逆序源语言序列有效的原因,因为这让模型先开始建模短程依赖再去建模长程依赖
  • LSTM 并不能完全利用好最近的一些输入,LSTM 的错误中,有 42% 是 0-9 阶的 ngram 模型能够正确预测的
  • 相信像 Memory Networks 那样,如果能直接对序列中最近的历史进行 attention 操作,那么能够提高 RNNLM 的效果
  • 增大数据集、无监督预训练能提高 LSTM LM 对罕见词的效果
  • 增大模型大小,显著减小了 ngram 错误,但对其他类型的错误却没有明显的改善,这说明光是增大模型大小是不够的,可能需要设计更好、更新的结构

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK