学习笔记: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:worksDropout: input&output works,no connection。
No.8 Beam Search
举例:文本序列预测下一个字母的时候,RNN在t时刻在生成的多个预测结果中取样,然后根据概率挑出合适的那个元素,添加为序列的新元素……以此类推……
改进:
每次预测时尝试多次取样,生成假定序列,然后以假定序列中的任意一个为基础继续预测,计算每个假定序列中已生成字母的总概率,挑选其中最好的那个,避免一步错步步错。
问题:
采用这种方法,假定序列的数目呈几何增长
Beam Search闪亮登场:
在每步选择中,只保留最可能的几个候选序列,修剪其他分支。
相关文章推荐
- 循环神经网络(RNN, Recurrent Neural Networks)学习笔记:源码分析(一)
- 神经网络学习笔记-02-循环神经网络
- 深度学习笔记四循环神经网络RNN
- 神经网络学习笔记-03-循环神经网络-反向传播计算公式的证明
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(5-1)-- 循环神经网络
- 深度学习(Deep Learning)读书思考七:循环神经网络二(LSTM)
- 七月算法深度学习 第三期 学习笔记-第七节 循环神经网络与自然语言处理
- 学习笔记TF053:循环神经网络,TensorFlow Model Zoo,强化学习,深度森林,深度学习艺术
- tensorflow 学习笔记11 最简单的循环神经网络(RNN)
- 《Deep Learning》学习5——循环神经网络梯度计算
- Deep Learning 学习笔记(三):神经网络反向传播算法推导
- Deep Learning 学习笔记(7):神经网络的求解 与 反向传播算法(Back Propagation)
- 神经网络学习笔记-02-循环神经网络
- 学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习
- 学习笔记:Deep Learning(二)深度神经网络以及正则化
- 王小草【深度学习】笔记第六弹--循环神经网络RNN和LSTM
- 神经网络学习笔记-02-循环神经网络
- Deep Learning 学习笔记(6):神经网络( Neural Network )
- 深度学习笔记(七) RNN循环神经网络
- 七月算法深度学习 第三期 学习笔记-第八节 循环神经网络与相关应用