第七篇:自注意力(二)—— 縮放、Softmax 與信息融合
第七篇自注意力二—— 縮放、Softmax 與信息融合系列文章第一篇預(yù)訓(xùn)練模型——站在巨人的肩膀上第二篇分詞——文字如何變成數(shù)字第三篇向量與矩陣——理解一切的基石第四篇Embedding 層——從 ID 到向量的第一步第五篇位置編碼——給 Transformer 裝上順序感第六篇自注意力一—— Q、K、V 的由來 本文目錄開篇一、為什么需要縮放二、Softmax把分?jǐn)?shù)變成概率三、加權(quán)求和融合信息完整的注意力公式代碼實(shí)現(xiàn)完整的單頭自注意力關(guān)鍵結(jié)果上下文感知參考資源本篇小結(jié)參考答案開篇前六篇我們完成了從文本到注意力分?jǐn)?shù)的全部準(zhǔn)備文本 → 分詞 → Embedding → 位置編碼 → Q、K、V → Q × K? 注意力分?jǐn)?shù) 我喜歡人工智能 → [101, 2769, 4263, ...] → [0.021, -0.015, ...] → 位置向量 → × W_Q/W_K/W_V → Q, K, V → Q × K? [9, 9] 分?jǐn)?shù)矩陣 ← 上一篇到這里但我們拿到的原始分?jǐn)?shù)有兩個(gè)問題數(shù)值范圍不穩(wěn)定點(diǎn)積結(jié)果隨向量維度增大而發(fā)散不是概率無法直接作為權(quán)重來加權(quán)求和這篇我們將完成自注意力的后半程縮放 → Softmax → 加權(quán)求和。三個(gè)步驟一步比一步精妙。到這篇文章結(jié)束你將完整理解自注意力機(jī)制的每一個(gè)數(shù)學(xué)細(xì)節(jié)并能在代碼中實(shí)現(xiàn)它。一、為什么需要縮放問題點(diǎn)積隨維度變大而發(fā)散先看一個(gè)簡單例子2 維向量 q [0.5, 0.5], k [0.5, 0.5] q·k 0.25 0.25 0.5 4 維向量 q [0.5, 0.5, 0.5, 0.5], k [0.5, 0.5, 0.5, 0.5] q·k 0.25×4 1.0 64 維向量BERT 每個(gè)注意力頭的維度 q [0.5, 0.5, ..., 0.5], k [0.5, 0.5, ..., 0.5] q·k 0.25×64 16.0維度越大點(diǎn)積越大。快速回顧方差和標(biāo)準(zhǔn)差方差衡量一組數(shù)據(jù)有多分散。算法每個(gè)數(shù)減去平均值平方再求平均。數(shù)據(jù)[1, 2, 3, 4, 5]平均值 3 方差 ((1-3)2 (2-3)2 (3-3)2 (4-3)2 (5-3)2) / 5 (4 1 0 1 4) / 5 2 標(biāo)準(zhǔn)差 √方差 √2 ≈ 1.41方差大→ 數(shù)據(jù)很散比如 [1, 100]方差很大方差小→ 數(shù)據(jù)很集中比如 [49, 50, 51]方差很小標(biāo)準(zhǔn)差→ 方差的平方根和原始數(shù)據(jù)同單位更直觀雖然實(shí)際向量不是全 0.5但統(tǒng)計(jì)上如果 q 和 k 是獨(dú)立同分布隨機(jī)變量均值為 0方差為 1則點(diǎn)積的均值為 0方差為 d_kd_k 就是向量的維度BERT 每個(gè)注意力頭是 64。維度 d_k 越大分?jǐn)?shù)的分布越散。這就是所謂的方差膨脹問題——注意力分?jǐn)?shù)的方差正比于向量維度 d_k。為什么分?jǐn)?shù)太散是問題——梯度消失來比較有縮放和沒縮放的效果假設(shè)一組分?jǐn)?shù)[10, 11, 9]d_k64 時(shí)可能的量級 Softmax (無縮放) e1? ≈ 22026, e11 ≈ 59874, e? ≈ 8103 總和 90003 P [0.245, 0.665, 0.090] ← 基本正常 假設(shè)分?jǐn)?shù)[40, 44, 36]d_k1024 時(shí)可能的量級 Softmax (無縮放) e?? ≈ 2.35e17, e?? ≈ 1.29e19, e3? ≈ 4.31e15 總和 1.31e19 P [0.018, 0.982, 0.0003] ← 最大值幾乎占據(jù)全部概率當(dāng) softmax 輸出極度接近 one-hot 時(shí)最大值位置以外的梯度 ≈ 0被壓制的 token 對應(yīng)的梯度在反向傳播中幾乎為零模型學(xué)不動(dòng)了這個(gè)問題的數(shù)學(xué)根源是指數(shù)函數(shù) exp(x) 對大的輸入非常敏感——exp(44) / exp(36) ≈ e? ≈ 2980小的差距被指數(shù)函數(shù)急劇放大。解法除以 √d_kBERT base hidden_size 768 num_heads 12 d_k hidden_size ÷ num_heads 768 ÷ 12 64 √d_k √64 8 縮放公式scaled_score raw_score ÷ √d_k除以 √d_k 后分?jǐn)?shù)的方差穩(wěn)定在 1 左右softmax 的梯度始終處于甜區(qū)??s放要解決什么問題不縮放時(shí)分?jǐn)?shù)會(huì)很大 q·k 64個(gè)數(shù)相加每個(gè)約±1 → 總和可能達(dá)到 ±20 甚至更大 大分?jǐn)?shù)對 softmax 的影響 輸入 [20, -10, 5] softmax → [0.9999, 0.0000, 0.0001] ← 極端分布接近 one-hot 問題這種極端分布下梯度幾乎為 0 假設(shè)正確答案是第1個(gè) 梯度 [0.9999-1, 0.0000-0, 0.0001-0] ≈ [-0.0001, 0, 0] → 模型幾乎學(xué)不到東西縮放后的效果除以 √64 8 后分?jǐn)?shù)變小了 原分?jǐn)?shù) [20, -10, 5] → 縮放后 [2.5, -1.25, 0.625] 縮放后 softmax 的輸出 [0.76, 0.02, 0.22] ← 有區(qū)分度但不極端 梯度正常了 梯度 [0.76-1, 0.02-0, 0.22-0] [-0.24, 0.02, 0.22] → 模型能正常學(xué)習(xí)總結(jié)縮放讓 softmax 的輸入保持在合理范圍避免輸出極端化從而保證梯度能正常傳播。二、Softmax把分?jǐn)?shù)變成概率Softmax 公式與直覺exp(x?) softmax(x?) ──────────────── Σ? exp(x?)兩個(gè)關(guān)鍵操作操作作用直觀理解exp指數(shù)函數(shù)放大分?jǐn)?shù)差距好的更好、差的更差歸一化除以總和保證權(quán)重之和為 1形成競爭性概率分布為什么不用簡單歸一化除以最大值簡單歸一化允許負(fù)值且不是概率分布。Softmax 保證所有輸出為正且和為 1——這是概率的基本要求。完整演算以喜為例以喜這行為例展示完整的縮放 Softmax 過程第1步原始分?jǐn)?shù)來自 Q×K? [15.3, 22.7, 18.2, 2.1, 1.8, 3.2, 2.9, 5.6, 4.1] 對應(yīng) 我 喜 歡 人 工 智 能 CLS SEP 第2步縮放除以 √d_k 8 [1.9125, 2.8375, 2.275, 0.2625, 0.225, 0.4, 0.3625, 0.7, 0.5125] 第3步對每個(gè)數(shù)求 exp e^1.91256.77, e^2.837517.07, e^2.2759.73, e^0.26251.30, e^0.2251.25, e^0.41.49, e^0.36251.44, e^0.72.01, e^0.51251.67 第4步分母 所有 exp 之和 42.73 第5步每個(gè) exp ÷ 分母得到概率權(quán)重 6.77/42.730.16 ← 我16% 的注意力 17.07/42.730.40 ← 喜40%自己最高 9.73/42.730.23 ← 歡23%組成喜歡 1.30/42.730.03 1.25/42.730.03 1.49/42.730.03 1.44/42.730.03 2.01/42.730.05 1.67/42.730.04 ──── 合計(jì) 1.00 ?Softmax 效果深度分析縮放前分?jǐn)?shù)15.3 22.7 18.2 2.1 1.8 3.2 2.9 5.6 4.1 縮放后分?jǐn)?shù)1.91 2.84 2.28 0.26 0.22 0.40 0.36 0.70 0.51 Softmax概率0.16 0.40 0.23 0.03 0.03 0.03 0.03 0.05 0.04 效果對比 - 最高分(22.7) 在 softmax 后占比 40% ← 強(qiáng)者恒強(qiáng) - 次高分(18.2) 在 softmax 后占比 23% ← 第二強(qiáng) - 低分(1.8) 在 softmax 后占比 3% ← 弱者愈弱 - 分?jǐn)?shù)差別被非線性放大了縮放對 softmax 的影響實(shí)驗(yàn)importnumpyasnpdefsoftmax(x):e_xnp.exp(x-np.max(x))# 數(shù)值穩(wěn)定版returne_x/e_x.sum()scoresnp.array([15.3,22.7,18.2,2.1,1.8])# 不縮放print(不縮放:,softmax(scores))# [0.001, 0.997, 0.002, ≈0, ≈0]# 縮放÷8print(縮放:,softmax(scores/8))# [0.187, 0.473, 0.270, 0.036, 0.035]不縮放的 softmax 幾乎退化為 argmaxhard attention梯度消失??s放后的 softmax 保留了更豐富的權(quán)重分布soft attention梯度良好。三、加權(quán)求和融合信息計(jì)算過程有了注意力權(quán)重概率最后一步就是用這些權(quán)重去加權(quán)求和所有字的 Value 向量喜的新向量 0.16 × V(我) 0.40 × V(喜) 0.23 × V(歡) 0.03 × V(人) 0.03 × V(工) 0.03 × V(智) 0.03 × V(能) 0.05 × V(CLS) 0.04 × V(SEP)展開前幾步只展示前 3 維真實(shí)是 768 維V?(我) [ 0.31, -0.12, 0.45, ...] × 0.16 → [ 0.050, -0.019, 0.072, ...] V?(喜) [ 0.42, 0.15, -0.08, ...] × 0.40 → [ 0.168, 0.060, -0.032, ...] V?(歡) [ 0.05, 0.28, -0.18, ...] × 0.23 → [ 0.012, 0.064, -0.041, ...] ... 全部9個(gè)加起來 ... 結(jié)果喜的新向量 [0.215, 0.142, -0.018, ...] (768維)代碼實(shí)現(xiàn)# 假設(shè)已經(jīng)算好了 attention_weights [1, 9, 9] 和 V [1, 9, 768]attn_outputtorch.matmul(attention_weights,V)print(attn_output.shape)# torch.Size([1, 9, 768])# 第2個(gè)字喜的新向量print(attn_output[0,1,:5])融合后的效果加權(quán)求和前喜的原始向量 [0.862, 0.525, 0.043, ...] ← 只有喜自己的信息 加權(quán)求和后喜的新向量 [0.215, 0.142, -0.018, ...] ← 已融合了我和歡的信息這個(gè)新向量的關(guān)鍵屬性信息來源權(quán)重效果歡的信息23%喜歡整體含義被編碼 ?我的信息16%誰喜歡也被編碼了 ?“人、工、智、能”各 ~3%本字不太需要賓語信息 ?喜自身40%保留自身語義 ?一個(gè)類比集體智慧自注意力就像一個(gè)團(tuán)隊(duì)討論 每個(gè)成員字先寫下自己的想法V 再告訴別人我擅長什么K 同時(shí)提出我需要什么Q。 然后大家投票決定誰的發(fā)言對我最有價(jià)值 票數(shù) softmax(Q×K/√d) 最后每個(gè)人綜合所有人的意見更新自己的認(rèn)識(shí) 新想法 加權(quán)求和(所有人的意見) 這個(gè)過程在每一層重復(fù)一次。完整的注意力公式三步合在一起就是論文里的那個(gè)經(jīng)典公式Attention(Q, K, V) softmax(Q × K? / √d_k) × V 拆開看 ① Q × K? → 原始注意力分?jǐn)?shù) [9, 9] ② ÷ √d_k → 縮放方差穩(wěn)定到1 ③ softmax → 變成概率分布每行和為1 ④ × V → 加權(quán)求和輸出 [9, 768]代碼實(shí)現(xiàn)完整的單頭自注意力importtorchimporttorch.nnasnnimportmathclassSingleHeadAttention(nn.Module):完整的單頭自注意力def__init__(self,hidden_size768):super().__init__()self.W_Qnn.Linear(hidden_size,hidden_size)self.W_Knn.Linear(hidden_size,hidden_size)self.W_Vnn.Linear(hidden_size,hidden_size)self.d_khidden_size# 每個(gè)頭的維度defforward(self,x):Qself.W_Q(x)# [B, L, 768]Kself.W_K(x)# [B, L, 768]Vself.W_V(x)# [B, L, 768]# ① Q × K? → 注意力分?jǐn)?shù)scorestorch.matmul(Q,K.transpose(-2,-1))# [B, L, L]# ② 縮放scoresscores/math.sqrt(self.d_k)# ③ Softmax → 權(quán)重attention_weightstorch.softmax(scores,dim-1)# [B, L, L]# ④ 加權(quán)求和 Voutputtorch.matmul(attention_weights,V)# [B, L, 768]returnoutput,attention_weights# 模擬 我喜歡人工智能 (9個(gè)token)xtorch.randn(1,9,768)attnSingleHeadAttention()output,weightsattn(x)print(f輸出形狀:{output.shape})# [1, 9, 768]print(f權(quán)重形狀:{weights.shape})# [1, 9, 9]print(f權(quán)重每行之和:{weights[0,2].sum()})# ≈ 1.0輸出輸出形狀: torch.Size([1, 9, 768]) 權(quán)重形狀: torch.Size([1, 9, 9]) 權(quán)重每行之和: tensor(1.0000)關(guān)鍵結(jié)果上下文感知對比一下加權(quán)求和前后的變化喜 的原始向量Embedding 位置編碼后 [0.862, 0.525, 0.043, ...] ← 只有喜自己的信息 喜 經(jīng)過自注意力后的新向量 [0.215, 0.142, -0.018, ...] ← 融合了我(16%)和歡(23%)的信息這個(gè)新向量已經(jīng)不再是孤立的喜——它包含了我主語和歡搭配詞的語義信息。這就是上下文感知的含義同一個(gè)字在不同句子里經(jīng)過自注意力后會(huì)得到不同的向量。參考資源[1] Vaswani et al., “Attention Is All You Need”, 2017. NeurIPS 2017 — 縮放點(diǎn)積注意力的原始論文[2] Jay Alammar, “The Illustrated Transformer”, 2018. Blog — Self-Attention 計(jì)算流程的可視化講解[3] Stack Overflow, “Why do we scale by sqrt(d_k) in attention?”, 2020. Link — 關(guān)于縮放因子的討論本篇小結(jié)本篇完成了自注意力的后半程縮放 → Softmax → 加權(quán)求和。步驟做了什么為什么縮放÷√d_k把分?jǐn)?shù)除以 √648防止方差膨脹導(dǎo)致梯度消失Softmax把分?jǐn)?shù)變成概率和為1形成競爭性權(quán)重分布加權(quán)求和×V按權(quán)重融合所有字的信息輸出包含上下文的新向量完整公式Attention(Q, K, V) softmax(QK?/√d_k) × V 輸入 X → Q,K,V → Q×K? → ÷√d_k → softmax → ×V → 輸出 上一篇 本篇三步 上下文感知的向量下一篇我們深入解讀注意力矩陣的語言模式解釋為什么 Q、K、V 必須是三個(gè)獨(dú)立矩陣并用完整代碼實(shí)現(xiàn)自注意力親眼見證上下文感知如何誕生。思考題題1為什么 Softmax 前要除以 √d_k題2Softmax 的兩個(gè)關(guān)鍵操作分別是什么題3加權(quán)求和后喜的新向量里包含了誰的信息答案見文末 → 參考答案參考答案題1為什么 Softmax 前要除以 √d_k因?yàn)辄c(diǎn)積的方差正比于維度 d_k。不縮放的話分?jǐn)?shù)范圍隨維度增大而膨脹Softmax 輸出會(huì)退化為接近 one-hot 的分布導(dǎo)致梯度消失模型無法學(xué)習(xí)。題2Softmax 的兩個(gè)關(guān)鍵操作分別是什么exp指數(shù)函數(shù)放大分?jǐn)?shù)差距讓好的更好、差的更差歸一化除以總和保證所有權(quán)重為正且和為 1形成概率分布。題3加權(quán)求和后喜的新向量里包含了誰的信息主要包含我16%和歡23%的信息——因?yàn)橄矚g是一個(gè)詞我是主語。人、工、智、能各只占約3%因?yàn)楹拖舱Z義關(guān)系較遠(yuǎn)。

