自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型 精華

發(fā)布于 2025-1-22 12:59
瀏覽
0收藏

1. 引言

許多大語言模型成功的核心在于編碼器 - 解碼器架構(gòu),這一框架在機(jī)器翻譯、文本摘要和對話式人工智能等任務(wù)中取得了突破性進(jìn)展。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

編碼器 - 解碼器架構(gòu)的提出是為了解決序列到序列(Seq2Seq)問題,這在處理順序數(shù)據(jù)方面是一個重大突破。

1.1 數(shù)據(jù)處理的主要發(fā)展

表格數(shù)據(jù)

最初,人們專注于利用人工神經(jīng)網(wǎng)絡(luò)(ANNs)來處理表格數(shù)據(jù)。通過增加網(wǎng)絡(luò)層數(shù),這種方法逐漸演變?yōu)樯疃壬窠?jīng)網(wǎng)絡(luò)(DNNs),從而增強了模型捕捉數(shù)據(jù)中復(fù)雜模式的能力。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

圖像數(shù)據(jù)

在諸如物體識別(例如識別圖像中是狗還是貓)等任務(wù)中,圖像被視為二維數(shù)據(jù)網(wǎng)格。人工神經(jīng)網(wǎng)絡(luò)在處理這種結(jié)構(gòu)化數(shù)據(jù)時效果并不理想。這一局限性促使了卷積神經(jīng)網(wǎng)絡(luò)(CNNs)的發(fā)展,它是專門為解釋和分析網(wǎng)格格式的視覺信息而設(shè)計的。

順序數(shù)據(jù)

文本或時間序列等順序數(shù)據(jù)具有有意義的順序和時間依賴性。人工神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)不太適合處理此類數(shù)據(jù),因為它們?nèi)狈Σ蹲巾樞蜿P(guān)系的機(jī)制。循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)及其先進(jìn)變體,如長短期記憶(LSTM)網(wǎng)絡(luò)和門控循環(huán)單元(GRUs)填補了這一空白,它們能夠?qū)r間模式進(jìn)行建模和學(xué)習(xí)。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

Seq2Seq數(shù)據(jù)

在某些應(yīng)用中,輸入和輸出都是序列,例如機(jī)器翻譯任務(wù)。由于對齊可變長度的輸入和輸出序列存在復(fù)雜性,傳統(tǒng)模型在處理這類數(shù)據(jù)時遇到困難。這一挑戰(zhàn)促使人們開發(fā)能夠有效處理Seq2Seq數(shù)據(jù)的專門架構(gòu),為自然語言處理中更復(fù)雜的模型鋪平了道路。

本文的重點是解決Seq2Seq數(shù)據(jù)問題。

2. 理解序列建模

序列建模的用例涉及輸入、輸出或兩者均由數(shù)據(jù)序列(如單詞或字母)組成的問題。

考慮一個非常簡單的預(yù)測電影評論是正面還是負(fù)面的問題。這里我們的輸入是一個單詞序列,輸出是0到1之間的單個數(shù)字。如果我們使用傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò),通常需要使用詞袋模型(BOW)、Word2Vec等技術(shù)將輸入文本編碼為固定長度的向量。但請注意,這里單詞的順序沒有被保留,因此當(dāng)我們將輸入向量輸入到模型中時,模型對單詞的順序一無所知,從而遺漏了關(guān)于輸入的一個非常重要的信息。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

為了解決這個問題,循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)運而生。本質(zhì)上,對于任何具有可變數(shù)量特征的輸入X = (x?, x?, x?, … x?),在每個時間步,一個RNN單元將一個元素/標(biāo)記x?作為輸入,并產(chǎn)生一個輸出h?,同時將一些信息傳遞到下一個時間步。這些輸出可以根據(jù)手頭的問題使用。

電影評論預(yù)測問題是一個非?;镜男蛄袉栴},稱為多對一預(yù)測的示例。對于這類問題,RNN架構(gòu)的修改版本被用于不同類型的序列問題。

序列問題大致可以分為以下幾類:

  • 無RNN的普通處理模式,從固定大小的輸入到固定大小的輸出(例如圖像分類)。
  • 序列輸出(例如圖像字幕,輸入一張圖像,輸出一個單詞句子)。
  • 序列輸入(例如情感分析,給定一個句子,將其分類為表達(dá)正面或負(fù)面情感)。
  • 序列輸入和序列輸出(例如機(jī)器翻譯:一個RNN讀取一個英語句子,然后輸出一個法語句子)。
  • 同步的序列輸入和輸出(例如視頻分類,我們希望為視頻的每一幀標(biāo)記)。

