【機器學習2021】自注意力機制 (Self-attention) (上)

Hung-yi Lee
12 Mar 202128:18

Summary

TLDR本次讲解介绍了自注意力机制(Self-Attention)的概念和应用。自注意力机制能够处理输入序列中向量数量变化的问题,如文本处理、语音信号和社交网络等。通过计算序列中各个向量的相关性,自注意力机制能够捕捉到序列内部的复杂关系,从而生成考虑了整个序列信息的新向量。这种方法不仅提升了模型对序列数据的理解,也为后续的全连接网络提供了更丰富的输入。

Takeaways

  • 🔍 自我注意力(Self-Attention)是一种网络架构,用于处理输入序列中各元素之间的关系。
  • 🌟 自我注意力机制可以解决传统神经网络无法有效处理可变长度输入序列的问题。
  • 📈 输入序列中的每个元素都可以通过自我注意力机制与序列中的其他元素进行关联性评分。
  • 🤔 自我注意力机制通过Query(查询向量)、Key(关键向量)和Value(值向量)三者之间的关系来计算注意力分数。
  • 📊 通过点积(Dot Product)计算Query和Key之间的关联性,得到初始的注意力分数。
  • 🧠 利用Soft-Max函数对注意力分数进行归一化,得到每个元素的重要性权重。
  • 🔄 通过加权求和的方式,结合Value向量和对应的注意力分数,生成新的输出向量。
  • 🔢 自我注意力机制可以应用于文本处理、语音信号处理、社交网络分析等多种场景。
  • 📚 词嵌入(Word Embedding)是一种表示词汇的方法,能够捕捉到词与词之间的语义关系。
  • 🎧 语音信号处理中,通过将声音切割成帧(Frame)并转换成向量,可以应用自我注意力机制进行分析。
  • 🌐 自我注意力机制是Transformer网络架构的核心组件,后者在自然语言处理等领域取得了显著的成果。

Q & A

  • Self-Attention是解决什么问题的?

    -Self-Attention旨在解决当神经网络的输入是一个序列,且序列长度不一致时的问题。它允许模型处理不同长度的输入序列,并且能够捕捉序列内部元素之间的关系。

  • 在Self-Attention中,输入序列的每个元素是如何表示的?

    -在Self-Attention中,输入序列的每个元素都会被表示为一个向量,这些向量组成了一个向量集合。例如,在文本处理中,每个词汇都会被转换成一个词向量。

  • One-Hot Encoding在表示词汇时有什么缺点?

    -One-Hot Encoding的缺点在于它假设所有的词汇之间都是没有关系的。通过这种方式表示的向量中没有任何语义信息,无法表达词汇之间的相似性或关联性。

  • Word Embedding是如何克服One-Hot Encoding的缺陷的?

    -Word Embedding通过给每个词汇提供一个富有语义信息的向量来克服One-Hot Encoding的缺陷。在Word Embedding中,相似或相关的词汇在向量空间中会彼此接近,从而保留了语义关系。

  • 在语音信号处理中,如何将一段声音信号表示为向量序列?

    -在语音信号处理中,通过选取一段固定长度的声音信号(称为Window),将Window内的信号转换成一个向量(称为Frame)。然后,通过将Window逐步向右移动(通常移动10毫秒),来连续提取整个声音信号的向量序列。

  • Self-Attention模块是如何计算两个向量之间的关联性的?

    -Self-Attention模块通过计算两个向量的点积(Dot-Product)来确定它们之间的关联性。具体方法是将输入向量与两个不同的权重矩阵相乘,得到两个新向量,然后将这两个新向量进行点积运算,得到的结果即为关联性分数α。

  • Self-Attention中的Query、Key和Value分别代表什么?

    -在Self-Attention中,Query代表查询向量,用于搜索序列中与自己相关的其他向量;Key代表关键向量,与Query进行关联性计算;Value代表值向量,是序列中实际的元素。通过计算Query与所有Key的关联性分数,然后用这些分数对Value进行加权求和,得到最终的输出向量。

  • 为什么在Self-Attention中要使用Soft-Max函数?

    -Soft-Max函数在Self-Attention中用于将关联性分数转换为一个概率分布,这样每个Query向量都能得到一个关于序列中其他向量的注意力分布。Soft-Max通过指数化并归一化分数,确保所有关联性分数的和为1,从而可以作为权重来使用。

  • Self-Attention模块的输出是如何生成的?

    -Self-Attention模块的输出是通过计算每个Query向量与所有Key向量的关联性分数,并使用这些分数对相应的Value向量进行加权求和来生成的。这样,每个输出向量都能综合考虑整个输入序列的信息。

  • Self-Attention机制可以如何应用在不同的任务中?

    -Self-Attention机制可以应用于各种需要处理序列数据的任务中,例如文本处理中的词性标注、情感分析,语音信号处理中的声音识别,以及社交网络分析等。通过让模型关注序列中不同部分的重要性,Self-Attention能够提高模型处理序列数据的能力。

  • Self-Attention模块可以叠加使用吗?

    -是的,Self-Attention模块可以叠加使用。在实际应用中,可以将Self-Attention模块的输出再次输入到另一个Self-Attention模块中,以便更深入地捕捉序列内部的复杂关系。这种叠加使用的方式可以增强模型对序列数据的理解。

  • Self-Attention模块在Transformer架构中扮演什么角色?

    -在Transformer架构中,Self-Attention模块是核心组件之一。它负责处理输入序列,并生成能够反映序列内部关系的输出向量。Transformer架构通过Self-Attention模块实现了对序列数据的高效处理,从而在很多自然语言处理任务中取得了显著的成果。

