吳恩達深度學習筆記(108)-序列模型介紹(Sequence Models)

循環序列模型(Recurrent Neural Networks)

為什麼選擇序列模型?(Why Sequence Models?)

叢此筆記開始,你將學會序列模型,它是深度學習中最令人激動的內容之一。

循環神經網絡(RNN)之類的模型在語音識別、自然語言處理和其他領域中引起變革。在本節課中,你將學會如何自行創建這些模型。我們先看一些例子,這些例子都有效使用了序列模型。

吳恩達深度學習筆記(108)-序列模型介紹(Sequence Models)

在進行語音識別時,給定了一個輸入音頻片段 x,並要求輸出對應的文字記錄 y。

這個例子裡輸入和輸出數據都是序列模型,因為 x是一個按時播放的音頻片段,輸出 y是一系列單詞。所以之後將要學到的一些序列模型,如循環神經網絡等等在語音識別方面是非常有用的。

音樂生成問題是使用序列數據的另一個例子,在這個例子中,只有輸出數據 y是序列,而輸入數據可以是空集,也可以是個單一的整數,這個數可能指代你想要生成的音樂風格,也可能是你想要生成的那首曲子的頭幾個音符。輸入的 x可以是空的,或者就是個數字,然後輸出序列y。

在處理情感分類時,輸入數據x是序列,你會得到類似這樣的輸入:“There is nothing to like in this movie.”,你認為這句評論對應幾星?

系列模型在DNA序列分析中也十分有用,你的DNA可以用A、C、G、T四個字母來表示。所以給定一段DNA序列,你能夠標記出哪部分是匹配某種蛋白質的嗎?

機器翻譯過程中,你會得到這樣的輸入句:“Voulez-vou chante avecmoi?”(法語:要和我一起唱麼?),然後要求你輸出另一種語言的翻譯結果。

在進行視頻行為識別時,你可能會得到一系列視頻幀,然後要求你識別其中的行為。

在進行命名實體識別時,可能會給定一個句子要你識別出句中的人名。

所以這些問題都可以被稱作使用標籤數據 (x,y)作為訓練集的監督學習。但從這一系列例子中你可以看出序列問題有很多不同類型。

有些問題裡,輸入數據 x和輸出數據y都是序列,但就算在那種情況下,x和y有時也會不一樣長。或者像上圖編號1所示和上圖編號2的x和y有相同的數據長度。在另一些問題裡,只有 x或者只有y是序列。

所以上面是我們學到適用於不同情況的序列模型,下面我們會定義一些定義序列問題要用到的符號。

數學符號(Notation)

本節先從定義符號開始一步步構建序列模型。

比如說你想要建立一個序列模型,它的輸入語句是這樣的:“Harry Potter and Herminoe Granger invented a new spell.”,(這些人名都是出自於J.K.Rowling筆下的系列小說Harry Potter)。

假如你想要建立一個能夠自動識別句中人名位置的序列模型,那麼這就是一個命名實體識別問題,這常用於搜索引擎,比如說索引過去24小時內所有新聞報道提及的人名,用這種方式就能夠恰當地進行索引。命名實體識別系統可以用來查找不同類型的文本中的人名、公司名、時間、地點、國家名和貨幣名等等。

吳恩達深度學習筆記(108)-序列模型介紹(Sequence Models)

現在給定這樣的輸入數據x,假如你想要一個序列模型輸出y,使得輸入的每個單詞都對應一個輸出值,同時這個y能夠表明輸入的單詞是否是人名的一部分。

技術上來說這也許不是最好的輸出形式,還有更加複雜的輸出形式,它不僅能夠表明輸入詞是否是人名的一部分,它還能夠告訴你這個人名在這個句子裡從哪裡開始到哪裡結束。比如Harry Potter(上圖編號1所示)、Hermione Granger(上圖標號2所示)。

更簡單的那種輸出形式:

這個輸入數據是9個單詞組成的序列,所以最終我們會有9個特徵集和來表示這9個單詞,並按序列中的位置進行索引,x^(<1>)、x^(<2>)、x^(<3>)等等一直到x^(<9>)來索引不同的位置,我將用x^()來索引這個序列的中間位置。t意味著它們是時序序列,但不論是否是時序序列,我們都將用t來索引序列中的位置。

