LSTM

1739:RNN、LSTM、word2vec、超参数

2017-10-01  本文已影响124人  nfter

每周学习十小时,这是2017年第39周的学习笔记,上周对RNN有了简单了解,这周更加深入学习,同时学习了word2vec,超参数的调试。

RNN、LSTM、word embedding、word2vec的关系

  1. RNN是解决序列化数据(有时间先后顺序)的问题的,它通过将隐藏层的值传递给下一个隐藏层,记住之前的数据。

x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);U是输入层到隐藏层的权重矩阵,看看我们是怎样用矩阵来表示全连接神经网络的计算的);o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。那么,现在我们来看看W是什么。循环神经网络隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

  1. RNN隐藏层的值在不断传递时,这样计算是指数级的计算,数据一多容易造成梯度爆炸或者梯度消失的问题,LSTM就是来解决这些问题的,它的关键点在于在隐藏层,除了传递表示短期状态s的值,还会传递一个表示长期状态cell state的值。这些值通过三个门forget gate,input gate,output gate来控制。

  2. 计算机只能处理数字,所以要将文字输入到模型时,要将它编码。有一种直观的编码方式,就是独热编码,比如“我喜欢吃西瓜,我不喜欢吃石榴”,首先,我们把这句话中每个单独的字(也可以是词,这里我用字)取出来,就有“我”、“喜”、“欢”、“吃”、“西”、“瓜”、“不”、“石”、“榴”,然后“我”的编码就可以是[1,0,0,0,0,0,0,0,0],"西”的编码就是[0,0,0,0,1,0,0,0,0]。这种编码有个问题,就是字很多的时候,比如有上万个,那编码就变成了1万多个0和1个1的组合,这样编码的计算效率太低。word embedding就是来解决这个问题的:

词嵌入自然语言处理(NLP)中语言模型表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数上的向量。

而word2vec是2013年谷歌的Tomas Mikolov领导的团队发明的一套实现word embedding的模型,这个模型基于神经网络,速度很快。用来实现word embedding的方法还有n-gram和非监督学习等。

总体上如下图:

超参数 hyperparameters

  1. learning rate
    learning rate 是最重要的超参数之一,太大或者太小都不合适。

有一些可以根据实际情况自动调整learning rate的算法,比如tensorflow里面就有AdamOptimizerAdagradOptimizer可以实现。
  1. minibatch size
    一次性把数据集全部训练,这个叫full batch learning,适用于数据量较小的情况下。
    一次训练一个样本,即batch_size = 1,叫做online learning。
    在两者之间的叫mini-batches learning,minibatch size的值太小会导致训练速度太慢,难以收敛,太大会导致计算成本太高,并降低准确度。32,64,128,256是值得尝试的值。

  2. epoch
    一个epoch就是把所有数据完整训练一遍。这个比较简单,越大越好,直到loss的值不再减少。tensorflow里面也有early stopping的支持,就是在loss不再减少时,就停止训练。

  3. 隐藏层
    层数:根据 Andrej Karpathy - https://cs231n.github.io/neural-networks-1/,除了卷积神经网络,其他的层数在3层会比较好。
    个数:


具体可以参考这里
上一篇 下一篇

猜你喜欢

热点阅读