請注意,在每種情況下,對序列的長度都沒有預(yù)先指定的限制,因為循環(huán)變換(綠色部分)是固定的,可以根據(jù)需要應(yīng)用任意多次。

2.1 用編碼器 - 解碼器架構(gòu)掌握順序數(shù)據(jù)

序列在我們的世界中無處不在,存在于語言、語音、金融時間序列和基因組數(shù)據(jù)中,其中元素的順序至關(guān)重要。與固定大小的數(shù)據(jù)不同,序列在理解、預(yù)測和生成信息方面帶來了獨特的挑戰(zhàn)。傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)在處理固定維度的輸入和輸出任務(wù)時表現(xiàn)良好,但在處理像機(jī)器翻譯這樣的序列到序列任務(wù)時遇到困難,因為輸入和輸出的長度不同且未對齊。因此,需要專門的模型來有效地處理順序數(shù)據(jù)。

編碼器 - 解碼器架構(gòu)相對較新,在2016年底被谷歌翻譯服務(wù)采用為核心技術(shù)。它是注意力模型、GPT模型、Transformer和BERT等先進(jìn)的序列到序列模型的基礎(chǔ)。因此,在學(xué)習(xí)更高級的機(jī)制之前,理解它非常關(guān)鍵。

  • 編碼器:編碼器處理輸入序列,并將信息編碼為固定長度的上下文向量(或向量序列)。這種編碼捕獲了輸入數(shù)據(jù)的本質(zhì),總結(jié)了其信息內(nèi)容。
  • 解碼器:解碼器接收編碼器提供的上下文向量,并一次生成一個元素的輸出序列。它利用上下文向量中的信息,生成與輸入相關(guān)且連貫的輸出。

3. 編碼器 - 解碼器架構(gòu)

3.1 神經(jīng)機(jī)器翻譯問題

為了說明這個概念,讓我們以神經(jīng)機(jī)器翻譯(NMT)為例。在神經(jīng)機(jī)器翻譯中,輸入是一個一個處理的單詞序列,輸出是相應(yīng)的單詞序列。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

任務(wù):預(yù)測英語句子的法語翻譯。

示例:

  • 輸入:英語句子 “nice to meet you”
  • 輸出:法語翻譯 “ravi de vous rencontrer”

術(shù)語解釋:

  • 輸入句子 “nice to meet you” 將被稱為X或輸入序列。
  • 輸出句子 “ravi de vous rencontrer” 被稱為Y_true或目標(biāo)序列,這是我們希望模型預(yù)測的真實值。
  • 模型的預(yù)測句子是Y_pred,也稱為預(yù)測序列。
  • 英語和法語句子中的每個單詞都被稱為一個 “標(biāo)記”。

因此,給定輸入序列 “nice to meet you”,模型的目標(biāo)是預(yù)測目標(biāo)序列Y_true,即 “ravi de vous rencontrer”。

3.2 概述

從很高的層次來看,編碼器 - 解碼器模型可以被看作是兩個模塊,即編碼器和解碼器,它們通過一個我們稱之為 “上下文向量” 的向量連接。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

  • 編碼器:編碼器處理輸入序列中的每個標(biāo)記。它試圖將關(guān)于輸入序列的所有信息壓縮到一個固定長度的向量中,即 “上下文向量”。在處理完所有標(biāo)記后,編碼器將這個向量傳遞給解碼器。
  • 上下文向量:這個向量的構(gòu)建方式是期望它封裝輸入序列的全部含義,并幫助解碼器做出準(zhǔn)確的預(yù)測。稍后我們會看到,這是我們編碼器模塊的最終內(nèi)部狀態(tài)。
  • 解碼器:解碼器讀取上下文向量,并試圖逐個標(biāo)記地預(yù)測目標(biāo)序列。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

3.3 內(nèi)部機(jī)制

Seq2Seq模型是一種基于RNN的模型,專為翻譯和摘要等任務(wù)設(shè)計,在這些任務(wù)中,輸入是一個序列,輸出也是一個序列。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

