Word Embedding/RNN/LSTM

Word Embedding

Word Embedding是一种词的向量表示,比如,对于这样的”A B A C B F G”的一个序列,也许我们最后能得到:A对应的向量为[0.1 0.6 -0.5],B对应的向量为[-0.2 0.9 0.7]。

我们之所以要把每个单词都变成一个向量,是为了便于计算。例如,“查找单词A的同义词”可以通过“在cos距离上找到与单词an最相似的向量”来完成。

[En]

The reason why we want to turn each word into a vector is to facilitate calculation. For example, “finding a synonym for word A” can be done by “finding the most similar vector to word An at a cos distance”.

那么,如何嵌入单词呢?目前,主要有三种算法:

[En]

So how to embed words? At present, there are three main algorithms:

Embedding Layer

Embedding Layer是与特定自然语言处理上的神经网络模型联合学习的单词嵌入。该嵌入方法将清理好的文本中的单词进行one hot编码(热编码),向量空间的大小或维度被指定为模型的一部分,例如50、100或300维。向量以小的随机数进行初始化。Embedding Layer用于神经网络的前端,并采用反向传播算法进行监督。

将编码的单词映射到单词向量,如果使用多层感知器模型MLP,则在输入到该模型之前级联单词向量。如果使用循环神经网络RNN,则可以将每个单词用作序列中的输入。

[En]

The encoded words are mapped to word vectors, and if the multilayer perceptron model MLP is used, the word vectors are cascaded before being input into the model. If you use the cyclic neural network RNN, you can use each word as an input in the sequence.

这种学习嵌入层的方法需要大量的训练数据,这可能会很慢,但您可以学习为特定的文本数据和NLP训练嵌入模型。

[En]

This approach to learning embedded layers requires a lot of training data, which may be slow, but you can learn to train embedded models for both specific text data and NLP.

Word2Vec/ Doc2Vec(Document to Vector)

Word2Vec是由Tomas Mikolov 等人在《Efficient Estimation of Word Representation in Vector Space》一文中提出,是一种用于有效学习从文本语料库嵌入的独立词语的统计方法。其核心思想就是基于上下文,先用向量代表各个词,然后通过一个预测目标函数学习这些向量的参数。

该算法给出了两种训练模型:CBOW(连续词袋模型)和Skip-gram(连续跳过模型)。CBOW将一个词的上下文中的词作为输入,将词本身作为输出,即看到一个上下文,希望猜测这个词及其含义。通过在大型语料库中的训练,我们得到了一个从输入层到隐含层的权重模型,而Skip-gram则将词所在上下文中的词作为输出,将词本身作为输入,即给出一个词,希望预测该词可能的上下文。

[En]

The algorithm gives two training models, CBOW (Continuous Bag-of-Words Model) and Skip-gram (Continuous Skip-gram Model). CBOW takes the word in the context of a word as input, and the word itself as output, that is, seeing a context, hoping to guess the word and its meaning. Through training in a large corpus, we get a weight model from the input layer to the implicit layer, while Skip-gram takes the word in the context of a word as the output, and the word itself as the input, that is to say, give a word, hoping to predict the possible context of the word.

通过在大型语料库中的训练,得到了从输入层到隐含层的权重模型。在给定xx的情况下,预测xxx的模型的输入是词的向量,然后通过中间的DL的各种CNN或RNN模型预测下一个词的概率。最后,通过优化目标函数得到这些词汇向量的值。

[En]

Through training in a large corpus, a weight model from the input layer to the implicit layer is obtained. Given xx, the input of the model for predicting xxx is the vector of words, and then the probability of the next word is predicted through various CNN or RNN models of DL in the middle. Finally, the values of these lexical vectors are obtained by optimizing the objective function.

Word2Vec虽然取得了很好的效果,但模型上仍然存在明显的缺陷,比如没有考虑词序,再比如没有考虑全局的统计信息。

