深度学习(四)RNN & Word2Vec

RNN(Recurrent Netural Network)循环神经网络,用来处理和预测序列数据,在语音识别,语言描述,翻译等领域有很好的运用。

传统神经网络结构如CNN是假设所有的input之间是相互独立的,output之间也相互独立,但实际中会存在由前面几个字去推测后面的词,这个时候CNN的假设就不能成立了。

而RNN可以通过时序结构来关联input,记住input之间的关系。

RNN的典型结构如下:

展开之后为:

 

可以看到隐藏层的输入有两个:隐藏层的输入(前一个隐藏层的输出 h)以及原始输入(指某个词的vector x)

具体例子如下:

RNN模型中有个time step的概念,表示记忆的长度,例子中的记忆长度就是4.

但是RNN无法解决长时间依赖的问题,也就是记忆长度不能特别长(容易出现梯度弥散的问题),因此出现了一些改进版的RNN,如LSTM(Long short term memory)

两者的结构对比图如下:

从对比图上可以看出,所有RNN都具有一个重复模块,标准RNN重复模板是比较简单的tanh,而LSTM则是由通过精心设计的称作“门”的结构来去除或者增加信息。

(1)清除无用信息 (遗忘门 forget gate)

(2)添加新的信息

(3)更新细胞状态

(4)输出信息

以上便展示了LSTM的几个重要计算逻辑。

在现实中,我们用的训练数据往往是句子或者词组,因此需要先做一些处理,下面介绍几个句子处理中的常见概念

(1)词向量(把一个词转换成一个向量)

  a. one hot representation

  用一个很长向量表示一个词,向量长度是词典长度,向量中只有元素0和1,1的位置对应词在词典中的位置

  这种方法在NLP中运用的比较多,但也有明显的问题:维度灾难和无法刻画近义词之间的相似性

  b. distributed representation

  以普通向量表示一个词,一般是50维或者100维 (??? how),可以认为是Word embedding(词嵌入)??

 (2)Word2Vec (google提出的基于word embedding的工具或者算法集合)

本质上是构造多层神经网络,input是one-hot vector,通过hidden layer(lookup table)找到对应的vector,在训练过程中不断修正参数,具体图如下:

计算过程如下:

这样一个one hot vector被转换成dense vector,而且维度降低

Word2Vec的主要模式:

  a. CBOW(Continuous Bag of Words), 从当前词的上下文推测当前词语,对小型数据库比较适合

      b. Skip-gram 从当前词语推测词语的上下文

举例如下:

There is a little dog.

CBOW: [There, a] -> [is], [is, little] -> [a], [a, dog] -> [little]

Skip-gram:(skip1) [is] -> [There], [is] -> a, [a] -> [is], [a] -> [little] ....

  c. 复杂度分析 (未完待续)

Word2Vec的主要步骤(未完待续) 

 

posted @ 2018-08-07 18:26  大球和二憨  阅读(2137)  评论(0编辑  收藏  举报