手搓多模態-04 歸一化介紹

機器學習歸一化一個非常重要工具幫助我們加速訓練速度我們前面SiglipVisionTransformer 也有用到歸一化如下代碼所示

class SiglipVisionTransformer(nn.Module): ##視覺模型的第二層,將模型的調用分為了圖像嵌入模型和transformer編碼器模型的調用def __init__(self, config:SiglipVisionConfig):super().__init__()self.config = configself.embed_dim = config.hidden_sizeself.embeddings = SiglipVisionEmbeddings(config) ## 負責將圖像嵌入成向量self.encoder = SiglipEncoder(config) ## 負責將向量編碼成注意力相關的向量self.post_layer_norm = nn.LayerNorm(embed_dim, eps=config.layer_norm_eps) ## 層歸一化def forward(self, pixel_values:torch.Tensor) -> torch.Tensor:"""
		pixel_values: [Batch_size,Channels,Height,Width]"""## [ Batch_size,Channels,Height,Width] -> [Batch_size,Num_Patches,Embedding_size] 
		hidden_states = self.embeddings(pixel_values) ## 將圖像嵌入成向量# [Batch_size,Num_Patches,Embedding_size] -> [Batch_size,Num_Patches,Embedding_size]
		last_hidden_state = self.encoder(hidden_states) ## 將向量編碼成注意力相關的向量# [Batch_size,Num_Patches,Embedding_size] -> [Batch_size,Num_Patches,Embedding_size]
		last_hidden_state = self.post_layer_norm(last_hidden_state)return last_hidden_state

這里post_layer_norm 就是歸一化所以本文一起介紹歸一化

歸一化解決問題

歸一化主要解決神經網絡訓練過程會出現協變量偏移 問題

協變量偏移(Covariate Shift)是指由于輸入樣本分布不均勻導致神經網絡第一輸入劇烈變化第一神經網絡輸入的劇烈變化又會導致神經網絡第一輸出產生劇烈變化從而影響傳遞神經網絡之后每一導致每一輪迭代神經網絡輸出輸出劇烈變化從而導致梯度非常不穩定參數找不到一個穩定優化方向從而導致訓練緩慢

Batch Normalization

假設有一個 mini-batch 的輸入 ,也就是:

  • :batch size
  • :通道數(對全連接層來說是特征維度)
  • :空間維度(在卷積層中)

其實本質上Batch Normalization 希望輸入特征變化不再那么劇烈希望樣本所有特征基于當前批次做一次歸一化這樣當前批次特征就不會劇烈變化

值得注意圖像輸入Batch Normalization普通特征Batch Normalization計算差別假定圖像輸入 [ N, C, H, W ]那么計算公式所示torch通道維度進行歸一化每一個通道像素值通過該通道所有圖片像素得到平均值歸一化這是因為由于圖像處理卷積神經網絡里面同一個通道共享同一個卷積核整個通道所有像素看成一個特征

如果普通特征輸入形如 N, D 】,NBatch_Size, D特征維度每一個特征通過計算所有N對應特征平均方差歸一化

來說如下圖所示

問題所在

主要問題在于依賴 mini-batch:批量太小時效果差

  • BatchNorm 的均值和方差是 在 batch 維度上估算 的。
  • 如果 batch size 很小(比如在線學習、NLP中的RNN),統計結果不穩定,歸一化效果會變差。
  • 對于 batch size=1 時,根本無法統計 batch 內部分布。

因為BN 嘗試一個批次代表整體樣本分布但是只有批次樣本很大時候才能擬合如果批次樣本很小那么又會出現協變量偏移的問題

于是又引申出了layer_normalization....

Layer Normalization

Layer Normalization(層歸一化)是為了克服 Batch Normalization 的局限性 而提出的,尤其在 batch size 很小處理序列模型(如 RNN、Transformer) 時非常有用。

LN 核心思想

在一個樣本內部的所有特征維度上做歸一化,而不是像 BatchNorm 那樣在 batch 維度上歸一化。

LN做法比較簡單

圖像卷積場景如果輸入N,C,H,W分別代表Batch size通道圖像高度寬度此時我們N不同圖像圖像C特征因為每個通道一整張圖像像素都是一個特征一張圖像總共C特征每個特征看成 H * W向量于是我們所有特征計算均值方差進行歸一化

總結

不管BN還是LN歸一化操作使得每一個計算value處于標準0,1)正態分布緩解訓練過程協變量偏移問題

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

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

相關文章

Qt 入門 1 之第一個程序 Hello World

Qt 入門1之第一個程序 Hello World 直接上操作步驟從頭開始認識,打開Qt Creator,創建一個新項目,并依次執行以下操作 在Qt Creator中,一個Kits 表示一個完整的構建環境,包括編譯器、Qt版本、調試器等。在上圖中可以直…

深入理解MySQL:核心特性、優化與實踐指南

MySQL是一個開源的關系型數據庫管理系統(RDBMS),由瑞典MySQL AB公司開發,目前屬于Oracle公司。它是目前世界上最流行的開源數據庫之一,廣泛應用于各種規模的Web應用和企業系統中。 目錄 一、核心特點 關系型數據庫: 開源免費&am…

Linux 系統安裝與優化全攻略:打造高效開發環境

一、開篇引言 (一)Linux 系統的廣泛應用 Linux 憑借其開源、穩定且安全的特性,在服務器、嵌入式設備以及開發環境等領域都有著極為廣泛的應用。 (二)撰寫本文的目的 為讀者提供一套全面且實用的指南,助…

代碼訓練day22回溯算法p1

1.組合 (1)模板 void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)) {處理節點;backtracking(路徑,選擇列表); // 遞歸回溯&#…

2024華為OD機試真題-任務最優調度(C++/Java/Python)-E卷-200分

2024華為OD機試最新E卷題庫-(D卷+E卷)-(JAVA、Python、C++) 目錄 題目描述 輸入描述 輸出描述 用例1 考點 題目解析 代碼 c++ java python 題目描述 給定一個正整數數組表示待系統執行的任務列表,數組的每一個元素代表一個任務,元素的值表示該任務的類型。請計算執…

每日習題:20250407

2025 2025 2025年 04 04 04月 06 06 06日 題目 1 設 X X X是實隨機變量,任意光滑的函數 f : R → R f:\mathbf{R} \rightarrow \mathbf{R} f:R→R,都有: E ( X f ( X ) ) E ( f ′ ( X ) ) E\left(Xf(X)\right)E\left(f(X)\right) E(Xf(X)…

TensorRT 有什么特殊之處

一、TensorRT的定義與核心功能 TensorRT是NVIDIA推出的高性能深度學習推理優化器和運行時庫,專注于將訓練好的模型在GPU上實現低延遲、高吞吐量的部署。其主要功能包括: 模型優化:通過算子融合(合并網絡層)、消除冗余…

JCR一區文章,壯麗細尾鷯鶯算法Superb Fairy-wren Optimization-附Matlab免費代碼

本文提出了一種新穎的基于群體智能的元啟發式優化算法——壯麗細尾鷯優化算法(SFOA),SFOA從精湛的神仙鶯的生活習性中汲取靈感。融合了精湛的神仙鶯群體中幼鳥的發育、繁殖后鳥類喂養幼鳥的行為以及它們躲避捕食者的策略。通過模擬幼鳥生長、繁殖和攝食階…

使用Ubuntu18恢復群暉nas硬盤數據外接usb

使用Ubuntu18恢復群暉nas硬盤數據外接usb 1. 接入硬盤2.使用Ubuntu183.查看nas硬盤信息3. 掛載nas3.1 掛載損壞nas硬盤(USB)3.2 掛載當前運行的nas 4. 拷貝數據分批傳輸 5. 新舊數據對比 Synology NAS 出現故障,DS DiskStation損壞,則可以使用計算機和 U…

linux 安裝 mysql記錄

sudo apt-get install mysql-server 一直報錯,按照下面的終于安裝出來了 這個鏈接 https://cn.linux-console.net/?p13784 第 1 步:要刪除 MySQL 及其所有依賴項,請執行以下命令: sudo apt-get remove --purge mysql* 第 2 步…

UE5學習筆記 FPS游戲制作35 使用.csv配置文件

文章目錄 導入.csv要求首先創建一個結構體導入配置文件讀取配置 導入 .csv要求 第一行必須包含標題 第一列的內容必須不能重復,因為第一列會被當成行的名字,在數據處理中發揮類似于字典的key的作用 當前的配置文件內容如下 首先創建一個結構體 結構…

談談策略模式,策略模式的適用場景是什么?

一、什么是策略模式??? 策略模式(Strategy Pattern)屬于??行為型設計模式??。核心思路是將一組??可替換的算法??封裝在獨立的類中,使它們可以在運行時動態切換,同時使客戶端代碼與具體算法解耦。它包含三個…

AGI大模型(10):prompt逆向-巧借prompt

1 提示詞逆向 明確逆向提示詞?程概念 我們可以給ChatGPT提供?個簡潔的提示詞,讓它能夠更準確地理解我們所討論的“逆向提示詞?程”是什么意思,并通過這個思考過程,幫它將相關知識集中起來,進?構建?個專業的知識領域 提示詞:請你舉?個簡單的例?,解釋?下逆向pro…

IntelliJ IDEA全棧Git指南:從零構建到高效協作開發

文章目錄 摘要 正文一、環境搭建:5分鐘完成Git與IDEA的深度綁定二、基礎操作:IDEA如何將Git效率提升300%三、分支管理:高并發團隊的協作秘籍四、強制覆蓋:高風險操作的生存指南五、實戰避坑:血淚經驗總結六、基于老項目…

指針的補充(用于學習筆記的記錄)

1.指針基礎知識 1.1 指針變量的定義和使用 指針也是一種數據類型&#xff0c;指針變量也是一種變量 指針變量指向誰&#xff0c;就把誰的地址賦值給指針變量 #include<stdio.h>int main() {int a 0;char b 100;printf("%p,%p \n", &a,&b); // …

【Cursor/VsCode】在文件列表中不顯示.meta文件

打開設置文件 教程&#xff1a;【Cursor】打開Vscode設置 在settings.json里配置這個&#xff1a; "files.exclude": {"**/*.meta": true }

React-Diffing算法和key的作用

1.驗證Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

Linux文件操作命令詳解

各類資料學習下載合集 ??https://pan.quark.cn/s/8c91ccb5a474?? 在Linux操作系統中,文件操作命令是用戶與系統交互的重要工具。掌握這些命令能夠高效地管理文件和目錄。本文將詳細介紹常用的Linux文件操作命令,包括它們的用法、選項、具體示例及運行結果。 1. 查看文…

Redisson使用詳解

一、Redisson 核心特性與適用場景 Redisson 是基于 Redis 的 Java 客戶端&#xff0c;提供分布式對象、鎖、集合和服務&#xff0c;簡化分布式系統開發。 典型應用場景&#xff1a; 分布式鎖&#xff1a;防止重復扣款、超賣控制&#xff08;如秒殺庫存&#xff09;。數據共享…

從代碼學習深度學習 - GRU PyTorch版

文章目錄 前言一、GRU模型介紹1.1 GRU的核心機制1.2 GRU的優勢1.3 PyTorch中的實現二、數據加載與預處理2.1 代碼實現2.2 解析三、GRU模型定義3.1 代碼實現3.2 實例化3.3 解析四、訓練與預測4.1 代碼實現(utils_for_train.py)4.2 在GRU.ipynb中的使用4.3 輸出與可視化4.4 解析…