相关讨论

http://tieba.baidu.com/p/3960350008

基于教程
http://deeplearning.net/tutorial/lstm.html

因为原教程有些不太直观的地方,展开讲一下
目的:根据IMDB影评网站扒取的文本,及文本对应的对电影的评分(一颗星到五颗星)作为训练集;得到自动分析文本情绪的LSTM分类器;可用来分析任意文本的情绪(积极或消极)
 

理论部分:

模型的时间展开图:


如果一句话有n个词,那么将这n个词用维数为d的向量表示,分别为x0到xn;

这里的LSTM方框是一个又m个LSTM节点组成的阵列;m是模型中LSTM节点的总数。
也就是说x0箭头所指的LSTM和x1所指的LSTM是同一个阵列,只不过它们发生在不同的时间。可以认为这个模型运行了n个时间单位(n为文本长度),每个时间单位t上,LSTM阵列的输入为xt,输出为ht, 其中t<=n;
Mean pooling是对所有时间单位上的ht的平均,得到向量h,再用逻辑回归分类。

如果对上图x0到LSTM到h0放大就是这个样子;其中LSTM阵列中包含m个LSTM单元;
而其中每个单元如L1,有4组输入权重(均为n维向量)与x0连接,且有4组输入权重(均为m维向量)与h0连接。L1将输出一个数作为h0中的第一个元素;

将L1部分再展开:

L1的输入有8个,4个来自xt,分别为xt*Wc, xt*Wi, xt*Wf, xt*Wo; 4个来自h(t-1)分别为ht-1*Uc, ht-1*Ui, ht-1*Uf, ht-1*Uo; 而L1的输出为ht 的一个元素

将L1单个节点展开
其中包含6个标量,分别为\tilde{Ct}, it, Ct, ft, ot, ht
其中展开it为 sigmoid(Wixt + Uiht-1),纸面有限其他的不画了

 

权值更新

连接和计算方法如下

这样在每个时间点t,xt对LSTM阵列的输入权重为4个d*m的矩阵,而ht-1对LSTM阵列的输入权重为4个m*m的矩阵。经过计算后生成ht。
权值更新:
在每一个minibatch,在此例中一个minibatch是16句话(每句话小于100个词多余删掉),计算出logistic regression的cost,然后计算出h 的残差;
并计算出对应的Δh1,Δh2,... Δht
而由于ht和,ht-1存在某种函数关系,能够计算出与Δht对应的Δht-1',这一来自LSTM阵列的惨差应该与来自Δh的残差合并,并继续做误差反传;

即对于每个minibatch,权重应该更新了t次,t即是每句话词的数量;

我double check了一下,理解是正确的;reference:
DLBOOK(2015)page 315

http://www.iro.umontreal.ca/~bengioy/DLbook/rnn.html

Theano中权值更新通过theano.scan实现参考
http://deeplearning.net/software/theano/library/scan.html

keras包

然而keras包(基于theano)搞同样的东西只要30行代码
https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py

测试:

LSTM 分类器笔记及Theano实现的更多相关文章

  1. Highway LSTM 学习笔记

    Highway LSTM 学习笔记 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-4-5   声明 1)该Dee ...

  2. TensorFlow的序列模型代码解释(RNN、LSTM)---笔记(16)

    1.学习单步的RNN:RNNCell.BasicRNNCell.BasicLSTMCell.LSTMCell.GRUCell (1)RNNCell 如果要学习TensorFlow中的RNN,第一站应该 ...

  3. Theano学习笔记:Theano的艰辛安装体验

    http://www.cnblogs.com/hanahimi/p/4127026.html

  4. Theano 学习笔记(一)

    Theano 学习笔记(一) theano 为什么要定义共享变量? 定义共享变量的原因在于GPU的使用,如果不定义共享的话,那么当GPU调用这些变量时,遇到一次就要调用一次,这样就会花费大量时间在数据 ...

  5. TensorFlow之RNN:堆叠RNN、LSTM、GRU及双向LSTM

    RNN(Recurrent Neural Networks,循环神经网络)是一种具有短期记忆能力的神经网络模型,可以处理任意长度的序列,在自然语言处理中的应用非常广泛,比如机器翻译.文本生成.问答系统 ...

  6. 论文笔记【四】Semi-supervised Word Sense Disambiguation with Neural Models

    基于神经模型的半监督词义消歧 Dayu Yuan  Julian Richardson  Ryan Doherty  Colin Evans  Eric Altendorf Google, Mount ...

  7. 使用tensorflow的lstm网络进行时间序列预测

    https://blog.csdn.net/flying_sfeng/article/details/78852816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  8. theano 安装杂记

    0. MinGW MinGW:Windows 下的 g++等linux 下的编译工具: Anaconda 下 MinGW 的安装(进行 windows cmd 界面):conda install mi ...

  9. TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派

    TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 来源:DataCastle数据城堡 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学 ...

随机推荐

  1. Datatables回调函数中文

    Datatables——回调函数 ------------------------------------------------- fnCookieCallback:还没有使用过 $(documen ...

  2. maven笔记

      jar间接依赖:  被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包.   建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了    .conf:  C ...

  3. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  4. openssl创建非认证的https证书(红色的)

    1.生成csr,key openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_co ...

  5. BigInger isProbablePrime

    JAVA BigInteger 成员函数: isProbablePrime public boolean isProbablePrime(int certainty) 如果此 BigInteger 可 ...

  6. Oracle补习班第九天

    Better to light one candle than to curse the darkness. 与其诅咒黑暗,不如点亮烛光! 1,用SQL备份数据库数据文件 sqlplus / as s ...

  7. 作品-网站 - [二次开发] 广联达BIM

    客户地区:北京 基于帝国ECMS二次开发 网址:http://bim.glodon.com 开发性质:二次开发 网站类型:企业级

  8. 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)

    树莓派单独使用时,往往需要触摸屏和软键盘用以方便操作,微雪LCD显示器就能较好的实现这个功能, 正好实验室又买入了一个3B的板子和一个5inch的显示器,便对着官方的安装手册,亲自安装了一次. 一:材 ...

  9. LinkedList

  10. css中 input的button默认原始的样子

    以往我们写css时,让一行文字垂直居中. 会设置line-height等于height比如: 当我把这个原理 放在button上时  会是这个样子的. 以下都是火狐浏览器环境 有没有发现一个现象,他们 ...