Outlines

00:00

🌟 自我注意力机制的引入

本段落介绍了自我注意力(Self-Attention)机制的基本概念和目的。自我注意力机制旨在解决神经网络处理输入序列时的问题,特别是当序列长度不一致时。例如,在文本处理中,每个句子的长度不同,传统的神经网络难以处理这种变长的输入。自我注意力机制通过赋予序列中每个元素不同的权重,使得网络能够关注到与当前元素最相关的其他元素,从而更好地处理序列数据。

05:04

📝 序列标注问题与应用场景

这一部分讨论了序列标注问题,即输入和输出的序列长度相同的情况,并举了几个应用实例,如词性标注、语音识别和社交网络分析。这些应用中,每个输入元素都需要一个对应的标签或分类。此外,还提到了三种可能的输出类型:每个向量对应一个标签、整个序列对应一个标签、以及机器需要自己决定输出标签的数量。

10:04

🚧 全连接网络的局限性

在这一段中,指出了全连接网络在处理序列数据时的局限性。尤其是当序列中的元素需要根据上下文进行不同的处理时,全连接网络无法有效区分相同输入但应产生不同输出的情况。为了解决这个问题,提出了使用上下文信息的方法,即将序列中的多个向量一起输入到网络中,让网络能够考虑到更广泛的上下文信息。

15:05

🔄 自我注意力机制的工作原理

本段落详细解释了自我注意力机制的工作原理。自我注意力机制能够接收整个序列的输入,并输出考虑了整个序列信息的向量。通过使用查询(Query)、键(Key)和值(Value)的概念,自我注意力机制能够计算序列中每个元素与其他元素的相关性,并根据这些相关性对序列中的信息进行加权汇总,从而得到新的序列表示。

20:07

🧠 计算注意力分数和权重

这一部分深入讲解了如何计算注意力分数和权重。首先,通过查询和键的点积来计算每个元素之间的关联程度,得到注意力分数。然后,使用Soft-Max函数对分数进行归一化,得到每个元素的权重。最后,根据这些权重,将序列中的值向量加权求和,得到最终的输出向量。这个过程允许模型集中关注与当前任务最相关的序列部分。

Mindmap

Keywords

💡自注意力(Self-Attention)

自注意力是一种用于处理序列数据的网络架构,能够使网络关注输入序列中的不同部分,以更好地进行处理。它通过计算序列内各个元素之间的关系,使模型能够捕捉到序列内部的动态关系。在视频中提到,自注意力旨在解决输入数据长度可变的问题,特别是当输入是一系列向量时,如文字处理、语音信号和社交网络图等情境。

💡网络架构

网络架构指的是构成网络的基本结构,包括它的组成部分以及这些部分之间的连接方式。视频中提到,自注意力是一种常见的网络架构,与传统的卷积神经网络(CNN)相比,它能更灵活地处理各种长度的序列数据。

