多元最佳化
梯度下降(gradient descent)
梯度下降是沿坡下行這一思想的實用主力版本,也是訓練幾乎每一個現代神經網路的演算法。其思想樸素得令人意外:要最小化一個函數,就反覆把當前猜測沿梯度的相反方向輕輕一推,因為那是函數下降最快的方向。
每次更新寫作 x_new = x_old - eta 乘 grad f(x_old),其中 eta 是學習率或步長——一個控制步子大小的小正數。eta 取得太小,進展慢得令人痛苦;取得太大,則越過谷底、甚至發散。與教科書式的最速下降不同,實用的梯度下降通常固定 eta(或按計畫調度),而不是每步都做精確線搜索,因為當變數有數百萬個時,哪怕只算一次梯度就已經很昂貴。在機器學習中還有一個變招,隨機梯度下降,每步用一小批隨機資料來估計梯度,以精確性換取速度。
這就是訓練背後誠實的機制:神經網路的權重是變數,損失是函數 f,梯度由反向傳播(穿過網路運用鏈式法則)高效算出。該方法並不會魔法般地找到最好的權重——它下降到路徑所通向的那個局部極小,其成敗取決於學習率、初始化和損失地形的形狀。梯度下降能在巨大的非凸問題上工作得這麼好,一部分是經驗上的好運氣,一部分是數十年工程打磨的結果。
要透過最小化平方誤差來擬合一條直線,梯度下降反覆以與誤差負梯度成比例的小步調整斜率和截距。經過多次迭代,參數穩定在最小二乘解附近——與正規方程一步給出的答案相同。
梯度下降迭代地達到正規方程直接求出的解——當直接求解過於龐大時很有用。
梯度下降找到的是局部極小,未必是全域極小,而只有在非凸地形上這一區別才顯出鋒芒。在凸函數上每個局部極小都是全域極小,這正是凸性使該方法可被證明可靠的原因。
又稱
另見