pytorch中為什麼可以通過梯度累加變相擴大batchsize?

時間 2021-06-03 04:19:13

1樓:Wet sand

就從最簡單的網路看,y=wx,最佳解是 w=1,訓練資料輸入是[-1,1],而標籤會有些噪音。

先不考慮梯度累加,如果我的 batch size 是 1,那麼 w 的更新方向可能一下往 1.5,一下往 0.7,1.

2......,如果標籤噪音大一點,情況複雜一點就會變的很難收斂。

那透過增加 batch size,把整個 batch 的更新方向取平均,希望讓更新方向中的噪音減少,這樣就能讓網路更容易收斂,也就是 batch training 的主要目的。

說回來你的問題,不更新引數梯度是如何累加的?

你看在 batch training 的時候,是先取梯度的平均,還是先更新引數呢?

那其實我把每個 batch 得到的梯度捏住不用來更新引數,之後覺得夠多了,再一次取平均來更新,不就是跟用更大的 batch 訓練同個意思嗎?

倒是,如果網路中有用 batch normalization 的話,梯度累加不會等於用較大的 batch size 訓練,因為 batch normalization 原理的關係。

2樓:乙隻滑行的蝸牛

首先除以accumulate-step是為了平均梯度,如果不除以accumulate-step,那麼梯度會變得很大,模型不穩定。除以相當於是在loss的層面去均值梯度。通過累加k次的bacth size的均值梯度肯定比小的batch size均值的要好。

為什麼Pytorch不能像sklearn一樣不用定義函式,都封裝好,直接調庫,幾行就搞定?

Lanking 有,但是不屬於框架的範疇。比如說numpy就沒有多少定義的大函式.如果你要實現乙個演算法也都得手寫.sklearn就是呼叫numpy和scipy的功能。同理,pytorch在深度學習地位和numpy類似,但是深度學習應用不會直接包在框架裡,對比之下,huggingface和torch...

深度學習中為什麼可以通過疊加的RBM提取出高度抽象的特徵?

賣糰子的小喵吉 修改之前的答案,之前說的也對,但是不全對。深層的dbn的w無法直接視覺化,但其實也是保留有特徵的,具體可以參考文獻 visualizing higher layer features of a deep network 爪機沒法給鏈結,抱歉。其實ng的課程也講過相關東西,之前理解不到...

vue框架中元件可以通過「this root 」的方式訪問根元件的data物件,為何vuex會熱?

胖虎 其實怎麼說呢.其實一開始我也有過這樣的想法.如果Vue一開始設計的初衷是這樣的,一切的傳值,一切的元件通訊.都要依靠Vuex來實現,那麼你會覺得Vue傳值為什麼這麼複雜,或許會這樣問,為什麼Vue傳值這麼複雜,有沒有什麼簡單的方法可以去實現呢.狀態管理庫非常的多,Vue那麼官方的推薦就是Vue...