💡向量

向量在机器学习和深度学习中通常指的是一维数组,可以表示数据的特征。视频中强调,无论是处理图像、文字还是声音,输入给网络的数据都可以被视为一个或一系列向量,这些向量包含了数据的关键信息。

💡Word Embedding

词嵌入是自然语言处理中的一种技术,通过将词汇映射到稠密的向量空间中,来捕捉单词之间的语义关系。视频中提到,与One-Hot编码相比,Word Embedding能够提供丰富的语义信息,使得模型能更好地理解和处理语言数据。

💡序列

序列在此上下文中指的是一连串有序排列的数据,比如文本中的单词或者语音信号中的音频帧。视频中提到处理序列数据的挑战,特别是当序列长度可变时,自注意力机制能有效地对这些数据进行处理。

💡分类(Classification)

分类是监督学习的一个任务,目标是预测输入数据所属的类别。视频中提及分类任务,举例说明了模型输出可以是对序列中每个元素的分类(如词性标注),或者是对整个输入序列的分类(如情感分析)。

💡回归(Regression)

回归是监督学习中的一种任务,目标是预测一个连续的数值。视频中通过回归和分类的对比,说明了不同类型的输出(数值或类别)可以应对不同的问题。

💡标签(Label)

在机器学习中,标签是数据的真实输出,用于训练模型进行准确预测。视频中讨论了在处理序列数据时,每个向量可以有对应的标签,这些标签可以是数值(回归问题)或类别(分类问题)。

💡序列到序列(sequence to sequence)

序列到序列是一种处理模型,用于将一个序列转换成另一个序列,这两个序列的长度可以不同。视频中提到这种任务的例子,如机器翻译和语音识别,其中模型需要自动确定输出序列的长度。

💡Transformer

Transformer是一种基于自注意力机制的模型架构,广泛用于处理序列数据,特别是在自然语言处理领域。视频中提到Transformer和自注意力的关系,强调了“Attention is all you need”这篇论文对于自注意力以及Transformer架构的重要性。

Highlights

介绍了Self-Attention网络架构,它是处理输入序列长度不一致问题的关键技术。

Self-Attention可以处理输入序列中每个元素与其他元素之间的关系,而不仅仅是局部窗口内的上下文信息。

Self-Attention通过计算序列中每个向量与其他所有向量的相关性,来捕捉全局依赖关系。

Self-Attention机制允许模型对序列中的每个元素赋予不同的权重,这些权重反映了元素间的重要性。

介绍了One-Hot Encoding和Word Embedding两种将词汇表示为向量的方法,并讨论了它们的优缺点。

Word Embedding能够捕捉词汇间的语义关系,如动物和植物的聚集,而One-Hot Encoding则无法表示这种关系。

通过声音信号处理的例子,解释了如何将一段声音信号转换为一系列向量,并用于模型的输入。

讨论了Graph结构在机器学习中的应用,如社交网络和分子结构,以及如何将这些结构表示为向量序列。

解释了三种不同的输出类型:每个向量对应一个标签、整个序列对应一个标签、以及序列到序列的任务。

提出了序列标注(Sequence Labeling)的概念,即给序列中的每个元素分配一个标签。

讨论了Fully-Connected Network在处理序列数据时的局限性,特别是在处理词性标注等任务时。

通过Self-Attention机制,模型能够考虑整个输入序列的信息,而不仅仅是局部窗口。

介绍了Self-Attention的计算过程,包括Query、Key和Value的概念以及它们在计算注意力分数中的作用。

解释了如何通过Soft-Max函数对注意力分数进行归一化,以便在序列中分配权重。

讨论了Self-Attention可以多次叠加使用,以进一步捕捉序列中的复杂关系。

提到了Transformer架构,这是Self-Attention机制的代表性应用,由Google提出。

强调了Self-Attention在处理自然语言处理和其他序列数据任务中的重要性和实用性。

讨论了Self-Attention在不同领域的潜在应用,如情感分析、语音识别和药物发现。

解释了Self-Attention如何通过权重和来提取序列中的关键信息,并生成新的向量表示。

