【深度學習—李宏毅教程筆記】Transformer

目錄

一、序列到序列(Seq2Seq)模型

1、Seq2Seq基本原理

2、Seq2Seq模型的應用

3、Seq2Seq模型還能做什么?

二、Encoder?

三、Decoder

1、Decoder 的輸入與輸出

2、Decoder 的結構

3、Non-autoregressive?Decoder

四、Encoder 和 Decoder 之間的配合

1、Encoder 和 Decoder 之間信息的傳遞

2、Encoder 和 Decoder 是如何訓練的?

五、Transformer 的一些 Tips

1、Copy Mechanism

2、Guided Attention

3、Beam Search

4、Optimizing Evaluation Metrics

5、訓練過程和測試過程的一個 mismatch


一、序列到序列(Seq2Seq)模型

Transformer 是一個?Sequence-to-sequence 的模型。

Sequence-to-sequence (Seq2seq)模型,輸入一個序列,輸出一個序列,輸出的長度由模型決定。

1、Seq2Seq基本原理

????????Seq2Seq模型用于將輸入序列映射到輸出序列,廣泛應用于機器翻譯、語音識別、語音合成、對話系統等任務。其基本結構由編碼器(Encoder)和解碼器(Decoder)組成:

  • 編碼器(Encoder):負責接收輸入序列,將其轉化為一個上下文向量(或一系列上下文向量),為解碼器提供信息。

  • 解碼器(Decoder):基于編碼器的輸出生成目標序列。

????????Seq2Seq通過訓練使得編碼器和解碼器之間的映射關系能夠最優化,進而實現輸入和輸出之間的映射??。

2、Seq2Seq模型的應用

Seq2Seq模型廣泛應用于以下幾個領域:

  • 機器翻譯:輸入源語言,輸出目標語言。輸入和輸出序列長度可不同。

  • 語音識別:將語音信號轉換為文本。

  • 語音合成(TTS):根據文本生成自然語音??。

  • 對話系統:自動生成與用戶輸入相應的回答??。

  • 問答系統:根據輸入的上下文和問題,生成相應的答案

3、Seq2Seq模型還能做什么?

下面的的任務雖然能用Seq2Seq來完成,但Seq2Seq并不是最好的,對于不同的任務,刻制化不同的模型,效果會更好。

(1)語法分析

語法分析:對一個句子進行語法分析,如下圖:

????????? ?

????????輸入是一個句子,輸出是一個句子結構的框圖,這個結構框圖是序列嗎?可以把它寫成如下序列的形式:

????????????????

????????序列中的 “(? ” 和 “? )” 都是序列的一部分,通過模型輸出。

相關的研究論文:[1412.7449] Grammar as a Foreign Language

(2)多類別分類

分類任務的類別數不確定,不同的輸入可能有不同數量的輸出:

相關研究:

[1909.03434] Order-free Learning Alleviating Exposure Bias in Multi-label Classification

[1707.05495] Order-Free RNN with Visual Attention for Multi-Label Classification

(3)物品識別

Seq2Seq還能用在圖像中物品的識別,描述圖像等

相關研究:[2005.12872] End-to-End Object Detection with Transformers

二、Encoder?

功能:給一排向量,輸出一排向量。

???????????????????????????????????????????????? ?


看 Encoder 內部結構如下:

?????????????????????????????????????????????????????

一個 Block 并不是一個 Layer ,他可能是很多層,如下圖:是一個 Self-attention 層 + 一個 FC(前饋網絡 feedforward?Connect)層。


在原來的 Transformer 中,一個Block做的是更復雜的,如下圖:

???????????????????????

即在?Self-attention 層和 FC 層之間加入一些東西,將?Self-attention 層的輸出再加上原來的輸入,這樣的架構被稱為 residual connection。隨后呢,再將加和的結果輸入一個 Layer normalization 層,隨后再輸入 FC 層,而這里的 FC 層也用 residual connection 架構,FC 的輸出再經過一個? Layer normalization 層,最終它的輸出才是一個 Block 的輸出。


所以說,整個 Encoder 層如下:

????????? ?

在第一個Block 之前,要加上 位置編碼,而且 Block 的?Self-attention 是?Multi-head Self-attention 。上圖中的右側的結構并不是整個 Encoder ,而是只是?Encoder 中的一個 Block 。