Doc2Vec与Word2Vec的CBOW模型类似,也是基于上下文训练词向量,不同的是,Word2Vec只是简单地将一个单词转换为一个向量,而Doc2Vec不仅可以做到这一点,还可以将一个句子或是一个段落中的所有单词汇成一个向量,为了做到这一点,它只是将一个句子标签视为一个特殊的词。

主题模型

LSA、LDA等主题模型,建立词和主题的关系。

RNN

循环神经网络,是非线性动态系统,将序列映射到序列,主要参数有五个:$[W_{hv}, W_{hh}, W_{oh}, b_h, b_o, h_0] $,典型的结构图如下:

Word Embedding/RNN/LSTM
  • 与普通神经网络一样,RNN有输入层、输出层和隐含层。不同之处在于,RNN在不同的时间t将具有不同的状态,其中在t时间的隐层的输出将在t时间作用于隐层。

    [En]

    * like ordinary neural networks, RNN has input layer, output layer and hidden layer. The difference is that RNN will have different states at different time t, in which the output of the hidden layer at t time will act on the hidden layer at t time.

  • 参数意义是:(W_{hv}):输入层到隐含层的权重参数,(W_{hh}):隐含层到隐含层的权重参数,(W_{oh}):隐含层到输出层的权重参数,(b_h):隐含层的偏移量,(b_o)输出层的偏移量,(h_0):起始状态的隐含层的输出,一般初始为0.

  • 不同时间的州共享相同的权重w和偏移量b

    [En]

    * the states at different times share the same weight w and offset b

RNN的计算方式

Word Embedding/RNN/LSTM

给定一个损失函数 (L(z,y) = \sum_{t=1}^T{L(z_t, y_t)})

RNN因为加入了时间序列,因此训练过程也是和之前的网络不一样,RNN的训练使用的是BPTT(Back Prropagation Through TIme),该方法是由Werbo等人在1990年提出来的。

Word Embedding/RNN/LSTM

上面的算法也就是求解梯度的过程,使用的也是经典的BP算法,并没有什么新鲜的。但是值得一提的是,在 t-1 时刻对 (h_{t−1})的求导值,也需加上t时刻的求导中对(h_{t−1}) 的求导值,因此BPTT也是一个链式的求导过程。

但由于在上述算法的第10行,当训练t-矩时,出现了t-1的参数,因此单个状态的推导变成了整个先前状态的和。

[En]

But because in line 10 of the above algorithm, when training the t-moment, the parameter of tmur1 appears, so the derivation of a single state becomes the sum of the whole previous state.

正因为长期依赖,BPTT无法解决长期依赖的问题(即当前输出与之前的长序列相关,通常十几步也做不了什么),因为BPTT带来了所谓的梯度消失或梯度爆炸问题(即梯度消失/爆炸问题)。

[En]

It is precisely because of the long-term dependency that BPTT cannot solve the problem of long-term dependency (that is, the current output is related to the previous long sequence, usually more than ten steps can do nothing), because BPTT brings the so-called gradient disappearance or gradient explosion problem (the vanishing/exploding gradient problem).