Transcripts

00:01

好 接下來要講什麼呢

00:03

講完了CNN以後

00:05

我們要講另外一個常見的Network架構

00:08

這個架構叫做Self-Attention

00:12

而這個Self-Attention

00:13

想要解決的問題是什麼呢

00:15

它想要解決的問題是

00:17

到目前為止啊

00:19

我們的Network的Input都是一個向量

00:23

不管是在預測這個

00:25

YouTube觀看人數的問題上啊

00:27

還是影像處理上啊

00:29

我們的輸入都可以看作是一個向量

00:33

然後我們的輸出

00:35

可能是一個數值

00:36

這個是Regression

00:37

可能是一個類別

00:38

這是Classification

00:40

但假設我們遇到更復雜的問題呢

00:43

假設我們說

00:44

輸入是一排向量呢

00:47

而且這個輸入的向量的數目

00:50

是會改變的呢

00:51

我們剛才在講影像辨識的時候

00:53

我還特別跟你強調說

00:54

我們假設輸入的影像大小

00:57

都是一樣的

00:58

那現在假設我們的輸入

01:01

會不一樣呢

01:02

每次我們Model輸入的Sequence的數目

01:04

Sequence的長度都不一樣呢

01:06

那這個時候應該要怎麼處理

01:10

好 那有什麼樣的例子是

01:12

輸入是一個Sequence

01:14

而且長度會改變的呢

01:16

第一個例子

01:17

是文字處理

01:19

假設我們今天要Network的輸入

01:21

是一個句子的話

01:23

每一個句子的長度都不一樣嘛

01:25

每個句子裡面詞彙的數目都不一樣嘛

01:27

如果我們把一個句子裡面的每一個詞彙

01:30

都描述成一個向量

01:31

用成向量來表示的話

01:33

那我們的Model的輸入

01:35

就會是一個Vector Set

01:37

而且這個Vector Set的大小

01:39

每次都不一樣

01:40

句子的長度不一樣

01:41

那你的Vector Set的大小就不一樣

01:44

那有同學可能會問說

01:46

那怎麼把一個詞彙表示成一個向量呢

01:49

那簡單來說 最簡單的做法

01:51

是One-Hot的Encoding

01:54

你就開一個很長很長的向量

01:56

這個向量的長度啊

01:58

跟世界上存在的詞彙的數目是一樣多的

02:02

假設英文是十萬個詞彙

02:04

你就開一個十萬維的向量

02:06

每一個維度對應到一個詞彙

02:08

Apple就是100

02:10

Bag就是010

02:11

Cat就是001

02:12

以此類推

02:14

但是這樣子的表示方法有一個非常嚴重的問題

02:17

什麼樣嚴重的問題呢

02:19

它假設所有的詞彙彼此之間

02:21

都是沒有關係的

02:24

從這個向量裡面你看不到說

02:26

也許Cat跟Dog都是動物

02:28

所以他們比較接近

02:29

Cat跟Apple

02:30

一個動物一個植物

02:31

所以他們比較不相像

02:34

看不出來這件事情

02:35

這個向量裡面

02:36

沒有任何語義的資訊

02:39

有另外一個方法叫做Word Embedding

02:41

Word Embedding就是

02:42

我們會給每一個詞彙一個向量

02:45

而這個向量是有語義的資訊的

02:47

如果你把Word Embedding畫出來的話

02:50

你會發現

02:50

所有的動物可能聚集成一團

02:52

所有的植物可能聚集成一團

02:54

所有的動詞可能聚集成一團等等

02:57

那Word Embedding是怎麼得到的呢

02:59

這個就不是今天講課的重點了

03:01

如果你有興趣的話

03:02

可以看一下以下的錄影

03:04

總之你現在在網路上

03:06

可以載到一種東西叫做Word Embedding

03:08

這個Word Embedding

03:09

會給每一個詞彙一個向量

03:11

而一個句子就是一排長度不一的向量

03:18

好 那接下來還有什麼樣的例子

03:20

我們需要把

03:22

這個一個向量的Sequence當做輸入呢

03:24

舉例來說 作業二

03:27

一段聲音訊號其實是一排向量

03:32

怎麼說呢

03:32

