最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

編碼器-解碼器 | 基于 Transformers 的編碼器-解碼器模型

2023-06-02 00:01 作者:HuggingFace  | 我要投稿

基于 transformer 的編碼器-解碼器模型是?表征學(xué)習(xí)?和?模型架構(gòu)?這兩個(gè)領(lǐng)域多年研究成果的結(jié)晶。本文簡要介紹了神經(jīng)編碼器-解碼器模型的歷史,更多背景知識(shí),建議讀者閱讀由 Sebastion Ruder 撰寫的這篇精彩?博文。此外,建議讀者對(duì)?自注意力 (self-attention) 架構(gòu)?有一個(gè)基本了解,可以閱讀 Jay Alammar 的?這篇博文?復(fù)習(xí)一下原始 transformer 模型。

本文分 4 個(gè)部分:

  • 背景?-?簡要回顧了神經(jīng)編碼器-解碼器模型的歷史,重點(diǎn)關(guān)注基于 RNN 的模型。

  • 編碼器-解碼器?-?闡述基于 transformer 的編碼器-解碼器模型,并闡述如何使用該模型進(jìn)行推理。

  • 編碼器?-?闡述模型的編碼器部分。

  • 解碼器?-?闡述模型的解碼器部分。

每個(gè)部分都建立在前一部分的基礎(chǔ)上,但也可以單獨(dú)閱讀。這篇分享是第二部分?編碼器-解碼器。

編碼器-解碼器

2017 年,Vaswani 等人引入了?transformer?架構(gòu),從而催生了?基于 transformer?的編碼器-解碼器模型。

與基于 RNN 的編碼器-解碼器模型類似,基于 transformer 的編碼器-解碼器模型由一個(gè)編碼器和一個(gè)解碼器組成,且其編碼器和解碼器均由?殘差注意力模塊 (residual attention blocks)?堆疊而成?;?transformer 的編碼器-解碼器模型的關(guān)鍵創(chuàng)新在于: 殘差注意力模塊無需使用循環(huán)結(jié)構(gòu)即可處理長度?n?可變的輸入序列?X1:n。不依賴循環(huán)結(jié)構(gòu)使得基于 transformer 的編碼器-解碼器可以高度并行化,這使得模型在現(xiàn)代硬件上的計(jì)算效率比基于 RNN 的編碼器-解碼器模型高出幾個(gè)數(shù)量級(jí)。

回憶一下,要解決?序列到序列?問題,我們需要找到輸入序列?X1:n?到變長輸出序列?Y1:m?的映射。我們看看如何使用基于 transformer 的編碼器-解碼器模型來找到這樣的映射。

與基于 RNN 的編碼器-解碼器模型類似,基于 transformer 的編碼器-解碼器模型定義了在給定輸入序列?X1:n?條件下目標(biāo)序列?Y1:m?的條件分布:

pθenc,θdec(Y1:mX1:n)

基于 transformer 的編碼器部分將輸入序列?X1:n?編碼為?隱含狀態(tài)序列?X1:n,即:

fθenc:X1:nX1:n

然后,基于 transformer 的解碼器負(fù)責(zé)建模在給定隱含狀態(tài)序列?X1:n?的條件下目標(biāo)向量序列?Y1:m?的概率分布:

pθdec(Y1:mX1:n)

根據(jù)貝葉斯法則,該序列分布可被分解為每個(gè)目標(biāo)向量?yi?在給定隱含狀態(tài)?X1:n?和其所有前驅(qū)目標(biāo)向量?Y0:i?1?時(shí)的條件概率之積:

pθdec(Y1:mX1:n)=i=1mpθdec(yiY0:i?1,X1:n)

因此,在生成?yi?時(shí),基于 transformer 的解碼器將隱含狀態(tài)序列?X1:n?及其所有前驅(qū)目標(biāo)向量?Y0:i?1?映射到?logit?向量?li。 然后經(jīng)由?softmax?運(yùn)算對(duì) logit 向量?li?進(jìn)行處理,從而生成條件分布?pθdec(yiY0:i?1,X1:n)。這個(gè)流程跟基于 RNN 的解碼器是一樣的。然而,與基于 RNN 的解碼器不同的是,在這里,目標(biāo)向量?yi?的分布是?顯式?(或直接) 地以其所有前驅(qū)目標(biāo)向量?y0,,yi?1?為條件的,稍后我們將詳細(xì)介紹。此處第 0 個(gè)目標(biāo)向量?y0?仍表示為?BOS?向量。有了條件分布?pθdec(yiY0:i?1,X1:n),我們就可以?自回歸?生成輸出了。至此,我們定義了可用于推理的從輸入序列?X1:n?到輸出序列?Y1:m?的映射。

我們可視化一下使用?基于 transformer?的編碼器-解碼器模型 _自回歸_地生成序列的完整過程。

上圖中,綠色為基于 transformer 的編碼器,紅色為基于 transformer 的解碼器。與上一節(jié)一樣,我們展示了如何將表示為?(x1=Ix2=want,x3=to,x4=buy,x5=ax6=car,x7=EOS)?的英語句子 “I want to buy a car” 翻譯成表示為?(y0=BOS,y1=Ich,y2=will,y3=ein,y4=Autoy5=kaufen,y6=EOS)?的德語句子 “Ich will ein Auto kaufen”。

首先,編碼器將完整的輸入序列?X1:7?= “I want to buy a car” (由淺綠色向量表示) 處理為上下文相關(guān)的編碼序列?X1:7。這里上下文相關(guān)的意思是,?舉個(gè)例子?,x4?的編碼不僅取決于輸入?x4?= “buy”,還與所有其他詞 “I”、“want”、“to”、“a”、“car” 及 “EOS” 相關(guān),這些詞即該詞的?上下文?。

