日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习基础之BatchNorm和LayerNorm

發布時間:2024/1/1 pytorch 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习基础之BatchNorm和LayerNorm 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • BatchNorm
  • LayerNorm
  • 總結
  • 參考

BatchNorm

Batch Normalization(下文簡稱 Batch Norm)是 2015 年提出的方法。Batch Norm雖然是一個問世不久的新方法,但已經被很多研究人員和技術人員廣泛使用。實際上,看一下機器學習競賽的結果,就會發現很多通過使用這個方法而獲得優異結果的例子。
Batch Norm有以下優點。
(1) 可以使學習快速進行(可以增大學習率)。
(2)不那么依賴初始值(對于初始值不用那么神經質)。
(3)抑制過擬合(降低Dropout等的必要性)

Batch Norm,顧名思義,以進行學習時的mini-batch為單位,按mini-batch進行正規化。具體而言,就是進行使數據分布的均值為0、方差為1的正規化。用數學式表示的話,如下所示。


看公式,是不是有點像經典機器學習里為了消除量綱的標準化的操作。

這就是Batch Normalization的算法了。

簡單來說,其實就是對一個batch的數據進行標準化操作。

我們可以使用pytorch為我們寫好的方法直接調用驗證一下:

import torch.nn as nn import torch as th data = [[[1,2,5],[2,5,8.5],[3,3,3]],[[2,8,4],[1,3,9],[2,6,4]],[[1,1,1],[1,3,5],[0.5,6,0.2]]] data = th.tensor(data) data_bn = nn.BatchNorm1d(3)(data) data_ln = nn.LayerNorm(3)(data) mean = th.sum(data_bn) mu = th.sum(th.pow(data_bn-mean, 2) / 27) print(data_bn) print(mean) print(mu)


眾所周知,浮點數運算會飄,所以2.3842e-07就相當于是0了
方差差計算出來是1
正好符合計算的結果。

所以batch norm是對一個batch的所有數據一起進行標準化操作。

這是使用手寫數據集進行的測試實驗,發現初始化參數不同時,對學習效果的影響是很大的,但是使用了batch norm之后,受到的影響就比較小了。

batch norm主要用于CV領域

LayerNorm

layer norm也是一種標準化的方法,公式也差不多,不過是對每個batch(3維)里的每個樣本的每行進行標準化,主要是用于NLP領域的。

話不多說,上代碼:

import torch.nn as nn import torch as th data = [[[1,2,5],[2,5,8.5],[3,3,3]],[[2,8,4],[1,3,9],[2,6,4]],[[1,1,1],[1,3,5],[0.5,6,0.2]]] data = th.tensor(data) data_ln = nn.LayerNorm(3)(data) print(data_ln) for b in data_ln:for line in b:mean = th.sum(line)mu = th.sum(th.pow(line-mean, 2))print(mean, mu / line.shape[0])

輸出:

所有,使用layer norm 對應到NLP里就是相當于對每個詞向量各自進行標準化。

總結

batch norm適用于CV,因為計算機視覺喂入的數據都是像素點,可以說數據點與點之間是可以比較的,所以使用batch norm可以有比較好的效果,而NLP里,每個詞的詞向量是一組向量表示一個詞,一個詞向量割裂開來看是沒有意義的,因此不同詞向量里的數據點是不能混為一談的,所以batch norm之后可能會使得詞損失語義,效果就可能不好了,但是使用layer norm只是讓各個詞向量進行標準化,就能夠有比較理想的效果了。

參考

深度學習老師的課件

總結

以上是生活随笔為你收集整理的深度学习基础之BatchNorm和LayerNorm的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。