我們會把一段聲音訊號取一個範圍

03:35

這個範圍 叫做一個Window

03:38

把這個Window裡面的資訊呢

03:39

描述成一個向量

03:41

這個向量就叫做一個Frame

03:43

在語音上

03:44

我們會把一個向量叫做一個Frame

03:48

通常這個Window的長度啊

03:49

就是25個Millisecond

03:52

那怎麼把這麼一個小段的聲音訊號

03:54

變成一個Frame

03:55

變成一個向量呢

03:56

這邊就有百百種做法啦

03:58

那這邊就不細講

04:00

就是有各式各樣的做法

04:02

可以用一個向量來描述

04:04

一小段25個Millisecond裡面的語音訊號

04:08

然後呢

04:09

你為了要描述一整段的聲音訊號

04:11

你會把這個Window往右移一點

04:13

通常移動的大小是10個Millisecond

04:17

欸 有人就會問說

04:18

為什麼這邊是25 為什麼這個10

04:21

這個問題呢 就很難回答

04:22

這個古聖先賢幫你調好了

04:25

你知道嗎

04:25

這個你自己調放都是比較差

04:27

這古聖先賢已經把所有的可能都試過了

04:30

然後調一個最好的結果

04:31

然後就這樣

04:34

好 那總之呢

04:35

一段聲音訊號

04:36

你就是用一串向量來表示

04:39

而因為每一個Window啊

04:42

他們往右移 都是移動10個Millisecond

04:45

所以一秒鐘的聲音訊號有幾個向量呢

04:49

有100個

04:51

所以一分鐘的聲音訊號

04:52

就有這個100乘以60

04:55

就有6000個向量

04:57

所以語音其實很複雜的

04:58

一小段的聲音訊號

04:59

它裡面包含的資訊量其實是非常可觀的

05:03

所以聲音訊號也是一堆向量

05:08

還有什麼東西是一堆向量呢

05:09

一個Graph

05:11

一個Graph 一個圖

05:12

也是一堆向量

05:15

怎麼說呢

05:15

我們知道說Social Network就是一個Graph

05:19

在Social Network上面每一個節點

05:22

就是一個人

05:23

然後節點跟節點之間的Each

05:25

就是他們兩個

05:26

比如說是不是朋友等等

05:28

而每一個節點

05:30

可以看作是一個向量

05:33

你可以拿每一個人的

05:35

比如說他的Profile裡面的資訊啊

05:37

他的性別啊 他的年齡啊

05:39

他的工作啊 他講過的話啊等等

05:42

把這些資訊用一個向量來表示

05:45

所以一個Social Network 一個Graph

05:47

你也可以看做是一堆的向量所組成的

05:52

那還有什麼例子跟Graph有關呢

05:54

舉例來說

05:55

一個分子

05:56

它也可以看作是一個Graph

05:59

那現在像這種Drug Discovery的應用

06:01

非常地受到重視

06:03

尤其是在Covid-19這一段時間

06:05

很多人都期待

06:06

也許用機器學習

06:07

可以在Drug Discovery上面做到什麼突破

06:10

那這個時候

06:11

你就需要把一個分子

06:13

當做是你的模型的輸入

06:16

每一個分子可以看作是一個Graph

06:19

分子上面的每一個球

06:21

就是一個原子

06:22

你就是一個向量

06:25

那一個原子怎麼用一個向量來表示呢

06:27

你可以用One-Hot Vector來表示

06:29

你可以說氫就是1000

06:32

碳就是0100

06:34

然後這個氧就是0010

06:36

你可以用One-Hot Vector

06:38

來表示每一個原子

06:39

那一個分子就是一個Graph

06:42

它就是一堆向量

06:46

好 那輸出是什麼

06:47

我們剛才已經看說輸入是一堆向量

06:50

它可以是文字

06:52

可以是語音

06:53

可以是Graph

06:54

那這個時候

06:55

我們有可能有什麼樣的輸出呢

06:57

有三種可能性

07:00

第一種可能性是

07:01

每一個向量都有一個對應的Label

07:06

也就是說當你的模型

07:07

看到輸入是四個向量的時候

07:10

它就要輸出四個Label

07:12

而每一個Label

07:13

它可能是一個數值

