Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制

【第 5 部分-序列模型-第三周】在吴恩达深度学习视频基础上,笔记总结,添加个人理解。- ZJ

Coursera 课程 |deeplearning.ai |网易云课堂

CSDN:http://blog.csdn.net/JUNJUN_ZHAO/article/details/79549819


序列模型和注意力机制(Sequence to sequence models)

3.1 基础模型 (Basic models)

您好,欢迎参加本课程的最后一周也是深度学习微专业课程的最后一周。

在本周中,您将学到 seq2seq (sequence to sequece models)。 从机器翻译语音识别,都取得了很大的作用。

先从最基础模型开始,之后会学到 集束搜索 (Beam search)和注意力模型(Attention Model),一直到最后的音频模型,比如语音。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第1张图片

例子:

假设你想输入一个法语句子,例如“Jane visite I’Afrique en septembre”。并且,你想把它翻译成英文句子“ Jane is visiting Africa in September”。

x1 x ⟨ 1 ⟩ x5 x ⟨ 5 ⟩ ,表示输入的句子的单词,用 y1 y ⟨ 1 ⟩ y6 y ⟨ 6 ⟩ 来表示输出序列中的单词。

那么,如何训练一个新的神经网络来输入序列 x,并输出到序列 y ?

Sequence to Sequence model :

  • 首先,建立一个网络,称之为 编码网络(encoder network),它是一个 RNN 的结构,RNN 的单元可以是 GRU 也可以是 LSTM.
  • 每次只向这个网络输入一个法语单词,将输入序列接收完毕后,RNN 网络会输出一个向量,来代表这个输入序列。
  • 之后,建立一个解码网络(decoder network),以编码网络的输出作为输入,之后它可以被训练为每次输出一个翻译后的单词。直到输出序列结尾或者句子结尾标记。则解码网络工作结束。(把每一步生成的单元传递到下一个单元中来测试,就像之前用语言模型合成文本时一样)

    深度学习在近期最卓越的成功之一就是:这个模型确实有效。(在给出足够的法语和英语文本的情况下,训练这个模型,通过输入一个法语句子来输出对应的英语翻译 )

这个网络用简单的编码网络来对输入的法语句子进行编码,然后用一个解码网络来生成对应的英语翻译。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第2张图片

图像描述(Image captioning ):

另一个与 seq2seq 类似的结构,被用来做图像描述(Image captioning )。

  • 给出一张猫的图片,它能自动输出该图片的描述:一只猫坐在椅子上。

如何训练这样的网络?通过输入图像来输出描述?

方法步骤:

  • 在之前图像描述的课程中,我们知道如何将图片输入到卷积神经网络中,比如一个预训练的 AlexNet 结构,然后让其学习图片的编码(或者学习图片的一系列特征)
  • 上述图片给出的是 AlexNet 结构 ,去掉最后的 Softmax 单元,预训练的 AlexNet 结构 会给你一个 4096 维的特征向量,向量表示的就是这张猫的图片。(这个预训练网络可以是图像的编码网络,得到一个 4096 维的向量,来表示这张图片)
  • 接着把这个向量输入到 RNN 中,RNN 要做的就是生成图像的描述,每次生成一个单词,(一个个的生成单词序列)

在图像描述领域这个方法相当有效。

总结:

以上学习了 seq2seq model 是怎么运作的,以及 image to sequendce or image captioning 图像描述,这两个模型的运作方式是类似的。
但是,运作方式也有一些不同,主要体现在如何用语言模型合成新的文本,并生成对应序列的方面,一个主要的区别就是:我们期望的不是一个随机选取的翻译,而是最准确的翻译。


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

在 seq2seq machine translation model 机器翻译模型中,以及在第一周所用的语言模型之间,有相似的地方,但是也有许多重要的区别,Let’s take a look .

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第3张图片

可以把 机器翻译想象成是建立一个条件语言模型。(Machine translation as building a conditional language model)

  • 如上图所示,语言模型(language model )是我们在第一周所建立的模型,这个模型可以估计句子的可能性,(这就是语言模型所做的事情)也可以用于生成新的句子。
  • 机器翻译模型(Machine translation):如上图所示,分为编码网络和解码网络
  • 可以发现,机器翻译模型的解码网络(紫色部分)与上面的语言模型非常几乎是一样的。
  • 不同在于语言模型总是以 零向量开始,而机器翻译模型中的 编码网络会计算出一系列向量来表示句子的输入。所以称之为条件语言模型(conditional language model)相比于语言模型输出任意句子的概率 ,翻译模型会输出句子的英文翻译(取决于输入的法语句子)。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第4张图片

