【深度學習】圖形模型基礎(7):機器學習優化中的方差減少方法(1)

摘要

隨機優化是機器學習中至關重要的組成部分,其核心是隨機梯度下降算法(SGD),這種方法自60多年前首次提出以來一直被廣泛使用。近八年來,我們見證了一個激動人心的新進展:隨機優化方法的方差降低技術。這些方差降低的方法(VR方法)在允許多次迭代訓練數據的場景下表現出色,無論是在理論上還是在實踐中,它們都顯示出比SGD更快的收斂速度。這種速度的提高凸顯了VR方法的日益增長的興趣和這一領域迅速積累的研究成果。本文綜述了VR方法在有限數據集優化中的關鍵原則和主要進展,旨在為非專家讀者提供信息。我們主要集中討論了凸優化環境,并為那些對非凸函數最小化擴展感興趣的讀者提供了參考。

關鍵詞 | 機器學習;優化;方差降低

1.引言

在機器學習的研究領域中,一個基礎而重要的問題是如何將模型適配到龐大的數據集上。例如,我們可以考慮線性最小二乘模型的典型案例:

x ? ∈ arg ? min ? x ∈ R d 1 n ∑ i = 1 n ( a i T x ? b i ) 2 x^* \in \arg\min_{x \in \mathbb{R}^d} \frac{1}{n} \sum_{i=1}^{n} (a_i^T x - b_i)^2 x?argxRdmin?n1?i=1n?(aiT?x?bi?)2

在這個模型中,我們有 d d d 個參數,它們由向量 x ∈ R d x \in \mathbb{R}^d xRd 給出。同時,我們手頭有 n n n 個數據點,包括特征向量 a i ∈ R d a_i \in \mathbb{R}^d ai?Rd 和目標值 b i ∈ R b_i \in \mathbb{R} bi?R。模型的適配過程就是調整這些參數,以使得模型的預測輸出 a i T x a_i^T x aiT?x 平均上盡可能接近目標值 b i b_i bi?

更廣泛地說,我們可能會使用損失函數 f i ( x ) f_i(x) fi?(x) 來衡量模型預測與第 i i i 個數據點的接近程度:

x ? ∈ arg ? min ? x ∈ R d f ( x ) : = 1 n ∑ i = 1 n f i ( x ) x^* \in \arg\min_{x \in \mathbb{R}^d} f(x) := \frac{1}{n} \sum_{i=1}^{n} f_i(x) x?argxRdmin?f(x):=n1?i=1n?fi?(x)

損失函數 f i ( x ) f_i(x) fi?(x) 如果較大,表明模型的預測與數據有較大偏差;如果 f i ( x ) f_i(x) fi?(x) 等于零,則表示模型完美地擬合了數據點。函數 f ( x ) f(x) f(x) 反映了模型在整個數據集上的平均損失。

類似上述形式 (2) 的問題不僅適用于線性最小二乘問題,也適用于機器學習中研究的許多其他模型。例如,在邏輯回歸模型中,我們解決的是:

x ? ∈ arg ? min ? x ∈ R d 1 n ∑ i = 1 n log ? ( 1 + e ? b i a i T x ) + λ 2 ∥ x ∥ 2 2 x^* \in \arg\min_{x \in \mathbb{R}^d} \frac{1}{n} \sum_{i=1}^{n} \log(1 + e^{-b_i a_i^T x}) + \frac{\lambda}{2} \|x\|_2^2 x?argxRdmin?n1?i=1n?log(1+e?bi?aiT?x)+2λ?x22?

這里,我們處理的是 b i ∈ { ? 1 , + 1 } b_i \in \{-1, +1\} bi?{?1,+1} 的二元分類問題,預測是基于 a i T x a_i^T x aiT?x 的符號來進行的。公式中還引入了正則化項 λ 2 ∥ x ∥ 2 2 \frac{\lambda}{2} \|x\|_2^2 2λ?x22? 來避免對數據的過擬合,其中 ∥ x ∥ 2 2 \|x\|_2^2 x22? 表示 x x x 的歐幾里得范數的平方。

在大多數監督學習模型中,訓練過程可以表示為形式 (2),包括 L1 正則化最小二乘、支持向量機 (SVM)、主成分分析、條件隨機場和深度神經網絡等。

現代問題實例中的一個關鍵挑戰是數據點的數量 n n n 可能極其龐大。我們經常處理的數據集大小遠遠超出了太字節的范圍,這些數據可能來自互聯網、衛星、遠程傳感器、金融市場和科學實驗等多種來源。為了應對如此龐大的數據集,一種常見的方法是使用隨機梯度下降(SGD)算法,該算法在每次迭代中僅使用少量隨機選取的數據點。此外,最近對方差減少(VR)的隨機梯度方法的興趣急劇上升,這些方法比傳統的隨機梯度方法具有更快的收斂速度。
在這里插入圖片描述
圖1. 在基于蘑菇數據集[7]的邏輯回歸問題上,將梯度下降(GD)、加速梯度下降(AGD,即[50]中的加速GD)、隨機梯度下降(SGD)和ADAM[30]方法與方差減少(VR)方法SAG和SVRG進行了比較,其中n=8124,d=112。

1.1. 梯度與隨機梯度下降方法

梯度下降(GD)是一種經典算法,用于解決上述問題 (2),其迭代更新公式如下所示:
x k + 1 = x k ? γ 1 n ∑ i = 1 n ? f i ( x k ) x_{k+1} = x_k - \gamma \frac{1}{n} \sum_{i=1}^{n} \nabla f_i(x_k) xk+1?=xk??γn1?i=1n??fi?(xk?)

這里, γ \gamma γ 是一個大于零的固定步長值。在GD算法的每次迭代過程中,必須對每一個數據點 i i i 計算梯度 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?),這意味著GD需要對所有 n n n 個數據點進行完整的遍歷。當數據集的大小 n n n 變得非常大時,GD算法的每次迭代成本會變得非常高,從而限制了其應用。

作為替代,我們可以考慮隨機梯度下降(SGD)方法,這是由 Robbins 和 Monro 首次提出的,其迭代更新公式如下:
x k + 1 = x k ? γ ? f i k ( x k ) x_{k+1} = x_k - \gamma \nabla f_{i_k}(x_k) xk+1?=xk??γ?fik??(xk?)

SGD算法通過在每次迭代中僅使用一個隨機選取的數據點的梯度 ? f i k ( x k ) \nabla f_{i_k}(x_k) ?fik??(xk?) 來降低每次迭代的成本。在圖 1 中,我們可以看到SGD在優化過程的初期階段比GD(包括加速的GD方法)取得了更顯著的進步。該圖根據輪次(epoch)來展示優化的進展,輪次定義為計算所有 n n n 個訓練樣本的梯度的次數。GD算法在每個輪次進行一次迭代,而SGD算法則在每個輪次進行 n n n 次迭代。我們以輪次作為比較SGD和GD的依據,因為在假設 n n n 非常大的情況下,兩種方法的主要成本都集中在梯度 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?) 的計算上。

1.2.方差問題

讓我們考慮隨機索引 i k i_k ik? 從集合 { 1 , … , n } \{1, \ldots, n\} {1,,n} 中均勻隨機選擇的情況,這意味著對于所有 i i i,選擇 i k = i i_k = i ik?=i 的概率 P [ i k = i ] P[i_k = i] P[ik?=i] 等于 1 n \frac{1}{n} n1?。在這種情況下, ? f i k ( x k ) \nabla f_{i_k}(x_k) ?fik??(xk?) 作為 ? f ( x k ) \nabla f(x_k) ?f(xk?) 的估計量是無偏的,因為根據期望的定義,我們有:
E [ ? f i k ( x k ) ∣ x k ] = 1 n ∑ i = 1 n ? f i ( x k ) = ? f ( x k ) ( 6 ) E[\nabla f_{i_k}(x_k) | x_k] = \frac{1}{n} \sum_{i=1}^{n} \nabla f_i(x_k) = \nabla f(x_k) \quad (6) E[?fik??(xk?)xk?]=n1?i=1n??fi?(xk?)=?f(xk?)(6)

盡管SGD(隨機梯度下降)方法在每次迭代中不保證函數 f f f 的值會減少,但平均而言,它朝著負的完整梯度方向移動,這代表了下降方向。

然而,擁有一個無偏梯度估計量并不足以確保SGD迭代的收斂性。為了說明這一點,圖 2(左側)展示了使用常數步長對LIBSVM [7] 提供的四類數據集應用邏輯回歸函數時SGD的迭代軌跡。圖中的同心橢圓代表了函數的等高線,即函數值 f ( x ) = c f(x) = c f(x)=c 對應的點 x x x 集合, c c c 是實數集中的特定常數。不同的常數值 c c c 對應不同的橢圓。

SGD的迭代軌跡并沒有收斂到最優解(圖中以綠色星號表示),而是在最優解周圍形成了一個點云。與此相反,我們在圖 2中使用相同的常數步長展示了一種方差減少(VR)方法——隨機平均梯度(SAG)的迭代軌跡,我們將在后文中介紹這種方法。SGD在這個例子中未能收斂的原因是隨機梯度本身沒有收斂到零,因此,常數步長的SGD方法(5)永遠不會停止。這與梯度下降(GD)方法形成鮮明對比,GD方法會自然停止,因為隨著 x k x_k xk? 趨近于 x ? x^* x?,梯度 ? f ( x k ) \nabla f(x_k) ?f(xk?) 會趨向于零。
在這里插入圖片描述
圖2. 使用固定步長的SGD(左)和SAG(右)迭代方法的二維邏輯回歸的水平集圖。綠色星號表示x解。