這是一個將英語句子 “I am a student.” 翻譯成法語 “Je suis étudiant.” 的Seq2Seq模型。左邊的橙色矩形代表編碼器,右邊的綠色矩形代表解碼器。編碼器接收輸入句子(“I am a student.”)并輸出一個上下文向量,而解碼器接收上下文向量(和標(biāo)記)作為輸入,并輸出句子(“Je suis étudiant.”)。

就架構(gòu)而言,它相當(dāng)直接。該模型可以被看作是兩個LSTM單元,它們之間有某種連接。這里的主要問題是我們?nèi)绾翁幚磔斎牒洼敵?。我將逐個解釋每個部分。

3.4 編碼器模塊

編碼器部分是一個LSTM單元。它隨著時間輸入序列,并試圖將所有信息封裝并存儲在其最終的內(nèi)部狀態(tài)h?(隱藏狀態(tài))和c?(細(xì)胞狀態(tài))中。這些內(nèi)部狀態(tài)隨后被傳遞給解碼器部分,解碼器將使用它們來嘗試生成目標(biāo)序列。這就是我們之前提到的 “上下文向量”。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

編碼器部分在每個時間步的輸出都被丟棄。

注意:上面的圖展示了一個LSTM/GRU單元在時間軸上展開的樣子。也就是說,它是一個在每個時間戳接收一個單詞/標(biāo)記的單個LSTM/GRU單元。

在論文中,他們使用LSTM而不是經(jīng)典的RNN,因為LSTM在處理長期依賴關(guān)系時表現(xiàn)更好。

3.4.1 數(shù)學(xué)基礎(chǔ):編碼器

給定一個輸入序列: 編碼器順序處理每個元素:

  • 初始化:編碼器的初始隱藏狀態(tài)h?通常初始化為零或?qū)W習(xí)到的參數(shù)。
  • 隱藏狀態(tài)更新:對于輸入序列中的每個時間步t: 其中,h?是時間步t的隱藏狀態(tài),f_enc是編碼器的激活函數(shù)(例如,LSTM或GRU單元)。
  • 上下文向量:在處理完整個輸入序列后,最終的隱藏狀態(tài)h_Tx成為上下文向量c。

3.5 解碼器模塊

在讀取整個輸入序列后,編碼器將內(nèi)部狀態(tài)傳遞給解碼器,從這里開始預(yù)測輸出序列。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

解碼器模塊也是一個LSTM單元。這里需要注意的主要事情是,解碼器的初始狀態(tài)(h?, c?)被設(shè)置為編碼器的最終狀態(tài)(h?, c?)。這些狀態(tài)充當(dāng) “上下文” 向量,幫助解碼器生成所需的目標(biāo)序列。

現(xiàn)在解碼器的工作方式是,它在任何時間步t的輸出應(yīng)該是目標(biāo)序列/Y_true(“ravi de vous rencontrer”)中的第t個單詞。為了解釋這一點,讓我們看看每個時間步會發(fā)生什么。

  • 時間步1:在第一個時間步輸入到解碼器的是一個特殊符號 “”。這用于表示輸出序列的開始。現(xiàn)在解碼器使用這個輸入和內(nèi)部狀態(tài)(h?, c?)在第一個時間步產(chǎn)生輸出,這個輸出應(yīng)該是目標(biāo)序列中的第一個單詞/標(biāo)記,即 “ravi”。
  • 時間步2:在時間步2,第一個時間步的輸出 “ravi” 被作為輸入饋送到第二個時間步。第二個時間步的輸出應(yīng)該是目標(biāo)序列中的第二個單詞,即 “de”。
  • 類似地,每個時間步的輸出都被作為輸入饋送到下一個時間步。這個過程一直持續(xù)到我們得到 “” 符號,這也是一個特殊符號,用于標(biāo)記輸出序列的結(jié)束。解碼器的最終內(nèi)部狀態(tài)被丟棄。

注意,這些特殊符號不一定只是 “” 和 “”。它們可以是任何字符串,只要這些字符串不在我們的數(shù)據(jù)集中,這樣模型就不會將它們與其他單詞混淆。在論文中,他們使用了符號 “”,并且使用方式略有不同。稍后我會詳細(xì)介紹這一點。

注意:上述過程是理想情況下解碼器在測試階段的工作方式。但在訓(xùn)練階段,需要稍微不同的實現(xiàn)方式,以使訓(xùn)練更快。我將在下一節(jié)中解釋這一點。