07:14

那就是Regression的問題

07:15

如果每個Label是一個Class

07:17

那就是一個Classification的問題

07:20

但是在第一種可能性裡面

07:22

輸入跟輸出的長度是一樣的

07:25

所以模型不需要去煩惱

07:26

要輸出多少的Label

07:28

輸出多少的Scale(00:07:29)

07:29

反正輸入是四個向量

07:32

輸出就是四個向量

07:33

輸入五個向量

07:34

輸入五個向量 輸出就是五個Label

07:37

這是第一種類型

07:39

那什麼樣的Applications

07:41

會用到第一種類型的輸出呢

07:44

舉例來說 在文字處理上

07:47

假設你今天要做的是POS Tagging

07:50

POS Tagging是什麼呢

07:52

POS Tagging就是詞性標註

07:54

你要讓機器自動決定說

07:57

每一個詞彙 它是什麼樣的詞性

07:59

它是名詞 還是動詞 還是形容詞等等

08:02

那這個任務啊

08:03

其實並沒有很容易

08:05

舉例來說

08:06

你現在看到一個句子

08:07

I saw a saw

08:08

這並不是打錯

08:09

並不是你看一個看

08:10

而是我看到一個鋸子

08:13

這個第二個saw當名詞用的時候

08:16

它是鋸子

08:18

不是Sentence那個句子

08:19

是可以鋸東西的鋸子

08:20

知道嗎

08:22

好 那所以機器要知道說

08:23

第一個saw是個動詞

08:25

第二個saw 雖然它也是個saw

08:27

但它是名詞

08:29

但是每一個輸入的詞彙

08:32

都要有一個對應的輸出的詞性

08:35

這個任務就是

08:37

輸入跟輸出的長度是一樣的Case

08:41

這個就是屬於第一個類型的輸出

08:44

那如果是語音的話

08:46

你可以想想看我們作業二

08:47

就是這樣子的任務

08:49

雖然我們作業二

08:50

沒有給大家一個完整的Sequence

08:52

我們是把

08:52

每一個每一個每一個Vector分開給大家了啦

08:55

但是串起來就是一段聲音訊號裡面

08:58

有一串Vector

08:59

每一個Vector你都要決定

09:01

它是哪一個Phonetic

09:03

也就是哪一個

09:04

我也不知道Phonetic是什麼

09:05

就是當做音標來看

09:06

就是哪一個音標

09:08

當然這個不是真正的語音辨識啦

09:10

這是一個語音辨識的簡化版

09:13

或者是如果是Social Network的話

09:15

就是給一個Graph

09:16

給一個Social Network

09:17

那你的Machine呢

09:19

你的Model呢

09:19

要決定每一個節點

09:21

它有什麼樣的特性

09:22

比如說他會不會買某一個商品

09:25

這樣我們才知道說

09:26

要不要推薦某一個商品給他

09:29

好 所以以下

09:30

以上呢

09:31

就是舉輸入跟輸出 數目一樣的例子

09:35

好 這是第一種可能的輸出

09:37

第二種可能的輸出是什麼

09:38

第二種可能的輸出是我們一整個Sequence

09:43

只需要輸出一個Label就好

09:45

舉例來說

09:47

如果是文字的話

09:49

我們就說Sentiment Analysis

09:52

Sentiment Analysis是什麼呢

09:53

Sentiment Analysis就是給機器看一段話

09:56

它要決定說這段話呢

09:58

是正面的還是負面的

10:00

那你可以想像說這種應用很有用

10:01

假設你的公司開發了一個產品

10:03

這個產品上線了

10:04

你想要知道網友的評價怎麼樣

10:06

但是你又不可能一則一則網友的留言都去分析

10:09

那也許你就可以用這種

10:11

Sentiment Analysis的技術

10:13

讓機器自動去判讀說

10:15

當一則貼文裡面有提到某個產品的時候

10:17

它是正面的 還是負面的

10:19

那你就可以知道你的產品

10:21

在網友心中的評價怎麼樣

10:23

這個是Sentiment Analysis給一整個句子

10:26

只需要一個Label

10:28

那Positive或Negative

10:31

那這個就是第二類的輸出

10:34

那如果是語音的例子的話呢

10:36

