循环序列模型

为什么选择序列模型


数学符号

  • 输入$x^{}$
  • 输出$y^{}$
  • 序列长度Tx
  • 词向量one-hot编码

RNN模型

用普通神经网络的问题

  • 输出和输入维度不对应
  • 序列前后不存在联系

解决,引入RNN

a<1>=g1(waaa<0>+w<ax>x1+ba)y^=g2(wyaa<1>+by)

更一般情况

a<t>=g1(waaa<t1>+w<ax>xt+ba)y^=g2(wyaa<t>+by)

进一步化简

a<t>=g1(wa[a<t1>,xt]+ba)y^=g2(wyaa<t>+by)

前向传播

RNN常用激活函数

  • tanh
  • ReLU

通过时间的反向传播

单个单元Loss Function

L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y<t>)log(1y^<t>)

Loss function

L(y^<t>,y<t>)=t=1TnL<t>(y^<t>,y<t>)

RNN反向传播计算

不同类型的RNN结构

多对一

一对一

一对多

语言模型和序列生成

语言模型所做的就是,它会告诉你某个特定的句子它出现的概率是多少

语言模型建立步骤

  • 获取大量数据集
  • 句子标记化
  • 构建RNN

RNN梯度消失的问题

RNN存在问题

  • 缺乏长期记忆,如cat和were
  • 梯度爆炸

如何解决?

  • GRU
  • LSTM

GRU

cell单元

  • 功能:记忆c^<t>=tanh(Wc[c<t1>,x<t>]+bc)

    记忆门

    Γu=σ(Wu[c<t1>,x<t>]+bu)

GRU简化模型

c<t>=Γc^<t>+(1Γu)c<t1>

相关性

Γr=σ(Wr[c<t1>,x<t>]+br)c^<t>=tanh(Wc[Γrc<t1>,x<t>]+bc)

LSTM

LSTM模型图

LSTM单元

  • 更新门
  • 遗忘门
  • 输出门
  • 激活函数
  • 相关性门

LSTM的前向传播

LSTM反向传播

门求偏导

参数求偏导

参数更新

双向RNN

深层RNN


自然语言处理和词嵌入

词汇表征

one-hot编码的缺点

  • 每个词孤立,泛化能力不强
  • 数据量太大

如何改进?

应用特征向量

t-SNE 算法

将一维词向量转化为二维可视化

使用词嵌入

词嵌入做迁移学习的方法

  • 先从大量的文本集中学习词嵌入。一个非常大的文本集,或者下载预训练好的词嵌入模型
  • 用这些词嵌入模型把它迁移到新的只有少量标注训练集的任务中,比如说用这个300维的词嵌入来表示的单词。这样做的一个好处就是可以用更低维度的特征向量代替原来的10000维的one-hot向量,现在你可以用一个300维更加紧凑的向量。尽管one-hot向量很快计算,而学到的用于词嵌入的300维的向量会更加紧凑。

  • 在你的任务上训练模型时,在你的命名实体识别任务上,只有少量的标记数据集上,你可以自己选择要不要继续微调,用新的数据调整词嵌入。实际中,只有这个第二步中有很大的数据集你才会这样做,如果你标记的数据集不是很大,通常我不会在微调词嵌入上费力气。

词嵌入的特性

  • 类比推理
emanewomen=[10.010.030.09][10.020.020.01]=[20.010.010.08][2000]ekingequeen=[0.950.0930.700.09][0.970.950.690.01]=[1.920.020.010.01][2000]

emanewomanekingequeen

如何反映相似度?

余弦相似度

sim(u,v)=uTv|u|2|v|2

嵌入矩阵

学习词嵌入其实是学习一个嵌入矩阵

Eoi=ei

学习词嵌入

skip-gram

输入:预测的词汇前n个单词,上下文

输出:softmax的rank

  • 随机生成一个嵌入矩阵
  • 学习嵌入矩阵参数

Word2Vec

学习映射关系

ocEecosoftmaxy^
  • 随机选择目标单词上下文的另一个单词
  • 输入one-hot向量
  • 监督学习

softmax:

p(t|c)=eθtTecj=110000eθtTec

存在问题

softmax运算量太大

解决方法

  • 分级
  • 负采样

CBOM和skip-gram

负采样(Negative Sampling)

  • 给定一对单词和target
  • 使用逻辑回归

P(y=1|c,t)=σ(θtTec)
  • 输入one-hot向量
  • 传递给嵌入矩阵
  • 得到10000个逻辑回归问题
  • 只选取其中K个进行训练
  • 转化为K个二分类问题

Glove(global vectors for word represengtation)

  • xij:单词i和单词j在上下文出现的次数
minimizei=110000j=110000f(xij)(θiTej+bibj+logxij)2

情感分类

词嵌入除偏(Debiasing Word Embeddings)

  • 求平均
  • 中和
  • 均衡步

序列模型和注意力机制(Sequence models & Attention mechanism

基础模型

应用

  • 机器翻译
  • 语言识别

机器翻译

  • 输入法语,输出英语
  • 网络结构:LSTM或GR

图片描述

  • 输入图片
  • 进入卷积神经网络如AlexNet
  • 把softmax单元更换为RNN结构
  • 输出描述图片的序列

选择最可能的句子(Picking the most likely sentence)

语言模型和机器翻译模型的区别

  • 语言模型以零向量开始,翻译模型从句子开始
  • 翻译模型为条件语言模型

最大化以下式子

P(y<1>,...,t<Ty>|x)
  • 我们需要一次性输出整个句子而不是一个单词
  • 运算量太大

贪心搜索是一种来自计算机科学的算法,生成第一个词的分布以后,它将会根据你的条件语言模型挑选出最有可能的第一个词进入你的机器翻译模型中,在挑选出第一个词之后它将会继续挑选出最有可能的第二个词,然后继续挑选第三个最有可能的词,这种算法就叫做贪心搜索。

  • beam widthB=3,选择softmax前三个最大值

  • 输入句子,如“Jane visite l’Afrique en Septembre”
  • 选择第一个单词,保留前三的可能性
  • 确认单词对的最大可能性
  • 继续重复该步骤

Beam search 改进

Length normalization

argmaxt=1TyP(y<t>|x,y<1>,...,y<t1>)

加入log函数

argmaxt=1TylogP(y<t>|x,y<1>,...,y<t1>)

加入参数α

1Tyαargmaxt=1TylogP(y<t>|x,y<1>,...,y<t1>)

how to choose Beam width B

  • B=1贪心算法
  • B过大,计算量大,效果没有显著提升

Beam search 误差分析

  • P(y|x)>P(y^|x)束搜索算法出错
  • P(y|x)<P(y^|x)RNN模型出错

RNN实际上是一个编码器合解码器

如何评价一个翻译系统的好坏

  • 与人工翻译进行对比
  • 观察输出是否在参考中
  • 每个单词加入计分上限

Blue score

考虑词组得分

注意力模型(Attention Model)

长句子的问题

blue score降低

注意力权重α<t,t>

第t个输出单词对应第t‘个输入单词的权重

c<t>=tα<t,t>a<t>α<t,t>=exp(e<t,t>)t=1Txexp(e<t,t>)


网络结构梳理

activatextatat,st1etsoftmax:eαα,acactivatecsstyt

语音识别

  • 输入音频
  • 输出文字序列

phonemes方法

将声音分解为最基本的音位

CTC cost(Connectionist temporal classification)

  • 折叠重复字符

触发字检测(Trigger Word Detection)