至此上面的介紹就是原始論文 transformer 的?Encoder,在 BERT 中的其實就是? transformer 的?Encoder。


下面是一些對原始?Encoder 的改進:

第一篇論文(這里)是對?Layer normalization 放的位置進行了改變,第二篇論文(這里)是將?Layer normalization 改為了 Batch Normalization?

三、Decoder

1、Decoder 的輸入與輸出

這里所講的 Decoder 是 Autoregressive - Decoder, 即自回歸解碼器。Autoregressive的縮寫為:AT

????????????????

Decoder 接受 Encoder 的輸出作為輸入,還有就是它在輸出序列的第一個元素時接受一個 Begin

的向量作為輸入,得到第一個輸出后,再將第一個輸出作為輸入,取代原來 Begin 向量的位置,最后輸出序列的第二個元素,依次進行,得到輸出的全序列。注意:這里的第一個元素輸出是一個字(以漢字為例),但 Decoder 的輸出是一個向量,由這個向量再根據原來對所有字的 one-hot 編碼,找到輸出的是哪一個字,這里的輸出并不是一個?one-hot 編碼,這個輸出的向量的每個元素代表的是每個字的概率,在?one-hot 編碼表中找到最大可能的字作為輸出的字,但第一個輸出作為輸入時(為得到第二個輸出),輸入的是?one-hot 編碼,即一個元素是 1 ,其他都是 0 。

這個地方還不確定對不對 ?


如何知道什么時候結束輸出呢?

解決方式如下,在給所有字?one-hot 編碼時,給定一個特殊的字,假如說是 “斷”,當這個字輸出時,就斷掉輸出。在訓練過程中也給訓練資料加入這個 “斷” ,這樣的話模型就可以自已學習到什么時候結束輸出了,即什么時候結束輸出是由模型決定的。(有的地方這個 序列開始的符號和序列結束的符號用的是同一個),

我們希望上面的模型應該在合適的時候斷掉輸出,如下圖:

???????????????????????? ?

2、Decoder 的結構

????????

對比?Encoder 和?Decoder 的結構,如下圖:

????????

可見,當 Decoder? 擋住中間的 一塊 “接受?Encoder 輸出作為輸入的塊” 后,它的結構與 Encoder 幾乎一樣。


擋住后還不一樣的地方:

第一個地方就是?Decoder 在最后多加了 Linear 和 Softmax 層,是為了得到輸出各個元素的概率信息。

第二個地方就是?Decoder 的注意力機制部分使用了 Masked ,這是由于?Decoder 的輸入并不是一次全部并行輸入的,它的輸入是一個一個加的,所以說在計算?注意力機制層 的輸出時不能看到后邊的信息(訓練的時候即使有后邊的信息也不能看),即:

???????????????????????

也就是說:

????????在計算?b^{1}?時,只能考慮?a^{1}?;

????????在計算?b^{2}?時,只能考慮?a^{1}a^{2}

????????在計算?b^{3}?時,只能考慮?a^{1}a^{2}a^{3}

????????在計算?b^{4}?時,只能考慮?a^{1}a^{2}a^{3}a^{4}

更具體的計算過程,如下圖:

??????????????????????????????????????

3、Non-autoregressive?Decoder

Non-autoregressive(非自回歸),縮寫為:NAT

AT?Decoder 是一個一個輸出的,而 NAT?Decoder 是一下輸出序列的全部。

???????????????????????

即?NAT?Decoder 一次接受很多個 開始符號 Begin,一次輸出所有的元素。


在 AT?Decoder 中,模型可以通過輸出結束標識符來決定什么時候結束輸出,那么?NAT?Decoder 如何知道什么是結束輸出呢?

有兩種解決方法:

  • 第一種:另外做一個單獨的分類器,這個分類器以 Encoder 的輸出作為輸入,以??NAT?Decoder 模型輸出序列的長度 n 作為輸出,從而決定? NAT?Decoder 什么時候能結束輸出。即在??NAT?Decoder 輸入 n 個Begin 。
  • 第二種:同樣有一個結束標識符,但設置?NAT?Decoder 輸出非常長的序列,輸出的序列中如果有 結束標識符,則標識符后面的截斷不要。