Finding the most likely translation:

现在,想要通过模型将法语翻译成英文。

  • 通过输入的法语句子,模型将会告诉你各种英文翻译的所对应的可能性(概率) 。
  • 显然,我们不希望它随机的输出,如果你从这个分布中,进行取样,得到 p(y | x),可能取样一次,就能得到很好的翻译,但也可能得到截然不同的翻译。如上图所示,得到几种不同的翻译结果。
  • 所以,使用这个模型来进行机器翻译时,并不是从得到的分布中,进行随机取样,而是要找到一个英语句子 y 使得条件概率最大化
  • 在开始机器翻译系统时,要做的一件事,就是想出一个算法,用来找出合适的 y 值,使得该项最大化,而解决这种问题通用的算法,就是 Beam search(束搜索)

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第5张图片

Why not a greedy search?为什么不用贪心搜索呢?

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

但是,你真正需要的是一次性调选择出整个单词序列,来使得整体的概率最大化。

如上图所示,第一个翻译比第二个翻译更加简洁,但是贪心算法,在选出前两个单词(Jane is )后,会选择更加常见的 going 而不是 visiting,从而得到的不是最佳的翻译。

  • 假设你有 10000 个词,然后又一个 10 个单词的句子,那么就有 1000010 10000 10 种可能性,所以计算每一种概率是不实际的,因为用一个近似的搜索算法,它会尽力的挑选句子 y 使得条件概率最大化。虽然不能保证,但已经足够了。

arg maxyP(y1,y2,,yTy) a r g   m a x y P ( y ⟨ 1 ⟩ , y ⟨ 2 ⟩ , … , y ⟨ T y ⟩ )

总结:本节学到了,机器翻译时如何用来解决条件语言模型问题的,相比之间的语言模型,随机得到一个句子,这个模型可以得到一个最优可能的英语翻译。我们需要一个合适的搜索算法,下节讲解。


在机器翻译中,给定输入如法语句子, 我们想要的是最有可能的翻译结果,而不是随机的,对于语音识别也是一样,给定一个输入的语音片段,我们期望得到最接近原意的文本翻译结果。

Beam Search (集束搜索)就是来解决这个问题。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第6张图片

Beam Search Algorithm:

  • Beam Search 首先要做的就是挑选要输出的英语翻译中的第一个单词,如上图所示,列出 10000 个词的词汇表,
  • 第一步,我们使用编码解码这样的网络来评估第一个单词的概率值,给定输入序列 x 即法语作为输入,第一个输出 y 的概率值是多少,集束搜索算法会考虑多个选择,会有一个参数 B,叫做 集束宽(beam width)这个例子中,将 B = 3,代表一次会考虑 3 个,(in jane september)若是 10 ,则一次考虑 10 个,

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第7张图片

  • 第二步,已经选出了 (in jane september) 作为第一个单词,三个最可能的选择,beam search 接下来会针对每个第一个单词,考虑第二个单词是什么,如(in——a/aron/september…..zulu)为了评估第二个单词,我们使用上图中 绿色部分的编码网络 当解码网络输出为 y1 y ⟨ 1 ⟩ 为 in ,然后 in 再作为下一次的输入 再输出 y2 y ⟨ 2 ⟩ ,这样的网络就可以评估第二个单词的概率了 P(y2|x,"in") P ( y ⟨ 2 ⟩ | x , " i n " )

    第一个和第二个单词对的概率:

    P(y1,y2|x)=P(y1|x)P(y2|x,y1) P ( y ⟨ 1 ⟩ , y ⟨ 2 ⟩ | x ) = P ( y ⟨ 1 ⟩ | x ) P ( y ⟨ 2 ⟩ | x , y ⟨ 1 ⟩ )

  • (jane——–)(september——–) 同理,如上图所示,最终得出 30000 个可能的概率,然后从中选出 概率最大的三个,

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第8张图片

Beam searcj (B=3):

我们快速解释下,集束搜索的下一步,前面说过前几个单词,最可能的选择是 in september 和 jane is 和 jane visits ,对于每一对单词,先保存下来,作为给定输入 x(法语句子)情况下, y1 和 y2 的概率值。

像之前一样,我们考虑第三个单词是什么,如上图所示,循环下去,直到句子结束。