1.3.經典方差減少方法

處理由于 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?) 值的方差導致的非收斂性問題,有幾種經典技術。例如,Robbins 和 Monro [64] 通過使用一系列遞減的步長 γ k \gamma_k γk? 來解決方差問題,確保乘積 γ k ? f i k ( x k ) \gamma_k \nabla f_{i_k}(x_k) γk??fik??(xk?) 能夠收斂到零。然而,調整這個遞減步長序列以避免過早或過晚停止算法是一個難題。

另一種減少方差的經典技術是每次迭代中使用多個 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?) 的平均值,以獲得對完整梯度 ? f ( x ) \nabla f(x) ?f(x) 的更準確估計。這種方法稱為小批量處理(minibatch),尤其適用于可以并行評估多個梯度的情況。這導致迭代形式如下:
x k + 1 = x k ? γ 1 ∣ B k ∣ ∑ i ∈ B k ? f i ( x k ) ( 7 ) x_{k+1} = x_k - \gamma \frac{1}{|B_k|} \sum_{i \in B_k} \nabla f_i(x_k) \quad (7) xk+1?=xk??γBk?1?iBk???fi?(xk?)(7)
其中 B k B_k Bk? 是一個隨機索引集合, ∣ B k ∣ |B_k| Bk? 表示 B k B_k Bk? 的大小。如果 B k B_k Bk? 以有放回的方式均勻采樣,那么這個梯度估計的方差與“批量大小” ∣ B k ∣ |B_k| Bk? 成反比,因此可以通過增加批量大小來降低方差。

但是,這種迭代的成本與批量大小成正比,因此這種方差減少形式是以增加計算成本為代價的。

另一個常見的減少方差并提高SGD經驗性能的策略是添加“動量”,這是一個基于過去步驟中使用的方向的額外項。特別是,帶動量的SGD形式如下:
x k + 1 = x k ? γ m k ( 9 ) x_{k+1} = x_k - \gamma m_k \quad (9) xk+1?=xk??γmk?(9)
其中動量參數 β \beta β 位于 (0, 1) 范圍內。如果初始動量 m 0 = 0 m_0 = 0 m0?=0,并在 (8) 中展開 m k m_k mk? 的更新,我們得到 m k m_k mk? 是之前梯度的加權平均:
m k = ∑ t = 0 k β k ? t ? f i t ( x t ) ( 10 ) m_k = \sum_{t=0}^{k} \beta^{k-t} \nabla f_{i_t}(x_t) \quad (10) mk?=t=0k?βk?t?fit??(xt?)(10)
因此, m k m_k mk? 是隨機梯度的加權和。由于 ∑ t = 0 k β k ? t = 1 ? β k + 1 1 ? β \sum_{t=0}^{k} \beta^{k-t} = \frac{1 - \beta^{k+1}}{1 - \beta} t=0k?βk?t=1?β1?βk+1?,我們可以將 1 ? β 1 ? β k m k \frac{1 - \beta}{1 - \beta^k} m_k 1?βk1?β?mk? 視為隨機梯度的加權平均。如果我們將其與完整梯度的表達式 ? f ( x k ) = 1 n ∑ i = 1 n ? f i ( x k ) \nabla f(x_k) = \frac{1}{n} \sum_{i=1}^{n} \nabla f_i(x_k) ?f(xk?)=n1?i=1n??fi?(xk?) 進行比較,我們可以將 1 ? β 1 ? β k m k \frac{1 - \beta}{1 - \beta^k} m_k 1?βk1?β?mk?(以及 m k m_k mk?)解釋為對完整梯度的估計。這種加權和雖然減少了方差,但也帶來了關鍵問題。由于加權和(10)對最近采樣的梯度賦予了更多權重,它不會收斂到完整梯度 ? f ( x k ) \nabla f(x_k) ?f(xk?),后者是一個簡單平均。我們將在第二節A中看到的第一種方差減少方法通過使用簡單平均而不是任何加權平均來解決這個問題。

1.4.現代方差減少方法

與經典方法不同,它們直接使用一個或多個 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?) 作為 ? f ( x k ) \nabla f(x_k) ?f(xk?) 的近似值,現代方差減少(VR)方法采用了一種不同的策略。這些方法利用 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?) 來更新梯度的估計值 g k g_k gk?,其目標是讓 g k g_k gk? 逼近 ? f ( x k ) \nabla f(x_k) ?f(xk?)。具體來說,我們希望 g k g_k gk? 能夠滿足 g k ≈ ? f ( x k ) g_k \approx \nabla f(x_k) gk??f(xk?)。基于這樣的梯度估計,我們接著執行形式如下的近似梯度步驟:
x k + 1 = x k ? γ g k ( 11 ) x_{k+1} = x_k - \gamma g_k \quad (11) xk+1?=xk??γgk?(11)
這里的 γ > 0 \gamma > 0 γ>0 是步長參數。

為了確保使用常數步長 γ \gamma γ 時迭代 (11) 能夠收斂,我們需要保證梯度估計 g k g_k gk? 的方差趨向于零。數學上,這可以表達為:
E [ ∥ g k ? ? f ( x k ) ∥ 2 ] → 0 as? k → ∞ ( 12 ) E\left[ \| g_k - \nabla f(x_k) \|^2 \right] \rightarrow 0 \quad \text{as } k \rightarrow \infty \quad (12) E[gk???f(xk?)2]0as?k(12)
這里的期望 E E E 是基于算法中直到第 k k k 次迭代的所有隨機變量計算的。屬性 (12) 確保了 VR 方法在達到最優解時能夠停止。我們將此屬性視為 VR 方法的一個標志性特征,因此稱之為 VR 屬性。值得注意的是,“減少的”方差這個表述可能會引起誤解,因為實際上方差是趨向于零的。屬性 (12) 是 VR 方法在理論上(在適當的假設條件下)和實踐中(如圖 1 所展示的)能夠實現更快收斂的關鍵因素。

1.5.第一個方差減少方法的例子:SGD2

一種簡單的改進方法可以使SGD遞歸式(5)在不減小步長的情況下實現收斂,那就是對每個梯度進行平移,具體做法是減去 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?),這種方法定義如下:
x k + 1 = x k ? γ ( ? f i k ( x k ) ? ? f i k ( x ? ) ) ( 13 ) x_{k+1} = x_k - \gamma (\nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*)) \quad (13) xk+1?=xk??γ(?fik??(xk?)??fik??(x?))(13)
這種方法被稱為SGD2 [22]。雖然我們通常無法確切知道每個 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?),但SGD2作為一個例子,能夠很好地闡釋方差減少方法的基本特性。此外,許多方差減少方法都可以看作是SGD2方法的一種近似形式;這些方法不是依賴于已知的每個 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?),而是使用能夠逼近 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?) 的估計值。

值得注意的是,SGD2使用的是對完整梯度的無偏估計。因為 ? f ( x ? ) = 0 \nabla f(x^*) = 0 ?f(x?)=0,所以有:
E [ ? f i k ( x k ) ? ? f i k ( x ? ) ] = ? f ( x k ) ? ? f ( x ? ) = ? f ( x k ) E[\nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*)] = \nabla f(x_k) - \nabla f(x^*) = \nabla f(x_k) E[?fik??(xk?)??fik??(x?)]=?f(xk?)??f(x?)=?f(xk?)
另外,當SGD2達到最優解時,它自然會停止,因為對于任意 i i i,有:
( ? f i ( x ) ? ? f i ( x ? ) ) ∣ x = x ? = 0 (\nabla f_i(x) - \nabla f_i(x^*)) \bigg|_{x=x^*} = 0 (?fi?(x)??fi?(x?)) ?x=x??=0

進一步觀察,隨著 x k x_k xk? 接近 x ? x^* x?(對于連續的 ? f i \nabla f_i ?fi?),SGD2滿足方差減少屬性(12),因為:
E [ ∥ g k ? ? f ( x k ) ∥ 2 ] = E [ ∥ ? f i k ( x k ) ? ? f i k ( x ? ) ? ? f ( x k ) ∥ 2 ] ≤ E [ ∥ ? f i k ( x k ) ? ? f i k ( x ? ) ∥ 2 ] E\left[ \| g_k - \nabla f(x_k) \|^2 \right] = \\E\left[ \| \nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*) - \nabla f(x_k) \|^2 \right] \leq E\left[ \| \nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*) \|^2 \right] E[gk???f(xk?)2]=E[∥?fik??(xk?)??fik??(x?)??f(xk?)2]E[∥?fik??(xk?)??fik??(x?)2]
這里我們使用了引理2,令 X = ? f i k ( x k ) ? ? f i k ( x ? ) X = \nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*) X=?fik??(xk?)??fik??(x?),并利用了 E [ ? f i k ( x k ) ? ? f i k ( x ? ) ] = ? f ( x k ) E[\nabla f_{i_k}(x_k) - \nabla f_{i_k}(x^*)] = \nabla f(x_k) E[?fik??(xk?)??fik??(x?)]=?f(xk?) 的性質。這個屬性表明SGD2具有比傳統SGD方法更快的收斂速度,我們已在附錄B中對此進行了詳細說明。

1.6.方差減少方法的快速收斂性

本節我們將介紹兩個標準假設,這些假設用于分析方差減少(VR)方法,并討論在這些假設下相比于傳統SGD方法所能夠實現的加速效果。首先,我們假設梯度具有Lipschitz連續性,這表示梯度的變化速度是有限的。