相關(guān)新聞

聯(lián)輝科 LTK52206 6.0-18.5V/2x25W D類音頻功放 EQA-16 技術(shù)解析

聯(lián)輝科 LTK52206 6.0-18.5V/2x25W D類音頻功放 EQA-16 技術(shù)解析

在各類藍(lán)牙音箱、智能音箱、電視機(jī)、監(jiān)視器以及家庭娛樂和專業(yè)音頻設(shè)備中,對音頻功率放大器的要求日益提高,不僅需要足夠大的輸出功率和優(yōu)異的音質(zhì),還要具備低EMI、低底噪以及完善的保護(hù)功能,同時(shí)封裝尺寸需盡可能緊湊以適應(yīng)便攜設(shè)…

2026/8/1 1:39:37 閱讀更多
C++實(shí)現(xiàn)三國殺核心邏輯:事件驅(qū)動(dòng)架構(gòu)與面向?qū)ο笤O(shè)計(jì)實(shí)踐

C++實(shí)現(xiàn)三國殺核心邏輯:事件驅(qū)動(dòng)架構(gòu)與面向?qū)ο笤O(shè)計(jì)實(shí)踐

1. 項(xiàng)目概述:為什么選擇C重寫三國殺?作為一個(gè)玩了十幾年桌游、也寫了十幾年代碼的老程序員,我一直對《三國殺》這款游戲情有獨(dú)鐘。它的魅力在于,將武將技能、卡牌效果和玩家決策精巧地編織在一起,形成了一個(gè)動(dòng)態(tài)、復(fù)雜…