总结:已经学习了集束搜索是如何工作的,同时当然也有一些技巧和优化,使得集束算法更加高效。下节继续。


上节学习了基本的束搜索算法,这节会学到一些技巧,能使算法运行的更好。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第9张图片

Length normalization(长度归一化):

  • 长度归一化就是对集束搜索算法,稍微调整的一种方式,来得到更好的结果。
  • 如上图所示,第一个公式是乘积概率,计算这个公式时,每一个概率都是远小于 1 的,很多个小于 1 的数值乘起来,会得到极小的数字,从而造成数值下溢(数值下溢,就是数值太小了)。
  • 因此,解决上面数值下溢的问题,如上图第二个公式所示,我们不会最大化这个乘积,而是取 log 值,转为最大化这个 log 求和的概率,在选择最有可能的句子 y 时,会得到同样的结果。所以通过取 log ,会得到一个数值上更稳定的算法。
  • log 函数是严格的单调递增函数,最大化 logP(y|x) l o g P ( y | x ) 与最大化 P(y|x) P ( y | x ) 是一样的,如果一个 y 值能使前者最大,就肯定能使后者 也取最大,所以常用的是取对数和。
  • 对第二个公式进一步优化,可以使机器翻译效果更好,目前存在的问题是,(第二个公式可能更趋向于选择简短的翻译结果),因为短句子的概率,是由更少数量的小于 1 的数字乘积得到的。(若很多概率是负值,那么相加后则是更大的负值)
  • 所以,第三个公式,我们不再最大化这个目标函数,而是进行归一化,通过除以翻译结果的单词数量,这样就是取每个单词的概数对数值的平均值了。这样明显减少了对输出长句子的惩罚。
  • 在实践中,有个探索性的方法,相比于直接除以 Ty T y (输出句子的单词总数),采用更柔和的方法 Tαy T y α 加上指数 α α (超参数),如 α=0.7 α = 0.7 ,因为 若 α=1 α = 1 则是完全归一化,若 α=0 α = 0 则是完全没有归一化。(只是试探性的,并没有理论验证)

总结:如何运行束搜索算法?

  • 当你运行,Beam search 时,你会看到很多长度 Ty=1,2,3,4......30 T y = 1 , 2 , 3 , 4......30 的句子,当束宽 beam width = 3,你会记录所有这些可能的句子的长度,三个最有可能的选择。
  • 然后,针对这些所有句子的可能输出句子,并用第三个公式进行评分,取概率最大的几个句子,然后对这些束搜索得到的句子,计算这个目标函数。
  • 最后,从经过评估的这些句子中,挑选出在归一化的 log 概率目标函数上得分最高的一个。有时也叫做,归一化的对数似然目标函数。这就是最终输出的翻译结果。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第10张图片

一些实现的细节:

如何选择束宽 beam width B?

  • B 越大 考虑的选择越多,找到的句子可能越好,但是 B 越大,算法的计算代价越大,因为要把很多可能选择保存起来。

large B : better result, but slower

small B: wrose result,but faster

取决于不同的应用场景,如产品,科研,论文,取决于特定的应用,特定的领域。

B = 10 ,100 ,1000,3000


在之前的课程中,学习到误差分析,如何可以帮助你集中时间来做项目中最有用的工作,束搜索算法是一种近似搜索算法,也被称为启发式搜索算法(heuristic search algorithm)。

它不总是输出可能性最大的句子,而是记录着 B = 3, 10 ,100 种可能。

so ,如果束搜索算法出现错误会怎样呢?

本节将会学习到,误差分析和束搜索算法是如何相互起作用的,以及你怎么才能发现是 beam search 出现问题,还是 RNN 模型出现问题。

对束搜索算法进行误差分析:

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第11张图片

如上图所示,对法语进行翻译:

Human:人类的翻译,在开发集中,翻译的是很好的,标记为 y y ∗
Algorithm : 机器翻译的很糟糕,标记为 y^ y ^

模型主要分为两部分 :

1.一个是神经网络模型(sequence to sequence model)成为 RNN model ,是个编码器 (encoder) 和解码器(decoder)
2.另一部分是束搜索算法,以某个 集束宽度 beam width B 运行