3.5.1 數(shù)學(xué)基礎(chǔ):解碼器

解碼器生成一個輸出序列: 使用上下文向量c:

  • 初始化:解碼器的初始隱藏狀態(tài)s?被設(shè)置為上下文向量:
  • 輸出生成:對于輸出序列中的每個時間步t: 其中,s?是解碼器在時間步t的隱藏狀態(tài),f_dec是解碼器的激活函數(shù),y???是之前生成的輸出(y?是序列開始的標(biāo)記),W是輸出層的權(quán)重矩陣,p(y? | y<t, X)是在時間步t可能輸出的概率分布。

4. 訓(xùn)練編碼器 - 解碼器模型

4.1 數(shù)據(jù)向量化

在深入了解細(xì)節(jié)之前,我們首先需要對數(shù)據(jù)進(jìn)行向量化。

我們擁有的原始數(shù)據(jù)是: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”

現(xiàn)在我們在目標(biāo)序列的開頭和結(jié)尾添加特殊符號 “” 和 “”: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”

接下來,使用獨熱編碼(ohe)對輸入和輸出數(shù)據(jù)進(jìn)行向量化。讓輸入和輸出表示為: X = (x?, x?, x?, x?) → Y_true = (y?_true, y?_true, y?_true, y?_true, y?_true, y?_true)

其中,x?和y?分別表示輸入序列和輸出序列的獨熱編碼向量。它們可以表示為:

  • 對于輸入X “nice” → x? : [1 0 0 0] “to” → x? : [0 1 0 0 ] “meet” →x? : [0 0 1 0] “you” → x? : [0 0 0 1]
  • 對于輸出Y_true “” → y?_true : [1 0 0 0 0 0] “ravi” → y?_true : [0 1 0 0 0 0] “de” → y?_true : [0 0 1 0 0 0] “vous” → y?_true : [0 0 0 1 0 0] “rencontrer” → y?_true : [0 0 0 0 1 0] “” → y?_true : [0 0 0 0 0 1]

注意:我使用這種表示方式是為了更易于解釋。“真實序列” 和 “目標(biāo)序列” 這兩個術(shù)語都用于指代我們希望模型學(xué)習(xí)的同一句子 “ravi de vous rencontrer”。

4.2 編碼器的訓(xùn)練與測試

編碼器在訓(xùn)練和測試階段的工作方式相同。它逐個接受輸入序列的每個標(biāo)記/單詞,并將最終狀態(tài)發(fā)送給解碼器。其參數(shù)通過時間反向傳播進(jìn)行更新。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

4.3 訓(xùn)練階段的解碼器:教師強制

與編碼器部分不同,解碼器在訓(xùn)練和測試階段的工作方式不同。因此,我們將分別介紹這兩個階段。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

為了訓(xùn)練我們的解碼器模型,我們使用一種稱為 “教師強制” 的技術(shù),在該技術(shù)中,我們將上一個時間步的真實輸出/標(biāo)記(而不是預(yù)測輸出/標(biāo)記)作為當(dāng)前時間步的輸入。

為了解釋這一點,讓我們看一下訓(xùn)練的第一次迭代。在這里,我們將輸入序列饋送到編碼器,編碼器對其進(jìn)行處理并將其最終內(nèi)部狀態(tài)傳遞給解碼器?,F(xiàn)在對于解碼器部分,參考下面的圖。

在繼續(xù)之前,請注意在解碼器中,在任何時間步t,輸出y?_pred是輸出數(shù)據(jù)集中整個詞匯表上的概率分布,這是通過使用Softmax激活函數(shù)生成的。具有最高概率的標(biāo)記被選為預(yù)測單詞。

例如,參考上面的圖,y?_pred = [0.02 0.12 0.36 0.1 0.3 0.1] 告訴我們,我們的模型認(rèn)為輸出序列中第一個標(biāo)記是 “” 的概率是0.02,是 “ravi” 的概率是0.12,是 “de” 的概率是0.36等等。我們將預(yù)測單詞選為具有最高概率的單詞。因此,這里預(yù)測的單詞/標(biāo)記是 “de”,概率為0.36。

