zoukankan      html  css  js  c++  java
  • ud730深度学习(三)——LSTM(unfinished)

    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,具体详见https://arxiv.org/abs/1409.2329

    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 http://arxiv.org/pdf/1402.1128v1.pdf

    2.      http://www.jianshu.com/p/45dbfe5809d4

    3.      https://github.com/rudolfix/udacity_deeplearn

  • 相关阅读:
    神墓
    【转】卷积神经网络
    【转】Deep Learning(深度学习)学习笔记整理系列之(八)
    【转】Deep Learning(深度学习)学习笔记整理系列之(七)
    【转】Deep Learning(深度学习)学习笔记整理系列之(六)
    【转】Deep Learning(深度学习)学习笔记整理系列之(五)
    【转】Deep Learning(深度学习)学习笔记整理系列之(四)
    【转】Deep Learning(深度学习)学习笔记整理系列之(三)
    【转】Deep Learning(深度学习)学习笔记整理系列之(二)
    mariadb connector bug
  • 原文地址:https://www.cnblogs.com/mandalalala/p/6798257.html
Copyright © 2011-2022 走看看