深度學習中LayerNorm與RMSNorm對比

LayerNorm不同于BatchNorm,其與batch大小無關,均值和方差每個樣本的特征維度 C 內計算,
適用于 變長輸入(如 NLP 任務中的 Transformer)
詳細的BatchNorm在之前的一篇文章進行了詳細的介紹:深度學習中Batch Normalization(BN)原理、作用淺析-CSDN博客
這里主要介紹適合于Transformer架構的兩個歸一化操作RMSNorm 和 LayerNorm

RMSNorm 和 LayerNorm 的本質區別

RMSNorm(Root Mean Square Normalization)和 LayerNorm(Layer Normalization)都是 歸一化方法,但它們的本質區別在于 是否去均值(Mean-Centering) 以及 歸一化的方式

LayerNorm公式
在這里插入圖片描述

  • μ:均值,計算的是特征 xd 維度上的平均值。
  • σ2:方差,用于衡量數值分布的變化范圍。
  • γ,β:可學習的縮放和偏移參數。
  • LayerNorm 不僅僅縮放數據,還會讓其均值歸一化到 0,保證分布居中

RMSNorm公式
在這里插入圖片描述

  • RMSNorm 直接用 RMS(x) 歸一化,而不去均值
  • RMSNorm 只調整 L2 范數的大小,不影響數據的中心位置

代碼實現

class LayerNorm(nn.Module):def __init__(self, dim, eps=1e-5):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))self.bias = nn.Parameter(torch.zeros(dim))def forward(self, x):mean = x.mean(dim=-1, keepdim=True)std = x.var(dim=-1, keepdim=True, unbiased=False).sqrt()return self.weight * (x - mean) / (std + self.eps) + self.biasclass RMSNorm(nn.Module):def __init__(self, dim, eps=1e-5):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))def forward(self, x):rms = torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps)return self.weight * (x / rms)

RMSNorm 的優缺點

LayerNorm 的優點

  1. 更穩定的梯度更新
    • 由于均值歸 0,梯度更新不會受到偏移影響。
    • 適用于 Transformer、BERT、GPT。
  2. 適用于不同任務
    • 既可以用于 NLP(Transformer),也可以用于 CNN。
    • 適用于變長輸入(如 RNN、BERT)。
  3. 訓練和推理一致
    • LayerNorm 不依賴 batch_size,在訓練和推理時表現一致。

LayerNorm 的缺點

  1. 計算量大
    • 需要 計算均值和方差,相比 RMSNorm 額外增加一次均值計算,計算量更高。
  2. 計算開銷大,不適合大模型
    • 大規模 Transformer(如 LLaMA) 中,LayerNorm 計算量太大,影響訓練速度。
  3. 對 batch_size 影響較大
    • 小 batch_size 時,LayerNorm 可能表現不穩定。

RMSNorm 的優缺點

RMSNorm 的優點

  1. 計算更快
    • 僅計算 L2 歸一化,比 LayerNorm 計算量少 約 30%
  2. 適用于大模型(如 LLaMA, GPT-4)
    • 大模型訓練中,RMSNorm 比 LayerNorm 更高效

RMSNorm 的缺點

  1. 不去均值,可能影響訓練穩定性
    • 在某些任務中,均值歸 0 能穩定訓練,而 RMSNorm 不能。
  2. 不適用于 CNN
    • CNN 依賴均值信息,RMSNorm 不計算均值,可能導致訓練不穩定。

總結

RMSNorm通過簡化歸一化過程,降低計算復雜度,提供了一種有效的歸一化方法。它在保持模型性能的同時,提高了計算效率,是LayerNorm的有力替代方案。

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

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

相關文章

使用WireShark解密https流量

概述 https協議是在http協議的基礎上,使用TLS協議對http數據進行了加密,使得網絡通信更加安全。一般情況下,使用WireShark抓取的https流量,數據都是加密的,無法直接查看。但是可以通過以下兩種方法,解密抓…

數字化轉型 - 數據驅動

數字化轉型 一、 數據驅動1.1 監控1.2 分析1.3 挖掘1.4 賦能 二、數據驅動案例2.1 能源工業互聯網:綠色節能的數字化路徑2.2 光伏產業的數字化升級2.3 數據中心的綠色轉型2.4云遷移的質效優化2.5 企業數字化運營的實踐2.6數字化轉型的最佳實踐 一、 數據驅動 從數…

解決 Docker 鏡像拉取超時問題:配置國內鏡像源

在使用 Docker 的過程中,經常會遇到鏡像拉取超時的問題,尤其是在國內網絡環境下。這不僅會浪費大量的時間,還可能導致一些項目無法順利進行。今天,我將分享一個簡單而有效的解決方法:配置國內鏡像源。 環境 操作系統 c…

Linux命令基礎,創建,輸入,輸出,查看,查詢

什么是命令、命令行 命令行:即:Linux終端(Terminal),是一種命令提示符頁面。以純“字符”的形式操作操作系統,可以使用各種字符化命令對操作系統發出操作指令。 命令:即Linux程序。一個命令就…

【GNU Radio】ZMQ模塊學習

【GNU Radio】ZMQ模塊學習 ZMQ 介紹前置知識Socket通信模型PUB/SUB(發布/訂閱)模型PUSH/PULL(推/拉)模型REQ/REP(請求/響應)模型 ZMQ 詳解基于通信模型分析基于數據格式分析Data BlocksMessage Blocks ZMQ …