繼續(xù)...

  • 時間步1:單詞 “” 的向量 [1 0 0 0 0 0] 被作為輸入向量饋送?,F(xiàn)在我希望我的模型預(yù)測輸出為y?_true = [0 1 0 0 0 0],但由于我的模型剛剛開始訓(xùn)練,它會輸出一些隨機(jī)值。假設(shè)時間步1的預(yù)測值為y?_pred = [0.02 0.12 0.36 0.1 0.3 0.1],這意味著它預(yù)測第一個標(biāo)記為 “de”?,F(xiàn)在,我們應(yīng)該將這個y?_pred作為時間步2的輸入嗎?我們可以這樣做,但在實踐中發(fā)現(xiàn),這會導(dǎo)致諸如收斂緩慢、模型不穩(wěn)定和性能不佳等問題,這是很合理的。
  • 因此,引入了教師強制來糾正這個問題。在教師強制中,我們將上一個時間步的真實輸出/標(biāo)記(而不是預(yù)測輸出)作為當(dāng)前時間步的輸入。這意味著時間步2的輸入將是y?_true = [0 1 0 0 0 0],而不是y?_pred。
  • 現(xiàn)在時間步2的輸出將是某個隨機(jī)向量y?_pred。但在時間步3,我們將使用y?_true = [0 0 1 0 0 0] 作為輸入,而不是y?_pred。類似地,在每個時間步,我們將使用上一個時間步的真實輸出。
  • 最后,根據(jù)每個時間步的預(yù)測輸出和目標(biāo)序列/Y_true計算損失,并通過時間反向傳播誤差來更新模型的參數(shù)。使用的損失函數(shù)是目標(biāo)序列/Y_true和預(yù)測序列/Y_pred之間的分類交叉熵?fù)p失函數(shù),即: Y_true = [y?_true, y?_true, y?_true, y?_true, y?_true, y?_true] Y_pred = [‘’, y?_pred, y?_pred, y?_pred, y?_pred, y?_pred] 解碼器的最終狀態(tài)被丟棄。

4.4 測試階段的解碼器

在實際應(yīng)用場景中,我們手頭只有輸入X,而沒有目標(biāo)輸出Y_true。因此,由于缺乏目標(biāo)序列Y_true,我們無法采用訓(xùn)練階段的操作方式。所以在測試模型時,我們會將上一個時間步的預(yù)測輸出(與訓(xùn)練階段使用真實輸出不同)作為當(dāng)前時間步的輸入。其余部分則與訓(xùn)練階段一致。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

假設(shè)我們已經(jīng)完成了模型的訓(xùn)練,現(xiàn)在用訓(xùn)練時使用的單句對其進(jìn)行測試。如果模型訓(xùn)練效果良好,且僅在單句上訓(xùn)練,那么它應(yīng)該表現(xiàn)得近乎完美。但為了便于解釋,假定我們的模型訓(xùn)練效果不佳或者只是部分訓(xùn)練完成,現(xiàn)在對其進(jìn)行測試。具體場景如下圖所示:

  • 時間步1:y1_pred = [0 0.92 0.08 0 0 0] 表明模型預(yù)測輸出序列中的第一個單詞為 “ravi” 的概率是0.92。因此在下一個時間步,這個預(yù)測的單詞將被用作輸入。
  • 時間步2:將時間步1預(yù)測的單詞 “ravi” 作為此處的輸入。此時模型預(yù)測輸出序列中的下一個單詞為 “de” 的概率是0.98,該預(yù)測單詞隨后將作為時間步3的輸入。
  • 之后每個時間步都會重復(fù)類似的過程,直到遇到 “” 標(biāo)記。

更好的可視化展示如下:

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

根據(jù)我們訓(xùn)練好的模型,測試時的預(yù)測序列為 “ravi de rencontrer rencontrer”。盡管模型在第三次預(yù)測時出現(xiàn)錯誤,但我們?nèi)詫⑵渥鳛橄乱粋€時間步的輸入。模型預(yù)測的準(zhǔn)確性取決于可用數(shù)據(jù)量以及訓(xùn)練的充分程度。在測試階段,模型可能會預(yù)測出錯誤的輸出,但仍會將該輸出輸入到下一個時間步。

4.5 嵌入層

此前我未提及的一個重要細(xì)節(jié)是,編碼器和解碼器都通過嵌入層來處理輸入序列。這一步驟能夠降低輸入詞向量的維度,因為在實際應(yīng)用中,獨熱編碼向量往往維度較大。嵌入向量能為單詞提供更高效且有意義的表示。以編碼器為例,嵌入層可以將詞向量維度壓縮,比如從4維降至3維。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