假設1(Lipschitz連續性)

我們假設函數 f f f是可微的并且是 L L L-平滑的,對于所有 x x x y y y 以及某個 0 < L < ∞ 0 < L < \infty 0<L<,滿足以下條件:
∥ ? f ( x ) ? ? f ( y ) ∥ ≤ L ∥ x ? y ∥ ( 14 ) \|\nabla f(x) - \nabla f(y)\| \leq L\|x - y\| \quad (14) ∥?f(x)??f(y)Lx?y(14)
這意味著每個 f i : R d → R fi: \mathbb{R}^d \rightarrow \mathbb{R} fi:RdR 是可微的, L i L_i Li?-平滑的,我們定義 L max L_{\text{max}} Lmax? max ? { L 1 , . . . , L n } \max\{L_1, . . . , L_n\} max{L1?,...,Ln?}

雖然這通常被認為是一個較弱的假設,但在后續章節中,我們將討論適用于非光滑問題的VR方法。對于兩次可微的單變量函數, L L L-平滑性可以直觀理解為:它等同于假設二階導數被 L L L 上限,即 ∣ f ′ ′ ( x ) ∣ ≤ L |f''(x)| \leq L f′′(x)L 對于所有 x ∈ R d x \in \mathbb{R}^d xRd。對于多變量的兩次可微函數,它等同于假設Hessian矩陣 ? 2 f ( x ) \nabla^2 f(x) ?2f(x) 的奇異值被 L L L 上限。

假設2(強凸性)

我們考慮的第二個假設是函數 (f) 是 μ \mu μ-強凸的,這意味著對于某個 μ > 0 \mu > 0 μ>0,函數 x ? f ( x ) ? μ 2 ∥ x ∥ 2 x \mapsto f(x) - \frac{\mu}{2}\|x\|^2 x?f(x)?2μ?x2 是凸的。此外,對于每個 i = 1 , . . . , n i = 1, . . . , n i=1,...,n f i : R d → R fi: \mathbb{R}^d \rightarrow \mathbb{R} fi:RdR 是凸的。

