為什麼主流神經網路訓練時只算一階導數 用SGD及其變種來優化,而不算高階導數用牛頓法?

時間 2021-05-31 09:09:11

1樓:Bluebear

二階導計算壓力大,那個優化速度提公升抵不過計算的開銷大。

但也有近似解,比如:

2樓:

之前只用一階比如sgd,是2階每一步迭代成本太高,也有可能hessian陣不可逆

王立威老師組之前有提出過二階優化方法GGN,用hessian的偽逆 http://

arxiv.org/pdf/1905.11675.pdf

3樓:Riroaki

私以為用梯度下降和牛頓法作比較更合適一些,因為SGD是用資料的子集作為梯度的經驗估計,是梯度下降類方法的乙個細化方案。

首先,梯度下降方法使用一階導數,牛頓法使用二階導數,二者都是對Tayler Expansion的截斷和近似。理論上,牛頓法的收斂是二階的(quadratic convergence),即每一步近似到解的距離是上乙個距離平方的數量級,所以收斂性比一階的梯度更好[1];然而實際效果未必如此

牛頓法的迭代過程大致如下:

考慮求逆過程的精度,在Hessian矩陣接近奇異矩陣的情形,迭代的數值穩定性差,甚至導致迭代不收斂——當然,也由此產生了一些近似的優化演算法。

其次,Hessian矩陣求解過程的計算複雜度高、記憶體(視訊記憶體)佔用量大,用在簡單的演算法上還好,在海量引數的神經網路中,計算效率比一階梯度低太多了:

一階梯度和二階梯度計算量差異

至於求解輸入Hessian的具體實現暫時沒有調查過,可以參考pytorch的文件[2],有空讀了再補充吧。

4樓:jane hi

第一, 反正會計算很多輪次的,實驗證明這樣同樣可以達到收斂.

第二,提到的記憶體限制

第三,不僅僅是通過改變導數可以優化訓練,也可以有別的策略來優化訓練,比如學習率的設定等.

5樓:市井小民

牛頓法是對函式在對應點進行二階泰勒展開匯出的方法,如果當前位置離最小值點很遠,那麼二階泰勒展開不能近似原函式。也就是說此時我們用牛頓法計算的方向可能偏差比較大。解決這個問題有一種方法就是先用梯度下降法,到最小值附近時再用牛頓法來加快收斂

深度學習中引數量過大,對於海森矩陣的計算非常耗時。對於大型神經網路來說,幾乎不可用。

6樓:Caliber

因為儲存問題,二階導數通常是乙個維數平方維多矩陣,試想乙個擁有100萬個引數的神經網路的二階導數、是乙個非常巨大的矩陣,對儲存的壓力很大. 大家不信可以用numpy存乙個 維多矩陣,看看有多大.

直接炸了。

為啥在訓練神經網路時,梯度下降成為主流?

黃有 梯度下降成為主流的原因並不複雜,只是算得快。在引數不多計算量不大的問題上,梯度下降顯然並不是最好的方法,單單容易陷入區域性最優就是個大問題。但是放在神經網路特別是深度網路上,梯度下降的計算優勢就放大了。這種優勢是其他演算法難以超越的,而優勢的根源不只是梯度下降本身,還有跟神經網路相結合的bp演...

怎麼選取訓練神經網路時的Batch size

嚮往自由 乙個epoch,使用大batch,訓練時間更短 但收斂不一定比小batch好 解析為什麼同乙個epoch,小batch,收斂更快?原因 相同epoch,小batch的梯度迭代更加頻繁,更有可能找到最優解。因此,不是batch越大越好 做自己 我覺得和隨機性大小有關,批梯度下降本身屬於隨機優...

神經網路中訓練和推理有什麼區別?

tohnee 1.推斷 Inference 的網路權值已經固定下來,無後向傳播過程,因此可以 模型固定,可以對計算圖進行優化,還可以輸入輸出大小固定,可以做memory優化 注意 有乙個概念是fine tuning,即訓練好的模型繼續調優,只是在已有的模型做小的改動,本質上仍然是訓練 Trainin...