Transformer知識梳理

Transformer知識梳理

文章目錄

  • Transformer知識梳理
  • 什么是Transformer?
    • 語言模型
    • 遷移學習
  • Transformer結構
    • 注意力層
    • 原始結構
  • 總結

什么是Transformer?

語言模型

Transformer模型本質上都是預訓練語言模型,大部分采用自監督學習(Self-supervised Learning)的方式在大量生語料上進行訓練,也就是說,訓練這些Transformer模型完全不需要人工標注數據。

自監督學習是一種訓練目標可以根據模型的輸入自動計算的訓練方法。

例如下面兩個常見的預訓練任務:

  • 基于句子的前n個詞來預測下一個詞,因為輸出依賴于過去和當前的輸入,因此該任務被稱為因果語言建模(causal language modeling);image-20250105222251983
  • 基于上下文(周圍的詞語)來預測句子中被遮蓋掉的詞語(masked word),因此該任務被稱為遮蓋語言建模(masked language modeling)。image-20250105222344876

這些語言模型雖然可以對訓練過的語言產生統計意義上的理解,例如可以根據上下文預測被遮蓋掉的詞語,但是如果直接拿來完成特定任務,效果往往并不好。

因此,我們通常還會采用遷移學習(transfer learning)方法,使用特定任務的標注語料,以有監督學習的方法對預訓練模型參數進行微調(fine-tune),以取得更好的性能。

遷移學習

預訓練是一種從頭開始訓練模型的方式:所有的模型權重都被隨機初始化,然后在沒有任何先驗知識的情況下開始訓練:image-20250105222412771

這個過程不僅需要海量的訓練數據,而且時間和經濟成本都非常高。

基于此,絕大多數情況下,都不會從頭開始訓練模型,而是將別人預訓練好的模型權重通過遷移學習應用到自己的模型中,即使用自己的任務語料對模型進行“二次訓練”,通過微調參數使模型適用于新任務。

這種遷移學習的好處是:

  • 預訓練時模型很可能已經見過與我們任務類似的數據集,通過微調可以激發出模型在預訓練過程中獲得的知識,將基于海量數據獲得的統計理解能力應用于特定的任務;
  • 由于模型已經在大量數據上進行過預訓練,微調時只需要很少的數據量就可以達到不錯的性能;
  • 在特定任務上獲得優秀性能所需的時間和計算成本都可以很小。

例如,可以選擇一個在大規模英文浴簾上預訓練好的模型,使用arXiv語料進行微調,以生成一個面向學術/研究領域的模型。這個微調的過程只需要很少的數據:我們相當于將預訓練模型已經獲得的知識“遷移“到了新的領域,因此被稱為遷移學習。image-20250105222446199

與頭從開始訓練相比,微調模型所需的時間、數據、經濟和環境成本都要低的多,并且與完整的預訓練相比,微調訓練的約束更少,因此迭代嘗試不同的微調方案也更快、更容易。實踐證明,即使是對于自定義任務,除非你有大量的語料,否則相比訓練一個專門的模型,基于預訓練模型進行微調會是一個更好的選擇。

在絕大部分情況下,我們都應該嘗試找到一個盡可能接近我們任務的預訓練模型,然后微調它,也就是所謂的“站在巨人的肩膀上”。

Transformer結構

標準的Transformer模型主要由兩個模塊構成:

  • Encoder(左邊):負責理解輸入文本,為每個輸入構造對應的語義表示(語義特征);

  • Decoder(右邊):負責生成輸出,使用Encoder輸出的語義表示結合其他輸入來生成目標序列。

這兩個模塊可以根據任務的需要而單獨使用:

  • 純Encoder模型:適用于只需要理解輸入語義的任務,例如句子分類,命名實體識別;
  • 純Decoder模型:適用于生成式任務,例如文本生成;
  • Encoder-Decoder模型或Seq2Seq模型:適用于需要基于輸入的生成式任務,例如翻譯、摘要等。

注意力層

Transformer模型的標志就是采用了注意力層(Attention Layers)的結構,提出Transformer結構的論文名字就是《Attention Is All You Need》。顧名思義,注意力層的作用就是讓模型在處理文本時,將注意力只放在某些詞語上。

例如要將英文“You like this course”翻譯為法語,由于法語中“like”的變位方式因主語而異,因此需要同時關注相鄰的詞語“You”。同樣地,在翻譯“this”時還需要注意“course”,因為“this”的法語翻譯會根據相關名字的極性而變化。對于復雜的句子,要正確翻譯某個詞語,甚至需要關注離這個詞很遠的詞。

同樣的概念也適用于其他NLP任務:雖然詞語本身就有語義,但是其深受上下文的影響,同一個詞語出現在不同上下文中可能會有完全不同的語義(例如“我買了一個蘋果”和“我買了一個蘋果手機”中的“蘋果)

原始結構