如果你能找出造成这个不好的翻译的原因,确定是哪一部分,可以更好的解决问题。所以我们要找到到底是哪部分出现的问题。

  • RNN 会计算 P(y|x) P ( y | x ) ,事实证明,此时你能做的最有效的事情就是用这个模型,来计算 P(y|x) P ( y ∗ | x ) 的同时也计算 P(y^|x) P ( y ^ | x ) ,然后比较一下,这两个值哪个能大,你就能够更清楚地将这个糟糕的翻译结果,归咎于 RNN 或者 beam search 算法。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第12张图片

我们继续探究一下其中的逻辑,我们将比较 P(y|x) P ( y ∗ | x ) P(y^|x) P ( y ^ | x ) 两个值的大小。

Case 1: P(y|x) P ( y ∗ | x ) > P(y^|x) P ( y ^ | x )

  • Beam search 选择了 y^ y ^ ,但是 y y ∗ 包含 的 P(y|x) P ( y | x ) 的值更大。
  • 结论:Beam search 实际上不能给你一个能使 P(y|x) P ( y | x ) 最大化的 y 值。

个人理解:首先模型得出的结果是 P(y|x) P ( y ∗ | x ) > P(y^|x) P ( y ^ | x ) ,也就是 Beam search 应该选择 y y ∗ , 但是 Beam search 却选择了 y^ y ^ ,那么这就是 Beam search 的错了。

Case 2: P(y|x) P ( y ∗ | x ) P(y^|x) P ( y ^ | x )

  • y y ∗ 的翻译比 y^ y ^ 好,但是 RNN 却预测出来 P(y|x) P ( y ∗ | x ) P(y^|x) P ( y ^ | x )
  • 结论:RNN model 错了。

一个细节,如果使用了长度归一化,那么要做的就不是比较 P(y|x) P ( y ∗ | x ) P(y^|x) P ( y ^ | x ) 两种可能性的大小,而是比较长度归一化后的最优化目标函数值,不过目前先忽略这种情况。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第13张图片

错误分析过程:

  • 先遍历开发集,然后在其中找出算法产生的错误,比较 可能性大小,确定是哪种错误。
  • 接着遍历更多的例子,如上图所示,逐一进行标记。
  • 通过这个过程,就可以执行误差分析,得出束搜索算法和 RNN 模型出错的比例是多少。
  • 有了这样的误差分析过程,你就可以对开发集中每一个糟糕的翻译,确定是 beam search 出了问题,还是 RNN model 出了问题。
  • 确定下来,那个错误发生的比例大,然后再进行下一步的分析。

总结:

这就是束搜索算法中的误差分析,这个误差分析过程是十分有用的,它可以用于分析近似最佳算法 (approximate optimization algorithm),(如 beam search),这些算法被用来优化学习算法(例如序列到序列模型/ RNN)输出的目标函数或代价函数。


3.6 Bleu 得分 (Bleu Score)

机器学习的一大难题是,一个法语句子可以有多种英文翻译,而且都同样好,所以当有多个,同样好的答案时,怎么评估一个机器翻译系统呢?有多个答案的时候,要怎样衡量准确性呢?

常见的解决办法就是,通过 Bleu 来解决。接下来讲解 Bleu 怎么工作的。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第14张图片

如图所示:

  • 法语句子 French: Le chat est sur le tapis.
  • 人工翻译 参考 1:The cat is on the mat.
  • 另一个人工翻译 参考2 :There is a cat on the mat.

Bleu 所做的就是给定一个机器生成的翻译,它能够自动的计算一个分数,来衡量机器翻译的好坏,只要这个机器生成的翻译与任何一个人工翻译的结果足够接近,就能得到一个比较高的 Bleu 得分。

Bleu : bilingual evaluation understudy (双语评估替补)

Bleu 的初衷是相对于请评估员,人工的评估机器翻译系统,Bleu 得分就相当于一个候补者,它可以代替人类来评估机器翻译的每一个输出结果。

MT (machine translation 缩写)

  • MT output: the the the the the the the . 一个非常糟糕的翻译。

  • 衡量输出质量的方法之 一 是,观察输出结果的每一个词。看其是否出现在参考中,这被称作是机器翻译的精确度。

  • 在这种情况下 the the the the the the the 这 7 个单词,每个单词都出现在了 上面两个 人工翻译的句子中,所以 是 衡量结果是 7/7 。(“看起来是一个极好的精确度” 实际不然)

  • Precision 衡量:7/7 (得分看着好,其实翻译是不好的)

  • 所以这就是为什么把出现在参考中的词,在 MT 输出的所有词中所占的比例作为精确度评估标准,并不是很有用的原因。

