深入淺出 Multi-Head Attention:原理 + 例子 + PyTorch 實現

本文帶你一步步理解 Transformer 中最核心的模塊:多頭注意力機制(Multi-Head Attention)。從原理到實現,配圖 + 舉例 + PyTorch 代碼,一次性說清楚!


什么是 Multi-Head Attention?

簡單說,多頭注意力就是一種讓模型在多個角度“看”一個序列的機制。

在自然語言中,一個詞的含義往往依賴于上下文,比如:

“我把蘋果給了她”

模型在處理“蘋果”時,需要關注“我”“她”“給了”等詞,多頭注意力就是這樣一種機制——從多個角度理解上下文關系。


Self-Attention 是什么?為什么還要多頭?

在講“多頭”之前,咱們先回顧一下基礎的 Self-Attention

Self-Attention(自注意力)機制的目標是:

讓每個詞都能“關注”整個句子里的其他詞,融合上下文。

它的核心步驟是:

  1. 對每個詞生成 Query、Key、Value 向量

  2. 用 Query 和所有 Key 做點積,算出每個詞對其他詞的關注度(打分)

  3. 用 Softmax 得到權重,對 Value 加權平均,生成當前詞的新表示

這樣做的好處是:詞的語義表示不再是孤立的,而是上下文相關的。


Self-Attention vs Multi-Head Attention

但問題是——單頭 Self-Attention 視角有限。就像一個老師只能從一種角度講課。

于是,Multi-Head Attention 應運而生

特性Self-Attention(單頭)Multi-Head Attention(多頭)
輸入映射矩陣一組 Q/K/V 線性變換多組 Q/K/V,每個頭一組
學習角度單一視角多角度并行理解
表達能力有限更豐富、強大
結構簡單并行多個頭 + 合并輸出

一句話總結:

Multi-Head Attention = 多個不同“視角”的 Self-Attention 并行處理 + 合并結果


?多頭注意力:8個腦袋一起思考!

多頭 = 多個“單頭注意力”并行處理!

每個頭使用不同的線性變換矩陣,所以能從不同視角處理數據:

  • 第1個頭可能專注短依賴(like 動詞和主語)

  • 第2個頭可能專注實體關系(我 vs 她)

  • 第3個頭可能關注時間順序(“給了”前后)

  • ……共用同一個輸入,學習到不同特征!

多頭的步驟:

  1. 將輸入向量(如512維)拆成多個頭(比如8個,每個64維)

  2. 每個頭獨立進行 attention

  3. 所有頭的輸出拼接

  4. 再過一次線性變換,融合成最終輸出


?PyTorch 實現(簡潔版)

我們來看下 PyTorch 中的簡化實現:

import torch
import torch.nn as nn
import copydef clones(module, N):return nn.ModuleList([copy.deepcopy(module) for _ in range(N)])def attention(query, key, value, mask=None, dropout=None):d_k = query.size(-1)scores = torch.matmul(query, key.transpose(-2, -1)) / (d_k ** 0.5)if mask is not None:scores = scores.masked_fill(mask == 0, -1e9)p_attn = torch.softmax(scores, dim=-1)if dropout:p_attn = dropout(p_attn)return torch.matmul(p_attn, value), p_attnclass MultiHeadedAttention(nn.Module):def __init__(self, h, d_model, dropout=0.1):super().__init__()assert d_model % h == 0self.d_k = d_model // hself.h = hself.linears = clones(nn.Linear(d_model, d_model), 4)self.dropout = nn.Dropout(dropout)def forward(self, query, key, value, mask=None):if mask is not None:mask = mask.unsqueeze(1)nbatches = query.size(0)query, key, value = [lin(x).view(nbatches, -1, self.h, self.d_k).transpose(1, 2)for lin, x in zip(self.linears, (query, key, value))]x, self.attn = attention(query, key, value, mask=mask, dropout=self.dropout)x = x.transpose(1, 2).contiguous().view(nbatches, -1, self.h * self.d_k)return self.linears[-1](x)

舉個例子:多頭在實際模型中的作用

假設輸入是句子:

"The animal didn't cross the street because it was too tired."

