程序员人生 网站导航

Google深度学习笔记 文本与序列的深度模型

栏目:服务器时间:2016-07-14 08:34:27

Deep Models for Text and Sequence

转载请注明作者:梦里风林
Github工程地址:https://github.com/ahangchen/GDLnotes
欢迎star,有问题可以到Issue区讨论
官方教程地址
视频/字幕下载

Rare Event

与其他机器学习不同,在文本分析里,陌生的东西(rare event)常常是最重要的,而最多见的东西常常是最不重要的。

语法多义性

  • 1个东西可能有多个名字,对这类related文本能够做参数同享是最好的
  • 需要辨认单词,还要辨认其关系,就需要过量label数据

无监督学习

  • 不用label进行训练,训练文本是非常多的,关键是要找到训练的内容
  • 遵守这样1个思想:类似的辞汇出现在类似的场景中
  • 不需要知道1个词真实的含义,词的含义由它所处的历史环境决定

Embeddings

  • 将单词映照到1个向量(Word2Vec),越类似的单词的向量会越接近
  • 新的词可以由语境得到同享参数

Word2Vec

  • 将每一个词映照到1个Vector列表(就是1个Embeddings)里,1开始随机,用这个Embedding进行预测
  • Context即Vector列表里的邻居
  • 目标是让Window里相近的词放在相邻的位置,即预测1个词的邻居
  • 用来预测这些相邻位置单词的模型只是1个Logistics Regression, just a simple Linear model

Comparing embeddings

  • 比较两个vector之间的夹角大小来判断接近程度,用cos值而非L2计算,由于vector的长度和分类是不相干的:

  • 最好将要计算的vector都归1化

Predict Words

  • 单词经过embedding变成1个vector
  • 然后输入1个WX+b,做1个线性模型
  • 输出的label几率为输入文本中的辞汇
  • 问题在于WX+b输出时,label太多了,计算这类softmax很低效
  • 解决方法是,筛掉不多是目标的label,只计算某个label在某个局部的几率,sample softmax

t-SNE

  • 查看某个词在embedding里的最近邻居可以看到单词间的语义接近关系
  • 将vector构成的空间降维,可以更高效地查找最近单词,但降维进程中要保持邻居关系(原来接近的降维后还要接近)
  • t-SNE就是这样1种有效的方法

类比

  • 实际上我们能得到的不但是单词的邻接关系,由于将单词向量化,可以对单词进行计算
  • 可以通过计算进行语义加减,语法加减

Sequence

文本(Text)是单词(word)的序列,1个关键特点是长度可变,就不能直接变成vector

CNN and RNN

CNN 在空间上同享参数,RNN在时间上(顺序上)同享参数

  • 在每轮训练中,需要判断至今为之产生了甚么,过去输入的所有数据都对当下的分类造成影响
  • 1种思路是记忆之前的分类器的状态,在这个基础上训练新的分类器,从而结合历史影响
  • 这样需要大量历史分类器
  • 重用分类器,只用1个分类器总结状态,其他分类器接受对应时间的训练,然后传递状态

RNN Derivatives

  • BackPropagation Through time
  • 对同1个weight参数,会有许多求导操作同时更新之
  • 对SGD不友好,由于SGD是用许多不相干的求导更新参数,以保证训练的稳定性
  • 由于梯度之间的相干性,致使梯度爆炸或梯度消失

  • 使得训练时找不到优化方向,训练失败

Clip Gradient

计算到梯度爆炸的时候,使用1个比值来代替△W(梯度是回流计算的,横坐标从右往左看)

  • Hack but cheap and effective

LSTM(Long Short-Term Memory)

梯度消失会致使分类器只对最近的消息的变化有反应,淡化之前训练的参数,也不能用比值的方法来解决
- 1个RNN的model包括两个输入,1个是过去状态,1个是新的数据,两个输出,1个是预测,1个是将来状态

  • 中间是1个简单的神经网络
  • 将中间的部份换成LSTM-cell就可以解决梯度消失问题
  • 我们的目的是提高RNN的记忆能力
  • Memory Cell

3个门,决定是不是写/读/遗忘/写回

  • 在每一个门上,不单纯做yes/no的判断,而是使用1个权重,决定对输入的接收程度
  • 这个权重是1个连续的函数,可以求导,也就能够进行训练,这是LSTM的核心

  • 用1个逻辑回归训练这些门,在输出进行归1化

  • 这样的模型能让全部cell更好地记忆与遗忘
  • 由于全部模型都是线性的,所以可以方便地求导和训练

LSTM Regularization

  • L2, works
  • Dropout on the input or output of data, works

有了上面的模型以后,我们可以根据上文来推测下文,乃至创造下文,预测,挑选最大几率的词,喂回,继续预测……

  • 我们可以每次只预测1个字母,but this is greedy,每次都挑最好的那个
  • 也能够每次多预测几步,然后挑整体几率较高的那个,以减少偶然因素的影响
  • 但这样需要生成的sequence会指数增长
  • 因此我们在多预测几步的时候,只为几率比较高的几个候选项做预测,that’s beam search.

翻译与识图

  • RNN将variable length sequence问题变成了fixed length vector问题,同时由于实际上我们能利用vector进行预测,我们也能够将vector变成sequence

  • 我们可以利用这1点,输入1个序列,到1个RNN里,将输出输入到另外一个逆RNN序列,构成另外一种序列,比如,语言翻译

  • 如果我们将CNN的输出接到1个RNN,就能够做1种识图系统

循环神经网络实践

觉得我的文章对您有帮助的话,给个star可好?

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