博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ud730深度学习(三)——LSTM(unfinished)
阅读量:6697 次
发布时间:2019-06-25

本文共 2101 字,大约阅读时间需要 7 分钟。

LSTM(Long Short-TermMemory)是一个RNN(循环神经网络)架构,被设计用来解决卷积RNN的梯度消失和爆炸问题。

 

传统的LSTM在循环隐藏层包含名叫memory blocks的特殊单元。

   memory blocks包含具有self-connections的memory cell,self-connections用来存储记忆网络的时间状态,以及名叫gates的特殊乘法单元以控制信息流。

   每个memory block都包含一个input gate,控制进入memorycell的输入激活流,和一个output gate,控制进入到网络其余部分的单元激活流。

   forget gate在输入之前,衡量单元的内部状态,然后适应性地忘记或者重置单元的记忆。用f表示。

   另外,还有一个peepholeconnections连接内部单元到gate以学习输出。

标准的LSTM网络包括输入层,循环LSTM层和输出层。另外,我们还加了projection和recurrent以解决计算太复杂的问题。

一个LSTM网络通过下列公式来计算从输入序列到输出序列的映射,t=1~T。

其中W表示权重矩阵(比如wix是input gate到输入的权重矩阵),b表示误差向量,σ表示logistic函数,这些都和输出层的激活向量m大小相同。⊙是向量的逐元素乘积,g和h都是激活函数,通常选择tanh。i表示input gate,f表示forget gate,o表示output gate,c表示cell激活向量。

 

任务 6: LSTMs

训练一个一个长短期记忆网络预测字符串

问题1

LSTM的cell包括4个矩阵乘积,使用单个矩阵乘法简化该表达。

源代码忽略了w*c这一项。看到LSTM的Input gate、Forget gate、Memory cell和Output gate的计算方法一样,因此设置一个gate_count,把四组参数分别合并,一次计算,再分别取出。

问题2

我们想要让LSTM学习二元词,而可能的二元词“ab”等的数量很大,直接使用1-hot向量表示他们并把他们输入LSTM可能会导致非常大的稀疏度,浪费计算量。

a)        使用词向量表示输入,把词向量输入LSTM单元。

b)       基于上述的LSTM,写一个二元词的LSTM。

c)        使用dropout,具体详见

 

a,b 用词向量表示输入,写一个二元词的LSTM

对于单个单词,单词量是27(包括空格),二元词的单词量设为bi_voc: 27*27=729,设单个词向量大小为embeddings_size,则需要729个这样的词向量。

获取数据:BatchGenerator不再生成one-hot-encoding的向量作为输入,而是直接生成二元词对应的index列表,index列表的取值范围为[0,729)。获取的数据形状为(num_rollings+1, batch_size),int型,其中前num_unrollings个输入数据,后num_unrollings个是输出数据。

输入数据input:转化大小为(num_unrollings,batch_size, embedding_size)的矩阵,通过lstm_cell,输出一个矩阵outputs,大小为(batch_size, num_nodes),其中num_nodes是节点数。通过tf.nn.xw_plus_b(tf.concat(0,outputs),w, b)得到logits,大小为(batch_size*num_unrollings, bi_voc)。

已知的输出数据label:因为要将logits和输出数据进行交叉熵和softmax计算损失的运算,因此要将label转化为和logits大小一致的矩阵。不需要将label转化为词向量。bigramonehot是一个bi_voc*bi_voc的单位矩阵。通过tf.gather函数,将label转化为one-hot编码。

取样验证:只有一个batch,不需要unrolling。在对验证数据做转换时,主要依赖one_hot_voc函数

 

 

 

 

另外:

1.      tf.concat(concat_dim,values,name='concat')

concat_dim:值范围是[0,rank(values)-1]。等于0,表示沿着第一维连接tensor;等于1,表示沿着第二维度连接tensor,……。

values:tensor值列表

文档中写错了。

2.      tf.reduce_mean中出现loss为0的现象???????????

3.       dropout略吧

 

参考资料:

1.      LONG SHORT-TERM MEMORY BASEDRECURRENT NEURAL NETWORK

ARCHITECTURES FOR LARGE VOCABULARY SPEECHRECOGNITION

2.      

3.      

 

转载于:https://www.cnblogs.com/mandalalala/p/6798257.html

你可能感兴趣的文章
3分钟学会SVN:SVN快速上手
查看>>
ZooKeeper(二)ZooKeeper能做什么?
查看>>
【Java学习】JDBC可以再深一点理解
查看>>
阿里云上Kubernetes集群联邦
查看>>
react 项目总结
查看>>
Go编程技巧--io.Reader/Writer
查看>>
WordPress插件开发-创建、停用、删除插件
查看>>
从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL
查看>>
超级丑数
查看>>
【前端】这可能是你看过最全的css居中解决方案了~
查看>>
简单计算器 (关于栈的一种应用)
查看>>
js异步解决方案 --- 回调函数 vs promise vs generater/yield vs async/await
查看>>
DEX加密效果分析
查看>>
Spring核心接口之Ordered
查看>>
简单解释什么是 依赖注入 和 控制反转
查看>>
CentOS7种搭建FTP服务器
查看>>
从北京回来的年轻人,我该告诉你点什么?
查看>>
一起学并发编程 - 优雅关闭
查看>>
Linux基础
查看>>
JavaScript中错误正确处理方式,你用对了吗?
查看>>