局部極小值與鞍點(local minima and saddle points)
/ LOH-kul MIN-ih-muh and SAD-ul poynts /
當訓練沿著損失地形往下走、尋找最低點時,它可能在一些並非真正谷底的地方卡住或停滯。局部極小值,是一處在它緊鄰一帶最低、卻並非整體最低的窪地——就像半山腰的一汪小池塘。站在裡面四下張望,每個方向都是往上的,儘管別處其實還有一道更深的山谷。全域極小值,才是所有點裡真正最低的那個。
鞍點要微妙些,而且事實證明,在高維空間裡它常見得多。它是這樣一處地方:在某些方向上是往上走,在另一些方向上是往下走——形如一副馬鞍,或一道山口。那裡的坡度是平的(梯度為零),於是樸素的下降會慢到幾近停止,被騙以為自己已經到了,儘管只要朝對的方向看,往下走的出路就在那兒。學習曲線裡長長的平台期,常常就是正在被慢慢穿越的鞍點。
而深度學習裡有一個讓人安心、又有幾分出人意料的現實:在大型神經網路那種極高維的地形中,糟糕的局部極小值,比低維圖景給人的直覺要罕見得多,而那些最麻煩的平坦處大多是鞍點,而非陷阱。一個點要成為真正的局部極小值,它必須在數百萬個方向上同時向上彎曲——這在統計上不大可能。這正是簡單的梯度下降之所以能work得這麼好的部分原因,也是為什麼動量、以及帶雜訊的 SGD 更新(它們有助於從鞍點上滑下去)會如此有用。
想像一副馬鞍:騎手坐進的那個凹處,前後方向是低的,左右方向卻是高的。一個球正好放在正中央會一動不動——那兒的地面是平的——可只要朝側面輕輕一推,它就滾走了。訓練會在這種點上停滯,直到 SGD 裡的雜訊把它往某個下坡方向輕輕一撥。
鞍點在正中央是平的,可只要朝側面邁一步就是下坡。
「深層網路會無可救藥地困在糟糕的局部極小值裡」這種老擔憂,多半被誇大了——在高維空間裡,鞍點和平坦的高原才是更現實的麻煩,而 SGD 裡那點隨機雜訊通常就能逃出它們。