第一周
1.1 Why RNN
因为牛逼;
在语言识别,音乐生成,情绪分类,DNA序列分析,机器翻译,视频活动识别,实体命名识别等领域有出色表现
1.2 数学符号
x一个序列,有x1,x2,..., Tx代表长度,词的one-hot表示法
1.3 RNN
标准NN问题:
1)不同case的 输入,输出长度会变,NN处理不了
2)不同位置上,文本的特征不共享(如Harry在x1,x5都代表人名)
RNN结构
前向传播
简化
1.4 时间反向传播
这里的权重是共享的,针对不同的xi输入,权重都是Wa
1.5 不同类型RNN
多对多,一对多,多对一
1.6 语言模型和序列生成
啥是语言模型? 一个句子缺个单词,填哪个好 ,选P(sentence)大的。语言模型是评估不同句子,及不同备选词出现的概率
怎么训练语言模型?先构建很大的语料库,用大量语言文本,经过tokenize标签化,转化为one-hot向量,(UKN)
RNN按序列一个个xi喂进去,根据cost调整学习;在生成序列时,前面预测出的yi会作为特征来用于接下来的预测
1.7 新序列采样
看看训好的RNN到底学到了啥,让它自己生成一个序列,一般a0=0,x1=0
介绍一下character-level 语言模型,也可以,但不如基于词的模型捕捉那么长
1.8 RNN的梯度消失
梯度爆炸也是一个问题,但最后数据都溢出了,容易发现;可通过梯度裁剪gradient clipping解决
因此梯度消失是训练中主要的问题,以长句子的单复数举例,前面的词对后面词的影响大
1.9 GRU
GRU - Gated Recurrent Unit 门控循环单元,能更好的捕捉深层的网络连接,解决梯度消失
简化版GRU,实际上公式看起来更清楚,
1) Ct-1 跟当前的Xt任何时候都共同起作用,无论对gate还是更新C的候选值
2)sigmoid生成控制概率(update gate),tanh生成候选值
3)update gate来调和 C的前值跟候选值
Full GRU
1) Ct-1 跟当前的Xt任何时候都共同起作用,无论对gate还是更新C的候选值
2)sigmoid生成控制概率(update gate),tanh生成候选值; 同时再生成了一个前值Ct-1的 ( forgot gate)权重,在生成候选值时遗忘加权
3)update gate来调和 C的前值跟候选值
1.10 LSTM-长短期记忆
跟GRU比,
1)C跟a分开了,可以说是在C的基础上,另外创建了一个a,a为 C经过再次tanh激活值乘以一个output gate
2)C的候选值的生成由Ct-1改为了a,且将此处的udpate gate去掉
3)C值更新时,update gate直接对C候选值作用
在LSTM中,C值(memory cell)的update gate设置合理时,比较容易保存很长时间。 常用的LSTM中,上图中的3个gate还包括C值,这叫peephole connection窥视孔连接.
C值有100维时,每个维度单独影响自己这个维度的更新;
LSTM比GRU早提出,更powerful灵活点,效果好点,是更多人的选择,GRU是一种LSTM的简化,简单点,可以构建和适应更大的网络
1.11 双向RNN
一个可以使RNN更加powerful的idea是构建双向,以He said, Teddy **为例说明后面词对前面也有影响
缺点是需要完整的序列才好预测,如语言识别时,需要整段语言读进去才后才能识别,实践的识别过程中算法需要加入其它的处理模块
1.12 Deep RNN 深度循环网络
第二周 NLP及词嵌入
2.1 词表示
介绍one-hot representation,但这种方法没法进行相识度计算,采用特征化表示:word embedding可以
例子中特征有Gender,Royal,Age,Food,Size等,实践中的特征是很难解释。
可以用t-SNE降维到3维进行可视化,降维过程叫embedding
2.2 词嵌入
主要介绍词嵌入如何应用到NLP问题中,第3步微调建议只在本身自己的数据集较大的情况下做,在小数据集的时候,word embedding效果比较明显,例如实体命名识别named entity recognition,文本摘要text summarization,文本解析 co-reference resolution,指代消解for parsing, language module跟机器翻译 machine translation用得少,这些模型有大量的数据。
Word embedding跟人脸识别的face encoding部分相似,其实embedding = encoding可以互换
2.3 词嵌入特性
可以类比推理,用余弦相似度
2.5 嵌入矩阵 Embedding matrix
2.6 词嵌入学习
embedding历史上用很复杂的算法学习,但后来的越来越简单的算法也可以学得很好。先从复杂的开始
Neural language model建立一个语言模型是学习词嵌入的好方法。
这里采用的前4(6)个词预测后一个的方法,每个词有300维,全部进入最后的全连接隐藏层,早期非常成功的方法
下面是简单点的算法,连续的前4个预测1个是非常自然的语言模型,但如果仅仅是训练,则可以放宽些,前后范围内4个,最后一个,附近一个都行
2.7 Word2Vec
更简单有效学习Embedding matrix的方法,构建skip-grams算法不是为了监督学习本身,而是学习一个好的word embedding
但分母需要计算整个词汇表里全部的词汇,计算量太大,有人提出Hierarchy softmax加速。 构造分类树,常用词汇在上面
skip-grams是论文中的一个,还有一个CBOW连续词袋模型,用2边的词预测中间的词
2.8 负采样 Negative sampling
修改了训练目标,训练集句子里选一对content - word,作为target=1,再在词汇表里面选5-20个词 跟content配对,作为target = 0 负样本,训练一个logistics 回归模型
不用计算一个10000维的softmax,而转化为了10000个二分类问题,每次训练时,选定了Content,得到1正4负样本,实际只训练了5个2分类
在词典里采样时,论文作者采取的采样概率为
2.9 GloVe词向量
GloVe = global vectors for word representation,没那么火,但比较简单,也有不少人用,根据 target出现在content附近出现的频率 Xij = i(target) 出现在 j(content)附近的频率,Xij=Xji
2.10 情绪分类
有了Word embedding,中等大小的label数据集也能训练出不错的模型
简单版如下,缺点是没法有效识别类似“”完全没有好的,好的,好的,。。。,“这类句子
改用RNN模型
2.11 词嵌入除偏
由于现实的语境下的文本有一些偏向,因此训练处的word embedding也会有,如男女 vs 医生护士,程序员家庭工作者,反应了性别,年龄等偏见
识别bias direction,以性别为例,直接找到不同性别对应的词对 (he-she,male-female),分别减去特征向量,再平均
训练一个分类器来识别哪些是跟性别相关的,哪些不是,
第三周 seq2seq 模型
3.1 基本模型
3.2 选择最可能的句子
3.3 Beam search
3.4 Beam search改进
3.5 Beam search误差分析
3.6 Bleu score(选)
略
3.7 Attention 模型Intuition
3.8 Attention 模型
3.9 语言识别 Speech recognition
3.10 触发字检测 Trigger word detection
3.11 Thanks