您的位置:首页 > 理论基础 > 计算机网络

学习笔记:Deep Learning(四)循环神经网络

2016-11-18 17:30 363 查看

循环神经网络RNN(Recurrent Network)

深度学习面临的两个问题:

1. 补偿出现的词通常更有代表意义,更有利于分类,例如“视网膜病变”,这类词很少很少出现。

2. 用不同的词表达相同的意思,例如“cat”和“kitty”,词具有模糊语义。

监督学习需要大量带标注的训练数据,现实中带标注数据不多,所以我们考虑非监督学习。

深度学习一个重要的理念是:相似的文本往往出现在相似的环境中

根据在线课程,我们从以下几个方面来了解RNN。

No.1 词嵌入模型

我们想要学习预测一个词的上下文,例如“The CAT purrs”和“This kitty hunts mice”,因为意思相同,所以希望模型对cat和kitty做相同的处理(CNN讲过的共享权重),就要用到词嵌入模型。

词嵌入就是把词映射到较小的向量,当词义相近时,向量距离较小,反之较大。

词嵌入可以很好的解决稀疏性问题。

一个比较好的词嵌入模型是word2vec,这里只简单介绍一下,具体对算法的分析移步博客word2vec算法分析



图中例子,想要把词“fox”映射到fox嵌入表示上,然后用此嵌入表示来预测fox的上下文。

用word2vec预测下一个词的时候,非目标词数量非常多(通常是词汇集中的所有词),解决这个问题可以使用Sample Softmax的方法,对非目标词随机采样,既让速度更快,又没有损失性能。



No.2 t-SNE降维

从词嵌入模型得到的词向量使得相似的词可以聚在一起。如何查看呢?

一方面可以用词向量计算寻找近邻域的词;

另一中方式可以使用降维,将多维词向量降到2维,肉眼客观。

如果使用PCA降维,就会丢失太多信息,尤其是词结构的信息,而t-SNE可以保存邻域结构信息。

t-SNE 是一种非线性、无监督的降维算法,随机邻近嵌入方法。

其他降维方法有:PCA,LDA,MDS,LCE,Isomap,DeepAutoEncoder…

需要注意的一个细节:在衡量相似性的时候,余弦距离比L2效果更好,这是因为词嵌入向量的长度与分类无关,词与词之间的角度决定分类。

consine:Vcat∗Vkitty||Vcat||∗||Vkittey||

L2: ||Vcat−Vkitty||22

计算余弦距离时,用Vcat||Vcat|| 归一化效果更好。

No.3 词的类比(word analogies)

通过vector计算进行语义加减、语法加减。

semantic analogies

syntactic analogies

NO.4 RNN

词嵌入考虑的是单个单词的模型,针对不同长度的文本序列,就需要用到RNN。

CNN在空间上共享参数,RNN在时间上共享参数

看图:



在每个时间点上,根据目前序列中的事件xi,做出预测yi。可以认为xi,yi,wi是一个分类器。

假设序列是稳定的,每个时间点可以使用相同的分类器,即:w1=w2=w3…=w

既然是序列,每个时间点都要考虑过去的信息,做法是递归的使用先前分类器的状态,作为之前所发生的时间的总结,即传导R1−>R2−>R3−>...

这样带来的问题是造成非常深的神经网络,可能有成白上千层。

同样使用捆绑法(tying)解决,用单个模型负责总结过去的信息,即:R1=R2=R3=R

这样形成了一个相对简单的重复的单元pattern,即上图虚线内的部分。R是Recurrent Connection层,连接到过去的状态;x连接到输入层。

No.5 BackPropagation Time

计算神经网络中参数的更新,需要反向计算它们随时间的导数。这些导数应用到相同的参数上,进行一次大规模的相关关联的更新,它们共用相同的权重。



如果使用SGD方法,很容易造成梯度爆炸(exploding gradient)或梯度消失(vanishing gradient)。

SGD适用于无关联的参数的更新。

对此,有两种解决方法:

一个简单的解决梯度爆炸的方法是使用梯度剪裁(gradient clipping)

在梯度的模(|Δmax|)增长至过大时,缩小学习的步长。即Δw<−ΔwΔmaxmax(|Δw|,Δmax)

如图:



解决梯度消失问题要困难得多,梯度消失表示模型只会记得近期的事,遗忘了过去的事。有一个优雅略复杂的解决方法:LSTM

上节我们讲到RNN核心单元由x, y, past, future, w组成。w位于中间,是一个典型的神经元,它有一些权重、一些线性函数构成。我们用LSTM单元替代这个神经元,就可以解决梯度消失问题。



No.6 LSTM

LSTM简单模型图:



LSTM重点有三个门:

输入门:input是否写入Memory

输出门:是否从Memory中读取

遗忘门:是否遗忘数据并清除

三个门可以使用σ∈[0.0,1.0]决定,0.0表示否,1.0表示全部,其他数值表示部分。也可以通过一个转换,变成连续的值,这样我们就可以对它进行求导以及使用BP算法了。

进一步:

每个门的阈值由一个基于Wt−1的逻辑回归控制,每个阈值都有一套共享的参数,(输出嵌入了一个反曲函数tanh,使得输出介于-1到1之间),这些函数都是连续、可导的,可以轻而易举的最优化。



关于LSTM,补充更深入的一些知识:



No.7 LSTM的正则化

L2:works

Dropout: input&output works,no connection。

No.8 Beam Search

举例:

文本序列预测下一个字母的时候,RNN在t时刻在生成的多个预测结果中取样,然后根据概率挑出合适的那个元素,添加为序列的新元素……以此类推……

改进:

每次预测时尝试多次取样,生成假定序列,然后以假定序列中的任意一个为基础继续预测,计算每个假定序列中已生成字母的总概率,挑选其中最好的那个,避免一步错步步错。

问题:

采用这种方法,假定序列的数目呈几何增长

Beam Search闪亮登场:

在每步选择中,只保留最可能的几个候选序列,修剪其他分支。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习
相关文章推荐