這是一個較強的假設。在最小二乘問題中,每個 (fi$ 是凸的,但總體函數 (f) 只有在設計矩陣 A : = [ a 1 , . . . , a n ] A := [a_1, . . . , a_n] A:=[a1?,...,an?] 具有完全行秩時才是強凸的。L2正則化的邏輯回歸問題由于正則化項的存在,滿足這個假設,其中 μ ≥ λ \mu \geq \lambda μλ

滿足這些假設的一個重要問題類別是形式如下的優化問題:
x ? ∈ arg ? min ? x ∈ R d f ( x ) = 1 n ∑ i = 1 n ? i ( a i T x ) + λ 2 ∥ x ∥ 2 ( 15 ) x^* \in \arg\min_{x \in \mathbb{R}^d} f(x) = \frac{1}{n} \sum_{i=1}^{n} \ell_i(a_i^Tx) + \frac{\lambda}{2}\|x\|^2 \quad (15) x?argxRdmin?f(x)=n1?i=1n??i?(aiT?x)+2λ?x2(15)
其中每個“損失”函數 ? i : R → R \ell_i: \mathbb{R} \rightarrow \mathbb{R} ?i?:RR 是兩次可微的,并且其二階導數 ? i ′ ′ \ell_i'' ?i′′? 被限制在0和某個上界 M M M 之間。這包括了機器學習中帶有L2正則化的多種損失函數,例如最小二乘、邏輯回歸、probit回歸、Huber穩健回歸等。在這種情況下,對于所有 i i i,我們有 L i ≤ M ∥ a i ∥ 2 + λ L_i \leq M\|a_i\|^2 + \lambda Li?Mai?2+λ 并且 μ ≥ λ \mu \geq \lambda μλ

在這些假設下,梯度下降(GD)方法的收斂速率由條件數 κ : = L / μ \kappa := L/\mu κ:=L/μ 決定。條件數總是大于或等于1,當它顯著大于1時,函數的等值線變得非常橢圓形,導致GD方法的迭代產生振蕩。相反,當 κ \kappa κ 接近1時,GD方法收斂得更快。

在假設1和假設2下,VR方法以線性速率收斂。我們說一個隨機方法的函數值 ({f(x_k)}) 以 0 < ρ ≤ 1 0 < \rho \leq 1 0<ρ1 的速率線性收斂(在期望下),如果存在一個常數 C > 0 C > 0 C>0 使得:
E [ f ( x k ) ] ? f ( x ? ) ≤ ( 1 ? ρ ) k C = O ( exp ? ( ? k ρ ) ) ? k ( 16 ) E[f(x_k)] - f(x^*) \leq (1 - \rho)^k C = O(\exp(-k\rho)) \quad \forall k \quad (16) E[f(xk?)]?f(x?)(1?ρ)kC=O(exp(?kρ))?k(16)
這與每次迭代僅依賴于梯度無偏估計的經典SGD方法形成對比,后者在這些假設下只能獲得次線性速率:
E [ f ( x k ) ] ? f ( x ? ) ≤ O ( 1 / k ) E[f(x_k)] - f(x^*) \leq O(1/k) E[f(xk?)]?f(x?)O(1/k)
滿足這個不等式的最小 k k k 稱為算法的迭代復雜度。以下是GD、SGD和VR方法的基本變體的迭代復雜度和一次迭代的成本:

算法迭代次數一次迭代的成本
GD O ( κ log ? ( 1 / ? ) ) O(\kappa \log(1/\epsilon)) O(κlog(1/?)) O ( n ) O(n) O(n)
SGD O ( κ max max ? ( 1 / ? ) ) O(\kappa_{\text{max}} \max(1/\epsilon)) O(κmax?max(1/?)) O ( 1 ) O(1) O(1)
VR O ( ( κ max + n ) log ? ( 1 / ? ) ) O((\kappa_{\text{max}} + n) \log(1/\epsilon)) O((κmax?+n)log(1/?)) O ( 1 ) O(1) O(1)

算法的總運行時間由迭代復雜度和迭代運行時間的乘積決定。這里使用了 κ max : = max ? i L i / μ \kappa_{\text{max}} := \max_i L_i/\mu κmax?:=maxi?Li?/μ。注意 κ max ≥ κ \kappa_{\text{max}} \geq \kappa κmax?κ;因此,GD的迭代復雜度小于VR方法。

然而,由于GD的每次迭代成本是VR方法的 n n n 倍,VR方法在總運行時間方面更優越。

經典SGD方法的優勢在于它們的運行時間和收斂速率不依賴于 n n n,但它對容差 ? \epsilon ? 的依賴性要差得多,這解釋了當容差很小時SGD的性能較差。

在附錄B中,我們提供了一個簡單的證明,表明SGD2方法具有與VR方法相同的迭代復雜度。

2.基礎方差減少方法

方差減少(VR)方法的發展經歷了幾個階段,最初的一批方法使得收斂速率得到了顯著提升。這一系列方法的開端是SAG算法。隨后,隨機對偶坐標上升(SDCA)算法、MISO算法、隨機方差減少梯度(SVRG/S2GD)算法,以及SAGA(意為“改進的”SAG)算法相繼問世。

在本章中,我們將詳細介紹這些開創性的VR方法。而在第四章,我們會探討一些更新的方法,它們在特定的應用場景中相比這些基礎方法展現出了更優越的特性。

2.1.隨機平均梯度方法(SAG)

我們對第一種方差減少(VR)方法的探索,始于對完整梯度結構的模仿。既然完整梯度 ? f ( x ) \nabla f(x) ?f(x) 是所有 ? f i ( x ) \nabla f_i(x) ?fi?(x) 梯度的簡單平均,那么我們對完整梯度的估計 g k g_k gk? 也應該是這些梯度估計的平均。這種思想催生了我們的第一種VR方法:隨機平均梯度(SAG)方法。

SAG方法[37],[65]是早期增量聚合梯度(IAG)方法[4]的隨機化版本。SAG的核心思想是對每個數據點 i i i 維護一個估計值 v i k ≈ ? f i ( x k ) v_{ik} \approx \nabla f_i(x_k) vik??fi?(xk?)。然后,用這些 v i k v_{ik} vik? 值的平均來作為對完整梯度的估計,即:
g ˉ k = 1 n ∑ j = 1 n v j k ≈ 1 n ∑ j = 1 n ? f j ( x k ) = ? f ( x k ) ( 18 ) \bar{g}_k = \frac{1}{n} \sum_{j=1}^{n} v_{jk} \approx \frac{1}{n} \sum_{j=1}^{n} \nabla f_j(x_k) = \nabla f(x_k) \quad (18) gˉ?k?=n1?j=1n?vjk?n1?j=1n??fj?(xk?)=?f(xk?)(18)

在SAG的每次迭代中,從集合 { 1 , … , n } \{1, \ldots, n\} {1,,n} 中抽取一個索引 i k i_k ik?,然后根據以下規則更新 v j k v_{jk} vjk?
v j k k + 1 = { ? f i k ( x k ) , if? j = i k v j k k , if? j ≠ i k ( 19 ) v_{jk}^{k+1} = \begin{cases} \nabla f_{i_k}(x_k), & \text{if } j = i_k \\ v_{jk}^k, & \text{if } j \neq i_k \end{cases} \quad (19) vjkk+1?={?fik??(xk?),vjkk?,?if?j=ik?if?j=ik??(19)
其中,每個 v 0 i v_{0i} v0i? 可以初始化為零或 ? f i ( x 0 ) \nabla f_i(x_0) ?fi?(x0?) 的近似值。隨著解 x ? x^* x? 的逼近,每個 v i k v_{ik} vik? 會逐漸收斂到 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?),從而滿足VR屬性(12)。

為了高效實現SAG,我們需要注意在計算 g ˉ k \bar{g}_k gˉ?k? 時避免每次都從頭開始求和 n n n 個向量,因為這在 n n n 很大時成本很高。幸運的是,由于每次迭代只有一個 v i k v_{ik} vik? 項會改變,我們可以不必每次都重新計算整個和。具體來說,假設在迭代 k k k 中抽取了索引 i k i_k ik?,則有:
g ˉ k = 1 n ∑ j = 1 j ≠ i k n v j k + 1 n v i k k = g ˉ k ? 1 ? 1 n v i k k ? 1 + 1 n v i k k ( 20 ) \bar{g}_k = \frac{1}{n} \sum_{\substack{j=1 \\ j \neq i_k}}^{n} v_{jk} + \frac{1}{n} v_{i_k}^k = \bar{g}_{k-1} - \frac{1}{n} v_{i_k}^{k-1} + \frac{1}{n} v_{i_k}^k \quad (20) gˉ?k?=n1?j=1j=ik??n?vjk?+n1?vik?k?=gˉ?k?1??n1?vik?k?1?+n1?vik?k?(20)

由于除了 v i k v_{i_k} vik?? 之外的所有 v j k v_{jk} vjk? 值都保持不變,我們只需存儲每個 j j j 對應的一個向量 v j v_j vj?。算法1展示了SAG方法的具體實現。

SAG是首個實現線性收斂的隨機方法,其迭代復雜度為 O ( ( κ max + n ) log ? ( 1 / ? ) ) O((\kappa_{\text{max}} + n) \log(1/\epsilon)) O((κmax?+n)log(1/?)),使用步長 γ = O ( 1 / L max ) \gamma = O(1/L_{\text{max}}) γ=O(1/Lmax?)。這種線性收斂性可以在圖1中觀察到。值得注意的是,由于 L max L_{\text{max}} Lmax?-平滑函數對于任何 L ′ ≥ L max L' \geq L_{\text{max}} LLmax? 也是 L ′ L' L-平滑的,SAG方法對于足夠小的步長都能獲得線性收斂速率,這與經典SGD方法形成鮮明對比,后者只有在難以在實踐中調整的遞減步長序列下才能獲得次線性速率。

在當時,SAG的線性收斂是一個顯著的進展,因為它在每次迭代中只計算了一個隨機梯度(處理單個數據點)。然而,Schmidt等人[65]提供的收斂證明非常復雜,并且依賴于計算機驗證的步驟。SAG難以分析的一個關鍵原因是 g k g_k gk? 是梯度的一個有偏估計。

接下來,我們將介紹SAGA方法,這是SAG的一個變體,它利用協變量的概念來創建一個無偏的SAG方法變體,該變體具有類似的性能但更易于分析。


算法 1:SAG 方法

  1. 參數:步長 γ > 0 \gamma > 0 γ>0
  2. 初始化: x 0 x_0 x0? v i = 0 ∈ R d v_i = 0 \in \mathbb{R}^d vi?=0Rd 對于 i = 1 , … , n i = 1, \ldots, n i=1,,n
  3. k = 1 , … , T ? 1 k = 1, \ldots, T - 1 k=1,,T?1 執行:
    a. 隨機抽取 i k ∈ { 1 , … , n } i_k \in \{1, \ldots, n\} ik?{1,,n}
    b. 計算 g ˉ k = g ˉ k ? 1 ? 1 n v i k k ? 1 \bar{g}_k = \bar{g}_{k-1} - \frac{1}{n} v_{i_k}^{k-1} gˉ?k?=gˉ?k?1??n1?vik?k?1?
    c. 更新 v i k k = ? f i k ( x k ) v_{i_k}^k = \nabla f_{i_k}(x_k) vik?k?=?fik??(xk?)
    d. 更新梯度估計 g ˉ k = g ˉ k + 1 n v i k k \bar{g}_k = \bar{g}_k + \frac{1}{n} v_{i_k}^k gˉ?k?=gˉ?k?+n1?vik?k?
    e. 更新 x k + 1 = x k ? γ g ˉ k x_{k+1} = x_k - \gamma \bar{g}_k xk+1?=xk??γgˉ?k?
  4. 輸出: x T x_T xT?

2.2.SAGA方法

一種減少基本無偏梯度估計 ? f i k ( x k ) \nabla f_{i_k}(x_k) ?fik??(xk?) 方差的方法是通過使用所謂的協變量(或稱控制變量)。對于 i = 1 , … , n i = 1, \ldots, n i=1,,n,設 v i ∈ R d v_i \in \mathbb{R}^d vi?Rd 是一個向量。利用這些向量,我們可以將完整梯度 ? f ( x ) \nabla f(x) ?f(x) 重寫為:
? f ( x ) = 1 n ∑ i = 1 n ( ? f i ( x ) ? v i + v i ) = 1 n ∑ i = 1 n ? f i ( x ) ? v i + 1 n ∑ j = 1 n v j \nabla f(x) = \frac{1}{n} \sum_{i=1}^{n}(\nabla f_i(x) - v_i + v_i) = \frac{1}{n} \sum_{i=1}^{n} \nabla f_i(x) - v_i + \frac{1}{n} \sum_{j=1}^{n} v_j ?f(x)=n1?i=1n?(?fi?(x)?vi?+vi?)=n1?i=1n??fi?(x)?vi?+n1?j=1n?vj?
: = 1 n ∑ i = 1 n ? f i ( x , v ) ( 21 ) := \frac{1}{n} \sum_{i=1}^{n} \nabla f_i(x, v) \quad (21) :=n1?i=1n??fi?(x,v)(21)
其中定義 ? f i ( x , v ) : = ? f i ( x ) ? v i + 1 n ∑ j = 1 n v j \nabla f_i(x, v) := \nabla f_i(x) - v_i + \frac{1}{n} \sum_{j=1}^{n} v_j ?fi?(x,v):=?fi?(x)?vi?+n1?j=1n?vj?。現在,我們可以通過隨機抽樣一個 ? f i ( x , v ) \nabla f_i(x, v) ?fi?(x,v) 來構建完整梯度 ? f ( x ) \nabla f(x) ?f(x) 的無偏估計,對于 i ∈ { 1 , … , n } i \in \{1, \ldots, n\} i{1,,n},可以應用SGD方法,并使用梯度估計:
g k = ? f i k ( x k , v ) = ? f i k ( x k ) ? v i k + 1 n ∑ j = 1 n v j ( 22 ) g_k = \nabla f_{i_k}(x_k, v) = \nabla f_{i_k}(x_k) - v_{i_k} + \frac{1}{n} \sum_{j=1}^{n} v_j \quad (22) gk?=?fik??(xk?,v)=?fik??(xk?)?vik??+n1?j=1n?vj?(22)

為了觀察 v i v_i vi? 的選擇對方差 g k g_k gk? 的影響,我們可以將 g k = ? f i k ( x k , v ) g_k = \nabla f_{i_k}(x_k, v) gk?=?fik??(xk?,v) 代入,并利用 E i ~ 1 n [ v i ] = 1 n ∑ j = 1 n v j E_i \sim \frac{1}{n}[v_i] = \frac{1}{n} \sum_{j=1}^{n} v_j Ei?n1?[vi?]=n1?j=1n?vj? 來計算期望,得到:
E [ ∥ ? f i ( x k ) ? v i + E i ~ 1 n [ v i ? ? f i ( x k ) ] ∥ 2 ] ≤ E [ ∥ ? f i ( x k ) ? v i ∥ 2 ] ( 23 ) E \left[ \|\nabla f_i(x_k) - v_i + E_i \sim \frac{1}{n}[v_i - \nabla f_i(x_k)]\|^2 \right] \leq E \left[ \|\nabla f_i(x_k) - v_i\|^2 \right] \quad (23) E[∥?fi?(xk?)?vi?+Ei?n1?[vi???fi?(xk?)]2]E[∥?fi?(xk?)?vi?2](23)
這里使用了引理2,其中 X = ? f i ( x k ) ? v i X = \nabla f_i(x_k) - v_i X=?fi?(xk?)?vi?。這個界限 (23) 表明,如果 v i v_i vi? 隨著 k k k 的增加接近 ? f i ( x k ) \nabla f_i(x_k) ?fi?(xk?),我們就能獲得VR屬性 (12)。這就是為什么我們稱 v i v_i vi? 為協變量,并且我們可以選擇它們來減少方差。

例如,SGD2 方法 (13) 也實現了這種方法,其中 v i = ? f i ( x ? ) v_i = \nabla f_i(x^*) vi?=?fi?(x?)。然而,這在實踐中不常用,因為我們通常不知道 ? f i ( x ? ) \nabla f_i(x^*) ?fi?(x?)。一個更實用的選擇是 v i v_i vi? 作為我們知道的點 x ˉ i ∈ R d \bar{x}_i \in \mathbb{R}^d xˉi?Rd 附近的梯度 ? f i ( x ˉ i ) \nabla f_i(\bar{x}_i) ?fi?(xˉi?)。SAGA 對每個函數 f i f_i fi? 使用一個參考點 x ˉ i ∈ R d \bar{x}_i \in \mathbb{R}^d xˉi?Rd,并使用協變量 v i = ? f i ( x ˉ i ) v_i = \nabla f_i(\bar{x}_i) vi?=?fi?(xˉi?),其中每個 x ˉ i \bar{x}_i xˉi? 將是我們最后一次評估 f i f_i fi? 的點。使用這些協變量,我們可以構建梯度估計,按照 (22),給出:
g k = ? f i k ( x k ) ? ? f i k ( x ˉ i k ) + 1 n ∑ j = 1 n ? f j ( x ˉ j ) ( 24 ) g_k = \nabla f_{i_k}(x_k) - \nabla f_{i_k}(\bar{x}_{i_k}) + \frac{1}{n} \sum_{j=1}^{n} \nabla f_j(\bar{x}_j) \quad (24) gk?=?fik??(xk?)??fik??(xˉik??)+n1?j=1n??fj?(xˉj?)(24)

為了實現SAGA,我們可以存儲梯度 ? f i ( x ˉ i ) \nabla f_i(\bar{x}_i) ?fi?(xˉi?) 而不是 n n n 個參考點 x ˉ i \bar{x}_i xˉi?。也就是說,設 v j = ? f j ( x ˉ j ) v_j = \nabla f_j(\bar{x}_j) vj?=?fj?(xˉj?) 對于 j ∈ { 1 , … , n } j \in \{1, \ldots, n\} j{1,,n},在每次迭代中,我們像SAG一樣更新一個隨機梯度的 v j v_j vj?

算法 2 SAGA

  1. 參數:步長 γ > 0 \gamma > 0 γ>0
  2. 初始化: x 0 x_0 x0? v i = 0 ∈ R d v_i = 0 \in \mathbb{R}^d vi?=0Rd 對于 i = 1 , … , n i = 1, \ldots, n i=1,,n
  3. 進行 k = 1 , … , T ? 1 k = 1, \ldots, T - 1 k=1,,T?1 次迭代:
    a. 隨機抽取 i k ∈ { 1 , … , n } i_k \in \{1, \ldots, n\} ik?{1,,n}
    b. 保存舊值 v old = v i k v_{\text{old}} = v_{i_k} vold?=vik??
    c. 更新 v i k = ? f i k ( x k ) v_{i_k} = \nabla f_{i_k}(x_k) vik??=?fik??(xk?)
    d. 更新 x k + 1 = x k ? γ ( v i k ? v old + g ˉ k ) x_{k+1} = x_k - \gamma (v_{i_k} - v_{\text{old}} + \bar{g}_k) xk+1?=xk??γ(vik???vold?+gˉ?k?)
    e. 更新梯度估計 g ˉ k = g ˉ k ? 1 + 1 n ( v i k ? v old ) \bar{g}_k = \bar{g}_{k-1} + \frac{1}{n} (v_{i_k} - v_{\text{old}}) gˉ?k?=gˉ?k?1?+n1?(vik???vold?)
  4. 輸出: x T x_T xT?

SAGA方法具有與SAG相同的迭代復雜度 O ( ( κ max + n ) log ? ( 1 / ? ) ) O((\kappa_{\text{max}} + n) \log(1/\epsilon)) O((κmax?+n)log(1/?)),使用步長 γ = O ( 1 / L max ) \gamma = O(1/L_{\text{max}}) γ=O(1/Lmax?),但證明要簡單得多。然而,與SAG一樣,SAGA方法需要存儲 n n n 個輔助向量 v i ∈ R d v_i \in \mathbb{R}^d vi?Rd 對于 i = 1 , … , n i = 1, \ldots, n i=1,,n,這意味著需要 O ( n d ) O(nd) O(nd) 的存儲空間。當 d d d n n n 都很大時,這可能是不可行的。在下一節中,我們將詳細說明如何為常見模型(如正則化線性模型)減少這種內存需求。

當能夠將 n n n 個輔助向量存儲在內存中時,SAG和SAGA的表現往往相似。如果這個內存需求太高,我們將在下一節中回顧的SVRG方法是一個不錯的選擇。SVRG方法實現了相同的收斂速率,并且在實踐中通常幾乎一樣快,但只要求 O ( d ) O(d) O(d) 的內存,對于一般問題。

2.3.SVRG方法

在SAGA方法出現之前,一些早期的工作首次引入了協變量,以解決SAG方法所要求的高內存問題。這些研究構建了基于一個固定參考點 x ˉ ∈ R d \bar{x} \in \mathbb{R}^d xˉRd 的協變量,我們已經在該點計算了完整的梯度 ? f ( x ˉ ) \nabla f(\bar{x}) ?f(xˉ)。通過存儲參考點 x ˉ \bar{x} xˉ 和對應的完整梯度 ? f ( x ˉ ) \nabla f(\bar{x}) ?f(xˉ),我們可以在不存儲每個 ? f j ( x ˉ ) \nabla f_j(\bar{x}) ?fj?(xˉ) 的情況下,使用 x ˉ j = x ˉ \bar{x}_j = \bar{x} xˉj?=xˉ 對所有 j j j 來實現更新 (24)。具體來說,我們不是存儲這些向量,而是在每次迭代中利用存儲的參考點 x ˉ \bar{x} xˉ 來計算 ? f i k ( x ˉ ) \nabla f_{i_k}(\bar{x}) ?fik??(xˉ)。這個方法最初由不同的作者以不同的名字提出,但后來統一被稱為SVRG方法,遵循[28]和[84]的命名。

我們在算法3中對SVRG方法進行了形式化。

利用 (23),我們可以得出梯度估計 g k g_k gk? 的方差有界:
E [ ∥ g k ? ? f ( x k ) ∥ 2 ] ≤ E [ ∥ ? f i ( x k ) ? ? f i ( x ˉ ) ∥ 2 ] ≤ L max 2 ∥ x k ? x ˉ ∥ 2 E\left[ \| g_k - \nabla f(x_k) \|^2 \right] \leq E\left[ \| \nabla f_i(x_k) - \nabla f_i(\bar{x}) \|^2 \right] \leq L_{\text{max}}^2 \| x_k - \bar{x} \|^2 E[gk???f(xk?)2]E[∥?fi?(xk?)??fi?(xˉ)2]Lmax2?xk??xˉ2
其中第二個不等式使用了每個 f i f_i fi? L i L_i Li?-平滑性。

值得注意的是,參考點 x ˉ \bar{x} xˉ 越接近當前點 x k x_k xk?,梯度估計的方差就越小。

為了讓SVRG方法有效,我們需要在頻繁更新參考點 x ˉ \bar{x} xˉ(從而需要計算完整梯度)的成本與降低方差的好處之間做出權衡。為此,我們每 t t t 次迭代更新一次參考點,使其接近 x k x_k xk?(見算法II-C的第11行)。也就是說,SVRG方法包含兩個循環:一個外循環 s s s,其中計算參考梯度 ? f ( x ˉ s ? 1 ) \nabla f(\bar{x}_{s-1}) ?f(xˉs?1?)(第4行),以及一個內循環,其中固定參考點,并根據隨機梯度步驟(22)更新內部迭代 x k x_k xk?(第10行)。

與SAG和SAGA不同,SVRG只需要 O ( d ) O(d) O(d) 的內存。SVRG的缺點包括:1) 我們有一個額外的參數 t t t,即內循環的長度,需要調整;2) 每次迭代需要計算兩個梯度,并且每次更改參考點時都需要計算完整梯度。

