深入探究編碼器 - 解碼器架構:從RNN到Transformer的自然語言處理模型 精華
1. 引言
許多大語言模型成功的核心在于編碼器 - 解碼器架構,這一框架在機器翻譯、文本摘要和對話式人工智能等任務中取得了突破性進展。
編碼器 - 解碼器架構的提出是為了解決序列到序列(Seq2Seq)問題,這在處理順序數據方面是一個重大突破。
1.1 數據處理的主要發展
表格數據
最初,人們專注于利用人工神經網絡(ANNs)來處理表格數據。通過增加網絡層數,這種方法逐漸演變為深度神經網絡(DNNs),從而增強了模型捕捉數據中復雜模式的能力。
圖像數據
在諸如物體識別(例如識別圖像中是狗還是貓)等任務中,圖像被視為二維數據網格。人工神經網絡在處理這種結構化數據時效果并不理想。這一局限性促使了卷積神經網絡(CNNs)的發展,它是專門為解釋和分析網格格式的視覺信息而設計的。
順序數據
文本或時間序列等順序數據具有有意義的順序和時間依賴性。人工神經網絡和卷積神經網絡不太適合處理此類數據,因為它們缺乏捕捉順序關系的機制。循環神經網絡(RNNs)及其先進變體,如長短期記憶(LSTM)網絡和門控循環單元(GRUs)填補了這一空白,它們能夠對時間模式進行建模和學習。
Seq2Seq數據
在某些應用中,輸入和輸出都是序列,例如機器翻譯任務。由于對齊可變長度的輸入和輸出序列存在復雜性,傳統模型在處理這類數據時遇到困難。這一挑戰促使人們開發能夠有效處理Seq2Seq數據的專門架構,為自然語言處理中更復雜的模型鋪平了道路。
本文的重點是解決Seq2Seq數據問題。
2. 理解序列建模
序列建模的用例涉及輸入、輸出或兩者均由數據序列(如單詞或字母)組成的問題。
考慮一個非常簡單的預測電影評論是正面還是負面的問題。這里我們的輸入是一個單詞序列,輸出是0到1之間的單個數字。如果我們使用傳統的深度神經網絡,通常需要使用詞袋模型(BOW)、Word2Vec等技術將輸入文本編碼為固定長度的向量。但請注意,這里單詞的順序沒有被保留,因此當我們將輸入向量輸入到模型中時,模型對單詞的順序一無所知,從而遺漏了關于輸入的一個非常重要的信息。
為了解決這個問題,循環神經網絡應運而生。本質上,對于任何具有可變數量特征的輸入X = (x?, x?, x?, … x?),在每個時間步,一個RNN單元將一個元素/標記x?作為輸入,并產生一個輸出h?,同時將一些信息傳遞到下一個時間步。這些輸出可以根據手頭的問題使用。
電影評論預測問題是一個非常基本的序列問題,稱為多對一預測的示例。對于這類問題,RNN架構的修改版本被用于不同類型的序列問題。
序列問題大致可以分為以下幾類:
- 無RNN的普通處理模式,從固定大小的輸入到固定大小的輸出(例如圖像分類)。
- 序列輸出(例如圖像字幕,輸入一張圖像,輸出一個單詞句子)。
- 序列輸入(例如情感分析,給定一個句子,將其分類為表達正面或負面情感)。
- 序列輸入和序列輸出(例如機器翻譯:一個RNN讀取一個英語句子,然后輸出一個法語句子)。
- 同步的序列輸入和輸出(例如視頻分類,我們希望為視頻的每一幀標記)。
請注意,在每種情況下,對序列的長度都沒有預先指定的限制,因為循環變換(綠色部分)是固定的,可以根據需要應用任意多次。
2.1 用編碼器 - 解碼器架構掌握順序數據
序列在我們的世界中無處不在,存在于語言、語音、金融時間序列和基因組數據中,其中元素的順序至關重要。與固定大小的數據不同,序列在理解、預測和生成信息方面帶來了獨特的挑戰。傳統的深度神經網絡在處理固定維度的輸入和輸出任務時表現良好,但在處理像機器翻譯這樣的序列到序列任務時遇到困難,因為輸入和輸出的長度不同且未對齊。因此,需要專門的模型來有效地處理順序數據。
編碼器 - 解碼器架構相對較新,在2016年底被谷歌翻譯服務采用為核心技術。它是注意力模型、GPT模型、Transformer和BERT等先進的序列到序列模型的基礎。因此,在學習更高級的機制之前,理解它非常關鍵。
- 編碼器:編碼器處理輸入序列,并將信息編碼為固定長度的上下文向量(或向量序列)。這種編碼捕獲了輸入數據的本質,總結了其信息內容。
- 解碼器:解碼器接收編碼器提供的上下文向量,并一次生成一個元素的輸出序列。它利用上下文向量中的信息,生成與輸入相關且連貫的輸出。
3. 編碼器 - 解碼器架構
3.1 神經機器翻譯問題
為了說明這個概念,讓我們以神經機器翻譯(NMT)為例。在神經機器翻譯中,輸入是一個一個處理的單詞序列,輸出是相應的單詞序列。
任務:預測英語句子的法語翻譯。
示例:
- 輸入:英語句子 “nice to meet you”
- 輸出:法語翻譯 “ravi de vous rencontrer”
術語解釋:
- 輸入句子 “nice to meet you” 將被稱為X或輸入序列。
- 輸出句子 “ravi de vous rencontrer” 被稱為Y_true或目標序列,這是我們希望模型預測的真實值。
- 模型的預測句子是Y_pred,也稱為預測序列。
- 英語和法語句子中的每個單詞都被稱為一個 “標記”。
因此,給定輸入序列 “nice to meet you”,模型的目標是預測目標序列Y_true,即 “ravi de vous rencontrer”。
3.2 概述
從很高的層次來看,編碼器 - 解碼器模型可以被看作是兩個模塊,即編碼器和解碼器,它們通過一個我們稱之為 “上下文向量” 的向量連接。
- 編碼器:編碼器處理輸入序列中的每個標記。它試圖將關于輸入序列的所有信息壓縮到一個固定長度的向量中,即 “上下文向量”。在處理完所有標記后,編碼器將這個向量傳遞給解碼器。
- 上下文向量:這個向量的構建方式是期望它封裝輸入序列的全部含義,并幫助解碼器做出準確的預測。稍后我們會看到,這是我們編碼器模塊的最終內部狀態。
- 解碼器:解碼器讀取上下文向量,并試圖逐個標記地預測目標序列。
3.3 內部機制
Seq2Seq模型是一種基于RNN的模型,專為翻譯和摘要等任務設計,在這些任務中,輸入是一個序列,輸出也是一個序列。
這是一個將英語句子 “I am a student.” 翻譯成法語 “Je suis étudiant.” 的Seq2Seq模型。左邊的橙色矩形代表編碼器,右邊的綠色矩形代表解碼器。編碼器接收輸入句子(“I am a student.”)并輸出一個上下文向量,而解碼器接收上下文向量(和標記)作為輸入,并輸出句子(“Je suis étudiant.”)。
就架構而言,它相當直接。該模型可以被看作是兩個LSTM單元,它們之間有某種連接。這里的主要問題是我們如何處理輸入和輸出。我將逐個解釋每個部分。
3.4 編碼器模塊
編碼器部分是一個LSTM單元。它隨著時間輸入序列,并試圖將所有信息封裝并存儲在其最終的內部狀態h?(隱藏狀態)和c?(細胞狀態)中。這些內部狀態隨后被傳遞給解碼器部分,解碼器將使用它們來嘗試生成目標序列。這就是我們之前提到的 “上下文向量”。
編碼器部分在每個時間步的輸出都被丟棄。
注意:上面的圖展示了一個LSTM/GRU單元在時間軸上展開的樣子。也就是說,它是一個在每個時間戳接收一個單詞/標記的單個LSTM/GRU單元。
在論文中,他們使用LSTM而不是經典的RNN,因為LSTM在處理長期依賴關系時表現更好。
3.4.1 數學基礎:編碼器
給定一個輸入序列: 編碼器順序處理每個元素:
- 初始化:編碼器的初始隱藏狀態h?通常初始化為零或學習到的參數。
- 隱藏狀態更新:對于輸入序列中的每個時間步t: 其中,h?是時間步t的隱藏狀態,f_enc是編碼器的激活函數(例如,LSTM或GRU單元)。
- 上下文向量:在處理完整個輸入序列后,最終的隱藏狀態h_Tx成為上下文向量c。
3.5 解碼器模塊
在讀取整個輸入序列后,編碼器將內部狀態傳遞給解碼器,從這里開始預測輸出序列。
解碼器模塊也是一個LSTM單元。這里需要注意的主要事情是,解碼器的初始狀態(h?, c?)被設置為編碼器的最終狀態(h?, c?)。這些狀態充當 “上下文” 向量,幫助解碼器生成所需的目標序列。
現在解碼器的工作方式是,它在任何時間步t的輸出應該是目標序列/Y_true(“ravi de vous rencontrer”)中的第t個單詞。為了解釋這一點,讓我們看看每個時間步會發生什么。
- 時間步1:在第一個時間步輸入到解碼器的是一個特殊符號 “”。這用于表示輸出序列的開始。現在解碼器使用這個輸入和內部狀態(h?, c?)在第一個時間步產生輸出,這個輸出應該是目標序列中的第一個單詞/標記,即 “ravi”。
- 時間步2:在時間步2,第一個時間步的輸出 “ravi” 被作為輸入饋送到第二個時間步。第二個時間步的輸出應該是目標序列中的第二個單詞,即 “de”。
- 類似地,每個時間步的輸出都被作為輸入饋送到下一個時間步。這個過程一直持續到我們得到 “” 符號,這也是一個特殊符號,用于標記輸出序列的結束。解碼器的最終內部狀態被丟棄。
注意,這些特殊符號不一定只是 “” 和 “”。它們可以是任何字符串,只要這些字符串不在我們的數據集中,這樣模型就不會將它們與其他單詞混淆。在論文中,他們使用了符號 “”,并且使用方式略有不同。稍后我會詳細介紹這一點。
注意:上述過程是理想情況下解碼器在測試階段的工作方式。但在訓練階段,需要稍微不同的實現方式,以使訓練更快。我將在下一節中解釋這一點。
3.5.1 數學基礎:解碼器
解碼器生成一個輸出序列: 使用上下文向量c:
- 初始化:解碼器的初始隱藏狀態s?被設置為上下文向量:
- 輸出生成:對于輸出序列中的每個時間步t: 其中,s?是解碼器在時間步t的隱藏狀態,f_dec是解碼器的激活函數,y???是之前生成的輸出(y?是序列開始的標記),W是輸出層的權重矩陣,p(y? | y<t, X)是在時間步t可能輸出的概率分布。
4. 訓練編碼器 - 解碼器模型
4.1 數據向量化
在深入了解細節之前,我們首先需要對數據進行向量化。
我們擁有的原始數據是: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”
現在我們在目標序列的開頭和結尾添加特殊符號 “” 和 “”: X = “nice to meet you” → Y_true = “ravi de vous rencontrer”
接下來,使用獨熱編碼(ohe)對輸入和輸出數據進行向量化。讓輸入和輸出表示為: 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]
注意:我使用這種表示方式是為了更易于解釋。“真實序列” 和 “目標序列” 這兩個術語都用于指代我們希望模型學習的同一句子 “ravi de vous rencontrer”。
4.2 編碼器的訓練與測試
編碼器在訓練和測試階段的工作方式相同。它逐個接受輸入序列的每個標記/單詞,并將最終狀態發送給解碼器。其參數通過時間反向傳播進行更新。
4.3 訓練階段的解碼器:教師強制
與編碼器部分不同,解碼器在訓練和測試階段的工作方式不同。因此,我們將分別介紹這兩個階段。
為了訓練我們的解碼器模型,我們使用一種稱為 “教師強制” 的技術,在該技術中,我們將上一個時間步的真實輸出/標記(而不是預測輸出/標記)作為當前時間步的輸入。
為了解釋這一點,讓我們看一下訓練的第一次迭代。在這里,我們將輸入序列饋送到編碼器,編碼器對其進行處理并將其最終內部狀態傳遞給解碼器。現在對于解碼器部分,參考下面的圖。
在繼續之前,請注意在解碼器中,在任何時間步t,輸出y?_pred是輸出數據集中整個詞匯表上的概率分布,這是通過使用Softmax激活函數生成的。具有最高概率的標記被選為預測單詞。
例如,參考上面的圖,y?_pred = [0.02 0.12 0.36 0.1 0.3 0.1] 告訴我們,我們的模型認為輸出序列中第一個標記是 “” 的概率是0.02,是 “ravi” 的概率是0.12,是 “de” 的概率是0.36等等。我們將預測單詞選為具有最高概率的單詞。因此,這里預測的單詞/標記是 “de”,概率為0.36。
繼續...
- 時間步1:單詞 “” 的向量 [1 0 0 0 0 0] 被作為輸入向量饋送。現在我希望我的模型預測輸出為y?_true = [0 1 0 0 0 0],但由于我的模型剛剛開始訓練,它會輸出一些隨機值。假設時間步1的預測值為y?_pred = [0.02 0.12 0.36 0.1 0.3 0.1],這意味著它預測第一個標記為 “de”。現在,我們應該將這個y?_pred作為時間步2的輸入嗎?我們可以這樣做,但在實踐中發現,這會導致諸如收斂緩慢、模型不穩定和性能不佳等問題,這是很合理的。
- 因此,引入了教師強制來糾正這個問題。在教師強制中,我們將上一個時間步的真實輸出/標記(而不是預測輸出)作為當前時間步的輸入。這意味著時間步2的輸入將是y?_true = [0 1 0 0 0 0],而不是y?_pred。
- 現在時間步2的輸出將是某個隨機向量y?_pred。但在時間步3,我們將使用y?_true = [0 0 1 0 0 0] 作為輸入,而不是y?_pred。類似地,在每個時間步,我們將使用上一個時間步的真實輸出。
- 最后,根據每個時間步的預測輸出和目標序列/Y_true計算損失,并通過時間反向傳播誤差來更新模型的參數。使用的損失函數是目標序列/Y_true和預測序列/Y_pred之間的分類交叉熵損失函數,即: 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] 解碼器的最終狀態被丟棄。
4.4 測試階段的解碼器
在實際應用場景中,我們手頭只有輸入X,而沒有目標輸出Y_true。因此,由于缺乏目標序列Y_true,我們無法采用訓練階段的操作方式。所以在測試模型時,我們會將上一個時間步的預測輸出(與訓練階段使用真實輸出不同)作為當前時間步的輸入。其余部分則與訓練階段一致。
假設我們已經完成了模型的訓練,現在用訓練時使用的單句對其進行測試。如果模型訓練效果良好,且僅在單句上訓練,那么它應該表現得近乎完美。但為了便于解釋,假定我們的模型訓練效果不佳或者只是部分訓練完成,現在對其進行測試。具體場景如下圖所示:
- 時間步1:y1_pred = [0 0.92 0.08 0 0 0] 表明模型預測輸出序列中的第一個單詞為 “ravi” 的概率是0.92。因此在下一個時間步,這個預測的單詞將被用作輸入。
- 時間步2:將時間步1預測的單詞 “ravi” 作為此處的輸入。此時模型預測輸出序列中的下一個單詞為 “de” 的概率是0.98,該預測單詞隨后將作為時間步3的輸入。
- 之后每個時間步都會重復類似的過程,直到遇到 “” 標記。
更好的可視化展示如下:
根據我們訓練好的模型,測試時的預測序列為 “ravi de rencontrer rencontrer”。盡管模型在第三次預測時出現錯誤,但我們仍將其作為下一個時間步的輸入。模型預測的準確性取決于可用數據量以及訓練的充分程度。在測試階段,模型可能會預測出錯誤的輸出,但仍會將該輸出輸入到下一個時間步。
4.5 嵌入層
此前我未提及的一個重要細節是,編碼器和解碼器都通過嵌入層來處理輸入序列。這一步驟能夠降低輸入詞向量的維度,因為在實際應用中,獨熱編碼向量往往維度較大。嵌入向量能為單詞提供更高效且有意義的表示。以編碼器為例,嵌入層可以將詞向量維度壓縮,比如從4維降至3維。
這個嵌入層既可以像Word2Vec嵌入那樣進行預訓練,也可以與模型一同訓練。
4.6 測試時的最終可視化
左邊,編碼器處理輸入序列(“nice to meet you”),每個單詞先通過嵌入層(降低維度),然后經過一系列LSTM層。編碼器輸出包含隱藏狀態ht和細胞狀態ct的上下文向量,對輸入序列進行了總結。
右邊,解碼器接收上下文向量并生成輸出序列(“ravi de rencontrer”)。解碼器使用LSTM生成每個單詞,將前一個單詞作為輸入(從特殊標記開始),經過另一個嵌入層,并通過softmax層生成預測。
該圖像展示了模型如何利用嵌入層和循環層將輸入序列轉換為目標序列。
5. 編碼器 - 解碼器模型的缺點
這種架構主要存在兩個與長度相關的缺點。
首先,與人類記憶類似,該架構的記憶能力有限。長短期記憶網絡(LSTM)的最終隱藏狀態S或W負責封裝整個待翻譯句子的信息。通常,S或W僅包含幾百個單元(即浮點數)。然而,往這個固定維度的向量中塞入過多信息會增加神經網絡中的模糊性。有時,將神經網絡視為進行 “有損壓縮” 的工具,這種思考方式十分有用。
其次,一般來說,神經網絡越深,訓練難度就越大。對于循環神經網絡而言,序列越長,沿時間維度的神經網絡就越深。這會導致梯度消失問題,即循環神經網絡從目標中學習的梯度信號在反向傳播過程中消失。即便使用了諸如LSTM等專門用于防止梯度消失的循環神經網絡,這仍然是一個根本性問題。
此外,對于更復雜和冗長的句子,我們有注意力模型和Transformer等更強大的模型。
6. 編碼器 - 解碼器架構的改進
6.1 添加嵌入層
嵌入層將輸入標記轉換為密集向量表示,使模型能夠學習輸入序列中單詞或標記的有意義表示。
通過使用可訓練的嵌入層,并探索諸如預訓練詞嵌入或上下文嵌入等技術,我們可以豐富輸入表示,使模型能夠更有效地捕捉細微的語義和句法信息。這種增強有助于更好地理解和生成順序數據。
6.2 使用深度LSTM
LSTM是循環神經網絡(RNN)的變體,以其在順序數據中捕捉長距離依賴關系的能力而聞名。加深LSTM層能使模型學習輸入和輸出序列的層次表示,從而提高性能。
增加LSTM層的深度,并結合殘差連接或層歸一化等技術,有助于緩解梯度消失問題,并便于訓練更深層次的網絡。這些改進使模型能夠學習數據中更復雜的模式和依賴關系,從而實現更好的序列生成和理解。
6.3 反轉輸入
在機器翻譯任務中,例如英語到印地語或英語到法語的轉換,反轉輸入序列在某些情況下已被證明可以通過幫助捕捉長距離依賴關系和緩解梯度消失問題來提高模型性能。
然而,其有效性可能因語言特征和數據集的復雜性而異,并非在所有場景中都能持續提高性能。需要進行仔細的評估和實驗,以確定反轉輸入序列對于特定任務和數據集是否有益。
現在我們已經理解了編碼器 - 解碼器的概念。如果研讀Ilya Sutskever撰寫的著名研究論文《Sequence to Sequence Learning with Neural Networks》,我們將能很好地理解論文中的概念。下面我總結一下論文的內容:
- 在翻譯中的應用:該模型專注于將英語翻譯成法語,展示了序列到序列學習在神經機器翻譯中的有效性。
- 特殊的句末符號:數據集中的每個句子都以一個獨特的句末符號(“”)結尾,使模型能夠識別序列的結束。
- 數據集:該模型在一個包含1200萬個句子的子集上進行訓練,這些句子包含3.48億個法語單詞和3.04億個英語單詞,數據集來自公開可用的語料庫。
- 詞匯限制:為了控制計算復雜度,對兩種語言都使用了固定的詞匯表,英語使用最常見的16萬個單詞,法語使用8萬個單詞。不在這些詞匯表中的單詞被替換為特殊的 “UNK” 標記。
- 反轉輸入序列:在將輸入句子輸入模型之前將其反轉,發現這可以顯著提高模型的學習效率,尤其是對于較長的句子。
- 詞嵌入:模型使用1000維的詞嵌入層來表示輸入單詞,為每個單詞提供密集且有意義的表示。
- 架構細節:輸入(編碼器)和輸出(解碼器)模型都有4層,每層包含1000個單元,展示了基于深度LSTM的架構。
- 輸出層和訓練:輸出層使用SoftMax函數在最大詞匯表上生成概率分布。模型在這些設置下進行端到端訓練。
- 性能 - BLEU分數:該模型的BLEU分數達到34.81,超過了基于統計的機器翻譯系統在同一數據集上的33.30分,標志著神經機器翻譯的重大進步。
7. 示例:基于神經網絡的編碼器 - 解碼器架構
我們可以在編碼器 - 解碼器架構中使用CNN、RNN和LSTM來解決不同類型的問題。結合使用不同類型的網絡有助于捕捉數據輸入和輸出序列之間的復雜關系。以下是可以使用CNN、RNN、LSTM、Transformer等網絡的不同場景或問題示例:
- CNN作為編碼器,RNN/LSTM作為解碼器:這種架構可用于圖像描述等任務,其中輸入是圖像,輸出是描述圖像的單詞序列。CNN可以從圖像中提取特征,而RNN/LSTM可以生成相應的文本序列。回顧可知,CNN擅長從圖像中提取特征,因此可在涉及圖像的任務中用作編碼器。此外,RNN/LSTM擅長處理單詞序列等順序數據,可在涉及文本序列的任務中用作解碼器。
- RNN/LSTM作為編碼器,RNN/LSTM作為解碼器:這種架構可用于機器翻譯等任務,其中輸入和輸出都是長度可變的單詞序列。編碼器中的RNN/LSTM可以將輸入的單詞序列編碼為隱藏狀態或數值表示,而解碼器中的RNN/LSTM可以生成不同語言的相應輸出單詞序列。下圖展示了在編碼器和解碼器網絡中都使用RNN的編碼器 - 解碼器架構。輸入的單詞序列為英語,輸出是德語的機器翻譯。
在編碼器 - 解碼器架構中使用RNN存在一個缺點。編碼器網絡中的最終數值表示或隱藏狀態必須代表整個數據序列的上下文和含義。如果數據序列足夠長,這可能會很有挑戰性,并且在將整個信息壓縮為數值表示的過程中,序列開頭的信息可能會丟失。
在編碼器 - 解碼器架構中使用CNN、RNN、LSTM等不同類型的神經網絡時,需要注意以下幾個局限性:
- CNN計算成本可能較高,并且可能需要大量的訓練數據。
- RNN/LSTM可能會遇到梯度消失/梯度爆炸問題,并且可能需要仔細的初始化和正則化。
- 結合使用不同類型的網絡會使模型更加復雜,并且難以訓練。
8. 編碼器 - 解碼器神經網絡架構的應用
以下是編碼器 - 解碼器神經網絡架構在現實生活中的一些應用:
- Transformer模型:Vaswani等人在論文《Attention Is All You Need》中最初提出的Transformer模型由編碼器和解碼器組成。每個部分都由使用自注意力機制的層構成。編碼器處理輸入數據(如文本)并創建其富含上下文的表示。解碼器利用這些表示以及自身的輸入(如句子中的前一個單詞)來生成輸出序列。T5(文本到文本轉換Transformer)采用了編碼器 - 解碼器架構。還有另一個例子是BART(雙向和自回歸Transformer),它結合了雙向編碼器(如BERT)和自回歸解碼器(如GPT)。
- Make-a-Video:Facebook/Meta最近推出的人工智能系統Make-a-Video可能由深度學習技術驅動,可能包括用于將文本提示轉換為視頻內容的編碼器 - 解碼器架構。這種常用于序列到序列轉換的架構,會使用編碼器將輸入文本轉換為密集向量表示,解碼器將該向量轉換為視頻內容。然而,鑒于從文本創建視頻的復雜性,該系統可能還采用了生成對抗網絡(GANs)或變分自編碼器(VAEs)等先進的生成模型,這些模型在生成高質量、逼真圖像方面表現出色。此外,為了學習從文本到視覺的映射并理解世界的動態,它可能利用了大量的文本 - 圖像配對數據和視頻片段,可能采用了無監督學習或自監督學習技術。
- 機器翻譯:編碼器 - 解碼器架構最常見的應用之一是機器翻譯。如上文(使用RNN的編碼器 - 解碼器架構)所示,一種語言的單詞序列被翻譯成另一種語言。編碼器 - 解碼器模型可以在大量的雙語文本語料庫上進行訓練,以學習如何將一種語言的單詞序列映射到另一種語言的等效序列。
- 圖像描述:圖像描述是編碼器 - 解碼器架構的另一個應用。在這個應用中,圖像由編碼器(使用CNN)處理,輸出被傳遞到解碼器(RNN或LSTM),解碼器生成圖像的文本描述。這可用于自動圖像標記和添加描述等應用。