在作業四裡面我們會做語者辨認

10:38

機器要聽一段聲音

10:40

然後決定他是誰講的

10:42

這個也是第二種輸出的例子

10:45

或者是如果是Graph的話呢

10:46

今天你可能想要給一個分子

10:49

然後要預測說這個分子

10:51

比如說它有沒有毒性

10:53

或者是它的親水性如何

10:54

那這就是給一個Graph 輸出一個Label

10:57

這也是第二個例子

11:00

好 那還有第三個可能的輸出

11:03

第三個可能的輸出就是

11:04

我們不知道應該輸出多少個Label

11:08

機器要自己決定

11:11

應該要輸出多少個Label

11:14

可能你輸入是N個向量

11:16

輸出可能是N'個Label

11:19

為什麼是N'

11:20

機器自己決定

11:23

好 那這種任務啊

11:24

又叫做sequence to sequence的任務

11:27

那我們在作業五呢

11:28

會有sequence to sequence的作業

11:30

所以這個之後我們還會再講

11:33

那可以想像說

11:34

翻譯就是sequence to sequence的任務

11:37

因為輸入輸出是不同的語言

11:39

它們的詞彙的數目本來就不會一樣多

11:41

或者是語音辨識也是

11:44

真正的語音辨識也是一個sequence to sequence的任務

11:48

輸入一句話

11:49

然後輸出一段文字

11:50

這也是一個sequence to sequence的任務

11:53

好 那第三種類型之後會講

11:56

今天我們只講第一種類型

11:59

第二種類型

12:01

我們有作業四

12:03

你可以把作

12:03

你可以自己去看看作業四的程式

12:05

看看第一種類型的問題是怎麼處理的

12:08

那因為上課時間有限

12:10

所以上課

12:11

我們今天就先只講第一個類型

12:14

也就是輸入跟輸出數目一樣多的狀況

12:18

那這種輸入跟輸出數目一樣多的狀況啊

12:20

它又叫做Sequence Labeling

12:23

你要給Sequence裡面的每一個向量

12:26

都給它一個Label

12:29

那要怎麼解Sequence Labeling的問題呢

12:31

那直覺的想法就是

12:33

欸 就跟作業二一樣

12:36

我們就拿個Fully-Connected的Network

12:39

然後雖然這個輸入是一個Sequence

12:41

但我們就各個擊破

12:43

不要管它

12:43

不要管它是不是一個Sequence

12:45

各個擊破

12:46

把每一個向量

12:47

分別輸入到Fully-Connected的Network裡面

12:51

然後呢

12:52

Fully-Connected的Network就會給我們輸出

12:54

那現在看看

12:55

你要做的是Regression還是Classification

12:57

產生正確的對應的輸出

12:59

就結束了

13:01

那這麼做顯然有非常大的瑕疵

13:04

什麼樣非常大的瑕疵呢

13:05

假設今天是

13:07

詞性標記的問題

13:09

你給機器一個句子

13:11

I saw a saw

13:13

對Fully-Connected Network來說

13:15

這一個saw 跟這個saw

13:16

完全一模一樣啊

13:19

它們是同一個詞彙啊

13:21

既然Fully-Connected的Network輸入同一個詞彙

13:24

它沒有理由輸出不同的東西啊

13:27

但實際上

13:28

你期待第一個saw要輸出動詞

13:30

第二個saw要輸出名詞

13:32

但對Network來說它不可能做到

13:34

因為這兩個saw 明明是一模一樣的

13:37

你叫它這個要輸出動詞 要輸

13:39

這個要輸出名詞

13:40

它會非常地困惑

13:41

完全不知道要怎麼處理

13:44

所以怎麼辦

13:45

有沒有可能讓Fully-Connected的Network

13:48

考慮更多的

13:50

比如說上下文的Context的資訊呢

13:53

這是有可能的

13:54

怎麼做

13:56

你就把這一個向量

13:58

前後幾個向量都串起來

14:01

一起丟到Fully-Connected的Network就結束了

14:04

事實上在作業二裡面

14:06

助教也已經這麼做了

14:08

在作業二裡面

14:09

我們不是只看一個Frame

14:11

去判斷這個Frame屬於哪一個Phonetic