Johnson和Zhang[28]展示了SVRG具有迭代復雜度 O ( ( κ max + n ) log ? ( 1 / ? ) ) O((\kappa_{\text{max}} + n) \log(1/\epsilon)) O((κmax?+n)log(1/?)),與SAG和SAGA相似。這是在假設內循環次數 t t t 從集合 { 1 , … , m } \{1, \ldots, m\} {1,,m} 中均勻抽樣的情況下得出的,其中 L max L_{\text{max}} Lmax? μ \mu μ,步長 γ \gamma γ t t t 之間必須滿足一定的依賴關系。在實踐中,通過使用 γ = O ( 1 / L max ) \gamma = O(1/L_{\text{max}}) γ=O(1/Lmax?) 和內循環長度 t = n t = n t=n,SVRG往往表現良好,這正是我們在圖1中使用的設置。

現在,有許多原始SVRG方法的變體。例如,有些變體使用 t t t 的替代分布[32],有些變體允許形式為 O ( 1 / L max ) O(1/L_{\text{max}}) O(1/Lmax?) 的步長[27],[33],[35]。還有一些變體使用 ? f ( x ˉ ) \nabla f(\bar{x}) ?f(xˉ) 的小批量近似來減少這些完整梯度評估的成本,并增加小批量大小以保持VR屬性。還有一些變體在內循環中根據[54]重復更新 g k g_k gk?
[ g_k = \nabla f_{i_k}(x_k) - \nabla f_{i_k}(x_{k-1}) + g_{k-1} \quad (25) ]
這提供了更局部的近似。使用這種連續更新變體 (25) 在最小化非凸函數時顯示出獨特的優勢,正如我們在第四節簡要討論的。最后,注意SVRG可以利用 ? f ( x ˉ s ) \nabla f(\bar{x}_s) ?f(xˉs?) 的值來幫助決定何時終止算法。