解决办法:

改良后的精确度评估方法

  • 我们把每一个单词的记分上限,定为它在参考句子中出现的最多次数,在参考 1 中,单词 the 出现了两次,在参考 2 中,单词 the 只出现了 1 次。所以 单词 the 的得分上限为 2 。所以句子得分是 2/7

Modified precision: 2/7

  • 分母 7 代表是 单词 the 出现的总次数,
  • 分子 2 代表 单词 the 出现的次数,我们再到达上限时截断计数,这就是改良后的精确度评估。

目前我们关注的是单个单词的 Bleu 得分,但实际上我们想关注的是 成对的单词或者 句子的得分。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第15张图片

Bleu score on bigrams (二元词组的 Bleu 得分):

bigrams 相邻的两个单词。

接着上面的例子,MT output 输出的 The cat the cat on the mat. 虽然不是很好的句子,但是比上一个强。

如上图所示,

1.对相邻的二元词组罗列下来,
2 count 然后计算 每个二元词组出现了多少次。
3.在定义 Countclip C o u n t c l i p 截取计数最大上限,给算法设置得分上限,上限值为二元词组出现在参考 1 或 2 中的最大次数。
4.最后,修改后的二元词组的精确度就是,4/6 各列相加。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第16张图片

Bleu score on unigrams:

unigram: 单word ——— 一元词组
bigram: 双 word ——— 二元词组
trigram: 三 word ——— 三元词组

最后给出公式,如上图所示.

一元词组:

Punigram=unigramy^Countclip(unigram)unigramy^Count(unigram) P u n i g r a m = ∑ u n i g r a m ∈ y ^ C o u n t c l i p ( u n i g r a m ) ∑ u n i g r a m ∈ y ^ C o u n t ( u n i g r a m )

n 元词组:

Pngram=ngramy^Countclip(ngram)ngramy^Count(ngram) P n g r a m = ∑ n g r a m ∈ y ^ C o u n t c l i p ( n g r a m ) ∑ n g r a m ∈ y ^ C o u n t ( n g r a m )

  • 改良后的精确度得分,评估的是 一元词组或是 二元词组或三元词组 甚至是取更大值的 n 元词组,这个方法能让你衡量机器翻译输出中,与参考相似重复的程度。
  • 另外,你可以确信,如果机器翻译输出与参考 1 或 参考 2 完全一致的话,那么所有的 P1 P 1 , P2 P 2 等等的值,都会等于 1.0 ,为了得到改良后的 1.0 的精确度,只要你的输出与参考之一完全相同就能满足,不过有时即使输出结果,并不完全与参考相同,也是有可能的,可以将它们以另一种方式组合。但愿仍能得到不错的翻译结果。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第17张图片

Bleu details:

  • Pn: P n : n 元词组的 Bleu 得分,也是计算出的 n 元词组改良后的精确度。
  • Combined Bleu score :为了用一个值来表示,需要计算 如 p1,p2,p3,p4 p 1 , p 2 , p 3 , p 4 然后将它们用这个公式组合在一起,取平均值。

    BP exp(14n=14Pn) B P   e x p ( 1 4 ∑ n = 1 4 P n )

  • p1,p2,p3,p4 p 1 , p 2 , p 3 , p 4 相加的平均值 如 x,然后进行指数运算 ex e x ,对线性运算进行乘方运算,严格单调递增的运算,之后用 BP 的惩罚因子来调整这项。

BP : brevity penalty 简短惩罚。

  • 了解一个细节,事实表明,如果你输入了一个非常短的翻译,那么它会更容易得到一个高精确度,因为输出的大部分词可能都出现在参考之中。
  • 不过我们并不想要一个特别短的翻译结果,因为简短惩罚(BP),就是一个调整因子,它能够惩罚输出了太短翻译结果的翻译系统。

BP 公式:

  • BP = 1 ,if MT_output_length > reference_output_length 如果机器翻译结果长度 > 人工翻译结果长度
  • BP exp(1- MT_output_length / reference_output_length) (其他情况下 )如果机器翻译结果长度 <= 人工翻译结果长度

