隨機梯度下降(stochastic gradient descent)
/ stoh-KAS-tik GRAY-dee-ent dih-SENT /
想像你在濃霧籠罩的山上往下走,想抵達谷底。你看不見整片地形,但能感覺到腳下的地面朝哪邊傾斜,於是你朝下坡邁一步,再感覺一次,如此反覆。這就是梯度下降。隨機梯度下降多加了一個花樣:你不在每一步之前都仔細勘測整座山,而是只瞥一眼腳邊的一小塊地,就據此邁步。這樣更粗糙,但同樣的時間裡你能多走出許多步。
具體來說,普通梯度下降會在調整權重前,先在整個訓練集上算出損失——準確,可一旦你有數百萬個樣本,就慢得叫人難受。隨機梯度下降則改用單個樣本(實踐中是一小批,即 mini-batch)來估計坡度,並立刻更新。「隨機」意思是「隨機抽取的」,這份隨機讓每一步都帶雜訊:它有時會指得略微偏一點。但雜訊在許多步裡會相互抵消,而提速卻極為可觀——這正是為什麼今天幾乎每一個大型神經網路,都靠隨機梯度下降及其後代來訓練。
這份雜訊不只是被勉強容忍——它還能幫忙。這種抖動讓路徑有機會從淺坑裡彈出來,而完全平滑的下降也許就卡在那裡出不來了;它還起到一種溫和的正則化作用。代價是隨機梯度下降很少能恰好停在谷底;它往往在一片不錯的區域裡遊蕩,而不是落到某一個點上。調好學習率(步長),正是讓這種遊蕩保持有益、而不至於變成一團混亂的關鍵。
在一百萬張圖片上訓練:全批量梯度下降必須把這一百萬張都處理完才能邁出一步——也許每分鐘才幾步。用大小為128的小批量做隨機梯度下降,則每128張圖片就邁一步——每分鐘數千步。每一步更帶雜訊,但步數多得多,通常就贏了。
許多粗糙的步子,通常勝過寥寥幾步完美的。
嚴格來說,「隨機」指每一步用一個樣本,但在現代實踐中幾乎人人都用小批量,卻仍稱之為隨機梯度下降。帶雜訊的更新是一項特性,而不只是一種妥協——但前提是學習率得設得合理。