算法 3 SVRG方法

  1. 參數:步長 γ > 0 \gamma > 0 γ>0
  2. 初始化參考點 x ˉ 0 = x 0 ∈ R d \bar{x}_0 = x_0 \in \mathbb{R}^d xˉ0?=x0?Rd
  3. 進行外循環 s = 1 , 2 , … s = 1, 2, \ldots s=1,2,
    a. 計算并存儲 ? f ( x ˉ s ? 1 ) \nabla f(\bar{x}_{s-1}) ?f(xˉs?1?)
    b. 設 x 0 = x ˉ s ? 1 x_0 = \bar{x}_{s-1} x0?=xˉs?1?
    c. 選擇內循環迭代次數 t t t
    d. 進行內循環 k = 0 , 1 , … , t ? 1 k = 0, 1, \ldots, t - 1 k=0,1,,t?1
    i. 隨機抽取 i k ∈ { 1 , … , n } i_k \in \{1, \ldots, n\} ik?{1,,n}
    ii. 計算 g k = ? f i k ( x k ) ? ? f i k ( x ˉ s ? 1 ) + ? f ( x ˉ s ? 1 ) g_k = \nabla f_{i_k}(x_k) - \nabla f_{i_k}(\bar{x}_{s-1}) + \nabla f(\bar{x}_{s-1}) gk?=?fik??(xk?)??fik??(xˉs?1?)+?f(xˉs?1?)
    iii. 更新 x k + 1 = x k ? γ g k x_{k+1} = x_k - \gamma g_k xk+1?=xk??γgk?
    e. 更新參考點 x ˉ s = x t \bar{x}_s = x_t xˉs?=xt?

2.4. SDCA及其變體

SAG和SVRG方法的一個不足之處在于,它們的步長依賴于可能在某些問題中未知的 L max L_{\text{max}} Lmax?。在SVRG之前,SDCA方法[70]作為最早的VR方法之一,將坐標下降方法的研究擴展到了有限和問題。SDCA及其變體背后的理念是,梯度的坐標提供了一種自然的方差減少梯度估計。具體來說,設 j ∈ { 1 , … , d } j \in \{1, \ldots, d\} j{1,,d},并且定義 ? j f ( x ) : = ( ? f ( x ) ? x j ) e j \nabla_j f(x) := \left( \frac{\partial f(x)}{\partial x_j} \right) e_j ?j?f(x):=(?xj??f(x)?)ej? 為 (f(x)) 的第 j j j 個坐標方向的導數,其中 e j ∈ R d e_j \in \mathbb{R}^d ej?Rd 是第 j j j 個單位向量。坐標導數的一個關鍵特性是 ? j f ( x ? ) = 0 \nabla_j f(x^*) = 0 ?j?f(x?)=0,這是因為我們知道 ? f ( x ? ) = 0 \nabla f(x^*) = 0 ?f(x?)=0。這與每個數據點的導數 ? f j \nabla f_j ?fj? 不同,后者在 x ? x^* x? 處可能不為零。因此,我們有:
∥ ? f ( x ) ? ? j f ( x ) ∥ 2 → 0 當 x → x ? ( 26 ) \| \nabla f(x) - \nabla_j f(x) \|^2 \rightarrow 0 \quad \text{當} \quad x \rightarrow x^* \quad (26) ∥?f(x)??j?f(x)20xx?(26)
這意味著坐標導數滿足了方差減少屬性(12)。此外,我們還可以使用 ? j f ( x ) \nabla_j f(x) ?j?f(x) 來構建 ? f ( x ) \nabla f(x) ?f(x) 的無偏估計。例如,設 j j j 是從集合 { 1 , … , d } \{1, \ldots, d\} {1,,d} 中均勻隨機選取的索引。因此,對于任何 i ∈ { 1 , … , d } i \in \{1, \ldots, d\} i{1,,d},我們有 P [ j = i ] = 1 d P[j = i] = \frac{1}{d} P[j=i]=d1?。因此, d × ? j f ( x ) d \times \nabla_j f(x) d×?j?f(x) ? f ( x ) \nabla f(x) ?f(x) 的無偏估計,因為:
E [ d ? j f ( x ) ] = d ∑ i = 1 d P [ j = i ] ? f ( x ) ? x i e i = ∑ i = 1 d ? f ( x ) ? x i e i = ? f ( x ) E\left[ d \nabla_j f(x) \right] = d \sum_{i=1}^{d} P[j = i] \frac{\partial f(x)}{\partial x_i} e_i = \sum_{i=1}^{d} \frac{\partial f(x)}{\partial x_i} e_i = \nabla f(x) E[d?j?f(x)]=di=1d?P[j=i]?xi??f(x)?ei?=i=1d??xi??f(x)?ei?=?f(x)

因此, ? j f ( x ) \nabla_j f(x) ?j?f(x) 具有我們期望的VR估計完整梯度的所有理想屬性,而且不需要使用協變量。使用這種坐標梯度的一個缺點是,對于我們的和問題(2),它的計算成本很高。這是因為計算 ? j f ( x ) \nabla_j f(x) ?j?f(x) 需要遍歷整個數據集,因為 ? j f ( x ) = 1 n ∑ i = 1 n ? j f i ( x ) \nabla_j f(x) = \frac{1}{n} \sum_{i=1}^{n} \nabla_j f_i(x) ?j?f(x)=n1?i=1n??j?fi?(x)。因此,使用坐標導數似乎與我們的和問題的結構不兼容。然而,我們可以經常將原始問題(2)重寫為所謂的對偶公式,其中坐標導數可以利用固有的結構。

例如,L2正則化線性模型(15)的對偶公式為:
v ? ∈ arg ? max ? v ∈ R n 1 n ∑ i = 1 n ? ? i ? ( ? v i ) ? λ 2 ∥ 1 λ ∑ i = 1 n v i a i ∥ 2 ( 27 ) v^* \in \arg\max_{v \in \mathbb{R}^n} \frac{1}{n} \sum_{i=1}^{n} -\ell_i^*(-v_i) - \frac{\lambda}{2} \left\| \frac{1}{\lambda} \sum_{i=1}^{n} v_i a_i \right\|^2 \quad (27) v?argvRnmax?n1?i=1n???i??(?vi?)?2λ? ?λ1?i=1n?vi?ai? ?2(27)
其中 ? i ? ( v ) \ell_i^*(v) ?i??(v) ? i \ell_i ?i? 的凸共軛。我們可以使用映射 x = 1 λ ∑ i = 1 n v i a i x = \frac{1}{\lambda} \sum_{i=1}^{n} v_i a_i x=λ1?i=1n?vi?ai? 來恢復原始問題(15)中的 x x x 變量。將解 v ? v^* v? 代入上述映射的右側可以得到(15)的解 x ? x^* x?

注意,這個對偶問題有 n n n 個實變量 v i ∈ R v_i \in \mathbb{R} vi?R,每個訓練樣本對應一個。此外,每個對偶損失函數 ? i ? \ell_i^* ?i?? 僅是 v i v_i vi? 的函數。也就是說,損失函數中的第一項在坐標上是可分離的。這種在坐標上的可分離性,加上第二項的簡單形式,允許我們有效實現坐標上升方法。實際上,Shalev-Shwartz和Zhang展示了在這個問題上的坐標上升具有與SAG、SAGA和SVRG類似的迭代復雜度 O ( ( κ max + n ) log ? ( 1 / ? ) ) O((\kappa_{\text{max}} + n) \log(1/\epsilon)) O((κmax?+n)log(1/?))

迭代成本和算法結構也非常相似:通過跟蹤求和 ∑ i = 1 n v i a i \sum_{i=1}^{n} v_i a_i i=1n?vi?ai? 來處理(27)中的第二項,每個對偶坐標上升迭代只需要考慮一個訓練樣本,并且每次迭代的成本與 n n n 無關。此外,我們可以使用一維線搜索有效地計算步長,以最大限度地提高作為 v i v_i vi? 函數的對偶目標。這意味著,即使沒有 L max L_{\text{max}} Lmax? 或相關量的了解,也可以實現VR方法的快速最壞情況運行時間。

3.方差縮小的實踐問題

為了實現基本的方差減少(VR)方法并取得合理的性能,必須解決幾個實施問題。在本節中,我們將討論上述未涉及的若干問題。

3.1.SAG/SAGA/SVRG設置步長

在優化算法的領域,特別是隨機平均梯度(SAG)、隨機平均梯度算法(SAGA)和隨機梯度(SVRG)等變分減少方法中,步長的設置是一個關鍵問題。雖然對于隨機對偶坐標上升(SDCA)方法,我們可以使用對偶目標來確定步長,但是SAG、SAGA和SVRG這些原始變量方法的理論依據是步長應為 γ = O ( 1 L max ) \gamma = O\left(\frac{1}{L_{\text{max}}}\right) γ=O(Lmax?1?) 的形式。然而,在實際應用中,我們往往不知道 L max L_{\text{max}} Lmax? 的確切值,而且使用其他步長可能會得到更好的性能。

全梯度下降(full-GD)方法中設置步長的一種經典策略是Armijo線搜索。給定當前點 x k x_k xk? 和搜索方向 g k g_k gk?,Armijo線搜索在 γ k \gamma_k γk? 的線上進行,該線定義為 γ k ∈ { γ : x k + γ g k } \gamma_k \in \{\gamma : x_k + \gamma g_k\} γk?{γ:xk?+γgk?},并且要求函數有充分的減少,即:
f ( x k + γ k g k ) < f ( x k ) ? c γ k ∥ ? f ( x k ) ∥ 2 f(x_k + \gamma_k g_k) < f(x_k) - c \gamma_k \|\nabla f(x_k)\|^2 f(xk?+γk?gk?)<f(xk?)?cγk?∥?f(xk?)2
然而,這種方法需要在多個候選步長 γ k \gamma_k γk? 上計算 f ( x k + γ k g k ) f(x_k + \gamma_k g_k) f(xk?+γk?gk?),這在評估 f ( x ) f(x) f(x) 需要遍歷整個數據集時成本過高。