2026/8/1 1:29:36 閱讀更多
若依框架跨域問題解決方案與實(shí)戰(zhàn)配置

若依框架跨域問題解決方案與實(shí)戰(zhàn)配置

1. 若依框架跨域問題全景解析作為國內(nèi)主流的企業(yè)級快速開發(fā)框架,若依(Ruoyi)在實(shí)際部署中經(jīng)常面臨跨域訪問的挑戰(zhàn)。最近在技術(shù)社區(qū)看到不少開發(fā)者反饋:"前后端分離模式下,明明按照文檔配置了CORS,為什…

2026/8/1 1:29:36 閱讀更多
MWD隨鉆測壓系統(tǒng)中高溫壓力傳感器的核心技術(shù)需求與工程實(shí)踐深度分析

MWD隨鉆測壓系統(tǒng)中高溫壓力傳感器的核心技術(shù)需求與工程實(shí)踐深度分析

MWD(Measurement While Drilling)和LWD(Logging While Drilling)技術(shù)是現(xiàn)代鉆井工程中實(shí)現(xiàn)井下參數(shù)實(shí)時(shí)監(jiān)測的核心手段。在隨鉆測量過程中,壓力傳感器需要在鉆柱內(nèi)部或底部的極端環(huán)境中連續(xù)工作,實(shí)時(shí)采集井…