Transformer模型本來是為了翻譯任務而設計的。在訓練過程中,Encoder接受源語言的句子作為輸入,而Decoder則接受目標語言的翻譯作為輸入。在Encoder中,由于翻譯一個詞語需要依賴于上下文,因此注意力層可以訪問句子中的所有詞語;而Decoder是順序地進行解碼,在生成每個詞語時,注意力層只能訪問前面已經生成的單詞。

例如,假設翻譯模型當前已經預測了三個詞語,模型會把這三個詞語作為輸入送入Decoder,然后Decoder結合Encoder所有的源語言輸入來預測第四個詞語。

實際訓練中為了加快速度,會將整個目標序列都送入Decoder,然后在注意力層中通過Mask遮蓋掉未來的詞語來防止信息泄露。例如我們在預測第三個詞語時,應該只能訪問到已生成的前兩個詞語,如果Decoder能夠訪問到序列中的第三個(甚至是后面的)詞語,就相當于作弊了。

原始的Transformer模型結構如下圖所示,Encoder在左,Decoder在右:

其中,Decoder中的第一個注意力層關注Decoder過去所有的輸入,而第二個注意力層則是使用Encoder的輸出,因此Decoder可以基于整個輸入句子來預測當前詞語。這對于翻譯任務非常有用,因為同一句話在不同語言下的詞語順序可能并不一致(不能逐詞翻譯),所以出現在源語言句子后部的詞語反而可能對目標語言句子前部詞語的預測非常重要。

在Encoder/Decoder的注意力層中,還會使用Attention Mask遮蓋掉某些詞語來防止模型關注它們,例如為了將數據處理為相同長度而向序列中添加的填充(padding)字符。

總結

以上就是關于Transformer的基本知識以及Transformer模型結構的介紹,后續我們將繼續帶來Transformer的深入探索。

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

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

相關文章

第29天:PHP應用弱類型脆弱Hash加密Bool類型Array數組函數轉換比較

#知識點: 1、安全開發-原生PHP-弱類型脆弱 2、安全開發-原生PHP-函數&數據類型 3、安全開發-原生PHP-代碼審計案例 1、 和 兩個等號是弱比較,使用進行對比的時候,php解析器就會做隱式類型轉換,如果兩個值的類型不相等就會把兩…

STM32F1學習——編碼器接口

一、編碼器接口 編碼器接口可以接收正交編碼器的信號,根據編碼器旋轉產生的正交信號脈沖,通過硬件自動控制CNT值的自增或自減,從而指出編碼器的位置、旋轉方向和旋轉速度。 每個高級定時器和通用定時器都有一個編碼器接口,他們會占…

如何刪除 Docker 中的懸虛鏡像?

在 Docker 中,懸虛鏡像(Dangling Images)是指那些沒有 標簽 且沒有被任何容器使用的鏡像。這些鏡像通常是由于構建過程中生成的中間層鏡像或未正確清理的鏡像殘留。刪除懸虛鏡像可以釋放磁盤空間并保持 Docker 環境的整潔。 1. 列出懸虛鏡像…

網絡安全的學習與實踐經驗(附資料合集)

學習資源 在線學習平臺: Hack This Site:提供從初學者到高級難度的挑戰任務,適合練習各種網絡安全技術。XCTF_OJ:由XCTF組委會開發的免費在線網絡安全網站,提供豐富的培訓材料和資源。SecurityTube:提供豐…

ts是什么、tsc是什么、tsx是什么、jsx是什么、scss是什么

一、TS (TypeScript): TypeScript 是一種由微軟開發的開源編程語言,它是 JavaScript 的一個超集,增加了類型系統和對ES6及以后版本新特性的支持。TypeScript 旨在解決 JavaScript 開發中的可維護性、可擴展性和大型項目中的復雜性問題。它允許開發者在編…

行業商機信息付費小程序系統開發方案

行業商機信息付費小程序系統,主要是整合優質行業資源,實時更新的商機信息。在當今信息爆炸的時代,精準、高效地獲取行業商機信息對于企業和個人創業者而言至關重要。 一、使用場景 日常瀏覽:用戶在工作間隙或閑暇時間&#xff0c…

[Qt] 輸入控件 | Line | Text | Combo | Spin | Date | Dial | Slider

目錄 輸入類控件 1、Line Edit 錄入個人信息 使用正則表達式驗證輸入框的數據 驗證兩次輸入的密碼一致 切換顯示密碼 2、Text Edit 獲取多行輸入框的內容 驗證輸入框的各種信號 3、Combo Box 使用下拉框模擬麥當勞點餐 從文件中加載下拉框的選項 4、Spin Box 調整…

Flink CDC 自定義函數處理 SQLServer XML類型數據 映射 doris json字段方案

Flink CDC 自定義函數處理 SQLServer XML類型數據方案 1. 背景 因業務使用SQLServer數據庫,CDC同步到doris 數倉。對于SQLServer xml類型,doris沒有相應的字段對應, 可以使用json來存儲xml數據。需要進行一步轉換。從 flink 自定義函數入手…