NAT?Decoder 的優點:

  • 它是并行化,在速度上比?AT?Decoder 快,
  • 如果是另外做一個單獨的分類器來決定輸出的長度,則可以靈活地決定輸出的長度,比如說對于聲音輸出模型,對輸出長度減半(即將? 決定模型輸出序列長度的分類器的輸出除以2 )那么輸出的聲音長度就為原來的一半,聲音就倍速了。

NAT?Decoder 的缺點:

NAT 通常是比 AT 的輸出性能要差,(為什么呢?因為 Multi-modality(意思是多模態))


更多的?NAT?Decoder 相關的知識:https://youtu.be/jvyKmU4OM3c

四、Encoder 和 Decoder 之間的配合

1、Encoder 和 Decoder 之間信息的傳遞

這部分內容就是上面比較?Encoder 和 Decoder 時遮住的一塊。

???????????????????????

Cross attention 是什么呢??

在計算 注意力?\alpha 時 使用 Decoder 的 q 值(Query)和 Encoder 的 k、v 值(Key、Value)來計算注意力?\alpha?的值(代表相關程度)。如下圖:

??????????????????????????????????????

??????????????????????????????????????


Encoder 和 Decoder 都有很多層,那么從 Encoder 到 Decoder 傳遞的信息是怎么樣的呢?

在原始論文中,都是 Encoder 的最后一層向 Decoder 的各個層進信息傳遞(通過 Cross attention? 進行)。如下圖:

也有一些人嘗試不同的信息傳遞方式,如下圖:相關論文(這里)

2、Encoder 和 Decoder 是如何訓練的?

首先準備好 帶標簽序列的序列,(這里以聲音信號轉為文字為例),準備好聲音信號和它對應的文字序列。

聲音信號傳入 Encoder 進行編碼,再將信息通過?Cross attention 傳遞到 Decoder ,傳入 Decoder Begin 標識符開始輸出第一個元素,但和模型使用時不同,這里并不一定要把輸出的第一個元素再次輸入到 Decoder ,而是使用真實標簽序列的第一個元素輸入 Decoder 來得到第二個輸出,一次下去,每次輸入 Decoder 的都是真實標簽,在序列輸出完畢后,最后一個元素應該是 “斷” 標識符。如下圖:

???????????????????????


五、Transformer 的一些 Tips

1、Copy Mechanism

????????Copy Mechanism(復制機制) 是一種在自然語言處理(NLP)和其他序列生成任務中使用的技術,旨在解決模型生成文本時可能面臨的重復性信息遺漏問題,特別是在任務中需要精確復制某些輸入內容的情況下。

更詳細的:

講解:Pointer Network :?(這里)

論文:Incorporating Copying Mechanism in Sequence-to-Sequence Learning?(這里)

2、Guided Attention

????????Guided Attention(引導注意力) 是一種在神經網絡中使用的技術,旨在通過某種方式增強或引導模型的注意力機制,使其專注于對任務更為重要的信息。這種技術在深度學習中尤為重要,尤其是在處理復雜任務時,如圖像描述生成、機器翻譯、視覺問答等。通過引導模型的注意力,可以有效提高模型的性能和效率。

3、Beam Search

????????Beam Search(束搜索) 是一種啟發式搜索算法,常用于序列生成任務中,特別是在自然語言處理(NLP)任務中,如機器翻譯、文本生成、語音識別等。它是一種改進的貪心算法,旨在平衡搜索空間的大小和結果的質量,避免傳統貪心搜索可能遇到的局部最優問題。

???????????????????????

使用 Beam Search 實際情況下并不一定就更好。

4、Optimizing Evaluation Metrics

????????在模型評估時,使用的?Evaluation Metrics(評估方法)是 BLEU score ,這種方法是比較兩個序列之間的區別,由于序列之間的元素是有聯系的,這種方法是整體評估兩個序列的差別。

????????但在訓練過程中,模型輸出序列的每個元素是分開的,是一個一個輸出的,而且在每個元素輸出前給到 Decoder 的輸入都是正是標簽序列的相應前一個元素,所以說計算 loss 時使用的評估方法的依據是單個元素之間的差別(交叉熵損失)。為什么在訓練時不用? BLEU score 呢?因為? BLEU score 很復雜不容易微分,一般不用。

但像這樣不容易計算的問題,有一種萬能的方法來解決,就是李宏毅老師教程中所說的?“硬 Train 一發”,即在這個梯度不容易計算的問題中,直接把他當作?Reinforcement Learning(強化學習)的問題,硬做。用另一個額外的模型預測這個 loss 。

