# Transformer 架構介紹 > 論文: > Attention Is All You Need > https://arxiv.org/pdf/1706.03762  是由傳統的Sequence to sequence演化而來   先來介紹Encoder ### Encoder > 輸入一個sequence,會輸出另一個sequence  - 而Encoder 是由多個block組成,每個block又主要包含兩個子層(Multi-head self attention)、FC(Feed-forward Neural Network) Q: why block 不叫做layer? > 因為block在做的事情,是好幾層layer在做的事  > 1. Input 一排vector > 2. Output一排vector > 3. 再經過Fully Connected layer(也就是Feed-forward Neural Network)後,作為一個block的output - 而每個block,又包含一個 Add & Norm (也就是Residual Connection & Layer Normailization)  > 1. Input 會先經過Self attention > 2. 經過Add & Norm (也就是Residual Connection & Layer Normailization) > 3. 再經過Fully connected > 4. 再經過Add & Norm (也就是Residual Connection & Layer Normailization) #### Encoder 完整架構  ### Decoder   > 在Transformer架構下的Decoder,通常都採用Autoregressive(AT,自我回歸模型)的方法,步驟如下: > 1. 每次生成一個新的token > 2. 將該token添加到已生成的sequence中 > 3. 使用更新後的sequence來預測下一個token #### Autogressive介紹 > 透過遞迴方式預測下一個token,依賴於先前的sequence值,意味著每一步都依賴於先前的輸出結果。 > 常用於機器翻譯、文本生成  > Encoder部分:輸入一個voice,會輸出另一個vector sequence > Decoder: > 1. 將Encoder的output當作Decoder的input > 2. 經過Softmax後,基於機率分布挑選出vector中最大的值最為輸出的token - 此vector的長度,會跟結果表值的數目是一樣的(所以要先定義好會輸出那些東西)  > 每次產生的token就做為下一次Decoder的input #### Decoder 完整架構  ### Encoder 跟 Decoder 比較  > 若遮掉Decoder中間的部分,跟Self-attention的不同,和輸出多經過了Softmax外,其實兩者架構大致相同 ### Self-attention 與 Masked Self-attention 差異 #### Self-attention > 是Transformer 中用來捕捉sequence 中不同位置之間依賴關係的機制。對於Sequence中的每個位置,model會計算該位置與其他位置的相似度(注意力權重),進而決定如何整合各個輸入訊息。 特色: - 每個位置的元素可以和序列中的所有其他位置互相作用。 - 模型透過查詢(Query)、鍵(Key)和值(Value)來計算注意力權重並進行加權求和,生成新的表示。 - 沒有任何限制,因此序列中的所有元素都可以互相關注 讓模型能夠捕捉到序列中長距離的依賴關係,適用於像是機器翻譯等任務,因為一句話中的某個詞可能與距離較遠的上下文相關聯  > 計算時會考慮到整個sequence  #### Masked Self-attention > 與Self-attention不同在於多加了一個Mask(遮蔽),限制model只能關注到sequence已生成的部分,不能看到未來的元素,確保了model在生成sequence時不會偷看到尚未生成的內容 特色: - 在計算注意力權重時,模型會對未來的時間步(標記)進行遮蔽,阻止這些未來的標記被當前的時間步關注到。 - 在解碼過程中,生成下個標記時,模型只能看到之前生成的標記,無法提前看到後續標記。 此作法保證了任務中的順序依賴性,常用於文本生成的任務,以確保前後語意連貫  > 計算時只會考慮到他自己之前  ### 差異總結 | **特性** | **Self-Attention(自注意力)** | **Masked Self-Attention(遮蔽的自注意力)** | |------------------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| | **關注範圍** | 每個位置的元素可以與序列中的所有其他元素互相作用,**沒有限制**。 | 模型只能關注到**當前位置之前**的元素,未來的元素被遮蔽,無法看到未來的內容。 | | **使用場景** | 主要用於**編碼器**,適合需要捕捉整個序列上下文的任務,如分類、機器翻譯等。 | 主要用於**解碼器**,特別是生成任務(如語言模型、文本生成等),確保生成過程中遵循順序,不會參考未來的內容。 | | **計算方式** | 每個標記能與所有其他標記進行交互,捕捉全局信息。 | 透過遮蔽,模型只能關注已經生成的部分,確保生成過程是逐步進行的,不會依賴尚未生成的內容。 | | **應用場景舉例** | 編碼器的 Self-Attention,能夠考慮到句子中的所有詞語來生成每個詞的表示。 | 解碼器的 Masked Self-Attention,當生成一個新的詞時,只能看到之前生成的詞,保證生成是按順序進行的。 | ### Encoder 結合 Decoder  ### Cross attention >負責將Encoder的輸出(表示輸入序列的信息)和Decoder的輸入(即正在生成的序列)連接 > 有兩個input: k、v來自Encoder、一個input: q 來自Decoder本身   這張圖顯示了**Transformer 解碼器**中的**Cross-Attention** 和 **Masked Self-Attention** 機制的工作原理。以下是對圖中各部分的詳細解釋: ### 1. **Encoder 編碼器部分** 圖的左側是**編碼器**,它處理輸入序列(如語音波形或文本序列),並生成輸入的關鍵值對,即 `k` 和 `v`。這些值表示編碼器對每個輸入位置的理解。 - `k^1`, `k^2`, `k^3`: 這些是編碼器為輸入序列中的每個標記生成的**鍵(Key)**。 - `v^1`, `v^2`, `v^3`: 這些是對應的**值(Value)**。 - `a^1`, `a^2`, `a^3`: 表示編碼器中的某些狀態或表示,這些狀態經過編碼後會傳遞到解碼器中供其使用。 ### 2. **Self-Attention (Masked)** 圖的右側顯示了解碼器中的**遮蔽自注意力機制(Masked Self-Attention)**。這部分負責生成過程中,解碼器對當前標記的自我關注。 - 解碼器的每個標記會經過自注意力機制 `q'`,該機制基於當前位置的內容和已生成的內容,將生成的序列逐步擴展。 - 遮蔽(masking)確保模型不能“偷看”還未生成的標記,只能參考之前的輸出。 ### 3. **Cross-Attention 機制** 圖中的**綠色線條**表示 Cross-Attention 的運作,它將來自編碼器的 `k` 和 `v` 與解碼器的 `q'` 相互結合。 - `q'` 是解碼器生成的查詢向量(query),它與來自編碼器的鍵值對(`k`, `v`)進行計算。 - `α'_1`, `α'_2`, `α'_3`: 這些是注意力權重,表示解碼器對每個編碼器輸入位置的注意力分配。這些權重決定了解碼器應該對哪些編碼器輸出的部分關注更多。 - 通過這種方式,解碼器可以參考編碼器對輸入序列的理解,從而在生成過程中保持與輸入的相關性。 ### 4. **加權求和(Weighted Sum)** 圖中標有 `×` 的部分表示對注意力權重和對應的 `v` 值進行乘法操作,並通過加權求和生成最終的 `v'`。這個加權的 `v'` 是解碼器輸出的一部分,並會傳遞到全連接層(FC)進一步處理。 ### 總結 這張圖示意了**Transformer 解碼器中的兩個主要注意力機制**: - **Masked Self-Attention**:解碼器關注自己已生成的序列,通過遮蔽確保生成是按順序進行的。 - **Cross-Attention**:解碼器關注編碼器的輸出,這是解碼器與編碼器之間的連接橋樑,讓解碼器可以參考輸入序列的信息來生成與之匹配的輸出。 --- ## 也可應用於object detection  > 論文: > End-to-End Object Detection with Transformers > https://arxiv.org/pdf/2005.12872 ### Masked-attention Mask Transformer for Universal Image Segmentation [論文](https://openaccess.thecvf.com/content/CVPR2022/papers/Cheng_Masked-Attention_Mask_Transformer_for_Universal_Image_Segmentation_CVPR_2022_paper.pdf) > [Github](https://github.com/facebookresearch/Mask2Former?tab=readme-ov-file) #### Abstract > Image segmentation 將具有不同semantic的pixel分組,例如類別或實例的歸屬。每種semantic的選擇定義了一個任務。雖然這些任務的區別僅在於semantic,但當前的研究主要關注為每個任務設計專門的架構。 > > 論文提出了Masked-attention Mask Transformer(Mask2Former),這是一種新架構,能夠處理任何圖像分割任務(全景分割、實例分割或語義分割)。其關鍵組件包括遮罩注意力,透過將一般Transformer做的cross self-attention限制在預測的mask self-attention區域內,來提取局部特徵,更能確保先後順序。 > > 此作法除了減少至少三倍的研究工作量外,它在四個流行的數據集上也顯著超越了最佳的專用架構。最值得注意的是,Mask2Former在全景分割(COCO數據集上達到57.8 PQ)、實例分割(COCO數據集上達到50.1 AP)以及語義分割(ADE20K數據集上達到57.7 mIoU)方面創下了新的最先進技術標準。  > 圖1. 最先進的分割架構通常針對每個圖任務進行專門設計。儘管最近的研究提出了嘗試處理所有任務的通用架構(2021年 Meta 推出的 MaskFormer),並且在semantic和panoptic segmentation 上表現出色,但在instance segmentation的表現就很差。在2022年,Meta提出改良過的框架Mask2Former,首次在多個數據集上的三個分割任務中,超越了最佳的專用架構。 ### 1. Introduction 影像處理主要分成三種任務:全景、實例、語意分割,雖然他們只有semantic不同,但仍然針對每個任務開發了專用的架構 如FCNs 專門處理semantic segentation 問題、 Mask classification專門處理instance segmentation問題 但彼此要泛化到其他任務的表現皆不佳 為了解決這種分散的情況,近期的研究設計了能夠處理所有分割任務的universal architectures(即universal image segmentation)。這些架構通常基於end-to-end的集合預測目標(如DETR),可處理多個任務,而無需修改架構、損失函數或訓練過程。 需要注意的是,universal architectures仍然需要針對不同的tasks和datasets單獨訓練,儘管架構是相同的。除了靈活性之外,通用架構最近在語義和全景分割上展示了最先進的結果。然而,近期的研究仍然專注於推進專門的架構,這引發了疑問:為什麼通用架構還沒有取代專門的架構? 儘管現有的通用架構足夠靈活來處理任何分割任務,但實踐中它們的性能仍落後於最佳的專門架構。例如,通用架構在實例分割上的最佳報告性能低於專門架構(> 9 AP)。以下整理出幾項缺點: 1. 每個任務都能處理,但與專用型的相比性能仍較差 2. 訓練更佳困難:硬體要求高與更長的訓練時間。例如,訓練MaskFormer (這次的主角Mask2Former的前身) 需要300個epoch才能達到40.1 AP,而且只能在一個32GB的GPU上放下一張圖像。而專門的Swin-HTC++僅需72個epoch就能取得更好的性能。 這些性能和訓練效率問題阻礙了universal architectures的廣泛部署。 在本研究中,提出了一個 **universal image segmentation** 架構,名為 ## **Mask-attention Mask Transformer(Mask2Former)** 該架構在不同的分割任務上超越了專門的架構,並且在每個任務的訓練上也很簡單。基於一個簡單的meta architecture,包括  1. a backbone feature extractor 2. a pixel decoder 3. Transformer decoder 這次提出了幾個關鍵的改進,使得結果更好且訓練更高效(對比之前的Maskformer) 1. 在Transformer decoder使用mask self-attention,去限制self-attention,讓它只能關注預測片段前的局部特徵,這些片段可以是物體或區域,具體取決於像素分組的語義。 2. 與一般的Transformer decoder的cross attention相比,我們的mask-attention使得收斂速度更快,性能更好。 3. 其次,我們使用了multi-scale high resolution features,有助於模型分割小物體或區域。 4. 我們提出了一些優化改進,例如改變Transformer中self-attention和cross-attention的位置,使查詢特徵可學習,以及去掉dropout 所有這些改進在不增加計算量的情況下提升了性能。此外,我們通過在隨機取樣的少量點上計算mask loss,節省了3倍的訓練內存,且不影響性能。 作者們在三個圖像分割任務(全景分割、實例分割和語義分割)上,使用四個流行數據集(COCO、Cityscapes、ADE20K和Mapillary Vistas)對Mask2Former進行了評估。首次在所有這些基準上,我們的單一架構與專門的架構表現相當或更好。Mask2Former創下了新的最先進技術標準:COCO全景分割達到57.8 PQ,COCO實例分割達到50.1 AP,ADE20K語義分割達到57.7 mIoU。 ### Related Work
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up