面試篇 - Transformer前饋神經網絡(FFN)使用什么激活函數?

1. FFN結構分解

原始Transformer的FFN層
FFN(x) = max(0, xW? + b?)W? + b?  # 原始論文公式
  • 輸入:自注意力層的輸出?x(維度?d_model=512

  • 擴展層xW? + b?(擴展為?d_ff=2048

  • 激活函數ReLU(即?max(0, ?)

  • 收縮層(?)W? + b?(壓縮回?d_model=512

2. ReLU的核心特性

特性公式表現作用
非線性f(x) = max(0, x)使模型能夠學習復雜模式(否則多層線性變換等價于單層)
梯度消失緩解f'(x) = 1 if x>0 else 0正區間梯度恒為1,避免Sigmoid/Tanh的梯度指數衰減問題
計算高效只需比較和取最大值操作比Sigmoid(需指數運算)快3-6倍(實測在GPU上)

3. 為什么選擇ReLU?

  • 實驗驗證:原始Transformer論文(《Attention Is All You Need》)通過消融實驗確認ReLU優于Sigmoid/Tanh。

  • 深層網絡適配:Transformer通常堆疊6-12層,ReLU的梯度特性更適合深度訓練。

  • 稀疏激活:約50%神經元輸出為0,可能提升特征選擇性(但后續研究對此有爭議)。

4. GELU的改進與數學細節

GELU公式
GELU(x) = xΦ(x) ≈ 0.5x(1 + tanh[√(2/π)(x + 0.044715x3)])  # 近似計算
  • 與ReLU對比

    • 平滑性:GELU在?x=0?處可導(ReLU二階不可導)

    • 概率解釋Φ(x)?是高斯CDF,相當于對輸入進行"隨機門控"

BERT中的使用
  • 在BERT-base中,GELU使MNLI任務準確率提升約0.5%(相比ReLU)

  • 計算代價:GELU比ReLU慢約15%(因需計算tanh)

5. 關鍵代碼實現對比

PyTorch中的FFN層
import torch.nn as nnclass TransformerFFN(nn.Module):def __init__(self, d_model=512, d_ff=2048):super().__init__()self.linear1 = nn.Linear(d_model, d_ff)self.linear2 = nn.Linear(d_ff, d_model)self.activation = nn.ReLU()  # 或 nn.GELU()def forward(self, x):return self.linear2(self.activation(self.linear1(x)))
激活函數計算速度測試
import timeit
x = torch.randn(10000, 10000).cuda()# ReLU
timeit.timeit(lambda: nn.ReLU()(x), number=100)  # 約0.12秒# GELU 
timeit.timeit(lambda: nn.GELU()(x), number=100)  # 約0.18秒

6. 后續模型的發展

  • Switch Transformer:使用ReGLU(ReLU的GLU變體)提升稀疏性

  • GPT-3:保留ReLU,因模型足夠大能彌補激活函數缺陷

  • Vision Transformer:部分研究采用LeakyReLU處理負值信息

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

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

相關文章

基于Python Flask的深度學習電影評論情感分析可視化系統(2.0升級版,附源碼)

博主介紹:?IT徐師兄、7年大廠程序員經歷。全網粉絲15W、csdn博客專家、掘金/華為云//InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? 🍅文末獲取源碼聯系🍅 👇🏻 精彩專欄推薦訂閱👇&#x1f3…

前端vue2修改echarts字體為思源黑體-避免侵權-可以更換為任意字體統一管理

1.下載字體 npm install fontsource/noto-sans-sc 不知道為什么我從github上面下載的不好使,所以就用了npm的 2.引用字體 import fontsource/noto-sans-sc; 在入口文件-main.js中引用 3.設置echats模板樣式 import * as echarts from echarts; // 在import的后…

51c自動駕駛~合集37

我自己的原文哦~ https://blog.51cto.com/whaosoft/13878933 #DETR->DETR3D->Sparse4D 走向長時序稀疏3D目標檢測 一、DETR 圖1 DETR架構 DETR是第一篇將Transformer應用到目標檢測方向的算法。DETR是一個經典的Encoder-Decoder結構的算法,它的骨干網…

【MongoDB篇】MongoDB的集合操作!

目錄 引言第一節:集合的“誕生”——自動出現還是手動打造?🤔第二節:集合的“查閱”——看看這個數據庫里有哪些柜子?📂👀第三節:集合的“重命名”——給文件柜換個名字!…

Goland終端PowerShell命令失效

Goland終端Terminal的PowerShell不能使用,明明windows上升級了PowerShell 7設置了配置文件,但是只能在windows終端下使用,goland終端下直接失效報錯,安裝升級PowerShell請看Windows11終端升級PowerShell7 - HashFlag - 博客園 問…

簡單分析自動駕駛發展現狀與挑戰

一、技術進展與市場滲透 技術分級與滲透率 當前量產乘用車的自動駕駛等級以L2為主(滲透率約51%),L3級處于初步落地階段(滲透率約20%),而L4級仍處于測試和示范運營階段(滲透率約11%)2…

【C++類和數據抽象】消息處理示例(1):從設計模式到實戰應用

目錄 一、數據抽象概述 二、消息處理的核心概念 2.1 什么是消息處理? 2.2 消息處理的核心目標 三、基于設計模式的消息處理實現 3.1 觀察者模式(Observer Pattern) 3.2 命令模式(Command Pattern) 四、實戰場景…

【統計方法】交叉驗證:Resampling, nested 交叉驗證等策略 【含R語言】

Resampling (重采樣方法) 重采樣方法是從訓練數據中反復抽取樣本,并在每個(重新)樣本上重新調整模型,以獲得關于擬合模型的附加信息的技術。 兩種主要的重采樣方法 Cross-Validation (CV) 交叉驗證 : 用于估計測試誤…

常見的 CSS 知識點整理

1. 盒模型(Box Model)是什么?標準盒模型和 IE 盒模型的區別? 答案: CSS 盒模型將元素視為一個盒子,由內容(content)、內邊距(padding)、邊框(bor…

Educational Codeforces Round 178 div2(題解ABCDE)

A. Three Decks #1.由于最后三個數會相等&#xff0c;提前算出來和&#xff0c;%3判斷&#xff0c;再判前兩個數是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…

如何創建一個導入模板?全流程圖文解析

先去找到系統內可以上傳東西的按鈕 把你的模板上傳上去,找到對應的fileName 圖里的文字寫錯了,是復制粘貼"filePath"到URL才能下載

通信原理第七版與第六版區別附pdf

介紹 我用夸克網盤分享了「通信原理 第7版》樊昌信」&#xff0c;鏈接&#xff1a;https://pan.quark.cn/s/be7c5af4cdce 《通信原理&#xff08;第7版&#xff09;》是在第6版的基礎上&#xff0c;為了適應當前通信技術發展和教學需求&#xff0c;并吸取了數十所院校教師的反…

Mysql唯一性約束

唯一性約束&#xff08;Unique Constraint&#xff09;是數據庫設計中用于保證表中某一列或多列組合的值具有唯一性的一種規則。它可以防止在指定列中插入重復的數據&#xff0c;有助于維護數據的完整性和準確性。下面從幾個方面為你詳細解釋 作用 確保數據準確性&#xff1a…

測試基礎筆記第十六天

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、UI自動化介紹1.認識UI自動化測試2.實施UI自動化測試前置條件3.UI自動化測試執行時機4.UI自動化測試核心作用和劣勢 二、認識Web自動化測試工具-Selenium021.Sel…

PaddleX的安裝

參考&#xff1a;安裝PaddlePaddle - PaddleX 文檔 1、安裝PaddlePaddle 查看 docker 版本 docker --version 若您通過 Docker 安裝&#xff0c;請參考下述命令&#xff0c;使用飛槳框架官方 Docker 鏡像&#xff0c;創建一個名為 paddlex 的容器&#xff0c;并將當前工作目…

長效住宅IP是什么?如何獲取長效住宅IP?

在當今的互聯網世界里&#xff0c;IP地址作為連接用戶與網站之間的橋梁&#xff0c;其重要性不言而喻。對于跨境電商、社交媒體運營以及數據采集等領域的專業人士而言&#xff0c;普通的IP地址已無法滿足日益復雜的需求。他們更需要一種穩定、安全且持久的長效住宅IP來完成各類…

02 業務流程架構

業務流程架構提供了自上而下的組織鳥瞰圖&#xff0c;是業務流程的全景圖。根據所采用的方法不同&#xff0c;有時被稱為流程全景圖或高層級流程圖&#xff0c;提供了業務運營中所有業務流程的整體視圖。 這樣有助于理解企業內部各個業務流程之間的相互關系以及它們如何共同工…

jenkins slave節點打包報錯Failed to create a temp file on

jenkins slave節點打包報錯 一、報錯信息 FATAL: Unable to produce a script file Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to slave-83at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)at hudson.remoting.UserRequest$…

什么是 Swagger 以及如何在 Spring Boot 中實現 Swagger:配置與實踐指南

在現代 RESTful API 開發中&#xff0c;Swagger 是一種廣泛使用的工具&#xff0c;用于生成、描述和可視化 API 文檔。它極大地簡化了 API 的開發、測試和維護過程。結合 Spring Boot&#xff0c;Swagger 可以快速集成到項目中&#xff0c;生成交互式 API 文檔&#xff0c;方便…

Xilinx FPGA支持的FLASH型號匯總

以博主這些年的FPGA開發使用經驗來看&#xff0c;FPGA開發的主流還是以Xilinx FPGA為主&#xff0c;貿易戰關稅戰打了這么多年&#xff0c;我們做研發的也不可避免的要涉及一些國產替代的工作&#xff1b;這里把Xilinx FPGA官方支持的各類&#xff08;國產和非國產&#xff09;…