总结:

  • 在之前的视频中了解了,单一实数评估指标(single real number evaluation metric)的重
    要性,因为它能够让你尝试两种想法,然后看得分高低,选择得分高的一个。
  • Bleu score 对于机器翻译来说,具有革命性的原因是,它有一个非常好的单一实数评估指标(Single real number evaluation metric)。从而加快了机器翻译领域的进程。加快算法开发过程。
  • 经验:直接使用开源的试验结果。下载下来然后直接评估系统。
  • 目前 Bleu 系统用来评估许多生成文本的系统,如机器翻译系统,以及之前的提到的图像描述系统 ( Image captioning ):用神经网络来实现图像描述,再用 Bleu score 来评估结果在多大程度上与参考描述或多个人工完成的参考描述内容相符。

3.7 注意力模型直观理解 (Attention Model Intuition)

回顾:

在本周大部分时间内,我们都在学习使用这个编码-解码 (Encoder-Decoder)架构来完成机器翻译,当一个 RNN 读一个句子,另一个 RNN 就会输出一个句子。在此基础上做一些改变——注意力模型,可以使它工作的更好。

注意力模型是深度学习中重要的思想之一。接下来学习它是如何运作的。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第18张图片

The problem of long sequences:

  • 给定一个很长的法语句子,绿色编码网络做的是,读整个句子,然后记忆整个句子,再在感知机中传递,对紫色的解码网络,再翻译出整个句子。
  • 而人工翻译,则是读一部分,翻译一部分。人在一次性记忆整个句子方面比较困难。
  • 从上图的 Bleu score 可以看出来,太短的句子得分低,稍短中等句子得分高,而长句子得分更低,在神经网络中记忆长句子也是相对困难的。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第19张图片

注意力模型的直观理解:

虽然源于机器翻译,但是也推广到了其他应用领域。

  • 如上图所示,假设,使用 双向 RNN ( bidirectional RNN ),为了计算每个输入单词的特征集,必须要理解,输出 y^1y^5 y ^ ⟨ 1 ⟩ … y ^ ⟨ 5 ⟩ ,但是并不只是翻译一个单词,所以可以先取去掉上面的 y .
  • 使用双向 RNN ,要对单词做的就是对于句子里的每五个单词,计算一个句子中单词的特征集,也有可能是周围的词。
  • 接着,试着生成英文翻译,使用另一个 RNN 来生成英文翻译,用 s0 s ⟨ 0 ⟩ 来表示 RNN 的隐藏状态(感知机),希望经过 s1 s ⟨ 1 ⟩ 后可以生成 Jane.
  • 问题就是,当尝试生成第一个词,应该看法语句子的哪个部分?看起来似乎是,先看第一个单词,或者它附近的单词,但是别看太远,比如说句末。
  • 所以,注意力模型就会计算注意力权重,将用 α1,1 α ⟨ 1 , 1 ⟩ 来表示当生成第一词时,应该放多少注意力,在这第一块信息处,然后计算第二个 注意力权重, α1,2 α ⟨ 1 , 2 ⟩ 在看 第一个 单词时,需要放多少注意力在第二个单词,后面同理。
  • 之后,这些将展示出,应该花多少注意力在记号 为 C 的内容上,这就是一个 RNN 单元,如何尝试生成第一个词的,这就是第一步。
  • 第二步,将有一个新的隐藏状态 s2 s ⟨ 2 ⟩ ,也会用一个新的注意力权值集,将用紫色线部分的 α2,1 α ⟨ 2 , 1 ⟩ α2,2 α ⟨ 2 , 2 ⟩ ,后面同理,有了上下文 C ,然后之前生成的 Jane 也将输入进 单元中,则便有了上下文,然后一起生成第二个单词,之后,依次同理。
  • RNN 向前执行,直到最后比如生成 ,这些是注意力权重,即 αt,t α ⟨ t , t ⟩ ,当你尝试生成 第 t 个单词时,你应该放多少注意力在第 t 个 法语单词上。
  • 当生成一个特定的英文词时,这允许它在每个时间步,去看周围词距内的法语词,要花多少注意力。

3.8 注意力模型 (Attention Model)

