Transformer中的Encoder Decoder與Cross Attention介紹

更新於 發佈於 閱讀時間約 6 分鐘

首先我們可以先回顧一下seq2seq的問題,sequence-to-sequence指的就是當我們輸入sequence之後,輸出也應該是sequence。但輸出的sequence有幾種size:

  1. 與輸入的sequence一樣size
  2. 只有一個值
  3. 我們不知道長度 -> 由model決定。EX: 輸入聲音訊號->轉為文字


Q: 那有哪些可以使用seq2seq的模型呢?

語音辨識、翻譯、聊天機器人、NLP問題(sentiment analysis, context, QA)。

*NLP: Natural Language Processing,很多也可以想成是QA的問題。也就是讓機器讀一段文字,然後我們詢問機器問題,他給我們答案。

*sentiment analysis: 透過一個句子判斷正面還是負面的問題。

但要注意的是,雖然seq2seq可以解決很多問題,但很多時候客製化模型會更好解決問題。EX: 像是pixel 4的語音轉文字就是使用RNN,而不是seq2seq。


那seq2seq要怎麼做呢?

通常會分成兩塊,一個Encoder搭配一個Decoder。那在transformer中使用的Encoder,就是上一篇講到的self-attention。

raw-image

Encoder

  1. 先將我們的輸入經過一次self attention,再將self attention的output + input得到一組output。 (*將output + input的過程,稱為residual connection。)
  2. 接著將output進行layer normalization,得到一組normalization output。
  3. 最後將這組normalization output輸入fully connected Network並與這組值與output相加,才會得到我們的輸出。
  4. 最後再一次的進行layer normalization
  5. 完成以上四個過程,才被稱為一次Encoder的輸出。
raw-image


*比較layer normalization與batch normalization:

Layer normalization是針對同一組計算其平均與標準差

batch normalization則是對不同feature中同一個dimension的值計算平均與標準差。

假設有三組output: [a1 a2 a3] [b1 b2 b3] [c1 c2 c3]。

Batch normalization的means: a1 + b1 + c1

Layer normalization的means: a1 + a2 + a3.


AutoRegressive Decoder

在Encoder的最後,會輸出一段vector sequence,此時我們把vector sequence當作decoder的輸入。

Decoder的運作方式:

假設我們有個語音訊息"機器學習"要輸出成文字,此時我們必須先有一個BOS(beginning of sentence)作為初始的輸入,經過Decoder之後會產生一組機率分布,機率最高的就是我們的輸出。之後,再將Decoder的輸出作為下一個輸入,以此類推,就會產生一連串的輸出。


Masked Multi-Head Attention

上圖比較encoder與decoder之後,我們會發現兩者有個明顯的差別,那就是decoder的multi-Head Attention多了一個Masked,這個Masked的意思就是當我們在計算self-attention時,只在意自己與前面已經考慮過的input,只考慮到目前為止input的關聯性。

Ex:

輸出的b1只能由輸入a1決定; 輸出的b2只能由a1, a2決定。

會這麼做的原因很簡單,因為我們在考慮輸入的時候,是必須依靠前一個輸出來決定。


那我們該如何決定一個輸出sequence的長度呢?

額外準備一個中斷的token "END",當我們接收到輸入“習”時,讓"END"的機率成為最大,就能夠中斷decoder。

raw-image


Non-AutoRegressive Decoder Model(NAT)

autoRegressive Decoder是從輸入Begin開始,依序輸入得到輸出,在拿輸出當輸入以此類推得到答案。

Non-AutoRegressive Decoder則是同時平行輸入多個Begin,這樣就會平行生成多個輸出。

那這種方式就沒辦法簡單決定其輸出的長度,所以我們可以採用兩種方式決定:

  1. 另外訓練一個classification,輸入Encoder的input,得到需要幾個字在告訴Decoder。
  2. 直接人為決定要留下幾個字。

特點:

  1. 平行輸出
  2. 速度較快
  3. 但Performance沒有AT的performance好


Cross Attention

Cross Attention是連接Encoder與Decoder之間的橋樑。

運作方式:

  1. Decoder先輸入BEGIN產生一個q值
  2. Encoder輸出的向量,分別產生個別的k,與q相乘,得到關聯系數𝛼
  3. 將𝛼透過normalization產生𝛼’
  4. 最後𝛼’ 乘上v加總,經過Fully Connected
  5. 結果才放進後續Decoder的計算
raw-image


Training

那如果我們要訓練Transformer,我們的目標會是希望在BEGIN輸入Decoder之後,產生出的向量與我們希望的值的值越接近越好。而通常我們會將每個字設定為one-hot vector。假設“機” = [1 0 0 0]T,那就希望Decoder產生的機率分佈會是接近one-hot vector的。(我們可以想像成分類問題)

raw-image


Teacher Forcing

在輸入decoder時,額外多輸入正確答案(Ground Truth),能夠幫助transformer更好訓練。假設是“機器學習”四個字,我們可以輸入“機”,然後要求機器輸出“器”,以此訓練。

但這也可以注意一下,有時會有一種訓練的結果與實際測試的結果不一致的狀況,這被稱為exposure bias。

那解決的方法就是在Teacher Forcing時,加入一點雜訊,讓他沒那麼好訓練,這被稱為schedule sampling。


Copy Mechanism

那有些任務,Decoder不需要從input生成文字出來,而是要從input複製出來。

Ex: 在聊天機器人中,就會需要複製的能力。

假設我們說:我是“庫洛洛” → 機器需要回答“你好!庫洛洛”。