輸出數據也是一樣,我們還是用y^(<1>)、y^(<2>)、y^(<3>)等等一直到y^(<9>)來表示輸出數據。同時我們用T_x來表示輸入序列的長度,這個例子中輸入是9個單詞,所以T_x=9。我們用T_y來表示輸出序列的長度。在這個例子裡T_x=T_y,上面你知道T_x和T_y可以有不同的值。

你應該記得我們之前用的符號,我們用x^((i))來表示第i個訓練樣本,所以為了指代第t個元素,或者說是訓練樣本i的序列中第t個元素用x^((i))這個符號來表示。如果T_x是序列長度,那麼你的訓練集裡不同的訓練樣本就會有不同的長度,所以T_x^((i))就代表第i個訓練樣本的輸入序列長度。同樣y^((i))代表第i個訓練樣本中第t個元素,T_y^((i))就是第i個訓練樣本的輸出序列的長度。

所以在這個例子中,T_x^((i))=9,但如果另一個樣本是由15個單詞組成的句子,那麼對於這個訓練樣本,T_x^((i))=15。

既然我們這個例子是NLP,也就是自然語言處理,這是我們初次涉足自然語言處理,一件我們需要事先決定的事是怎樣表示一個序列裡單獨的單詞,你會怎樣表示像Harry這樣的單詞,x^(<1>)實際應該是什麼?

接下來我們討論一下怎樣表示一個句子裡單個的詞

想要表示一個句子裡的單詞,第一件事是做

一張詞表,有時也稱為詞典,意思是列一列你的表示方法中用到的單詞。這個詞表(下圖所示)中的第一個詞是a,也就是說詞典中的第一個單詞是a,第二個單詞是Aaron,然後更下面一些是單詞and,再後面你會找到Harry,然後找到Potter,這樣一直到最後,詞典裡最後一個單詞可能是Zulu。

吳恩達深度學習筆記(108)-序列模型介紹(Sequence Models)

因此a是第一個單詞,Aaron是第二個單詞,在這個詞典裡,and出現在367這個位置上,Harry是在4075這個位置,Potter在6830,詞典裡的最後一個單詞Zulu可能是第10,000個單詞。

所以在這個例子中我用了10,000個單詞大小的詞典,這對現代自然語言處理應用來說太小了。對於商業應用來說,或者對於一般規模的商業應用來說30,000到50,000詞大小的詞典比較常見,但是100,000詞的也不是沒有,而且有些大型互聯網公司會用百萬詞,甚至更大的詞典。許多商業應用用的詞典可能是30,000詞,也可能是50,000詞。不過我將用10,000詞大小的詞典做說明,因為這是一個很好用的整數。

如果你選定了10,000詞的詞典,構建這個詞典的一個方法是遍歷你的訓練集,並且找到前10,000個常用詞,你也可以去瀏覽一些網絡詞典,它能告訴你英語裡最常用的10,000個單詞,接下來你可以用one-hot表示法來表示詞典裡的每個單詞

吳恩達深度學習筆記(108)-序列模型介紹(Sequence Models)

舉個例子,在這裡x^(<1>)表示Harry這個單詞,它就是一個第4075行是1,其餘值都是0的向量(上圖編號1所示),因為那是Harry在這個詞典裡的位置。

同樣x^(<2>)是個第6830行是1,其餘位置都是0的向量(上圖編號2所示)。

and在詞典裡排第367,所以x^(<3>)就是第367行是1,其餘值都是0的向量(上圖編號3所示)。如果你的詞典大小是10,000的話,那麼這裡的每個向量都是10,000維的。

因為a是字典第一個單詞,x^(<7>)對應a,那麼這個向量的第一個位置為1,其餘位置都是0的向量(上圖編號4所示)。

所以這種表示方法中,x^()指代句子裡的任意詞,它就是個one-hot向量,因為它只有一個值是1,其餘值都是0,所以你會有9個one-hot向量來表示這個句中的9個單詞,目的是用這樣的表示方式表示X,用序列模型在X和目標輸出Y之間學習建立一個映射。我會把它當作監督學習的問題,我確信會給定帶有(x,y)標籤的數據。

那麼還剩下最後一件事,我們將在之後的筆記中討論,如果你遇到了一個不在你詞表中的單詞,答案就是創建一個新的標記,也就是一個叫做

Unknow Word的偽單詞,用作為標記,來表示不在詞表中的單詞,我們之後會討論更多有關這個的內容。

總結一下本節課的內容,我們描述了一套符號用來表述你的訓練集裡的序列數據x和y,在下節課我們開始講述循環神經網絡中如何構建X到Y的映射


分享到:


相關文章: