💡一句話定義
非凸函數(Non-convex Function)= 損失地形有很多高低起伏的谷,不只一個最低點。梯度下降只看得到「腳下的坡」,所以很可能滾進某個局部最優(假谷底)就停住,而錯過真正最低的全局最優。
複雜(非線性)模型的損失函數幾乎都是非凸的。理解「哪裡是真谷底、哪裡是坑」,是看懂訓練為什麼有時卡住的關鍵。
🏔️用「矇眼下山」來想
🎮互動:點一下,看彈珠滾進哪個谷
在曲線上點擊放下彈珠,看它往下滾。點左邊會滾進全局最優(真谷底);點右邊常會卡在局部最優(半山腰的坑)。把學習率拉到最大,還會看到步伐太大「飛出山谷」。
🏔️ 非凸函數尋谷之旅(梯度下降法)
狀態:請在下方圖表的「曲線上」點擊任意位置放置彈珠
💡 提示:試著把學習率調到最大 (0.1),看看彈珠會不會因為「步伐太大」而飛出山谷!
⚖️凸函數 vs 非凸函數
| 面向 | 凸函數(Convex) | 非凸函數(Non-convex) |
|---|---|---|
| 地形 | 單一個碗形 | 連綿山脈、多個谷 |
| 最小值 | 只有一個(全局=局部) | 一個全局+多個局部、還有鞍點 |
| 梯度下降 | 一定收斂到全局最優 | 可能卡在局部最優或鞍點 |
| 典型例子 | 線性迴歸、邏輯迴歸的損失 | 深層神經網路的損失 |
重點:凸問題「怎麼下都對」;非凸問題「起點與運氣會影響結果」,這正是深度學習訓練的難處之一。
📖名詞速記
📉損失地形
損失函數畫出的「誤差地形圖」,越低代表模型越準。
損失函數畫出的「誤差地形圖」,越低代表模型越準。
🏆全局最優
整片山脈絕對最低的谷,誤差最小、模型最好。
整片山脈絕對最低的谷,誤差最小、模型最好。
🕳️局部最優
半山腰的小坑,四周都是上坡,容易被誤認成終點。
半山腰的小坑,四周都是上坡,容易被誤認成終點。
👣參數更新
感受坡度後往低處跨一步,改變自己位置的動作。
感受坡度後往低處跨一步,改變自己位置的動作。
🚀為什麼深度網路還是能訓練好?
既然是非凸、有一堆坑,為什麼實務上還是能練出好模型?幾個原因:
🪑多是鞍點
高維空間中卡住的多半是鞍點(某些方向還能下降),不是糟糕的局部最小。
高維空間中卡住的多半是鞍點(某些方向還能下降),不是糟糕的局部最小。
🎲SGD 的噪音
小批次梯度帶隨機抖動,反而能把彈珠震出淺坑。
小批次梯度帶隨機抖動,反而能把彈珠震出淺坑。
🏂動量 / Adam
帶著慣性衝過小起伏、加速穿越平坦區。
帶著慣性衝過小起伏、加速穿越平坦區。
🔄多次隨機起點
不同初始化多跑幾次,取最好的結果。
不同初始化多跑幾次,取最好的結果。
✅自我檢測
Q1. 凸函數和非凸函數,梯度下降的結果差在哪?
凸函數只有一個最小值,梯度下降一定收斂到全局最優;非凸函數有多個局部最優與鞍點,梯度下降可能卡住,結果會受起點與學習率影響。
Q2. 為什麼彈珠會卡在「局部最優」?
梯度下降只看腳下的坡度。走進小坑後四周都是上坡(梯度≈0),演算法以為到谷底就停了,其實旁邊還有更深的全局最優。
Q3. 學習率太大在這個 demo 會發生什麼?
步伐太大會直接跨過谷底、越走越遠,甚至飛出定義範圍(發散)。適中的學習率才能穩定滾進谷底。
Q4. 明知非凸有坑,為什麼深度學習還能成功?
高維空間多是鞍點而非壞的局部最小;再加上 SGD 的隨機噪音、動量/Adam、多次隨機初始化,通常能找到「夠好」的解。
🎯重點整理
- 非凸:損失地形有多個谷,不只一個最低點。
- 全局 vs 局部:全局最優是真谷底;局部最優是半山腰的坑。
- 梯度下降的限制:只看腳下坡度,可能卡在局部最優或鞍點。
- 學習率:太大跨過谷底、發散;適中才穩定收斂。
- 能成功的原因:高維多鞍點+SGD 噪音+動量/Adam+多次起點。