Recurrent neural network language modeling toolkit 源码内部数据结构图解

最后一篇将前面分散在各篇的图全部在这儿汇总一下吧,也供自己以后再回头看看。学习的时候尽量一步一个脚印,每走一步都要让自己尽可能的踏实,这样自己的知识才会非常牢固。并且在写东西的时候能使思维慢下来,慢下来的过程中,常常会发现自己头脑里一晃而过的事儿,认为自己弄明白了,但仔细到细节并要能写出来却发现什么也不清楚,然后就会发现自己很多东西根本就没落实。或许把一些东西写下来非常慢,但很多时候我都发现,慢慢来,反而比较快。好了,下面是正文,就结束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.最后把参考文献汇总在这儿(尽管前面每篇开头都有-_-),算是为了完整性啰嗦一把。


  1. RNNLM - Recurrent Neural Network  Language Modeling Toolkit(点此阅读)
  2. Recurrent neural network based language model(点此阅读)
  3. EXTENSIONS OF RECURRENT NEURAL NETWORK LANGUAGE MODEL(点此阅读)
  4. Strategies for Training Large Scale Neural Network  Language Models(点此阅读)
  5. STATISTICAL LANGUAGE MODELS BASED ON NEURAL  NETWORKS(点此阅读)
  6. A guide to recurrent neural networks and backpropagation(点此阅读)
  7. A Neural Probabilistic Language Model(点此阅读)
  8. Learning Long-Term Dependencies with Gradient Descent is Difficult(点此阅读)
  9. Can Artificial Neural Networks Learn Language Models?(点此阅读)


这下全文完,后期继续LM的学习,希望能在找工作前把这些给整理好,加油吧。

猜你喜欢

转载自blog.csdn.net/a635661820/article/details/44808727