C語言:cJSON將struct結構體與JSON互相轉換

文章目錄 struct 轉 jsonjson 轉 struct 文檔&#xff1a; https://github.com/DaveGamble/cJSON 項目結構 . ├── libs │ ├── cJSON.c │ └── cJSON.h └── main.c示例 struct 轉 json #include "libs/cJSON.h" #include <stdio.h>// defi…

JeeSite 快速開發平臺:全能企業級快速開發解決方案|GitCode 光引計劃征文展示

投稿人GitCode ID&#xff1a;thinkgem 光引計劃投稿項目介紹 JeeSite 快速開發平臺&#xff0c;不僅僅是一個后臺開發框架&#xff0c;它是一個企業級快速開發解決方案&#xff0c;后端基于經典組合 Spring Boot、Shiro、MyBatis&#xff0c;前端采用 Beetl、Bootstrap、Admi…

2025/1/4期末復習 密碼學 按老師指點大綱復習

我們都要堅信&#xff0c;道路越是曲折&#xff0c;前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 現代密碼學 第五版 楊波 第一章 引言 1.1三大主動攻擊 1.中斷…

【架構設計(一)】常見的Java架構模式

常見的 Java 架構模式解析 在 Java 開發領域&#xff0c;選擇合適的架構模式對于構建高效、可維護且能滿足業務需求的軟件系統至關重要。本文將深入探討幾種常見的 Java架構模式&#xff0c;包括單體架構與微服務架構、分層架構與微服務架構的對比&#xff0c;以及事件驅動架構…

opencv與halcon的差距及改進方法

本文是直接問ai獲得的結果。 在我理解中&#xff0c;這是開源軟件與商業非開源工業軟件的普遍差距特點。 商業非開源工業軟件的人員、資金、時間投入是巨大的&#xff0c;開發人員也不是普通人普通水平。 一般情況下&#xff0c;試圖通過開源軟件改吧改吧就實現彎道超車&#x…

Java 內存溢出(OOM)問題的排查與解決

在 Java 開發中&#xff0c;內存溢出&#xff08;OutOfMemoryError&#xff0c;簡稱 OOM&#xff09;是一個常見且棘手的問題。相比于數組越界、空指針等業務異常&#xff0c;OOM 問題通常更難定位和解決。本文將通過一次線上內存溢出問題的排查過程&#xff0c;分享從問題表現…

AF3 AtomAttentionEncoder類解讀

AlphaFold3的AtomAttentionEncoder 類用于處理基于原子的表示學習任務。 源代碼: class AtomAttentionEncoderOutput(NamedTuple):"""Structured output class for AtomAttentionEncoder."""token_single: torch.Tensor # (bs, n_tokens, c_…

【51單片機零基礎-chapter3:按鍵:獨立按鍵|||附帶常見C語句.邏輯運算符】

將unsigned char var0;看作溝通二進制和十進制的橋梁 var是8位,初始為0000 0000; 同時可以進行十進制的運算 邏輯運算 位運算 & 按位與(有0則0) | 按位或(有1則1) ~ 按位非 ^ 按位異或(相同則1,不同為0) <<按位左移 >>按位右移 位運算符解釋: 0011 1100 <&…

游戲如何檢測iOS越獄

不同于安卓的開源生態&#xff0c;iOS一直秉承著安全性更高的閉源生態&#xff0c;系統中的硬件、軟件和服務會經過嚴格審核和測試&#xff0c;來保障安全性與穩定性。 據FairGurd觀察&#xff0c;雖然iOS系統具備一定的安全性&#xff0c;但并非沒有漏洞&#xff0c;如市面上…

在Lua中,Metatable元表如何操作?

Lua中的Metatable&#xff08;元表&#xff09;是一個強大的特性&#xff0c;它允許我們改變表&#xff08;table&#xff09;的行為。下面是對Lua中的Metatable元表的詳細介紹&#xff0c;包括語法規則和示例。 1.Metatable介紹 Metatable是一個普通的Lua表&#xff0c;它用于…

Python基于matplotlib實現樹形圖的繪制

在Python中&#xff0c;你可以使用matplotlib庫來繪制樹形圖&#xff08;Tree Diagram&#xff09;。雖然matplotlib本身沒有專門的樹形圖繪制函數&#xff0c;但你可以通過組合不同的圖形元素&#xff08;如線條和文本&#xff09;來實現這一點。 以下是一個簡單的示例&#…

2 秒殺系統架構

第一步 思考面臨的問題和業務場景 秒殺系統面臨的問題: 短時間內并發非常高&#xff0c;如果按照秒殺的并發做相應的承載會造成大量資源的浪費。第二解決超賣的問題。 第二步 思考目前的處境和解決方案 因為秒殺系統屬于短時間內的高并發問題&#xff0c;我們不可能使用那么…