多頭注意力的不同頭可能會:

  • 🧠 頭1:關注“animal”和“it”之間的指代關系;

  • 📐 頭2:識別“because”和“tired”之間的因果聯系;

  • 📚 頭3:注意句子的結構層次……

所以說,多頭注意力本質上是一個“并行注意力專家系統”!


?總結

項目解釋
目的提升模型表達能力,從多個角度理解輸入
核心機制將向量分頭 → 每頭獨立 attention → 合并輸出
技術關鍵view, transpose, matmul, softmax, 拼接線性層

推薦學習路徑

  • 🔹 理解 Self-Attention 的點積公式

  • 🔹 搞懂 view, transpose 等張量操作

  • 🔹 看 Transformer 整體結構,關注每層作用

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

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

相關文章

常用 Git 命令詳解

Git 是一個強大的版本控制工具,廣泛用于軟件開發和團隊協作中。掌握 Git 命令可以幫助開發者更高效地管理代碼版本和項目進度。本文將介紹一些常用的 Git 命令,并提供示例以幫助你更好地理解和應用這些命令。 目錄 常用命令 git clonegit stashgit pul…

NO.96十六屆藍橋杯備戰|圖論基礎-多源最短路|Floyd|Clear And Present Danger|災后重建|無向圖的最小環問題(C++)

多源最短路:即圖中每對頂點間的最短路徑 floyd算法本質是動態規劃,?來求任意兩個結點之間的最短路,也稱插點法。通過不斷在兩點之間加?新的點,來更新最短路。 適?于任何圖,不管有向?向,邊權正負&…

電流模式控制學習

電流模式控制 電流模式控制(CMC)是開關電源中廣泛使用的一種控制策略,其核心思想是通過內環電流反饋和外環電壓反饋共同調節占空比。相比電壓模式控制,CMC具有更快的動態響應和更好的穩定性,但也存在一些固有缺點。 …

MATLAB 控制系統設計與仿真 - 36

