數學基礎

凸性(convexity)

/ kon-VEK-suh-tee /

凸函數,是形狀像一隻光滑碗的函數:在它的曲線上隨便挑兩個點,在兩點之間繃一根筆直的細繩,這根繩永遠不會落到曲線下方去。由此帶來的日常後果妙極了——它恰好只有一個最低點,沒有任何假碗底把你困住。無論你站在哪裡,一路往下走,總能走到那個唯一真正的最小值。相形之下,非凸函數則是一片崎嶇的山脈,遍布著一個個看著像谷底、其實不是的局部窪地。

這種「一隻碗、無陷阱」的性質,是凡是做優化的人夢寐以求的——優化,就是尋找一個函數最低(或最高)點的本領。面對一個凸問題,簡單的下山法保證能找到全域最優解,而且抵達得很高效。你從不必擔心有更好的解,正藏在你沒去看過的某個角落裡——凸性向你保證,並沒有那麼一個。

線性迴歸、邏輯迴歸、支援向量機這些經典機器學習方法,被刻意構造成凸的,正是為了讓它們的訓練可靠、可復現:跑兩遍,得到同一個答案。但關於深度學習,有一句大實話——神經網路斷然不是凸的。它們的誤差地形崎嶇得嚇人,遍布著數不清的山谷與鞍點,誰也不能保證梯度下降能找到那個最好的。過去十年裡令人愉快的意外是:在這些浩瀚的地形中,許多「夠好就行」的山谷,實踐中竟然管用得出奇——這正是深度學習雖然放棄了凸性的那份安穩、卻依舊成功的緣由。

拋物線 y = x² 是凸的:你在它上面任取兩點連一條弦,這條弦都浮在曲線上方,而且只有一個底,位於 x = 0 處。現在再想像一條波浪起伏、有好幾個深淺不一窪地的曲線——那就是非凸的。在錯誤的地方起步往下走,你就會卡在一個淺窪裡,永遠到不了最深的那個。

凸:一隻碗,往下走必勝。非凸:崎嶇山脈,你可能困死在一個淺窪裡。

凸性保證了「往下走就能通向全域最優」,這正是經典方法如此靠得住的緣由——但深度神經網路並不凸,所以梯度下降至多只能許給你一個「夠好」的山谷,而非存在的那個最深的。

又稱
凸性凸函数凸函數convex functionconvex