這個嵌入層既可以像Word2Vec嵌入那樣進(jìn)行預(yù)訓(xùn)練,也可以與模型一同訓(xùn)練。

4.6 測試時的最終可視化

左邊,編碼器處理輸入序列(“nice to meet you”),每個單詞先通過嵌入層(降低維度),然后經(jīng)過一系列LSTM層。編碼器輸出包含隱藏狀態(tài)ht和細(xì)胞狀態(tài)ct的上下文向量,對輸入序列進(jìn)行了總結(jié)。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

右邊,解碼器接收上下文向量并生成輸出序列(“ravi de rencontrer”)。解碼器使用LSTM生成每個單詞,將前一個單詞作為輸入(從特殊標(biāo)記開始),經(jīng)過另一個嵌入層,并通過softmax層生成預(yù)測。

該圖像展示了模型如何利用嵌入層和循環(huán)層將輸入序列轉(zhuǎn)換為目標(biāo)序列。

5. 編碼器 - 解碼器模型的缺點

這種架構(gòu)主要存在兩個與長度相關(guān)的缺點。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

首先,與人類記憶類似,該架構(gòu)的記憶能力有限。長短期記憶網(wǎng)絡(luò)(LSTM)的最終隱藏狀態(tài)S或W負(fù)責(zé)封裝整個待翻譯句子的信息。通常,S或W僅包含幾百個單元(即浮點數(shù))。然而,往這個固定維度的向量中塞入過多信息會增加神經(jīng)網(wǎng)絡(luò)中的模糊性。有時,將神經(jīng)網(wǎng)絡(luò)視為進(jìn)行 “有損壓縮” 的工具,這種思考方式十分有用。

其次,一般來說,神經(jīng)網(wǎng)絡(luò)越深,訓(xùn)練難度就越大。對于循環(huán)神經(jīng)網(wǎng)絡(luò)而言,序列越長,沿時間維度的神經(jīng)網(wǎng)絡(luò)就越深。這會導(dǎo)致梯度消失問題,即循環(huán)神經(jīng)網(wǎng)絡(luò)從目標(biāo)中學(xué)習(xí)的梯度信號在反向傳播過程中消失。即便使用了諸如LSTM等專門用于防止梯度消失的循環(huán)神經(jīng)網(wǎng)絡(luò),這仍然是一個根本性問題。

此外,對于更復(fù)雜和冗長的句子,我們有注意力模型和Transformer等更強大的模型。

6. 編碼器 - 解碼器架構(gòu)的改進(jìn)

6.1 添加嵌入層

嵌入層將輸入標(biāo)記轉(zhuǎn)換為密集向量表示,使模型能夠?qū)W習(xí)輸入序列中單詞或標(biāo)記的有意義表示。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

通過使用可訓(xùn)練的嵌入層,并探索諸如預(yù)訓(xùn)練詞嵌入或上下文嵌入等技術(shù),我們可以豐富輸入表示,使模型能夠更有效地捕捉細(xì)微的語義和句法信息。這種增強有助于更好地理解和生成順序數(shù)據(jù)。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

6.2 使用深度LSTM

LSTM是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的變體,以其在順序數(shù)據(jù)中捕捉長距離依賴關(guān)系的能力而聞名。加深LSTM層能使模型學(xué)習(xí)輸入和輸出序列的層次表示,從而提高性能。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

增加LSTM層的深度,并結(jié)合殘差連接或?qū)託w一化等技術(shù),有助于緩解梯度消失問題,并便于訓(xùn)練更深層次的網(wǎng)絡(luò)。這些改進(jìn)使模型能夠?qū)W習(xí)數(shù)據(jù)中更復(fù)雜的模式和依賴關(guān)系,從而實現(xiàn)更好的序列生成和理解。

6.3 反轉(zhuǎn)輸入

在機(jī)器翻譯任務(wù)中,例如英語到印地語或英語到法語的轉(zhuǎn)換,反轉(zhuǎn)輸入序列在某些情況下已被證明可以通過幫助捕捉長距離依賴關(guān)系和緩解梯度消失問題來提高模型性能。