2026/8/1 17:51:48 閱讀更多
C++11 std::thread:從線程創(chuàng)建到同步原語的完整指南

C++11 std::thread:從線程創(chuàng)建到同步原語的完整指南

1. 從單核到多核:為什么C11的std::thread是游戲規(guī)則的改變者我記得十幾年前剛接觸C多線程編程那會(huì)兒,用的還是平臺(tái)相關(guān)的API,比如Windows上的CreateThread或者Linux下的pthread_create。那時(shí)候?qū)懣缙脚_(tái)的多線程代碼,簡直是一場噩夢…

2026/8/1 17:51:48 閱讀更多
NFC供電電子紙屏開發(fā)全解析:從原理到實(shí)踐

NFC供電電子紙屏開發(fā)全解析:從原理到實(shí)踐

1. 項(xiàng)目概述:當(dāng)電子紙遇上NFC,一個(gè)創(chuàng)意硬件的誕生最近在折騰一個(gè)挺有意思的小玩意兒:一塊7.5英寸、支持NFC供電和刷新的高清電子墨水屏。這聽起來可能有點(diǎn)“縫合怪”的感覺,但當(dāng)你把它拿在手里,看著它僅靠手機(jī)“碰一碰…

2026/8/1 17:51:48 閱讀更多
從“救火隊(duì)員”到“運(yùn)籌帷幄”,我只做對了一件事

從“救火隊(duì)員”到“運(yùn)籌帷幄”,我只做對了一件事

引子:一份來自董事會(huì)的“靈魂拷問” “小王,上個(gè)季度系統(tǒng)宕機(jī)了三次,總時(shí)長超過4小時(shí),造成的直接經(jīng)濟(jì)損失你算過嗎?我們的IT團(tuán)隊(duì),到底有沒有能力保障核心業(yè)務(wù)?” 這是三個(gè)月前,我們公…

2026/8/1 17:41:48 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/1 0:09:33 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/1 0:09:33 閱讀更多