為了解決這個問題,可以采用隨機變體的方法,尋找滿足以下條件的 γ k \gamma_k γk?
f i k ( x k + γ k g k ) < f i k ( x k ) ? c γ k ∥ ? f i k ( x k ) ∥ 2 f_{ik}(x_k + \gamma_k g_k) < f_{ik}(x_k) - c \gamma_k \|\nabla f_{ik}(x_k)\|^2 fik?(xk?+γk?gk?)<fik?(xk?)?cγk?∥?fik?(xk?)2
這種方法在實踐中通常效果良好,尤其是在 ∥ ? f i k ( x k ) ∥ \|\nabla f_{ik}(x_k)\| ∥?fik?(xk?) 不接近零的情況下,盡管目前還沒有理論支持這種方法。

另外,Mairal 提出了一種在實踐中設置步長的“Bottou技巧”。這種方法通過取數據集的一小部分(例如5%)進行二分搜索,以嘗試找到在通過這個樣本進行一次遍歷時的最優步長。與Armijo線搜索類似,這種方法在實踐中通常表現良好,但同樣缺乏理論基礎。

請注意,上述內容是對原文的重新表述,使用了Markdown格式來表示數學公式和變量。

然而,SDCA方法也有一些缺點。首先,它需要計算凸共軛 ? i ? \ell_i^* ?i?? 而不是簡單的梯度。我們沒有凸共軛的自動微分等價物,所以這可能會增加實現工作量。最近的工作已經提出了不需要共軛的“無對偶”SDCA方法,而是直接使用梯度。然而,在這些方法中,不再可能跟蹤對偶目標以設置步長。其次,盡管SDCA只需要 O ( n + d ) O(n + d) O(n+d) 的內存來解決(15)問題,但對于這個問題類別,SAG/SAGA也只需要 O ( n + d ) O(n + d) O(n+d) 的內存(見第三節)。適用于更一般問題的SDCA變體具有SAG/SAGA的 O ( n d ) O(nd) O(nd) 內存,因為 v i v_i vi? 成為具有 d d d 個元素的向量。SDCA的一個最后的微妙缺點是它隱含地假設強凸性常數 μ \mu μ 等于 λ \lambda λ。對于 μ \mu μ 大于 λ \lambda λ 的問題,原始的VR方法通常顯著優于SDCA。

3.2. 終止條件的確定

在算法優化領域,我們通常依賴于迭代復雜度的理論結果來預測算法達到特定精度所需的最壞情況下的迭代次數。但是,這些理論界限往往依賴于一些我們無法預知的常數,而在實際應用中,算法往往能在更少的迭代次數內達到預期精度。因此,我們需要設立一些測試標準來決定何時應該結束算法的運行。

在傳統的全梯度下降(full-GD)方法中,我們通常根據梯度的范數 ∥ ? f ( x k ) ∥ \| \nabla f(x_k) \| ∥?f(xk?) 或者與此相關的其他量來決定何時停止迭代。對于SVRG方法,我們可以采用相同的準則,但使用 ∥ ? f ( x ˉ s ) ∥ \| \nabla f(\bar{x}_s) \| ∥?f(xˉs?) 來作為判斷依據。對于SAG/SAGA方法,盡管我們沒有顯式地計算完整的梯度,但量 $ g_{\bar{k}} $ 會逐漸逼近 ? f ( x k ) \nabla f(x_k) ?f(xk?),因此,使用 ∥ g k ˉ ∥ \| g_{\bar{k}} \| gkˉ? 作為停止條件是一種合理的啟發式方法。

在SDCA方法中,通過一些額外的記錄工作,我們可以在不增加額外漸近成本的情況下跟蹤對偶目標的梯度。此外,一種更為系統的方法是跟蹤對偶間隙,雖然這會增加每迭代 O ( n ) O(n) O(n) 的成本,但它能夠提供具有對偶間隙證明的終止條件。另外,基于強凸目標的最優性條件,MISO方法采用了一種基于二次下界[41]的原則性方法。

以下是使用Markdown格式表示的數學公式和變量:

  • 梯度范數: ∥ ? f ( x k ) ∥ \| \nabla f(x_k) \| ∥?f(xk?)
  • SVRG方法中的梯度范數: ∥ ? f ( x ˉ s ) ∥ \| \nabla f(\bar{x}_s) \| ∥?f(xˉs?)
  • SAG/SAGA方法中逼近梯度的量:$ g_{\bar{k}} $
  • 每迭代增加的成本: O ( n ) O(n) O(n)
  • MISO方法
  • 二次下界

請注意,上述內容是對原文的重新表述,使用了Markdown格式來表示數學公式和變量。

3.3. 減少內存需求

盡管隨機梯度變分減少(SVRG)算法消除了早期變分減少方法的內存需求,但在實際應用中,SAG(隨機平均梯度下降)和SAGA(帶梯度累積的隨機平均梯度下降)算法在很多問題上往往比SVRG算法需要更少的迭代次數。這引發了一個思考:是否存在某些問題,使得SAG/SAGA能夠在 O ( n d ) O(nd) O(nd) 內存需求以下實現。本節將探討線性模型類別,這類模型的內存需求可以顯著降低。

考慮線性模型,其中每個函數 f i ( x ) f_i(x) fi?(x) 可以表示為 ξ i ( a i ? x ) \xi_i(\mathbf{a}_i^\top x) ξi?(ai??x)。對 x x x 求導得到梯度形式:
? f i ( x ) = ξ ′ ( a i ? x ) a i \nabla f_i(x) = \xi'(\mathbf{a}_i^\top x) \mathbf{a}_i ?fi?(x)=ξ(ai??x)ai?
這里, ξ ′ \xi' ξ 表示 ξ \xi ξ 的導數。假設我們可以直接訪問特征向量 a i \mathbf{a}_i ai?,那么為了實現SAG/SAGA方法,我們只需要存儲標量 ξ ( a i ? x ) \xi(\mathbf{a}_i^\top x) ξ(ai??x)。這樣,內存需求就從 O ( n d ) O(nd) O(nd) 減少到了 O ( n ) O(n) O(n)。SVRG算法也可以利用梯度的這種結構:通過存儲這 n n n 個標量,我們可以將SVRG“內部”迭代中每次所需的梯度評估次數減少到1,對于這一類問題。

還有其他類型的問題,例如概率圖模型,它們也提供了降低內存需求的可能性[66]。通過特定的數據結構和算法優化,可以進一步減少算法在運行時所需的內存資源。

以下是使用Markdown格式表示的數學公式和變量:

  • 線性模型函數: f i ( x ) = ξ i ( a i ? x ) f_i(x) = \xi_i(\mathbf{a}_i^\top x) fi?(x)=ξi?(ai??x)
  • 梯度表達式: ? f i ( x ) = ξ ′ ( a i ? x ) a i \nabla f_i(x) = \xi'(\mathbf{a}_i^\top x) \mathbf{a}_i ?fi?(x)=ξ(ai??x)ai?
  • 特征向量: a i \mathbf{a}_i ai?
  • 內存需求從 O ( n d ) O(nd) O(nd) 減少到 O ( n ) O(n) O(n)

3.4. 稀疏梯度的處理

在某些問題中,梯度 ? f i ( x ) \nabla f_i(x) ?fi?(x) 可能包含大量零值,例如具有稀疏特征的線性模型。在這種情況下,傳統的隨機梯度下降(SGD)算法可以高效實現,其計算復雜度與梯度中非零元素的數量成線性關系,這通常遠小于問題維度 d d d。然而,在標準的變分減少(VR)方法中,這種優勢并沒有被利用。幸運的是,存在兩種已知的改進方法。

第一種改進方法由Schmidt等人提出,它利用了更新過程的簡單性,實現了一種“即時”計算的變體,使得每次迭代的成本與非零元素的數量成正比。以SAG為例(但這種方法適用于所有變體),具體做法是在每次迭代后不存儲完整的向量 v i k v_{ik} vik?,而是只計算對應于非零元素的 v i k j v_{ik_j} vikj??,通過更新自上次該元素非零以來的每個變量 v i k j v_{ik_j} vikj??

第二種改進方法由Leblond等人為SAGA提出,它在更新公式 x k + 1 = x k ? γ ( ? f i k ( x k ) ? ? f i k ( x ˉ i k ) + g ˉ k ) x_{k+1} = x_k - \gamma(\nabla f_{ik}(x_k) - \nabla f_{ik}(\bar{x}_{ik}) + \bar{g}_k) xk+1?=xk??γ(?fik?(xk?)??fik?(xˉik?)+gˉ?k?) 中引入了額外的隨機性。這里, ? f i k ( x k ) \nabla f_{ik}(x_k) ?fik?(xk?) ? f i k ( x ˉ i k ) \nabla f_{ik}(\bar{x}_{ik}) ?fik?(xˉik?) 是稀疏的,而 g ˉ k \bar{g}_k gˉ?k? 是密集的。在這個方法中,密集項 ( g ˉ k ) j (\bar{g}_k)_j (gˉ?k?)j? 的每個分量被替換為 w j ( g ˉ k ) j w_j (\bar{g}_k)_j wj?(gˉ?k?)j?,其中 w ∈ R d w \in \mathbb{R}^d wRd 是一個隨機稀疏向量,其支持集包含在 ? f i k ( x k ) \nabla f_{ik}(x_k) ?fik?(xk?) 中,并且期望上是一個所有元素都為1的常數向量。這樣,更新過程保持了無偏性(盡管現在是稀疏的),并且增加的方差不會影響算法的收斂速率。Leblond等人提供了更多的細節。

