batch size 256走一步和以batch size 1從同乙個點出發256次再平均有什麼區別?

時間 2021-05-06 19:30:38

1樓:adam86546853

我就想問問,設定batch_size的目的是什麼?是為了加快訓練,而且基本也能收斂到近似最優解,如果能夠batch_size=sample_num能訓的話,全域性最優解不香嗎?

2樓:黑煙的圈

請允許我裝乙個B,

因為log256<256,所以nlog256<256^n

O(Nlog)從複雜性科學理論上是不等價的。

3樓:BORN

這個要看具體的場景,但大部分時候二者的結果都是不同的,大的batch_size要更好。

batch_size=256,其實就是用256批樣本的平均值更近1次梯度。同等條件下,batch_size=1就是每次都利用損失函式進行梯度更新,更新256次。

一般情況下,後者可能會陷入區域性最優,而導致結果在乙個地方反覆振盪,一直收斂不到全域性最優的位置。

用乙個通俗的例子來說,假如你在乙個人生地不熟的地方問路,目的地就是全域性最優解。一種辦法是問256個人,然後挑出其中概率最大的方向行走,如果目的地錯了,就再問256個人,再走1次;另一種辦法是每次問1個人,然後走1次,直到目的地。

後面這個方法的問題,在於你可能會在兩個錯誤的地方之間來回走,反覆問了很多次都走不到目的地

我第一次真正體會batchsize導致的問題,是在一次玩BERT_Large的時候,由於模型太大在2080TI上只能用batch_size=1、2和6,後來發現訓練了一段時間之後結果就完全不收斂了,測試精度很差。

4樓:iwuqing

batch size=256意味每一步的優化是256個樣本的損失的平均,而batch size=1意味著每一步的優化是1個樣本的損失。batch size太小的話很出現抖動問題,原因是太小的batch很容易受到單個訓練樣本的影響,而batch size太大又會帶來記憶體溢位、過擬合而泛化能力不足的問題(因為太大的batch每次隨機出來的樣本差異會比較小,所以模型只會學到基於訓練樣本的對映),所以需要乙個比較合適的batch size。

5樓:張覺非

損失是模型引數的函式。輸入的樣本視作常數。

batch size 為 1 的時候,這 256 次每次都是計算了(嚴格來說)不同的損失函式(因為每個樣本不同,即函式中的常量不同)。每次用不同的損失函式對引數的梯度更新引數。共 256 次。

batch size 為 256 時,是用這 256 個樣本的平均損失為損失函式,用平均損失的梯度對引數進行更新。更新一次。

如果 batch size 為 1 時候,算 256 次,每次算出的梯度留著不更新,最後用這 256 個梯度的平均值更新引數,這兩者就等價了。因為(單樣本損失的)平均值的梯度等於(單樣本損失的)梯度的平均值(因為求導算符是線性的)。

如果把損失值視作乙個隨機變數,那麼 256 的 batch 相當於用 256 個樣本去估計這個隨機變數,1 的 batch 相當於用 1 個樣本去估計這個隨機變數。

《深入理解神經網路從邏輯回歸到CNN》(張覺非)【摘要書評試讀】- 京東圖書

6樓:

總算看到個有潛力研究理論的人,能提出這個問題說明你不單純想做個調參黨而是進一步挖理論。

首先,mini-batch sgd到底為什麼比sgd好呢,或者說sgd為什麼能夠收斂到極值呢,sgd是從三個方面講的,首先是均值朝著迭代不動點做壓縮對映(也就是指數收縮),其次是標準差吵著不動點做壓縮對映,最後就是不動點和最值點的距離。前兩個對映是和迭代次數呈指數關係的。而minibatch則是不同,他就是通過隨機變數和方差的特性減少方差來獲取加速的。

手機打字寫不來那麼多公式,但具體你可以閱讀 parallelized stochastic gradient descent 這篇文章,2023年微軟在nips上出的,其中二作還是三作是個大神smola,雖然方法和標準minibatch不太一樣,但是推理過程你可以稍加變現就得到我說的結果了

7樓:

很多答主都給出了它們實際計算後的區別,我舉個例子直覺上說明一下。