上一节,学习了注意力模型如何让一个神经网络,只注意到一部分的输入句子,在它生成句子的时候更像人类的翻译,下面将这些想法,转化成公式,来应用注意力模型。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第20张图片

  • 与上节相同,假设输入一个句子,并使用双向 RNN or 双向 GRU ,or 双向 LSTM,去计算每个词的特征。LSTM 更常用。
  • 对于前向传播,有第一个时间步的前向传播的激活值,第一个时间步后向传播的激活值,如上图所示。
  • 为了简化表示,使用 at=(at,at) a ⟨ t ⟩ = ( a → ⟨ t ⟩ , a ← ⟨ t ⟩ ) , at a ⟨ t ⟩ 时间步 t 上的特征向量,但是为了保持符号的一致性,用 at=(at,at) a ⟨ t ′ ⟩ = ( a → ⟨ t ⟩ , a ← ⟨ t ⟩ ) 代表法语句子里面的词。
  • 接下来,我们只进行前向计算,就是单向的 RNN 用状态 S 表示生成翻译,所以第一个时间步,它应该生成 y1 y ⟨ 1 ⟩ ,当输入上下文 C 时,C 取决于,注意力参数 α1,1 α ⟨ 1 , 1 ⟩ α1,2 α ⟨ 1 , 2 ⟩ α2,1 α ⟨ 2 , 1 ⟩ … 这个参数说明 上下文有多少取决于我们得到的特征,或者我们从不同的时间步中,得到的激活值,
  • 所以我们定义上下文的方式,实际上来源于,被注意力权重除权的不同时间步中的特征值,于是更公式化的注意力权重,将会满足非负的条件,所以就是 0 或正数,相加为 1,如上图所示。

    tα1,t=1 ∑ t ′ α ⟨ 1 , t ′ ⟩ = 1

    c1=tα1,tat c ⟨ 1 ⟩ = ∑ t ′ α ⟨ 1 , t ′ ⟩ a ⟨ t ′ ⟩

  • 注意: α1,t α ⟨ 1 , t ′ ⟩ :注意力权重。 at a ⟨ t ′ ⟩ :激活函数值。

  • αt,t α ⟨ t , t ′ ⟩ 就是 yt y ⟨ t ⟩ 应该在 t’ 时,花在 a 上注意力的数量,换句话说,就是当你在 t 处 生成输出词,你应该花多少注意力在第 t’ 个输出词上面,这是生成输出的其中一步。之后同理。
  • 最后要做的就是定义如何计算这些注意力权重。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第21张图片

计算注意力权重 αt,t α ⟨ t , t ′ ⟩

  • αt,t α ⟨ t , t ′ ⟩ 就是 yt y ⟨ t ⟩ 应该在 t’ 时,花在 a 上注意力

    αt,t=exp(et,t)Txt=1exp(et,t) α ⟨ t , t ′ ⟩ = e x p ( e ⟨ t , t ′ ⟩ ) ∑ t ′ = 1 T x e x p ( e ⟨ t , t ′ ⟩ )

  • 先计算 et,t e ⟨ t , t ′ ⟩ ,其中 关于 t, t’ 关键是使用 softmax ,来确保这些权重加起来等于 1 ,对 t’ 求和,比如每一个固定的 t 值,这些加起来等于 1 。

  • 之后计算 e 项,可以使用的方式是,如上图所示的 一个小的神经网络, st1 s ⟨ t − 1 ⟩ 就是神经网络在上个时间步的状态,如上图右边神经网络所示。 at a ⟨ t ′ ⟩ 是上个时间步的特征的另一个输入。
  • 直观来想,如果你想要决定要花多少注意力在 t’ 的激活值上,于是,似乎它会很大程度上取决于上一个时间步的隐藏状态的激活值,目前还没有当前状态的激活值,
  • et,t e ⟨ t , t ′ ⟩ 取决于 st1 s ⟨ t − 1 ⟩ at a ⟨ t ′ ⟩ 这两个值,并不知道具体的函数是什么,所以可以做的就是训练很小的神经网络去学习这个函数到底是什么,反向传播算法,梯度下降会得到一个正确的函数。

缺点:

  • 时间复杂度 是 O(n3) O ( n 3 ) ,如果你有 Tx T x 个单词输入, Ty T y 个输出单词。于是注意力参数的总数就会是 TxTy T x ∗ T y
  • 这个算法,有着三次方的消耗,但是在机器翻译的应用上,输入和输出的句子一般不会太长,三次方也是可以接受的,不过有些研究工作,尝试减少这个消耗。
  • 在其他领域 如 Image capturing 图片加标题,当你在看图片写标题的时候,一次只花注意力在一部分图片上面。

注:注意力模型是一个非常强大的想法。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第22张图片


3.9 语音识别 (Speech recognition)

现今,最令人振奋的发展之一,就是 seq2seq 模型 在语音识别方面的准确性有很大的提升,接下来讲解 seq2seq 是如何应用于音频数据的。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第23张图片