接下來,輸入編碼?X1:7?與 BOS 向量 (?即?y0) 被一起饋送到解碼器。解碼器將輸入?X1:7?和?y0?變換為第一個(gè) logit?l1?(圖中以深紅色顯示),從而得到第一個(gè)目標(biāo)向量?y1?的條件分布:

pθenc,dec(yy0,X1:7)=pθenc,dec(yBOS,I?want?to?buy?a?car?EOS)=pθdec(yBOS,X1:7)

然后,從該分布中采樣出第一個(gè)目標(biāo)向量?y1?=?Ich?(由灰色箭頭表示),得到第一個(gè)輸出后,我們會(huì)并將其繼續(xù)饋送到解碼器?,F(xiàn)在,解碼器開始以?y0?= “BOS” 和?y1?= “Ich” 為條件來定義第二個(gè)目標(biāo)向量的條件分布?y2:

pθdec(yBOS?Ich,X1:7)

再采樣一次,生成目標(biāo)向量?y2?= “will”。重復(fù)該自回歸過程,直到第 6 步從條件分布中采樣到 EOS:

EOSpθdec(yBOS?Ich?will?ein?Auto?kaufen,X1:7)

這里有一點(diǎn)比較重要,我們僅在第一次前向傳播時(shí)用編碼器將?X1:n?映射到?X1:n。從第二次前向傳播開始,解碼器可以直接使用之前算得的編碼?X1:n。為清楚起見,下圖畫出了上例中第一次和第二次前向傳播所需要做的操作。

可以看出,僅在步驟?i=1?時(shí),我們才需要將 “I want to buy a car EOS” 編碼為?X1:7。從?i=2?開始,解碼器只是簡單地復(fù)用了已生成的編碼。

在 ?? transformers 庫中,這一自回歸生成過程是在調(diào)用?.generate()?方法時(shí)在后臺(tái)完成的。我們用一個(gè)翻譯模型來實(shí)際體驗(yàn)一下。

python

from transformers import MarianMTModel, MarianTokenizertokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-de")model = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-en-de")# create ids of encoded input vectorsinput_ids = tokenizer("I want to buy a car", return_tensors="pt").input_ids# translate exampleoutput_ids = model.generate(input_ids)[0]# decode and printprint(tokenizer.decode(output_ids))

輸出:

? ?<pad> Ich will ein Auto kaufen

.generate()?接口做了很多事情。首先,它將?input_ids?傳遞給編碼器。然后,它將一個(gè)預(yù)定義的標(biāo)記連同已編碼的?input_ids?一起傳遞給解碼器 (在使用?MarianMTModel?的情況下,該預(yù)定義標(biāo)記為?\text{&lt;pad&gt;}?)。接著,它使用波束搜索解碼機(jī)制根據(jù)最新的解碼器輸出的概率分布?1?自回歸地采樣下一個(gè)輸出詞。更多有關(guān)波束搜索解碼工作原理的詳細(xì)信息,建議閱讀?這篇博文。

我們在附錄中加入了一個(gè)代碼片段,展示了如何“從頭開始”實(shí)現(xiàn)一個(gè)簡單的生成方法。如果你想要完全了解?自回歸?生成的幕后工作原理,強(qiáng)烈建議閱讀附錄。

總結(jié)一下:

  • 基于 transformer 的編碼器實(shí)現(xiàn)了從輸入序列?X1:n?到上下文相關(guān)的編碼序列?X1:n?之間的映射。

  • 基于 transformer 的解碼器定義了條件分布?pθdec(yiY0:i?1,X1:n)。

  • 給定適當(dāng)?shù)慕獯a機(jī)制,可以自回歸地從?pθdec(yiY0:i?1,X1:n),?i1,,m?中采樣出輸出序列?Y1:m。

太好了,現(xiàn)在我們已經(jīng)大致了解了?基于 transformer 的?編碼器-解碼器模型的工作原理。下面的部分,我們將更深入地研究模型的編碼器和解碼器部分。更具體地說,我們將確切地看到編碼器如何利用自注意力層來產(chǎn)生一系列上下文相關(guān)的向量編碼,以及自注意力層如何實(shí)現(xiàn)高效并行化。然后,我們將詳細(xì)解釋自注意力層在解碼器模型中的工作原理,以及解碼器如何通過?交叉注意力?層以編碼器輸出為條件來定義分布?pθdec(yiY0:i?1,X1:n)。在此過程中,基于 transformer 的編碼器-解碼器模型如何解決基于 RNN 的編碼器-解碼器模型的長程依賴問題的答案將變得顯而易見。

1?可以從?此處?獲取?"Helsinki-NLP/opus-mt-en-de"?的解碼參數(shù)。可以看到,其使用了?num_beams=6?的波束搜索。

敬請(qǐng)關(guān)注其余部分的文章。

英文原文:?https://hf.co/blog/encoder-decoder

原文作者: Patrick von Platen

譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。

審校/排版: zhongdongy (阿東)

編碼器-解碼器 | 基于 Transformers 的編碼器-解碼器模型的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
贡山| 调兵山市| 青川县| 武宁县| 双牌县| 久治县| 进贤县| 元谋县| 东明县| 朝阳市| 南昌县| 伊通| 武强县| 乌鲁木齐县| 洪湖市| 景宁| 英德市| 连江县| 沙雅县| 浏阳市| 土默特左旗| 林州市| 达尔| 丹江口市| 宜州市| 临沭县| 安康市| 古田县| 祥云县| 五大连池市| 云龙县| 林芝县| 江安县| 乌鲁木齐县| 珲春市| 宾川县| 崇文区| 五台县| 东乌| 平果县| 武夷山市|