这篇文章很好的解释了为什么会产生梯度消失和为什么会梯度爆炸的问题,其实主要问题就是因为在BPTT算法中,以w为例,其求导过程的链太长,而太长的求导链在以tanh为激活函数(其求导值在0~1之间的BPTT中,连乘就会使得最终的求导为0,这就是梯度消失问题,也就是t时刻已经学习不到t-N时刻的参数了。当然,有很多方法去解决这个问题,如LSTMs便是专门应对这种问题的,还有一些方法,比如设计一个更好的初始参数以及更换激活函数(如换成ReLU激活函数)。

参数量

model.add(Embedding(output_dim=32, input_dim=2800, input_length=380))
model.add(SimpleRNN(units=16))
model.add(Dense(uints=256, activation=relu))
...

model.summary()
#output
simple_rnn_1 (SimpleRNN) param # 784
dense_1 (Dense) param # 4352

其中:784=16+16 16+16_32( (W{hv}) + (W_{hh}) + (b_h))

LSTM

假设我们试着预测最后一个词“我在法国长大……我能说一口流利的法语”。目前的信息表明,下一个单词可能是一种语言的名称,但如果我们需要弄清楚它是什么语言,我们需要之前提到的法国的上下文,而法国距离目前的位置很远。这表明,相关信息与当前预测的位置之间的差距肯定会变得相当大。

[En]

Suppose we try to predict the last word of “I grew up in France… I speak fluent French”. The current information suggests that the next word may be the name of a language, but if we need to figure out what language it is, we need the context of the France mentioned earlier, which is far from the current location. This shows that the gap between the relevant information and the current predicted location must become quite large.

不幸的是,随着这一间隔的增加,RNN失去了学习连接到如此遥远的地方的信息的能力。从理论上讲,RNN绝对可以应对“长期依赖”的问题。人们可以仔细选择参数来解决这类问题的最基本形式,但在实践中,RNN肯定无法成功地学习这些知识。Bengio等人的研究成果。在对这个问题进行深入研究后,他们找到了导致RNN训练非常困难的一些根本原因。

[En]

Unfortunately, as this interval increases, RNN loses its ability to learn information that connects so far away. In theory, RNN can definitely deal with the problem of “long-term dependence”. One can carefully select parameters to solve the most basic form of such problems, but in practice, RNN will certainly not be able to learn this knowledge successfully. Bengio, et al. After an in-depth study of this problem, they found some of the root causes that make it very difficult to train RNN.

然而,幸运的是,LSTM没有这个问题!

[En]

Fortunately, however, LSTM doesn’t have this problem!

LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。

LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!

所有RNN都具有重复神经网络模块的链式形式。在标准的RNN中,这种重复模块的结构非常简单。

[En]

All RNN have a chained form of repetitive neural network modules. In standard RNN, this repeating module has a very simple structure.

Word Embedding/RNN/LSTM
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,以一种非常特殊的方式进行交互。
Word Embedding/RNN/LSTM

核心思想

LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。

Word Embedding/RNN/LSTM
下一步是确定在蜂窝状态中存储了哪些新信息。
[En]

The next step is to determine what new information is stored in the cellular state.

Word Embedding/RNN/LSTM
我们把旧状态与 (f_t) 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 (i_t * \tilde{C}_t)。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
Word Embedding/RNN/LSTM
最后,我们需要确定要输出的值。此输出将基于我们的单元格状态,但它也是经过过滤的版本。
[En]

Finally, we need to determine what value to output. This output will be based on our cell state, but it is also a filtered version.

Word Embedding/RNN/LSTM
到目前为止,我们仍在引入普通的LSTM。但并不是所有的LSTM看起来都一样。事实上,几乎所有包含LSTM的论文都使用次要变体。
[En]

We are still introducing normal LSTM so far. But not all LSTM look the same. In fact, almost all papers containing LSTM use minor variants.

图中顶线的状态s(T)代表长期记忆,而下面的h(T)代表工作记忆或短期记忆。

[En]

The state of the top line in the picture, s (t), represents long-term memory, while the h (t) below represents working memory or short-term memory.

参数量

model.add(Embedding(output_dim=32, input_dim=2800, input_length=380))
model.add(LSTM(32))
model.add(Dense(uints=256, activation=relu))
...

model.summary()
#output
lstm_1 (LSTM) param # 8320

其中:8320=(32+32) _32_4+4*32( (W_o) + (W_C) + (W_i) + (W_f) + (b_o) + (b_C) + (b_i) + (b_f))。

GRU

LSTM有很多变体,其中较大改动的是Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014)提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM模型要简单。效果和LSTM差不多,但是参数少了1/3,不容易过拟合。

Word Embedding/RNN/LSTM

参考:

理解 LSTM 网络

Original: https://www.cnblogs.com/houkai/p/9706716.html
Author: 侯凯
Title: Word Embedding/RNN/LSTM

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6319/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部