大模型算法面試筆記——注意力Transformer流程/面試題篇

學習資料來源于字母站大學

1 Transformer架構

  • 基于編碼器-解碼器的架構來處理序列對。
  • 跟使用注意力的seq2seq不同,Transformer是基于純注意力。

2 注意力

2.1 自注意力機制

使用注意力:需要根據整個序列進行預測,對于同一input,不同的上下文輸出不同,序列長度也不同,無法用固定窗口。

Self-attention架構示意圖

首先要得到一個能表示輸入向量本身及其與序列其他向量的關聯性( α \alpha α)的向量, α \alpha α即注意力分數。

請添加圖片描述
根據 α \alpha α可以得知,哪些向量和 a a a關聯性最高,就可以根據 α \alpha α抽取信息
請添加圖片描述
將所有的 a a a q q q拼起來成矩陣,就一次性計算得到了所有的 q q q,同理, k k k v v v也通過矩陣運算一次性得到。
請添加圖片描述
注意力分數的計算同樣將 q q q k k k的點乘過程拼接成矩陣,然后對每一列做softmax

請添加圖片描述
請添加圖片描述
總過程:
請添加圖片描述

2.2 多頭注意力

由于所謂的“相關性”不是一個固定的定義,可以有多種表現形式,所以在用 q q q尋找不同的 k k k時,需要不同的 q q q負責得到不同種類的相關性,同時,由于有多個 q q q,所以也有多個 k k k和多個 v v v,相同類別的 q q q k k k v v v一起計算
請添加圖片描述

3 Add&LayerNorm

Transformer在自注意力塊的輸出部分又加上了輸入,然后一起輸入Norm層。
Transformer的LayerNorm計算公式:
y = x ? E ( x ) V a r ( x ) + ? ? α + β y=\frac{x-E(x)}{\sqrt{Var(x)+\epsilon}}*\alpha+\beta y=Var(x)+? ?x?E(x)??α+β
其中 α \alpha α β \beta β是可學習參數,用來防止輸出數據落在后續的激活函數近似線性的范圍內,失去激活函數非線性特性。 ? \epsilon ?用來防止分母為0。
LayerNorm用來穩定神經網絡的訓練,將輸入歸一化到均值為0方差為1的分布中,避免訓練中產生梯度消失或梯度爆炸。LayerNorm是在最后一個特征維度做歸一化(一個單詞內部),可以保證穩定性。

4 解碼器——交叉注意力

對于Transformer架構解碼器中間部分,有來自Encoder的輸入,也有來自Decoder的輸入,這部分架構叫做交叉注意力。總的來說,交叉注意力的 q q q來自于Decoder, k k k v v v來自于Encoder,也就是用Decoder的 q q q來抽取Encoder信息作為下一步的輸入。
交叉注意力計算示意圖

面試題篇

1 Transformer/RNN/CNN對比

各個模型對于NLP任務需要抽取的特征的性能:

  • 上下文語義(方向、長度):Transformer > RNN > CNN
  • 序列特征:RNN > Transformer > CNN
  • 速度:CNN > Transformer > RNN

Transformer擅長抽取上下文語義特征的原因:RNN只能對句子進行單向的編碼,CNN只能對短句進行編碼,而transformer既可以同時編碼雙向的語義,又可以抽取長距離特征,在NLP特征抽取方面能力更強。

CNN其實是self-attention的特例。單向RNN未考慮右邊序列的input且順序執行,self-attention是并行的。

2 Transformer為什么將特征維度拆分成多個頭
  • 從不同角度捕捉信息,防止每個輸入對自身注意力分數過高,增強模型表達能力
  • 實現并行計算,提高計算效率
  • 緩解梯度消失:當維度 d d d很大時,點積結果的方差也會很大,做softmax后會變成近似one-hot編碼,導致梯度消失。
3 為什么使用乘性注意力而不用加性注意力

在GPU場景下,矩陣乘法的計算效率更高

4 A t t e n t i o n ( Q , K , V ) = s o f t m a x Q K T d k V \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\frac{QK^T}{\sqrt{d_k}}V Attention(Q,K,V)=softmaxdk? ?QKT?V為什么要除以 d k \sqrt{d_k} dk? ?

