運籌系列40 L BFGS的pytorch版本

2021-10-06 19:38:32 字數 863 閱讀 5314

l是limited memory的意思。bfgs是四個數學家的名字。連續優化問題基本原理是泰勒二階展開後,求導=0,用迭代的方法進行求解。

迭代公式很簡單:fxk

′+fx

k′′(

xk+1

−xk)

=0f'_+f''_(x_-x_k)=0

fxk​′​

+fxk

​′′​

(xk+

1​−x

k​)=0f′

f'f′

是乙個向量,f′′

f''f′

′是乙個矩陣,稱為hessian陣。hessian計算比較複雜,我們用迭代的方式計算,迭代方程改寫為:

x k+

1=xk

−f′f

′′−1

x_=x_k-f'f''^

xk+1​=

xk​−

f′f′

′−1。我們用d來近似f′′

−1f''^

f′′−

1,迭代公式為:

注意如下幾點:

(1)這裡有2個迭代:第乙個迭代計算d

dd,第二個迭代計算f

ff。為了節省時間,我們每一輪迭代都乾脆讓兩個迭代一起進行。

(2)在深度學習時,資料量往往非常大。假設我們資料有10w維,那麼每次迭代算出來的d有74.5g,記憶體、視訊記憶體都放不下。所以我們用時間換空間,使用l-bfgs方法,將d的計算過程儲存下來,需要的時候計算一下即可。

(3)為了進一步節省記憶體,我們只保留一定步數的計算過程。

運籌系列25 Cplex的分布式求解

實際生產中很多的組合優化問題包含上百萬甚至上億的變數,很容易出現記憶體溢位和計算超時的問題。在試探計算機 底線 的過程中,我們如果能利用分布式的優勢,會讓很多問題的求解規模成倍增加。在cplex多程序分確定性和機會性兩種。確定性指的是重複求解時遵循相同的求解路徑,而機會性則是隨機應變。可以使用並行方...

劍指Offer系列40 最小的k個數

輸入整數陣列 arr 找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。pythonclass solution def getleastnumbers self,arr list int k int list int if k 0 re...

劍指Offer系列40 最小的K個數

輸入整數陣列arr,找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。方法一 排序 class solution return vec 方法二 堆 class solution priority queue int q for int i...