相關研究:When you don’t know how to optimize, just use reinforcement learning (RL)!

(這里)

5、訓練過程和測試過程的一個 mismatch

????????在訓練過程中,由于有真實的標簽,每次 Decoder 輸出的前一個的輸出都不受真正的前一個的輸出,而是真實的標簽。但在 test 時(即訓練好的模型使用時),并沒有真實的標簽,每次?Decoder 的輸入都是前一個真正的輸出,可能會出現 “ 一步錯,步步錯 ”,要怎么解決呢?

????????一個解決方法是在訓練過程中就給一些錯誤的信息,即 訓練過程中,就給?Decoder 輸入一些錯誤的信息,并不一定要是真實標簽。這一招叫做:Scheduled Sampling 。

相關研究:

??????????????????????????????????????

????????Original Scheduled Sampling:(這里)

????????Scheduled Sampling for Transformer:(這里)

????????Parallel Scheduled Sampling:(這里)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80122.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++鐫刻數據密碼的樹之銘文:二叉搜索樹

文章目錄 1.二叉搜索樹的概念2.二叉搜索樹的實現2.1 二叉搜索樹的結構2.2 二叉搜索樹的節點尋找2.2.1 非遞歸2.2.2 遞歸 2.3 二叉搜索樹的插入2.3.1 非遞歸2.3.2 遞歸 2.4 二叉搜索樹的刪除2.4.1 非遞歸2.4.2 遞歸 2.5 二叉搜索樹的拷貝 3.二叉樹的應用希望讀者們多多三連支持小…

系統架構設計師:流水線技術相關知識點、記憶卡片、多同類型練習題、答案與解析

流水線記憶要點? ?公式 總時間 (n k - 1)Δt 吞吐率 TP n / 總時間 → 1/Δt(max) 加速比 S nk / (n k - 1) | 效率 E n / (n k - 1) 關鍵概念 周期:最長段Δt 沖突?: ?數據沖突(RAW) → 旁路/…

強制重裝及驗證onnxruntime-gpu是否正確工作

#工作記錄 我們經常會遇到明明安裝了onnxruntime-gpu或onnxruntime后,無法正常使用的情況。 一、強制重新安裝 onnxruntime-gpu 及其依賴 # 強制重新安裝 onnxruntime-gpu 及其依賴 pip install --force-reinstall --no-cache-dir onnxruntime-gpu1.18.0 --extra…

桌面我的電腦圖標不見了怎么恢復 恢復方法指南

在Windows操作系統中,“我的電腦”或在較新版本中稱為“此電腦”的圖標,是訪問硬盤驅動器、外部存儲設備和系統文件的重要入口。然而,有些用戶可能會發現桌面上缺少了這個圖標,這可能是由于誤操作、系統設置更改或是不小心刪除造成…

2025.04.20【Lollipop】| Lollipop圖繪制命令簡介

Customize markers See the different options allowing to customize the marker on top of the stem. Customize stems See the different options allowing to customize the stems. 文章目錄 Customize markersCustomize stems Lollipop圖簡介R語言中的Lollipop圖使用ggp…

docker-compose搭建kafka

1、單節點docker-compose.yml version: 3 services:zookeeper:image: zookeeper:3.8container_name: zookeeperports:- "2181:2181"volumes:- ./data/zookeeper:/dataenvironment:ZOO_MY_ID: 1ZOO_MAX_CLIENT_CNXNS: 100kafka:image: bitnami/kafka:3.7container_na…

【問題】一招解決vscode輸出和終端不一致的困擾

背景(閑話Trae) Trae是挺好,用了幾天,發現它時不時檢查文件,一檢測就轉悠半天,為此我把當前環境清空,就留一個正在調的程序,結果還照樣檢測,雖然沒影響什么,…

Git,本地上傳項目到github

一、Git的安裝和下載 https://git-scm.com/ 進入官網,選擇合適的版本下載 二、Github倉庫創建 點擊右上角New新建一個即可 三、本地項目上傳 1、進入 要上傳的項目目錄,右鍵,選擇Git Bash Here,進入終端Git 2、初始化臨時倉庫…

從零開始配置spark-local模式