【筆記】深度學習模型訓練的 GPU 內存優化之旅:綜述篇

開設此專題,目的一是梳理文獻,目的二是分享知識。因為筆者讀研期間的研究方向是單卡上的顯存優化,所以最初思考的專題名稱是“顯存突圍:深度學習模型訓練的 GPU 內存優化之旅”,英文縮寫是 “MLSys_GPU_Memory_Opt”。…

Vue 3 Diff 算法深度解析:與 Vue 2 雙端比對對比

文章目錄 1. 核心算法概述1.1 Vue 2 雙端比對算法1.2 Vue 3 快速 Diff 算法 2. 算法復雜度分析2.1 時間復雜度對比2.2 空間復雜度對比 3. 核心實現解析3.1 Vue 2 雙端比對代碼3.2 Vue 3 快速 Diff 代碼 4. 性能優化分析4.1 性能測試數據4.2 內存使用對比 5. 使用場景分析5.1 Vu…

神經網絡的基本知識

感知機 輸入:來自其他 n 個神經元傳遞過來的輸入信號 處理:輸入信號通過帶權重的連接進行傳遞, 神經元接受到總輸入值將與神經元的閾值進行比較 輸出:通過激活函數的處理以得到輸出 感知機由兩層神經元組成, 輸入層接受外界輸入信號傳遞給…

UE5與U3D引擎對比分析

Unreal Engine 5(UE5)和Unity 3D(U3D)是兩款主流的游戲引擎,適用于不同類型的項目開發。以下是它們的主要區別,分點整理: 1. 核心定位 UE5: 主打3A級高畫質項目(如主機/P…

C++相關基礎概念之入門講解(上)

1. 命名空間 C中的命名空間(namespace)是用來避免命名沖突問題的一種機制。通過將類、函數、變量等封裝在命名空間中,可以避免不同部分的代碼中出現相同名稱的沖突。在C中,可以使用namespace關鍵字來定義命名空間。 然后我們在調…

網絡協議棧

網絡協議棧的位置 用戶在應用層的各種請求最終會下達給操作系統,操作系統內除了進程管理、文件管理、內存管理、驅動管理之外,還有一個內嵌的軟件協議棧,協議棧將用戶的數據進行各種封包后,通過網卡將數據傳遞到網絡當中&#xf…

C#索引器基礎到實踐

1. 封裝和隱藏內部實現 數組是一個簡單的數據結構,它的內部實現是固定的(基于連續內存)。而索引器可以隱藏內部的實現細節,允許開發者使用更復雜的數據結構來存儲數據,同時對外提供類似數組的訪問方式。 示例: 假設你有一個類,內部使用 Dictionary 或 List 來存儲數據…

C++之list類(超詳細)

在上一節中我們學習了STL中的vector這個容器,這節我們來學習一下另外一個常用的容器——list。 文章目錄 前言 一、list的介紹 二、list的使用及相關接口 1.list的使用 2.list的迭代器使用 3.list的相關接口 3.1 list capacity 3.2 list element access 3.3…

mysql、oracle、SQLserver之間的區別和優勢

MySQL、Oracle和SQL Server都是常見的關系型數據庫管理系統(RDBMS),它們在某些方面有一些區別和優勢。 MySQL: MySQL是一種開源的RDBMS,由Oracle公司開發和維護。它具有快速、穩定和易于使用的特點。MySQL適用于中小型…

Python依賴包遷移到斷網環境安裝

首先,我應該確認兩臺電腦的操作系統都是Windows,所以架構和版本應該兼容。Python版本必須一致,否則可能會有問題。比如,如果電腦B用的是Python 3.8.5,電腦A也得裝同樣的版本,否則有些包可能不兼容。所以第一…

75.HarmonyOS NEXT ImageItemView組件深度剖析:手勢交互與動畫實現(二)

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! HarmonyOS NEXT ImageItemView組件深度剖析:手勢交互與動畫實現(二) 一、手勢系統架構 .gesture(GestureGroup(GestureMode.Exclusiv…

Qt 控件概述 QWdiget

Qt為我們提供了很多控件,這些控件拿過來就可以使用 目錄 QWidget 屬性 WindowFrame的影響 QWidget Qt中所有的組件都是繼承自QWidget Qt Creator中的右側可以看到QWidget的各種屬性 其中各種屬性都可以在Qt文檔中找到說明 ? 屬性 enabled:描述該組…

適合企業內訓的AI工具實操培訓教程(37頁PPT)(文末有下載方式)

詳細資料請看本解讀文章的最后內容。 資料解讀:適合企業內訓的 AI 工具實操培訓教程 在當今數字化時代,人工智能(AI)技術迅速發展,深度融入到各個領域,AIGC(人工智能生成內容)更是成…

Axios 請求取消:從原理到實踐

Axios 請求取消:從原理到實踐 在現代前端開發中,網絡請求是不可或缺的一部分。Axios 是一個基于 Promise 的 HTTP 客戶端,廣泛應用于瀏覽器和 Node.js 環境中。然而,在某些場景下,我們可能需要取消正在進行的請求&…

Spring Boot對接twilio發送郵件信息

要在Spring Boot應用程序中對接Twilio發送郵件信息,您可以使用Twilio的SendGrid API。以下是一個簡單的步驟指南,幫助您完成這一過程: 1. 創建Twilio賬戶并獲取API密鑰 注冊一個Twilio賬戶(如果您還沒有的話)。在Twi…