動手學深度學習PyTorch版 task4

2021-10-02 20:27:21 字數 3073 閱讀 8924

目錄:

task1:

task2:

task3:

task4:本章節

task5:

task6:

task8:

task9:

task10:

1 機器翻譯及相關技術

機器翻譯(mt):將一段文字從一種語言自動翻譯為另一種語言,用神經網路解決這個問題通常稱為神經機器翻譯(nmt)。 主要特徵:輸出是單詞序列而不是單個單詞。 輸出序列的長度可能與源序列的長度不同。

主要包括:資料預處理、分詞、建立詞典

seq2seq模型:

2 注意力機制與seq2seq模型

當試圖描述一件事情,我們當前時刻說到的單詞和句子和正在描述的該事情的對應某個片段最相關,而其他部分隨著描述的進行,相關性也在不斷地改變。

為什麼加入注意力:上下文輸入資訊都被編碼器限制到固定長度,而解碼器則受到該固定長度的影響,過長截斷,過短補零,這限制了模型的效能,尤其是輸入序列較長時,效能會很差。

attention思想:打破了傳統編碼器-解碼器結構在編譯碼時都依賴於內部乙個固定長度向量的限制

attention機制的實現:通過保留lstm編碼器對輸入序列的中間輸出結果,然後訓練乙個模型來對這些輸入進行選擇性的學習並且在模型輸出時將輸出序列與之進行關聯。即輸出序列中的每一項的生成概率取決於在輸入序列中選擇了哪些項。

在文字翻譯任務上,使用attention機制的模型每生成乙個詞時都會在輸入序列中找出乙個與之最相關的詞集合。之後模型根據當前的上下文向量 (context vectors) 和所有之前生成出的詞來**下乙個目標詞。

在「編碼器—解碼器(seq2seq)」⼀節⾥,解碼器在各個時間步依賴相同的背景變數(context vector)來獲取輸⼊序列資訊。當編碼器為迴圈神經⽹絡時,背景變數來⾃它最終時間步的隱藏狀態。將源序列輸入資訊以迴圈單位狀態編碼,然後將其傳遞給解碼器以生成目標序列。然而這種結構存在著問題,尤其是rnn機制實際中存在長程梯度消失的問題,對於較長的句子,我們很難寄希望於將輸入的序列轉化為定長的向量而儲存所有的有效資訊,所以隨著所需翻譯句子的長度的增加,這種結構的效果會顯著下降。

與此同時,解碼的目標詞語可能只與原輸入的部分詞語有關,而並不是與所有的輸入有關。例如,當把「hello world」翻譯成「bonjour le monde」時,「hello」對映成「bonjour」,「world」對映成「monde」。在seq2seq模型中,解碼器只能隱式地從編碼器的最終狀態中選擇相應的資訊。然而,注意力機制可以將這種選擇過程顯式地建模。

attention 是一種通用的帶權池化方法,輸入由兩部分構成:詢問(query)和鍵值對(key-value pairs)。

對於乙個query來說,attention layer 會與每乙個key計算注意力分數並進行權重的歸一化,輸出的向量o則是value的加權求和,而每個key計算的權重與value一一對應。

為了計算輸出,我們首先假設有乙個函式α 用於計算query和key的相似性,然後可以計算所有的 attention scores a1,…,an by

ai=α(q,ki).

我們使用 softmax函式 獲得注意力權重:

最終的輸出就是value的加權求和:

注意力分配概率分布值的通用計算過程:

對於採用rnn的decoder來說,在時刻i,如果要生成yi單詞,我們是可以知道target在生成yi之前的時刻i-1時,隱層節點i-1時刻的輸出值hi-1的,而我們的目的是要計算生成yi時輸入句子中的單詞「tom」、「chase」、「jerry」對yi來說的注意力分配概率分布,那麼可以用target輸出句子i-1時刻的隱層節點狀態hi-1去一一和輸入句子source中每個單詞對應的rnn隱層節點狀態hj進行對比,即通過函式f(hj,hi-1)來獲得目標單詞yi和每個輸入單詞對應的對齊可能性,這個f函式在不同**裡可能會採取不同的方法,然後函式f的輸出經過softmax進行歸一化就得到了符合概率分布取值區間的注意力分配概率分布數值。

通過計算余弦相似度來求eij:

又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度。余弦相似度將向量根據座標值,繪製到向量空間,如最常見的二維空間。

3 transformer

主流的神經網路架構如卷積神經網路(cnns)和迴圈神經網路(rnns)。讓我們進行一些回顧:

為了整合cnn和rnn的優勢,創新性地使用注意力機制設計了transformer模型。該模型利用attention機制實現了並行化捕捉序列依賴,並且同時處理序列的每個位置的tokens,上述優勢使得transformer模型在效能優異的同時大大減少了訓練時間。

圖10.3.1展示了transformer模型的架構,與9.7節的seq2seq模型相似,transformer同樣基於編碼器-解碼器架構,其區別主要在於以下三點:

transformer blocks:將seq2seq模型重的迴圈網路替換為了transformer blocks,該模組包含乙個多頭注意力層(multi-head attention layers)以及兩個position-wise feed-forward networks(ffn)。對於解碼器來說,另乙個多頭注意力層被用於接受編碼器的隱藏狀態。

add and norm:多頭注意力層和前饋網路的輸出被送到兩個「add and norm」層進行處理,該層包含殘差結構以及層歸一化。

position encoding:由於自注意力層並沒有區分元素的順序,所以乙個位置編碼層被用於向序列元素裡新增位置資訊。

動手學深度學習PyTorch版 筆記彙總

pytorch的tensor,它可以是零維 又稱為標量或乙個數 一維 二維及多維的陣列。tensor自稱為神經網路界的numpy,它與numpy相似,二者可以共享記憶體,且之間的轉換非常方便和高效。不過它們也有不同之處,最大的區別就是numpy會把ndarray放在cpu中進行加速運算,而由torc...

《動手學深度學習》pytorch版筆記一

動手學深度學習 pytorch版筆記 與其說是筆記,不如說是問題集,有些已經搞清楚了,記錄一下。有些還沒搞清楚,先列在這裡,以後有空再慢慢查文件填坑。task 1 線性回歸 1.向量化運算以及矩陣的維度表示 2.torch.randn np.random.normal 等隨機數組生成函式 3.ten...

Pytorch 動手學深度學習(二)

學習安排如下 task03 過擬合 欠擬合及其解決方案 梯度消失 梯度 迴圈神經網路高階 1天 task04 機器翻譯及相關技術 注意力機制與seq2seq模型 transformer 1天 task05 卷積神經網路基礎 lenet 卷積神經網路高階 1天 梯度消失部分,主要是協變數偏移 標籤偏移...