最后一篇将前面分散在各篇的图全部在这儿汇总一下吧,也供自己以后再回头看看。学习的时候尽量一步一个脚印,每走一步都要让自己尽可能的踏实,这样自己的知识才会非常牢固。并且在写东西的时候能使思维慢下来,慢下来的过程中,常常会发现自己头脑里一晃而过的事儿,认为自己弄明白了,但仔细到细节并要能写出来却发现什么也不清楚,然后就会发现自己很多东西根本就没落实。或许把一些东西写下来非常慢,但很多时候我都发现,慢慢来,反而比较快。好了,下面是正文,就结束rnnlm toolkit源码阅读了。
1.首先是论文中最“常规”RNN结构,如下,关于rnn原理推导,请移步这儿。
2.为了加快计算速度,将输出层分解后的RNN,在我前面的某一篇中介绍过了,但个人感觉不是很细,可以看看参考我列出的第5篇文献
3.反向学习算法中,bptt算法将rnn展开后的图,这里的BPTT算法推导,见这儿。
4.源码中会经常查询一个词,然而当|V|比较大时,这项反复用到的操作就会使速度降低,为了使查找某个单词更快,比如达到O(1),所以构造了三层的查询结构,内部数据结构图如下,对应的源码在另一篇文章中查看searchVocab函数
5.整个rnnlm toolkit源码中的纯rnn部分(即不含ME部分)抽象出来的图如下:
6.在学习算法中,BPTT的描述用的全部是一维数组,图如下:
7.输出层的分解是基于单词分类的,这个分类后的结果可以用如下的数据结构图来描述,分类的算法移步到这儿,见里面带有注释//old classes的部分。
8.这一部分是单独说明神经网络版本的最大熵模型的图解,具体详细的可以参考我列出来的第9篇参考文献。
9.下面部分就是RNN中的最大熵模型的数据结构描述了,仍然是用的一些相互关联的一维数组,这里的基于哈希实现我感觉十分精妙! 很大程度上降低了计算量。
10.最后是RNN+ME的结构图,因为用的是一维数组表示,所以图就会复杂一些,内部的逻辑关联也会复杂一些。
11.最后是训练数据和测试数据用到的PPL计算公式如下,代码里面的c = 10
12.最后把参考文献汇总在这儿(尽管前面每篇开头都有-_-),算是为了完整性啰嗦一把。
- RNNLM - Recurrent Neural Network Language Modeling Toolkit(点此阅读)
- Recurrent neural network based language model(点此阅读)
- EXTENSIONS OF RECURRENT NEURAL NETWORK LANGUAGE MODEL(点此阅读)
- Strategies for Training Large Scale Neural Network Language Models(点此阅读)
- STATISTICAL LANGUAGE MODELS BASED ON NEURAL NETWORKS(点此阅读)
- A guide to recurrent neural networks and backpropagation(点此阅读)
- A Neural Probabilistic Language Model(点此阅读)
- Learning Long-Term Dependencies with Gradient Descent is Difficult(点此阅读)
- Can Artificial Neural Networks Learn Language Models?(点此阅读)
这下全文完,后期继续LM的学习,希望能在找工作前把这些给整理好,加油吧。