優化與訓練

學習率(learning rate)

/ LUR-ning rayt /

學習率,是模型在學習時每一步邁得有多大。想像往谷底走下坡:坡度告訴你該朝哪個方向,而學習率決定你每次跨多遠。步子極小,你最終能到,但慢得叫人難受;步子巨大,你可能一躍越過整個谷底,落到比出發點還高的地方,來回劇烈彈跳。

從技術上說,當梯度告訴你「把這個權重朝這個方向調」之後,學習率就是那個控制調整量到底有多大的乘數。學習率為0.1,每一步走的距離是0.01的十倍。它幾乎總是最該調對的那一個超參數:差上十倍,訓練就可能徹底失敗——要麼發散成一團亂碼(太高),要麼爬得太慢以至於永遠練不完(太低)。

沒有什麼神奇數值,因為合適的步長取決於損失地形的形狀,而你事先看不見那形狀。於是人們去搜索:取幾個跨越數量級的值(0.001、0.01、0.1)試一試,盯著損失曲線,挑出那個仍能穩定訓練的最大學習率。現代實踐很少把它固定不變——通常是開頭先「熱身」升上去,再隨時間「衰減」下來,這正是學習率調度的活兒。

同一個模型,三種學習率。取0.5,損失沒幾步就爆炸到無窮大(邁過了頭)。取0.00001,跑了幾千步損失幾乎沒動(在爬)。取0.01,它平滑地一路滑到一個不錯的值。只有動手試,才知道哪個是哪個。

太大會邁過頭;太小在爬;恰好則一路滑下。

如果你的損失突然躥到一個巨大的數,或者變成「NaN」,那幾乎總是學習率太高了。訓練一炸,這就是第一個該往下調的旋鈕。

又稱
step sizelr学习率步长學習率步長