简单的解释,让你秒懂“最优化” 问题
最優化,就是:
1.?構造一個合適的目標函數,使得這個目標函數取到極值的解就是你所要求的東西;
2.?找到一個能讓這個目標函數取到極值的解的方法。
下面通過兩個例子進行解釋。
>>>>?
一、圖像去噪
假設你手頭有一張照片《沙塵暴下依然堅持工作的攝像師》:
你打算讓計算機幫你去個噪,把圖像變清晰。你對計算機說:
你看,計算機的回復往往是“你丫能不能說機話!”這是因為計算機是無法進行抽象思維的,它不懂重建、去噪、清晰這些復雜的概念,它唯一會的東西就是加減乘除這樣的基本運算,你只能使用正確的計算機語句讓它去執行對應的基本運算,因此就需要首先把去噪問題轉化成一個數學問題,一個函數的求解問題。比如可以試著這樣想,去噪,就是要把圖像變平滑,于是你對計算機說:給爺來張圖片,無比光滑。計算機的回答是:
真的是好光滑,但是且慢!攝像師哪去了?你是想光滑圖像,但是也需要保留圖像中的有用細節。這就說明你設計的目標不合理。一個好的去噪的目標,應該兼顧兩個要求:與原始圖像盡量接近,并且盡量光滑。一個合適的目標可以是:尋找一幅圖像A,讓下面這個目標函數J最小:
J(A) = (A與原始圖像盡量接近) + r * (A盡量平滑)
我們要尋找的,就是能讓目標函數J最小的圖像A,能夠兼顧相似和平滑兩個要求。因子r用來權衡二者的重要程度。當r取0時,我們得到的最優目標圖像就是原始圖像自己!因為我們的目標只是相似,而原始圖像自己和自己最像,但是這樣就沒有任何平滑效果;當r取無窮大的時候,為了讓整個目標函數J不至于無窮大,我們必須保證A無比平滑,這樣就得到上面那張過度平滑,與原始圖像毫不相似的無意義圖片。因此,為了兼顧兩個目標,我們需要把r的值取得不大不小。
有了一個合適的目標函數,下面就需要構造一種獲得它的極小值的算法。在圖像去噪領域有一大堆算法:卷積去噪、中值去噪、雙邊濾波、偏微分方程、小波去噪、隨機場去噪......它們的作用或多或少都是相同的——求上面那個混合目標函數的最小值。計算機運算獲得的去噪圖像是:
從這個成功去噪的例子中我們可以看出:合理的目標函數是最優化第一個需要精心考慮的問題,需要直覺和理性;而如何求解目標函數,則是一個數學算法問題。二者都是數學家們和工程師們大顯身手的地方。
二、機器學習
若你困惑機器學習和最優化之間為什么聯系緊密,是因為對機器學習這個領域不太了解,實際上研究最優化方法最多的人都在這個領域。機器學習的目的,就是為了讓計算機代替人來發現數據之間隱藏的關系。
之所以要使用計算機,是因為數據量太大,遠遠超過人腦的處理能力。比如我們需要從一堆人臉圖片里給每個人標上正確的名字,一幅32像素見方的人臉圖像有1024顆像素點,你能想象出一百萬張這樣的照片和1萬個人名字之間的關系是什么樣嗎。再比如給你1萬個患者的DNA序列,每個患者的序列由百萬級的堿基對構成,你能找到這些天文數字量級的序列和是否患某種疾病之間的聯系嗎?
答案是不能!所以研究者退而求其次,建立很多學習模型,這些模型輸入是一個樣本的數據(頭像圖片、一個人的DNA序列),輸出是樣本的標簽(人名、是否患病)。模型里有大量可以調整的參數,這些參數通過訓練,能夠學習到數據和標簽之間人類無法直接理解的、復雜的關系。科學家期望當模型訓練完成后,再拿來一個樣本,喂給這個訓練好的機器,它能夠吐出一個標簽,這個標簽恰好就是樣本對應的那個正確的標簽。
目前人們已經研究出一大堆學習模型:神經網絡、支持向量機、AdaBoost、隨機森林、隱馬爾科夫鏈、卷積神經網絡等等。它們的結構差異很大,但是共同點都是擁有一大堆參數,就等著你喂給它數據供它學習。這些模型的學習也需要一個目標函數:讓模型的分類錯誤率盡量小。為了達到目的,模型的訓練往往首先給參數賦上隨機初值,然后用各種下降法來尋找能讓分類錯誤率更小的參數設置,梯度下降、牛頓法、共軛梯度法和Levenberg—Marquard法都是常見的方法。
隨著研究的深入,問題也越來越多,比如下降法往往只能保證找到目標函數的局部最小值,找不到全局最小值,怎么辦呢?答案是不一味下降、也適當爬爬山,說不定能跳出小水溝(局部極小值)找到真正的深井(全局極小值),這種算法叫模擬退火。也可以增大搜索范圍,讓一群螞蟻(蟻群算法)或者鳥兒(粒子群算法)一齊搜索,或者讓參數巧妙地隨機改變(遺傳算法)。
那么多模型,到底該選哪個?研究者又發現了一個定理“天下沒有免費的午餐”定理,意思是沒有一個模型能一直比其他模型好,對于不同類型的數據,必須要通過實驗才能發現哪種學習模型更適合。機器學習領域也就成了學界灌水嚴重的領域之一——換模型、調參數就能發文章哎。
下面說到了調參數,問題又來了,到底是參數多了好還是少了好?參數少了模型太笨學不到數據內的復雜關系,參數多了模型太精明又可能會把數據中的隨機噪聲當作某種關系進行認真學習(過擬合)。最后大家一致認為,確定模型的復雜度時,要保證模型能力足夠強,能夠學會數據之間的關系,能力又不能太強,以至于耍小聰明亂學習。這種選擇模型的思想被稱為奧卡姆剃刀:選擇有能力的模型中最簡單的那個。此外,訓練模型的目標并不是為了使訓練樣本能夠被盡量正確分類,更需要對未知新樣本有好的分類效果,這樣模型才有實用價值,這種能力被稱為泛化能力。除了奧卡姆剃刀原理外,訓練時引入隨機性的模型比確定的模型(比如BP神經網絡)具有更好的泛化能力。
模型的更新也是問題。如果引入了新數據,全部模型都需要重新訓練是一筆很大的開銷,在線學習模型采用來一個樣本學一點的模式,能夠不斷自我更新;半監督學習利用少量帶標簽的樣本訓練一個原始模型,然后利用大量無標簽數據再學習。
咱們來看看一些經典的學習模型能做成啥樣。首先隨便畫點散點圖,紅色和白色是兩類不同的數據,分類器需要對整個空間做分割,讓平均分類錯誤率盡量小。你可以先想想如果讓你來分要如何劃分。
首先是神經網絡,使用了6個神經元把空間分成了奇怪的形狀:
如果神經元數目變成10個,學到的模式將會十分怪異,說明模型過于復雜了:
下面是支持向量機的分類結果,這是這幾十年機器學習最重要的成果之一,它的發明是基于結構最小化準則,通俗地講就是把目標函數設為:
J=模型分類正確率 + r * 模型復雜度
使得模型能夠自動選擇分類效果好,并且盡量簡單的參數。
接下來是隨機樹,它把空間劃分為一系列矩形區域(葉子),所有的葉子區域由一顆樹形結構從根節點不斷劃分而成,隨機的意思是樹的生長每次劃分第一維還是第二維是隨機的:
支持向量機對于小樣本數據和非線性結構數據的分類有十分優秀的表現:
在機器學習領域,還有很多重要問題被不斷討論,優秀的模型也不斷在涌現。這個領域的開山模型是神經元,由其組成的多層神經網絡由于訓練速度慢、分類效果不佳,在支持向量機出現后很快就失去了熱度。大家卯著勁研究怎么面對訓練樣本不足的窘境,PCA和核方法大行其道,前者致力于減少數據維數,后者致力于從低維數據中學習高維結構。但是近幾年隨著卷積神經網絡的流行,神經網絡又煥發出了第二春,研究者發現只要樣本量足夠大(百萬級甚至億級樣本量),網絡參數足夠多(百萬級參數),加上巧妙的防過擬合技術,利用現代并行計算帶來的強大計算能力,神經網絡能夠學得和人類的判別能力一樣好。機器學習領域發展了幾十年,似乎又回到了出發的地方。
via:王小龍(知乎)
算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、算法、計算機、編程等相關領域。
稿件一經采用,我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結
以上是生活随笔為你收集整理的简单的解释,让你秒懂“最优化” 问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cpri带宽不足的解决方法_u盘容量不足
- 下一篇: 蔡论意谈数学与艺术