1. 環境準備 操作系統:推薦使用 Linux 或 macOS,Windows 也可以,但可能會有一些額外的配置問題。 Java 環境:Spark 需要 Java 環境。確保安裝了 JDK 1.8 或更高版本。 檢查 Java 版本: bash 復制 java -version 如果…

前端~地圖(openlayers)繪制車輛運動軌跡(仿高德)

繪制軌跡路線軌跡路線描邊增加起點終點圖標繪制仿高德方向箭頭模仿車輛動態運動動畫 車輛運行軌跡 車輛軌跡經緯度坐標 const linePoints [new Point([123.676031, 43.653421]),new Point([123.824347, 43.697124]),new Point([124.197882, 43.946811]),new Point([124.104498…

分布式之CAP原則:理解分布式系統的核心設計哲學

聲明:CAP中的P原則都是需要帶著的 在分布式系統的設計與實踐中,CAP原則(又稱CAP定理)是開發者必須掌握的核心理論之一。它揭示了分布式系統在一致性(Consistency)、可用性(Availability&#x…

IF=40.8|腫瘤免疫:從免疫基因組學到單細胞分析和人工智能

一、寫在前面 今天分享的是發表在《Signal Transduction and Targeted Therapy》上題目為"Technological advances in cancer immunity: from immunogenomics to single-cell analysis and artificial intelligence"的文章。 IF:40.8 DOI:10.1038/s41392…

深入理解 Spring @Bean 注解

在 Spring 框架中,@Bean 注解是用于顯式地聲明一個或多個 Bean 實例,并將其注冊到 Spring 容器中的重要工具。與 @Component 系列注解不同的是,@Bean 是方法級別的注解,通常與 @Configuration 注解結合使用。本文將詳細介紹 @Bean 注解的功能、用法及其應用場景。 1. @Bean…

Pycharm 如何刪除某個 Python Interpreter

在PyCharm中,點擊右下角的“Interpreter Settings”按鈕,或者通過菜單欄選擇“File” > “Settings”(macOS用戶選擇“PyCharm” > “Preferences”)。在設置窗口中,導航到“Project: [Your Project Name]” >…

如何改電腦網絡ip地址完整教程

更改電腦的網絡IP地址以滿足特定的網絡需求,本文將為您提供一份詳細的步驟指南。其實,改變IP地址并不是一件復雜的事,能解決因為IP限制帶來的麻煩。以下是操作指南: 方法一:Windows 系統,通過圖形界面修改 …

Oracle--SQL性能優化與提升策略

前言:本博客僅作記錄學習使用,部分圖片出自網絡,如有侵犯您的權益,請聯系刪除 一、導致性能問題的內在原因 系統性能問題的底層原因主要有三個方面: CPU占用率過高導致資源爭用和等待內存使用率過高導致內存不足并需…

【go】什么是Go語言中的GC,作用是什么?調優,sync.Pool優化,逃逸分析演示

Go 語言中的 GC 簡介與調優建議 Go語言GC工作原理 對于 Go 而言,Go 的 GC 目前使用的是無分代(對象沒有代際之分)、不整理(回收過程中不對對象進行移動與整理)、并發(與用戶代碼并發執行)的三…

【unity實戰】Animator啟用root motion根運動動畫,實現完美的動畫動作匹配

文章目錄 前言1、動畫分類2、如何使用根位移動畫? 一、根位移動畫的具體使用1、導入人形模型2、導入動畫3、配置動畫參數4、配置角色Animator動畫狀態機5、使用代碼控制人物前進后退 二、問題分析三、Humanoid動畫中的Root Motion機制及相關配置1、Humanoid動畫中的…

中間件--ClickHouse-10--海量數據存儲如何抉擇ClickHouse和ES?

在Mysql數據存儲或性能瓶頸時,采用冷熱數據分離的方式通常是一種選擇。ClickHouse和Elasticsearch(ES)是兩個常用的組件,但具體使用哪種組件取決于冷數據的存儲目的、查詢模式和業務需求等方面。 1、核心對比 (1&…

服務器運維:服務器流量的二八法則是什么意思?

文章目錄 用戶行為角度時間分布角度應用場景角度 服務器流量的二八法則,又稱 80/20 法則,源自意大利經濟學家帕累托提出的帕累托法則,該法則指出在很多情況下,80% 的結果是由 20% 的因素所決定的。在服務器流量領域,二…