那以上是關於今天Transformer中的Encoder Decoder與Cross Attention的介紹。

avatar-img
1會員
37內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
dab戴伯的沙龍 的其他內容
本文介紹了self-attention在處理不固定大小輸入值時的應用,並討論瞭如何計算self-attention以及transformer中的multi-head self-attention。此外,文章還探討了在語音辨識和圖片處理中使用self-attention的方法,以及與CNN的比較。
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
本文介紹了在深度學習中使用Batch Normalization來解決error surface複雜性的問題。通過特徵歸一化來加速收斂速度和訓練順利程度。同時,也提到了在測試階段使用moving average計算平均值和標準差的方法。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
瞭解梯度下降算法中的學習速率調整,包括為什麼需要動態的學習速率、Root Mean Square、RMSProp、最常用的optimization策略Adam,以及如何進行Learning rate Scheduling。
本文將介紹batch的定義與其在機器學習中的作用,以及不同batch size 的影響。同時也會講解Momentum動量在機器學習中的重要性。透過本文,您將清楚地瞭解batch、batch size和Momentum動量的概念以及其對機器學習的影響。
本文介紹了self-attention在處理不固定大小輸入值時的應用,並討論瞭如何計算self-attention以及transformer中的multi-head self-attention。此外,文章還探討了在語音辨識和圖片處理中使用self-attention的方法,以及與CNN的比較。
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
本文介紹了在深度學習中使用Batch Normalization來解決error surface複雜性的問題。通過特徵歸一化來加速收斂速度和訓練順利程度。同時,也提到了在測試階段使用moving average計算平均值和標準差的方法。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
瞭解梯度下降算法中的學習速率調整,包括為什麼需要動態的學習速率、Root Mean Square、RMSProp、最常用的optimization策略Adam,以及如何進行Learning rate Scheduling。
本文將介紹batch的定義與其在機器學習中的作用,以及不同batch size 的影響。同時也會講解Momentum動量在機器學習中的重要性。透過本文,您將清楚地瞭解batch、batch size和Momentum動量的概念以及其對機器學習的影響。
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Bidirectional Encoder Representations from Transformers (BERT) 只有 Encoder Layer,沒有 D
機器其實不是像人類這樣一的單字對應一個單字去翻譯, 而是使用「編碼器 Encoder」與「解碼器 Decoder」來做語言之間的翻譯。 其中編碼器的任務,是「閱讀 Read」與「處理 Process」完整的文本, 而解碼器的任務,則是「產生 Produced」翻譯過後的文本。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformers for Natural Language Processing and Computer Vision, 2024 這本書中講 Decoder
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 講完 Transformer 之 Encoder 架構中的 Embedding 與 Positional Encoding 部分,現在進入 Multi-Head Att
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在AI說書 - 從0開始 - 41中,我們提及 Transformer 的 Encoder 架構如下圖所示,同時我們羅列幾個要點於圖示右邊: 原始 Transform
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 中的 Attention 機制是 'Word-to-Word' 操作,抑或是 'Token-to-Token' 操作,白話來講就是:「對於句子中
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 既然要談論 Transformer 的 Attention 機制,我們必須要談論以下主題: Transformer 架構 自注意力機制 編碼與解碼 Embedd
為了將輸入文本轉換成深度學習模型可以使用的嵌入向量, 我們需要先將「輸入文本 Input Text」轉為「符元化文本 Tokenized Text」。 而實際上「符元化文本 Tokenized Text」與「嵌入向量 Embedding Vector」之間, 還有一個步驟稱為「符元
現代大語言模型建構於Transformer結構。 Transformer結構是源自於2017年著名論文 Attention Is All You Need的深度神經網路結構。 原始的Trasformer是為了機器翻譯發展,當初的任務是將英文翻譯成德文與法文。 Transformer
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Bidirectional Encoder Representations from Transformers (BERT) 只有 Encoder Layer,沒有 D
機器其實不是像人類這樣一的單字對應一個單字去翻譯, 而是使用「編碼器 Encoder」與「解碼器 Decoder」來做語言之間的翻譯。 其中編碼器的任務,是「閱讀 Read」與「處理 Process」完整的文本, 而解碼器的任務,則是「產生 Produced」翻譯過後的文本。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformers for Natural Language Processing and Computer Vision, 2024 這本書中講 Decoder
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 講完 Transformer 之 Encoder 架構中的 Embedding 與 Positional Encoding 部分,現在進入 Multi-Head Att
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 在AI說書 - 從0開始 - 41中,我們提及 Transformer 的 Encoder 架構如下圖所示,同時我們羅列幾個要點於圖示右邊: 原始 Transform
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 中的 Attention 機制是 'Word-to-Word' 操作,抑或是 'Token-to-Token' 操作,白話來講就是:「對於句子中
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 既然要談論 Transformer 的 Attention 機制,我們必須要談論以下主題: Transformer 架構 自注意力機制 編碼與解碼 Embedd
為了將輸入文本轉換成深度學習模型可以使用的嵌入向量, 我們需要先將「輸入文本 Input Text」轉為「符元化文本 Tokenized Text」。 而實際上「符元化文本 Tokenized Text」與「嵌入向量 Embedding Vector」之間, 還有一個步驟稱為「符元
現代大語言模型建構於Transformer結構。 Transformer結構是源自於2017年著名論文 Attention Is All You Need的深度神經網路結構。 原始的Trasformer是為了機器翻譯發展,當初的任務是將英文翻譯成德文與法文。 Transformer