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...