凸函數像一個碗,球放哪都會滾到同一個底。
非凸函數像一片山谷地形——你可能困在一個小坑裡,卻看不見更深的谷。
想像把一顆球放到函數的曲線上,讓它沿著斜坡往下滾,停在最低處。下面兩個動畫不斷重複「隨機放球 → 滾到谷底」的過程,注意觀察兩者的差別。
凸函數只有一個最低點(全域最小值);非凸函數則有許多高低起伏的坑——除了最深的那個「全域最小值」,還有很多較淺的「局部最小值」。卡在局部最小值,正是訓練模型時最常遇到的麻煩。
數學上,判斷一個函數是不是凸函數,有個很直觀的方法:在曲線上任取兩點,連成一條直線(稱為弦線 / chord)。
白話翻譯:弦線必須永遠在曲線的上方(或剛好貼著)。只要存在任何一組兩點,讓弦線「跌到曲線下面」,這個函數就不是凸函數。
拖曳曲線上的兩個圓點,改變弦線的位置。試試在「非凸函數」上,找出能讓弦線陷到曲線下方的位置。
訓練模型時,我們用梯度下降(Gradient Descent)來找最小值——說穿了就是「往腳下最陡的下坡方向走一小步」,重複很多次。在凸函數上這保證找到答案;但在非凸地形上,球只會滾進最靠近起點的那個坑,從此停住。
點擊下方地形上的任一處放球,看它往哪裡滾。星號 ★ 是全域最小值(真正的谷底)。
把學習率拉大,觀察球如何「跨過」小坑,甚至開始劇烈彈跳——這正對應深度學習中「學習率調太大導致發散」的現象。
神經網路的損失函數(Loss Function)幾乎都是高度非凸的——而且不是二維,是動輒上百萬維的超高維地形。這帶來幾個重要的觀念:
凸函數是「閉著眼睛都能找到底」的理想世界;非凸函數則是真實機器學習所在的崎嶇山谷——我們無法保證找到最深的谷,但靠著聰明的優化策略,通常能找到一個夠好的容身之處。
非凸最佳化是深度學習的本質難題,iPAS 數學與訓練考點(中級科目三)。重點:凸函數只有單一全域最小、好優化;神經網路損失高度非凸,有許多局部最小、鞍點與平原,沒有保證找到全域最小。易混點:高維下多數局部最小品質相近、鞍點比壞的局部最小更常見更需逃離;靠 SGD 隨機性、動量、好初始化常能找到夠好的解。情境:解釋為何同模型多次訓練結果略不同。
想練情境題與詳解 → AI 學習與考證地圖
凸函數只有一個全域最小、任何局部最小都是全域最小,好優化;非凸函數有多個局部最小與鞍點,優化較難。
多層非線性與大量參數讓損失地形高度複雜,存在許多局部最小、鞍點與平原;沒有保證找到全域最小。
高維下多數局部最小品質相近、且多為鞍點;靠 SGD 的隨機性、動量、好的初始化與架構,常能找到夠好的解。
某些方向是極小、某些方向是極大的點;梯度為零但非最小。深度學習中鞍點比壞的局部最小更常見、更需逃離。
好的初始化、動量與自適應優化器、學習率排程、批次正規化、殘差連結等,都幫助穿越複雜地形找到好解。