语音识别问题:

  • 有一个音频片段 x ,任务是自动的生成文本 y ,
  • 音频片段的图片,就是气压随着时间而变化。
  • 音频数据常见的预处理步骤,就是运行整个原始的音频片段,然后生成一个声谱图,如上图中,带颜色的声谱图,横轴是时间,纵轴是声音的频率,图中不同的颜色显示声波能量的大小,(或者还听到过仿空白输出)也经常应用于预处理步骤,在音频输入到学习算法之前,
  • 在 end to end 端到端的深度学习模型系统中,通过输入音频片段,然后直接输出音频的文本,不同的行业 相应的训练时间 不同 300 h ,3000h, 100,000 小时的数据

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第24张图片

如何建立一个语音识别系统?

  • 在输入音频的不同时间帧上,可以用一个注意力模型来输出文本描述。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第25张图片

  • 用 CTC 损失函数来做语音识别,图上只用一个简单的 RNN 来举例子,实际中可能更多是双向的 LSTM 结构很深的模型。

  • 在语音识别中,通常输入的时间步数量要比输出的时间步的数量多出许多,如,有一段 10 秒的音频,特征是 100 赫兹的,即 每秒有 100 个样本,于是,这段 10 秒的音频片段,就会有 1000 个输入,输出可能就没有 1000 个单词 或字符了,怎么办呢?

  • CTC 损失函数 允许 RNN 生成这样的输出,_ 这是特殊的字符,叫做空白符,ttt_h_eee_ _ _ _ _ _qqq_ _ _ _ 这样的输出被看做是正确的输出,
  • CTC 损失函数的一个基本规则,是将空白符之间重复的字符折叠起来,(注意: blank 空白符 和 space 空格是不同的)这样就能生成 the q…….

3.10 触发字检测 (Trigger word detection)

现在已经学习了很多关于深度学习和序列模型的内容,现在可以简单的描绘出一个触发字系统,随着语音识别的发展,越来越多的设备,可以通过声音来唤醒,称为 触发字检测系统(Trigger word detection system).

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第26张图片

有关于触发字检测系统的文献,还处于发展阶段,所以对于触发字系统,最好的算法是什么,目前还没有一个广泛的定论。

下面简单介绍一种可以使用的算法。

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第27张图片

  • 现在有一个 RNN 结构,把一个音频片段,计算出它的声谱图特征,得到特征向量(音频特征) x1,x2,x3 x ⟨ 1 ⟩ , x ⟨ 2 ⟩ , x ⟨ 3 ⟩ ,然后放到 RNN 中。
  • 定义目标标签 y ,假如音频片段中的某一点(如上图所示),是某个人刚刚说的触发字,如 “Alexa” 或其他的 ‘Okay Google’, 那么在这一点之前,就可以在训练集中,把目标标签都设为 0 ,然后再这点之后,把目标标签都设为 1。
  • 在之后,触发字又说了一遍,如上图所示,后面一点,那么再次,将这点之前目标标签设为 0 ,之后的设置为 1 。这样的标签方案对 RNN 来说是可行的,运行的还可以。
  • 但是,缺点是,它构建了一个很不平衡的训练集, 0 的数量比 1 太多了,还有一个解决方法,虽然有点简单粗暴,但确实能使其变的更容易训练。比起只在一个时间步上去输出 1 ,其实可以在输出 变回 0 之前,多次输出 1 ,或说在固定的一段时间内,输出多个 1 ,如上图所示。

3.11 结论和致谢 (Summary and thank you)

历经了几个月,终于学完了吴恩达老师的全部课程。欢呼一下!!!

首先,对吴恩达老师的感谢是无以言表的,老师授课内容语速适中,多年的教授经验,使得他会用最简单的方式让我听明白复杂的原理。还是那句话,吴恩达老师的课程是最好的课程。

后续,对于学习过的内容需要多加复习,而且对于提到的知识点,都需要深入研究,课程中提到的论文,最好都可以系统学习下来,道阻且长,加油吧!

最后,再次感谢吴恩达老师!感谢网易云课堂!感谢一路上帮助我的许多朋友!

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第28张图片

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第29张图片

Deep Learning | Andrew Ng (05-week3)—序列模型和注意力机制_第30张图片


PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。

你可能感兴趣的:(深度学习,吴恩达-,Notes重点总结,深度学习,吴恩达-05.序列模型,深度学习,吴恩达,Beam,search,Bleu,error,analysis,RNN,encoder-decoder)