如果兩個矩陣都是服從正態分布的,矩陣相乘后由于元素是相乘再相加,那么結果就變成均值為0,方差為 d d d的分布了,方差如果很大,和問題1的原因相同,可能會產生很分散的數值,使得softmax后導致梯度消失,所以要除以標準差恢復到正態分布。
梯度消失舉例:對于 z = [ 1000 , 1 , ? 1000 ] z=[1000,1,-1000] z=[1000,1,?1000],計算softmax:
s o f t m a x ( z ) = [ d 1000 e 1000 + e 1 + e ? 1000 , e 1 e 1000 + e 1 + e ? 1000 , e ? 1000 e 1000 + e 1 + e ? 1000 ] ≈ [ 1 , 0 , 0 ] \mathrm{softmax}(z)=[\frac{d^{1000}}{e^{1000}+e^1+e^{-1000}},\frac{e^1}{e^{1000}+e^1+e^{-1000}},\frac{e^{-1000}}{e^{1000}+e^1+e^{-1000}}]\approx[1,0,0] softmax(z)=[e1000+e1+e?1000d1000?,e1000+e1+e?1000e1?,e1000+e1+e?1000e?1000?][1,0,0]
對softmax求梯度
s o f t m a x ( z i ) = e z i ∑ k = 1 C e z k , i ∈ { 1 , 2 , . . . , C } \mathrm{softmax}(z_i)=\frac{e^{z_i}}{\sum_{k=1}^{C}e^{z_k}},i\in \{1,2,...,C\} softmax(zi?)=k=1C?ezk?ezi??,i{1,2,...,C}
? s o f t m a x ( z i ) ? z j = { s o f t m a x ( z i ) , i f i = j ? s o f t m a x ( z i ) ? s o f t m a x ( z j ) , i f i ≠ j \frac{\partial \mathrm{softmax}(z_i)}{\partial z_j}=\begin{cases} \mathrm{softmax}(z_i),\mathrm{if}\ i=j \\-\mathrm{softmax}(z_i)·\mathrm{softmax}(z_j),\mathrm{if}\ i\neq j \end{cases} ?zj??softmax(zi?)?={softmax(zi?),if?i=j?softmax(zi?)?softmax(zj?),if?i=j?
帶入數值,對于 s o f t m a x ( z i ) ≈ 1 \mathrm{softmax}(z_i)\approx 1 softmax(zi?)1,梯度為0,對于其他位置 j j j s o f t m a x ( z i ) ≈ 0 \mathrm{softmax}(z_i)\approx 0 softmax(zi?)0,梯度同樣為0,導致梯度消失。

5 為什么源碼實現中mask被丟棄的token值置為-10000而不是置0

如果被丟棄的token值為0,做softmax時分子為1而不是趨近于0的值,也能得到概率值,無法滿足正常token的概率和為1。

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

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

相關文章

Rust 定義與實例化結構體

文章目錄 Rust 定義與實例化結構體5.1 結構體的定義與意義5.2 結構體實例化5.2.1 基本實例化5.2.2 可變性規則5.2.3 字段初始化簡寫5.2.4 結構體更新語法 5.3 特殊結構體類型5.3.1 元組結構體(Tuple Struct)5.3.2 類單元結構體(Unit-Like Str…

ELK日志分析系統(filebeat+logstash+elasticsearch+kibana)

一、ELK 平臺介紹 1、ELK 概述 日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。…

JS基礎4—jQuery

jQuery常用內容 jQuery 介紹jQuery 獲取方式基本選擇器 (最常用)層級選擇器 (基于元素間關系)過濾選擇器 (基于特定條件) jQuery事件綁定jQuery 方法調用jQuery遍歷jQuery 獲取與設置jQuery 添加與刪除jQuery CSS 類jQuery - AJAX 總結 jQuery 介紹 jQuery 是一個輕量級、快速…

時鐘周期是什么?

時鐘周期(Clock Cycle)是什么? 時鐘周期(Clock Cycle)是計算機系統中一個最基礎的時間單位,也稱為時鐘節拍或時鐘周期時間(Clock Period)。它由系統時鐘發生器產生的一個周期性脈沖…

如何用SEO優化長尾關鍵詞?

內容概要 在SEO優化領域,長尾關鍵詞扮演著至關重要的角色,它們能有效提升網站在搜索引擎中的可見度和流量轉化率。本文將全面解析如何通過系統方法優化長尾關鍵詞,涵蓋從基礎理論到實戰應用的完整流程。核心內容包括利用專業工具進行關鍵詞挖…

電子面單系統開發全解析

一、如果要做電子面單系統,怎么做? 開發電子面單系統是一項復雜且涉及多方面考量的工程,涵蓋需求分析、系統架構設計、技術選型、接口對接、安全性保障、第三方服務選擇以及部署與維護等關鍵環節。 電子面單系統開發步驟 需求分析&#xf…

UE5 - 制作《塞爾達傳說》中林克的技能 - 18 - 磁力抓取器

讓我們繼續《塞爾達傳說》中林克技能的制作!!! UE版本:5.6.0 VS版本:2022 本章節的核心目標:磁力抓取器 先讓我們看一下完成后的效果: 18_磁力抓取器 大綱如下: 引言功能架構與核心邏輯物理材質與場景配置代碼實現:從識別到操控操作說明1.引言 在《塞爾達傳說》中,林…

基于ApachePOI實現百度POI分類快速導入PostgreSQL數據庫實戰

目錄 前言 一、百度POI分類簡介 1、數據表格 2、分類結構 二、從Excel導入到PG數據庫 1、Excel解析流程 2、數據入庫 3、入庫成果及檢索 三、總結 前言 在上一篇博文中,我們對高德POI分類進行了深入剖析 并對Excel 中 POI 分類數據的存儲結構特點進行了詳細介…

學習經驗分享【41】YOLOv13:基于超圖增強自適應視覺感知的實時目標檢測

YOLO算法更新速度很快,已經出到V13版本,后續大家有想發論文或者搞項目可更新自己的baseline了。 摘要:YOLO 系列模型憑借其卓越的精度和計算效率,在實時目標檢測領域占據主導地位。然而,YOLOv11 及早期版本的卷積架構&…

Handling outliers in non-blind image deconvolution論文閱讀

Handling outliers in non-blind image deconvolution 1. 研究目標與實際意義2. 創新方法:基于EM的異常值建模2.1 新模糊模型2.1.1 目標函數2.2 EM框架:迭代優化二元掩碼2.2.1 E步:計算后驗權重 E [ m x ] E[m_x] E[mx?]2.2.2 M步:加權正則化反卷積2.3 優化加速技術2.3.1…

Redis 功能擴展:Lua 腳本對 Redis 的擴展

Redis 是一個高性能的內存數據庫,支持多種數據結構,如字符串、哈希、列表、集合和有序集合。為了增強其功能,Redis 引入了 Lua 腳本支持,使開發者可以編寫自定義的腳本,確保操作的原子性并提高復雜操作的性能。本文將詳…

七天學完十大機器學習經典算法-06.支持向量機(SVM):分類邊界的藝術——深入淺出指南

接上一篇《七天學完十大機器學習經典算法-05.從投票到分類:K近鄰(KNN)算法完全指南》 想象你要在操場上為兩個班級劃活動區域,如何畫出一條最公平的分界線?這條線不僅要分開兩班學生,還要讓兩個班都離分界線盡可能遠——這就是支持…

python如何安裝PyQt6-stubs依賴包

PyQt6-stubs 是為 PyQt6 提供類型提示(Type Hints)和 IDE 智能補全支持的第三方補丁包,特別適用于 PyCharm、VS Code 等現代 IDE。它對開發者在編碼時幫助極大。 一、安裝方法 需要提前安裝好git,然后克隆PyQt6-stubs源碼&#xf…

創宇智腦 MCP 賦能 AiPy,IP 風險調查效率實現 10 倍飛躍,威脅分析一鍵生成

還記得上個月那個焦頭爛額的凌晨三點嗎?監控大屏突然瘋狂閃爍,500 多個 IP 地址同時出現異常訪問,密密麻麻的數據流在屏幕上跳動,像極了一張讓人窒息的大網。我和團隊成員瞪著布滿血絲的眼睛,手動排查每一個 IP&#x…

使用SRS+ffmpeg實現https推流flv

1修改SRS的live.conf配置如下: # Live streaming config for SRS. # see full.conf for detail config.listen 1935; max_connections 1000; srs_log_tank console; daemon off;http_api {enabled on;listen …

力扣網編程題:合并兩個有序數組(雙指針解法)

一. 簡介 上一篇文章對"合并兩個有序數組"題目,使用了暴力解法,算法時間復雜度比較高。文章如下: 力扣網編程題:合并兩個有序數組(直接解法)-CSDN博客 本文滿足進階要求,算法時間復…

數據結構之 【樹的簡介】(樹的(相關)概念、二叉樹的概念、部分性質、滿二叉樹、完全二叉樹)

目錄 1.樹的概念及結構 1.1樹的概念 1.2樹的相關概念 1.3樹的表示 1.4樹在實際中的應用 2.二叉樹概念及結構 2.1二叉樹的概念 2.2特殊的二叉樹 2.3二叉樹的性質 2.4應用題 1.樹的概念及結構 1.1樹的概念 樹是一種非線性的數據結構,由 n(n…

Redis-7.4.3-Windows-x64下載安裝使用

Redis軟件包下載地址鏈接:https://github.com/redis-windows/redis-windows/releases 檢查或者修改配置文件redis.conf: #如果允許外部其他主機訪問本機redis,設置成:bind 0.0.0.0 bind 127.0.0.1 protected-mode yes #設置端口…

Educational Codeforces Round 180 (Rated for Div. 2)

AB 略 C 對于axayaz>max(2*az,an),枚舉y z 二分x D 首先,長度為1的邊的已經有n-1條,那么構造的圖中只能存在一條長度為2的好邊。我們先構造出一個圖只存在n-1條好邊,我們發現對于一個點所有連接它的邊要不均指向它要不均背…

CAD文件處理控件Aspose.CAD教程:在 Python 中將 DGN 文件轉換為 PDF

概述 將DGN文件轉換為PDF對許多行業至關重要,包括工程和建筑行業。能夠輕松地以 PDF 格式共享設計,增強協作和可訪問性。通過使用Aspose.CAD for Python via .NET的強大功能,開發人員可以高效地自動化此過程。這款 CAD 轉換器 SDK 簡化了轉換…