深度學習 · 最佳化

非凸函數與局部最優

真實模型的誤差地形不是一個漂亮的碗,而是連綿起伏的山脈——矇眼下山,很容易掉進半山腰的假谷底。

凸 vs 非凸全局最優局部最優鞍點逃離技巧

💡一句話定義

非凸函數(Non-convex Function)= 損失地形有很多高低起伏的谷,不只一個最低點。梯度下降只看得到「腳下的坡」,所以很可能滾進某個局部最優(假谷底)就停住,而錯過真正最低的全局最優

複雜(非線性)模型的損失函數幾乎都是非凸的。理解「哪裡是真谷底、哪裡是坑」,是看懂訓練為什麼有時卡住的關鍵。

🏔️用「矇眼下山」來想

把訓練 AI 想成矇著眼睛下山,要找世界最低點:誤差記分板(損失函數)畫出的立體地形就是這片山脈;AI 被隨機空投到某處(你在圖上點的位置),只能用腳感受坡度(梯度),往低處跨一步(參數更新)。麻煩在於——它可能走進半山腰的小坑,四周一探都是上坡,就以為到谷底了,其實翻過旁邊小丘還有更深的谷。

🎮互動:點一下,看彈珠滾進哪個谷

在曲線上點擊放下彈珠,看它往下滾。點左邊會滾進全局最優(真谷底);點右邊常會卡在局部最優(半山腰的坑)。把學習率拉到最大,還會看到步伐太大「飛出山谷」。

🏔️ 非凸函數尋谷之旅(梯度下降法)
狀態:請在下方圖表的「曲線上」點擊任意位置放置彈珠
💡 提示:試著把學習率調到最大 (0.1),看看彈珠會不會因為「步伐太大」而飛出山谷!

⚖️凸函數 vs 非凸函數

面向凸函數(Convex)非凸函數(Non-convex)
地形單一個碗形連綿山脈、多個谷
最小值只有一個(全局=局部)一個全局+多個局部、還有鞍點
梯度下降一定收斂到全局最優可能卡在局部最優或鞍點
典型例子線性迴歸、邏輯迴歸的損失深層神經網路的損失
重點:凸問題「怎麼下都對」;非凸問題「起點與運氣會影響結果」,這正是深度學習訓練的難處之一。

📖名詞速記

📉損失地形
損失函數畫出的「誤差地形圖」,越低代表模型越準。
🏆全局最優
整片山脈絕對最低的谷,誤差最小、模型最好。
🕳️局部最優
半山腰的小坑,四周都是上坡,容易被誤認成終點。
👣參數更新
感受坡度後往低處跨一步,改變自己位置的動作。

🚀為什麼深度網路還是能訓練好?

既然是非凸、有一堆坑,為什麼實務上還是能練出好模型?幾個原因:

🪑多是鞍點
高維空間中卡住的多半是鞍點(某些方向還能下降),不是糟糕的局部最小。
🎲SGD 的噪音
小批次梯度帶隨機抖動,反而能把彈珠震出淺坑。
🏂動量 / Adam
帶著慣性衝過小起伏、加速穿越平坦區。
🔄多次隨機起點
不同初始化多跑幾次,取最好的結果。

自我檢測

Q1. 凸函數和非凸函數,梯度下降的結果差在哪?
凸函數只有一個最小值,梯度下降一定收斂到全局最優;非凸函數有多個局部最優與鞍點,梯度下降可能卡住,結果會受起點與學習率影響。
Q2. 為什麼彈珠會卡在「局部最優」?
梯度下降只看腳下的坡度。走進小坑後四周都是上坡(梯度≈0),演算法以為到谷底就停了,其實旁邊還有更深的全局最優。
Q3. 學習率太大在這個 demo 會發生什麼?
步伐太大會直接跨過谷底、越走越遠,甚至飛出定義範圍(發散)。適中的學習率才能穩定滾進谷底。
Q4. 明知非凸有坑,為什麼深度學習還能成功?
高維空間多是鞍點而非壞的局部最小;再加上 SGD 的隨機噪音、動量/Adam、多次隨機初始化,通常能找到「夠好」的解。

🎯重點整理

📝 iPAS 考點提醒

梯度下降是模型怎麼學的核心,iPAS 必考(初級科目一觀念、中級科目三)。重點:沿損失函數梯度的反方向更新參數、逐步降低誤差,學習率決定步伐大小。易混點:學習率太大會震盪或發散、太小收斂慢;批次(穩但慢)、隨機 SGD(快但震盪)、小批次(折衷、最常用)要分清。情境:高維深度網路多卡在鞍點而非壞的局部最小,靠動量與隨機性逃離。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

梯度下降在做什麼?

沿損失函數梯度的反方向一步步更新參數,讓損失逐漸下降,是訓練模型找最佳參數的核心方法。

學習率太大或太小會怎樣?

太大會震盪甚至發散、跨過最低點;太小收斂很慢、易卡住。需適當設定,或用學習率排程動態調整。

批次、隨機、小批次梯度下降差在哪?

批次用全部資料(穩但慢);隨機(SGD)每筆更新(快但震盪);小批次取一小撮(折衷、最常用,適合 GPU 平行)。

會卡在局部最小值嗎?

可能;但高維深度網路多為鞍點而非真正壞的局部最小,加上動量與隨機性,通常能逃離找到夠好的解。

怎麼讓梯度下降更穩更快?

用動量、自適應優化器(Adam)、學習率排程、特徵標準化、適當批次大小,並監控損失曲線調整。

🧭 相關主題

← 返回 AI 學習與考證地圖