比如你是個廚師,現在你要做飯(modeling)給一堆人(training data)吃(task),但是你不知道這些人的口味(模parameters),你事先做了一道菜(init parameter),接下來你有三種策略去了解這道菜是否讓大家滿意:

挨個叫到房間(記憶體 or 視訊記憶體)裡問(batch_size=1),「張三你覺得怎麼樣?」,張三說:「淡了,在這個基礎上再加一勺」,於是你加了一勺鹽,張三出去了;「李四你覺得怎麼樣?

」,李四說:「鹹了,只要這個一半鹽就行了」。然後你加了一瓢水。

李四出去了...一直到所有人都來一遍;

直接把所有人叫到房間裡(batch_size=size_of_training_data),「張三你覺得怎麼樣?」,張三說:「淡了」,於是你記了」加一勺鹽「。

「李四你覺得怎麼樣?」,李四說:「鹹了,一半鹽」,然後你記了」一半鹽「...

等所有的人問結束,你通過統一計算,改變鹽量;

試想一下,如果是你你會怎麼做?那肯定是一次性問好了大家相互將就一下。如果是第一種,每問一次改變一次鹽量,即使你滿足了當前問的這個人,前面剛問過的那個可能就已經不滿意了。

但是實際操作中存在乙個問題,就是當你想把所有人叫進來一起問的時候,發現房間太小裝不下這麼多人,那就退而求其次,把人分成N批(batchsize=size_of_training_data/N),這樣既可以一堆堆人相互將就,又可以讓房間裝的下。

當然,這只是乙個形象化的例子,具體還要考慮batch norn,optimizer等,其他答主也說明了這一點。

如有不當,還請見諒。

8樓:胡志聰

結果是不一樣的,把DL 簡化為 y=f(x,w)batch = 256,step =1則

y0=f(x0,w0)

y1=f(x1, w0)

y2=f(x2,w0)

batch=1,step=257則

y0=f(x0,w0)

y1=f(x1,w1)

y2=f(x2,w2)

至於為什麼大batch效果會好,因為大的batch會有更平滑的grad吧

9樓:

除了BN的問題,還有乙個容易被忽視的問題,是優化器,momentum-based優化器,會維護乙個移動平均值,一次和256次明顯不同。同理,分母上的自適應LR項也不一樣。

10樓:Derek Sai

如果不考慮視訊記憶體,本質上的區別就是batch_size大一點更容易收斂,或者不至於找到乙個區域性最優。

另一方面,batch_size=256需要更大更大的視訊記憶體,尤其是網路比較複雜的情況。

11樓:我是誰啊

你這樣操作顯然不等價,注意,你進行batchsize=1的操作後直接進行了引數更新,隨後對256次的引數值進行了平均,而不是對256次的累積梯度進行平均。所每次不更新權重,而是進行梯度累積,最後平均梯度後再更新引數值,則是等價的

一步一步走?

ypxz 應該不可以。因為暫時沒有時光機。我發現了你描述裡的小細節。你說你 以前 被認為 是優秀的人,也曾熱愛生活,積極努力,熱愛生活的人。我覺得你對自己的認識還不夠,至少,不能確信某些對自己的評價。 leee 我父親32歲去世 因此我一直擔心自己也會在那個年齡出事 所以我時常問自己如果你只能活到3...

你做事喜歡提前做好計畫還是走一步看一步?

職業規劃師糊糊 其實這個問題,我們經常在面試中也會問到像你一樣的學生,主要目的倒不是說認為學生應該很清晰自己的未來規劃 但至少是希望帶有一定目標感來應聘公司的。畢竟個人的發展和公司的發展如果不匹配的話,個人倒是可以幹一段時間就不幹了,但公司其實是有新人的招聘成本和培養成本的。還是希望選到合適的人。這...

對於自己生活,工作等,走一步看一步的心態怎麼樣

清歡 要看處於何種年齡段男生女生和家境了。對於普通家庭的普通人 女士 來說,如果35之前就有走一步看一步的心態,那是較被動的做法,應該大膽的邁出困頓,去挑戰一下自我擺脫這種心態,但如果 女士 已經40加了,很多時候就只能走一步看一步了,揹負著雙方老人自家孩子需要照管,特別是還有房貸車貸需要償還時,沒...