以下是使用Markdown格式表示的數學公式和變量:

  • 梯度: ? f i ( x ) \nabla f_i(x) ?fi?(x)
  • SGD更新: x k + 1 = x k ? γ ( ? f i k ( x k ) ? ? f i k ( x ˉ i k ) + g ˉ k ) x_{k+1} = x_k - \gamma(\nabla f_{ik}(x_k) - \nabla f_{ik}(\bar{x}_{ik}) + \bar{g}_k) xk+1?=xk??γ(?fik?(xk?)??fik?(xˉik?)+gˉ?k?)
  • 稀疏梯度: ? f i k ( x k ) \nabla f_{ik}(x_k) ?fik?(xk?) ? f i k ( x ˉ i k ) \nabla f_{ik}(\bar{x}_{ik}) ?fik?(xˉik?)
  • 密集梯度: g ˉ k \bar{g}_k gˉ?k?
  • 隨機稀疏向量: w w w
  • 期望常數向量:所有元素都為1的向量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44155.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

車載測試資料學習和CANoe工具實操車載項目(每日直播)

每日直播時間&#xff1a;&#xff08;直播方式&#xff1a;騰訊會議&#xff09; 周一到周五&#xff1a;20&#xff1a;00-23&#xff1a;00 周六與周日&#xff1a;9&#xff1a;00-17&#xff1a;00 向進騰訊會議學習的&#xff0c;可以關注我并后臺留言 直播內容&#xff…

Simscape物理建模步驟

為了介紹構建和仿真物理模型的步驟&#xff0c;這里以simulink自帶示例模型Mass-Spring-Damper with Controller為例&#xff0c;下圖為建立好的模型。 詳細物理建模和仿真分析步驟如下&#xff1a; 步驟 1&#xff1a;使用 ssc_new 創建新模型 使用 ssc_new 是開始構建 Sims…

李彥宏所說的卷應用到底是什么?

李彥宏在2024世界人工智能大會上的發言強調了一個重要的觀點&#xff0c;那就是在AI時代&#xff0c;技術的應用比技術本身更為關鍵。他所提出的“卷應用”而非“卷模型”&#xff0c;實際上是在呼吁業界關注AI技術的實際落地和價值創造&#xff0c;而不是單純地在模型精度或規…

【 RESTful API 】

RESTful API 是一種用于構建 web 應用程序的設計風格和架構模式。它提供了通過 HTTP 協議訪問和操作資源的規范方式。 REST&#xff08;Representational State Transfer&#xff09;是一種軟件架構風格&#xff0c;它強調在網絡中以資源的形式進行數據傳輸和狀態管理。RESTfu…

Memcached與Redis:緩存解決方案的較量與選擇

標題&#xff1a;Memcached與Redis&#xff1a;緩存解決方案的較量與選擇 在現代應用架構中&#xff0c;緩存是提升性能的關鍵技術之一。Memcached和Redis作為兩款流行的開源緩存解決方案&#xff0c;它們各自有著獨特的特點和使用場景。本文將深入比較Memcached和Redis的特性…

案例|LabVIEW連接S7-1200PLC

附帶&#xff1a; 寫了好的參考文章&#xff1a; 通訊測試工具和博圖仿真機的連接教程【內含圖文完整過程軟件使用】 解決博圖V15 V16 V17 V18等高版本和低版本在同款PLC上不兼容的問題 目錄 前言一、準備條件二、步驟1. HslCommunicationDemo問題1&#xff1a;連接失敗?問題…

Lingo學習(二)——線性規劃基礎、矩陣工廠

一、線性規劃基礎 &#xff08;一&#xff09;方法 ① 一個線性規劃中只含一個目標函數。(兩個以上是多目標線性規劃,Lingo無法直接解) ② 求目標函數的最大值或最小值分別用max …或min …來表示。 ③ 以!開頭,以;結束的語句是注釋語句; ④ 線性規劃和非線性規劃的本質…

Android11 MTK 狀態欄添加無Sim卡圖標

1、近日&#xff0c;查看測試提出的bug時&#xff0c;發現了一個問題&#xff0c;設備在未安裝sim卡時&#xff0c;狀態欄中不顯示無sim卡的圖標。 2、解決 路徑&#xff1a;****\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\StatusBarSign…

01、Kerberos安全認證之原理及搭建命令使用學習筆記

文章目錄 前言一、Kerberos原理1.1、數據安全防護&#xff08;kerberos所屬的層次&#xff09;1.2、Kerberos介紹1.3、Kerberos名詞介紹1.4、Kerberos術語1.5、Kerberos認證流程1.5.1、Kerberos流程圖1.5.2、第一次通信&#xff1a;客戶端與AS1.5.3、第二次通信&#xff1a;客戶…

cpp使用第三方庫

使用第三方庫在C中進行編程是一種常見的做法&#xff0c;因為它可以讓利用現成的代碼來實現更復雜的功能&#xff0c;而不必從頭開始編寫。下面是一個示例&#xff0c;演示如何在C項目中引入并使用一個第三方庫。這個例子將使用Boost庫&#xff0c;它是C中廣泛使用的一個庫&…

60、基于淺層神經網絡的數據擬合(matlab)

1、基于淺層神經網絡的數據擬合的簡介、原理以及matlab實現 1&#xff09;內容說明 基于淺層神經網絡的數據擬合是一種常見的機器學習方法&#xff0c;用于通過輸入數據來擬合一個非線性函數。這種方法通常包括一個輸入層、一個或多個隱藏層和一個輸出層。神經網絡通過學習權…

廣電日志分析系統

需求 廣電集團中有若干個系統都產生日志信息&#xff0c;目前大約分布與70到80臺服務器中&#xff0c;分別是windows與Linux操作系統。需要將服務器上產生的日志文件利用我們的技術進行解析 設計 每個日志工作站負責30-50個服務器的日志解析工作。可以根據實際需求進行設置&…

ENSP實現防火墻區域策略與用戶管理

目錄 實驗拓撲與要求?編輯 交換機與防火墻接口的配置 交換機&#xff1a; 創建vlan 接口配置 防火墻配置及接口配置 防火墻IP地址配置 云配置?編輯?編輯?編輯 在瀏覽器上使用https協議登陸防火墻&#xff0c;并操作 訪問網址&#xff1a;https://192.168.100.1:844…

51單片機嵌入式開發:9、 STC89C52RC 操作LCD1602技巧

STC89C52RC 操作LCD1602技巧 1 代碼工程2 LCD1602使用2.1 LCD1602字庫2.2 巧妙使用sprintf2.3 光標顯示2.4 寫固定長度的字符2.5 所以引入固定長度寫入方式&#xff1a; 3 LCD1602操作總結 1 代碼工程 承接上文&#xff0c;在原有工程基礎上&#xff0c;新建關于lcd1602的c和h…

linux中如何設置多個redis進程并且設置獨立密碼?

在Linux中設置多個Redis進程&#xff08;實例&#xff09;并為每個實例設置獨立密碼&#xff0c;你需要為每個Redis實例配置不同的配置文件&#xff0c;并在這些配置文件中指定不同的端口、數據目錄、密碼等。Redis本身并不直接支持在配置文件中設置“密碼”來阻止未授權訪問&a…

ArduPilot開源飛控之AP_Mount_Backend_Serial

ArduPilot開源飛控之AP_Mount_Backend_Serial 1. 源由2. 框架設計2.1 類定義2.2 構造函數2.3 init 方法2.4 受保護成員 3. 重要方法4. 總結5. 參考資料 1. 源由 AP_Mount_Backend_Serial是AP_Mount_Backend基于串口的通信的一個擴展模版。 2. 框架設計 繼承自 AP_Mount_Back…

Sentieon應用教程:本地使用-Quick_start

1、準備工作&#xff1a; License下載鏈接&#xff1a;http://www.sentieon.com/eula/b703e839c8c7c5b8fa73238277fd5da23a0276be54712edb46ee8f4d4f3d873fbf 軟件下載地址&#xff1a; https://insvast-download.oss-cn-shanghai.aliyuncs.com/Sentieon/release/sentieon-gen…

11-《風信子》

風信子 風信子&#xff08;學名&#xff1a;Hyacinthus orientalis L.&#xff09;&#xff1a;是多年草本球根類植物&#xff0c;鱗莖卵形&#xff0c;有膜質外皮&#xff0c;皮膜顏色與花色成正相關&#xff0c;未開花時形如大蒜&#xff0c;原產地中海沿岸及小亞細亞一帶&am…

【Vue】vue-element-admin組件化功能

1. 組件的封裝 在vue-element-admin中&#xff0c;每個功能區域或UI元素都被封裝成一個或多個Vue組件。這些組件可以是簡單的按鈕、輸入框&#xff0c;也可以是復雜的表格、表單或頁面布局。每個組件都包含了其模板&#xff08;HTML結構&#xff09;、邏輯&#xff08;JavaScr…

【論文精讀】Exploring the Causality of End-to-End Autonomous Driving

背景信息 團隊&#xff1a;百度 代碼&#xff1a;https://github.com/bdvisl/DriveInsight 論文思想簡述&#xff1a;這篇論文并不是提出SOTA模型&#xff0c;而是提出了一些評估模型的方法。 目前已有的分析方法 大語言模型。VAQ來提供解釋性&#xff0c;比如DriveVLM&…