深入探究編碼器 - 解碼器架構(gòu):從RNN到Transformer的自然語言處理模型-AI.x社區(qū)

然而,其有效性可能因語言特征和數(shù)據(jù)集的復(fù)雜性而異,并非在所有場景中都能持續(xù)提高性能。需要進(jìn)行仔細(xì)的評估和實驗,以確定反轉(zhuǎn)輸入序列對于特定任務(wù)和數(shù)據(jù)集是否有益。

現(xiàn)在我們已經(jīng)理解了編碼器 - 解碼器的概念。如果研讀Ilya Sutskever撰寫的著名研究論文《Sequence to Sequence Learning with Neural Networks》,我們將能很好地理解論文中的概念。下面我總結(jié)一下論文的內(nèi)容:

  • 在翻譯中的應(yīng)用:該模型專注于將英語翻譯成法語,展示了序列到序列學(xué)習(xí)在神經(jīng)機(jī)器翻譯中的有效性。
  • 特殊的句末符號:數(shù)據(jù)集中的每個句子都以一個獨特的句末符號(“”)結(jié)尾,使模型能夠識別序列的結(jié)束。
  • 數(shù)據(jù)集:該模型在一個包含1200萬個句子的子集上進(jìn)行訓(xùn)練,這些句子包含3.48億個法語單詞和3.04億個英語單詞,數(shù)據(jù)集來自公開可用的語料庫。
  • 詞匯限制:為了控制計算復(fù)雜度,對兩種語言都使用了固定的詞匯表,英語使用最常見的16萬個單詞,法語使用8萬個單詞。不在這些詞匯表中的單詞被替換為特殊的 “UNK” 標(biāo)記。
  • 反轉(zhuǎn)輸入序列:在將輸入句子輸入模型之前將其反轉(zhuǎn),發(fā)現(xiàn)這可以顯著提高模型的學(xué)習(xí)效率,尤其是對于較長的句子。
  • 詞嵌入:模型使用1000維的詞嵌入層來表示輸入單詞,為每個單詞提供密集且有意義的表示。
  • 架構(gòu)細(xì)節(jié):輸入(編碼器)和輸出(解碼器)模型都有4層,每層包含1000個單元,展示了基于深度LSTM的架構(gòu)。
  • 輸出層和訓(xùn)練:輸出層使用SoftMax函數(shù)在最大詞匯表上生成概率分布。模型在這些設(shè)置下進(jìn)行端到端訓(xùn)練。
  • 性能 - BLEU分?jǐn)?shù):該模型的BLEU分?jǐn)?shù)達(dá)到34.81,超過了基于統(tǒng)計的機(jī)器翻譯系統(tǒng)在同一數(shù)據(jù)集上的33.30分,標(biāo)志著神經(jīng)機(jī)器翻譯的重大進(jìn)步。

7. 示例:基于神經(jīng)網(wǎng)絡(luò)的編碼器 - 解碼器架構(gòu)

我們可以在編碼器 - 解碼器架構(gòu)中使用CNN、RNN和LSTM來解決不同類型的問題。結(jié)合使用不同類型的網(wǎng)絡(luò)有助于捕捉數(shù)據(jù)輸入和輸出序列之間的復(fù)雜關(guān)系。以下是可以使用CNN、RNN、LSTM、Transformer等網(wǎng)絡(luò)的不同場景或問題示例:

  • CNN作為編碼器,RNN/LSTM作為解碼器:這種架構(gòu)可用于圖像描述等任務(wù),其中輸入是圖像,輸出是描述圖像的單詞序列。CNN可以從圖像中提取特征,而RNN/LSTM可以生成相應(yīng)的文本序列?;仡櫩芍珻NN擅長從圖像中提取特征,因此可在涉及圖像的任務(wù)中用作編碼器。此外,RNN/LSTM擅長處理單詞序列等順序數(shù)據(jù),可在涉及文本序列的任務(wù)中用作解碼器。
  • RNN/LSTM作為編碼器,RNN/LSTM作為解碼器:這種架構(gòu)可用于機(jī)器翻譯等任務(wù),其中輸入和輸出都是長度可變的單詞序列。編碼器中的RNN/LSTM可以將輸入的單詞序列編碼為隱藏狀態(tài)或數(shù)值表示,而解碼器中的RNN/LSTM可以生成不同語言的相應(yīng)輸出單詞序列。下圖展示了在編碼器和解碼器網(wǎng)絡(luò)中都使用RNN的編碼器 - 解碼器架構(gòu)。輸入的單詞序列為英語,輸出是德語的機(jī)器翻譯。

