相关讨论

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. 开机自动执行脚本 与 update-rc.d

    http://coderbee.net/index.php/linux/20130524/141 update-rc.d    script_name defaultsupdate-rc.d    s ...

  2. SSR三网免流一键包以及使用教程

    这篇文章只是传统的SSR免流教程 首先拿到一台vps,可以是centos,可以是debian,也可以是ubuntu 使用xshell连接vps 执行一键安装包 wget http://104.224. ...

  3. 解决MongoDB磁盘IO问题的三种方法

    1.使用组合式的大文档 我们知道MongoDB是一个文档数据库,其每一条记录都是一个JSON格式的文档.比如像下面的例子,每一天会生成一条这样的统计数据: { metric: "conten ...

  4. [转]libevent简介和使用

    libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库. 总体来说,libevent有下面一些特点和优势:* 事件驱动,高性能:* 轻量级,专注于网络: * 跨平 ...

  5. sqlserver 对字符串的SUM

    select id,keyword ,max(Confidence) as confidence, TimeRange=stuff((select ','+rtrim(begintime)+'-'+r ...

  6. [zz]利用碎片时间健身

    利用碎片时间健身(上) http://v.163.com/zixun/V96957QH6/VBSQ4D861.html#from=zixunplay_recommended 利用碎片时间健身(下) h ...

  7. wampserver修改mysql默认字符集

    [client] default-character-set=utf8 [mysqld]character_set_server = utf8 重启服务

  8. 黄聪:CamtasiaStudio如何导出视频上传优酷实现高清

  9. [Maven]修改Maven的本地仓库路径

    安装Maven后我们会在用户目录下发现.m2 文件夹.默认情况下,该文件夹下放置了Maven本地仓库.m2/repository.所有的Maven构件(artifact)都被存储到该仓库中,以方便重用 ...

  10. 为什么在ucos向stm32f103移植时说os_cpu_c.c中有三个函数如OS_CPU_SysTickInit()需要注释掉

    我在看os_cpu_c.c代码时对下面这段话困惑了半天总是在百度的帮助下找到了答案 /*  申明几个函数,这里要注意最后三个函数需要注释掉,为什么呢?    OS_CPU_SysTickHandler ...