魯棒工具箱定義了個新的對象類ureal,可以定義在某個區間內可變的變量。 函數的調用格式為: p ureal(name,nominalvalue) % name為變量名,nominalValue為標稱值,默認變化值為/-1 p ureal(name,nominalvalue,PlusMinus,plusminus) p ureal(name,nomin…

LeetCode -- Flora -- edit 2025-04-17

1.最長連續序列 128. 最長連續序列 給定一個未排序的整數數組 nums ,找出數字連續的最長序列(不要求序列元素在原數組中連續)的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1: 輸入:nums [1…

Sql刷題日志(day3)

一、筆試 1、min(date_time):求最早日期 2、mysql中distinct不能與order by 連用,可以用group by去重 二、面試 1、SQL中如何利用replace函數統計給定重復字段在字符串中的出現次數 (length(all_string)-length(all_string,目標字符串,))/length(ta…

解決 Spring Boot 多數據源環境下事務管理器沖突問題(非Neo4j請求標記了 @Transactional 嘗試啟動Neo4j的事務管理器)

0. 寫在前面 到底遇到了什么問題? 簡潔版: 在 Oracle 與 Neo4j 共存的多數據源項目中,一個僅涉及 Oracle 操作的請求,卻因為 Neo4j 連接失敗而報錯。根本原因是 Spring 的默認事務管理器錯誤地指向了 Neo4j,導致不相…

理解和實現RESTful API的最佳實踐

理解和實現RESTful API的最佳實踐 在當今數字化時代,APIs已成為軟件開發的核心組件,而RESTful API以其簡潔、靈活和可擴展性成為最流行的API設計風格。本文將深入探討RESTful API的概念、特點和實施指南,幫助開發者構建高效、可靠的Web服務。…

大語言模型微調技術與實踐:從原理到應用

大語言模型微調技術與實踐:從原理到應用 摘要:隨著大語言模型(LLM)技術的迅猛發展,預訓練語言模型在各種自然語言處理任務中展現出強大的能力。然而,將這些通用的預訓練模型直接應用于特定領域或任務時&am…

遨游科普:三防平板除了三防特性?還能實現什么功能?

在工業4.0浪潮席卷全球的今天,電子設備的功能邊界正經歷著革命性突破。三防平板電腦作為"危、急、特"場景的智能終端代表,其價值早已超越防水、防塵、防摔的基礎防護屬性。遨游通訊通過系統級技術創新,將三防平板打造為集通信中樞、…

前端實戰:基于 Vue 與 QRCode 庫實現動態二維碼合成與下載功能

在現代 Web 應用開發中,二維碼的應用越來越廣泛,從電子票務到信息傳遞,它都扮演著重要角色。本文將分享如何在 Vue 項目中,結合QRCode庫實現動態二維碼的生成、與背景圖合成以及圖片下載功能,打造一個完整且實用的二維…

HAL詳解

一、直通式HAL 這里使用一個案例來介紹直通式HAL,選擇MTK的NFC HIDL 1.0為例,因為比較簡單,代碼量也比較小,其源碼路徑:vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定義 1)NFC HAL數據類型 通常定…

Vue自定義指令-防抖節流

Vue2版本 // 防抖 // <el-button v-debounce"[reset,click,300]" ></el-button> // <el-button v-debounce"[reset]" ></el-button> Vue.directive(debounce, { inserted: function (el, binding) { let [fn, event "cl…

AI知識補全(十六):A2A - 谷歌開源的agent通信協議是什么?

名人說&#xff1a;一笑出門去&#xff0c;千里落花風。——辛棄疾《水調歌頭我飲不須勸》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知識補全&#xff08;十五&#xff09;&#xff1a;AI可解…

【機器人創新創業應需明確產品定位與方向指南】

機器人領域的創新創業, 需要對公司和產品的定位和生態進行深入思考, 明確其定位與發展目標, 明確產品在是為G、為B還是為C進行服務。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202504/469401.htm 超前的、探索性的創新技術一般是面向G端, 而不是面向B端或者C…

網安加·百家講壇 | 劉志誠:AI安全風險與未來展望

作者簡介&#xff1a;劉志誠&#xff0c;樂信集團信息安全中心總監、OWASP廣東區域負責人、網安加社區特聘專家。專注于企業數字化過程中網絡空間安全風險治理&#xff0c;對大數據、人工智能、區塊鏈等新技術在金融風險治理領域的應用&#xff0c;以及新技術帶來的技術風險治理…

TOA與AOA聯合定位的高精度算法,三維、4個基站的情況,MATLAB例程,附完整代碼

本代碼實現了三維空間內目標的高精度定位,結合到達角(AOA) 和到達時間(TOA) 兩種測量方法,通過4個基站的協同觀測,利用最小二乘法解算目標位置。代碼支持噪聲模擬、誤差分析及三維可視化,適用于無人機導航、室內定位等場景。訂閱專欄后可獲得完整代碼 文章目錄 運行結果…

2025MathorcupC題 音頻文件的高質量讀寫與去噪優化 保姆級教程講解|模型講解

2025Mathorcup數學建模挑戰賽&#xff08;媽媽杯&#xff09;C題保姆級分析完整思路代碼數據教學 C題&#xff1a;音頻文件的高質量讀寫與去噪優化 隨著數字媒體技術的迅速發展&#xff0c;音頻處理成為信息時代的關鍵技術之一。在日常生活中&#xff0c;從錄音設備捕捉的原始…

Deno Dep:顛覆傳統的模塊化未來

一、重新定義依賴管理&#xff1a;Deno Dep 的革新哲學 Deno Dep&#xff08;原Deno包管理器&#xff09;徹底重構了JavaScript/TypeScript的依賴管理方式&#xff0c;其核心突破體現在&#xff1a; 1. 瀏覽器優先的模塊化&#xff08;URL-Centric Modules&#xff09; // 直…

歐拉系統升級openssh 9.7p1

開發的系統準備上線&#xff0c;甲方對歐拉服務器進行了掃描&#xff0c;發現openssh版本為8.2p1&#xff0c;存在漏洞&#xff0c;因此需要升級openssh至9.7p1。歐拉系統版本為20.03 SP3。 1、下載openssh 9.7p1 https://www.openssh.com/releasenotes.html&#xff0c; 將下…