在編碼器 - 解碼器架構(gòu)中使用RNN存在一個缺點。編碼器網(wǎng)絡(luò)中的最終數(shù)值表示或隱藏狀態(tài)必須代表整個數(shù)據(jù)序列的上下文和含義。如果數(shù)據(jù)序列足夠長,這可能會很有挑戰(zhàn)性,并且在將整個信息壓縮為數(shù)值表示的過程中,序列開頭的信息可能會丟失。

在編碼器 - 解碼器架構(gòu)中使用CNN、RNN、LSTM等不同類型的神經(jīng)網(wǎng)絡(luò)時,需要注意以下幾個局限性:

  • CNN計算成本可能較高,并且可能需要大量的訓(xùn)練數(shù)據(jù)。
  • RNN/LSTM可能會遇到梯度消失/梯度爆炸問題,并且可能需要仔細(xì)的初始化和正則化。
  • 結(jié)合使用不同類型的網(wǎng)絡(luò)會使模型更加復(fù)雜,并且難以訓(xùn)練。

8. 編碼器 - 解碼器神經(jīng)網(wǎng)絡(luò)架構(gòu)的應(yīng)用

以下是編碼器 - 解碼器神經(jīng)網(wǎng)絡(luò)架構(gòu)在現(xiàn)實生活中的一些應(yīng)用:

  • Transformer模型:Vaswani等人在論文《Attention Is All You Need》中最初提出的Transformer模型由編碼器和解碼器組成。每個部分都由使用自注意力機(jī)制的層構(gòu)成。編碼器處理輸入數(shù)據(jù)(如文本)并創(chuàng)建其富含上下文的表示。解碼器利用這些表示以及自身的輸入(如句子中的前一個單詞)來生成輸出序列。T5(文本到文本轉(zhuǎn)換Transformer)采用了編碼器 - 解碼器架構(gòu)。還有另一個例子是BART(雙向和自回歸Transformer),它結(jié)合了雙向編碼器(如BERT)和自回歸解碼器(如GPT)。
  • Make-a-Video:Facebook/Meta最近推出的人工智能系統(tǒng)Make-a-Video可能由深度學(xué)習(xí)技術(shù)驅(qū)動,可能包括用于將文本提示轉(zhuǎn)換為視頻內(nèi)容的編碼器 - 解碼器架構(gòu)。這種常用于序列到序列轉(zhuǎn)換的架構(gòu),會使用編碼器將輸入文本轉(zhuǎn)換為密集向量表示,解碼器將該向量轉(zhuǎn)換為視頻內(nèi)容。然而,鑒于從文本創(chuàng)建視頻的復(fù)雜性,該系統(tǒng)可能還采用了生成對抗網(wǎng)絡(luò)(GANs)或變分自編碼器(VAEs)等先進(jìn)的生成模型,這些模型在生成高質(zhì)量、逼真圖像方面表現(xiàn)出色。此外,為了學(xué)習(xí)從文本到視覺的映射并理解世界的動態(tài),它可能利用了大量的文本 - 圖像配對數(shù)據(jù)和視頻片段,可能采用了無監(jiān)督學(xué)習(xí)或自監(jiān)督學(xué)習(xí)技術(shù)。
  • 機(jī)器翻譯:編碼器 - 解碼器架構(gòu)最常見的應(yīng)用之一是機(jī)器翻譯。如上文(使用RNN的編碼器 - 解碼器架構(gòu))所示,一種語言的單詞序列被翻譯成另一種語言。編碼器 - 解碼器模型可以在大量的雙語文本語料庫上進(jìn)行訓(xùn)練,以學(xué)習(xí)如何將一種語言的單詞序列映射到另一種語言的等效序列。
  • 圖像描述:圖像描述是編碼器 - 解碼器架構(gòu)的另一個應(yīng)用。在這個應(yīng)用中,圖像由編碼器(使用CNN)處理,輸出被傳遞到解碼器(RNN或LSTM),解碼器生成圖像的文本描述。這可用于自動圖像標(biāo)記和添加描述等應(yīng)用。

本文轉(zhuǎn)載自??柏企科技圈??,作者:柏企 ??



收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