最優化問題的簡潔介紹

最優化,就是:

1. 構造一個合適的目標函數,使得這個目標函數取到極值的解就是你所要求的東西;
2. 找到一個能讓這個目標函數取到極值的解的方法
下面經過兩個例子進行解釋。算法

1、圖像去噪
假設你手頭有一張照片《沙塵暴下依然堅持工做的攝像師》:網絡

你打算讓計算機幫你去個噪,把圖像變清晰。你對計算機說:
你看,計算機的回覆每每是「你丫能不能說機話!」這是由於計算機是沒法進行抽象思惟的,它不懂重建、去噪、清晰這些複雜的概念,它惟一會的東西就是加減乘除這樣的基本運算,你只能使用正確的計算機語句讓它去執行對應的基本運算,所以就須要首先把去噪問題轉化成一個數學問題,一個函數的求解問題。好比能夠試着這樣想,去噪,就是要把圖像變平滑,因而你對計算機說:給爺來張圖片,無比光滑。計算機的回答是:
真的是好光滑,可是且慢!攝像師哪去了?你是想光滑圖像,可是也須要保留圖像中的有用細節。這就說明你設計的目標不合理。一個好的去噪的目標,應該兼顧兩個要求:與原始圖像儘可能接近,而且儘可能光滑。一個合適的目標能夠是:尋找一幅圖像A,讓下面這個目標函數J最小:

 

J(A) = (A與原始圖像儘可能接近) + r * (A儘可能平滑)機器學習

咱們要尋找的,就是能讓目標函數J最小的圖像A,可以兼顧類似和平滑兩個要求。因子r用來權衡兩者的重要程度。當r取0時,咱們獲得的最優目標圖像就是原始圖像本身!由於咱們的目標只是類似,而原始圖像本身和本身最像,可是這樣就沒有任何平滑效果;當r取無窮大的時候,爲了讓整個目標函數J不至於無窮大,咱們必須保證A無比平滑,這樣就獲得上面那張過分平滑,與原始圖像絕不類似的無心義圖片。所以,爲了兼顧兩個目標,咱們須要把r的值取得不大不小。函數

有了一個合適的目標函數,下面就須要構造一種得到它的極小值的算法。在圖像去噪領域有一大堆算法:卷積去噪、中值去噪、雙邊濾波、偏微分方程、小波去噪、隨機場去噪......它們的做用或多或少都是相同的——求上面那個混合目標函數的最小值。計算機運算得到的去噪圖像是:學習

從這個成功去噪的例子中咱們能夠看出:合理的目標函數是最優化第一個須要精心考慮的問題,須要直覺和理性;而如何求解目標函數,則是一個數學算法問題。兩者都是數學家們和工程師們大顯身手的地方。

 

2、機器學習
題主困惑機器學習和最優化之間爲何聯繫緊密,是由於對機器學習這個領域不太瞭解,實際上研究最優化方法最多的人都在這個領域。機器學習的目的,就是爲了讓計算機代替人來發現數據之間隱藏的關係。優化

之因此要使用計算機,是由於數據量太大,遠遠超過人腦的處理能力。好比咱們須要從一堆人臉圖片裏給每一個人標上正確的名字,一幅32像素見方的人臉圖像有1024顆像素點,你能想象出一百萬張這樣的照片和1萬我的名字之間的關係是什麼樣嗎。再好比給你1萬個患者的DNA序列,每一個患者的序列由百萬級的鹼基對構成,你能找到這些天文數字量級的序列和是否患某種疾病之間的聯繫嗎?spa

答案是不能!因此研究者退而求其次,創建不少學習模型,這些模型輸入是一個樣本的數據(頭像圖片、一我的的DNA序列),輸出是樣本的標籤(人名、是否患病)。模型裏有大量能夠調整的參數,這些參數經過訓練,可以學習到數據和標籤之間人類沒法直接理解的、複雜的關係。科學家指望當模型訓練完成後,再拿來一個樣本,餵給這個訓練好的機器,它可以吐出一個標籤,這個標籤剛好就是樣本對應的那個正確的標籤。設計

目前人們已經研究出一大堆學習模型:神經網絡、支持向量機、AdaBoost、隨機森林、隱馬爾科夫鏈、卷積神經網絡等等。它們的結構差別很大,可是共同點都是擁有一大堆參數,就等着你餵給它數據供它學習。這些模型的學習也須要一個目標函數:讓模型的分類錯誤率儘可能小。爲了達到目的,模型的訓練每每首先給參數賦上隨機初值,而後用各類降低法來尋找能讓分類錯誤率更小的參數設置,梯度降低、牛頓法、共軛梯度法和Levenberg—Marquard法都是常見的方法。3d

隨着研究的深刻,問題也愈來愈多,好比降低法每每只能保證找到目標函數的局部最小值,找不到全局最小值,怎麼辦呢?答案是不一味降低、也適當爬登山,說不定能跳出小水溝(局部極小值)找到真正的深井(全局極小值),這種算法叫模擬退火。也能夠增大搜索範圍,讓一羣螞蟻(蟻羣算法)或者鳥兒(粒子羣算法)一齊搜索,或者讓參數巧妙地隨機改變(遺傳算法)。blog

那麼多模型,到底該選哪一個?研究者又發現了一個定理「天下沒有免費的午飯」定理,意思是沒有一個模型能一直比其餘模型好,對於不一樣類型的數據,必需要經過實驗才能發現哪一種學習模型更適合。機器學習領域也就成了學界灌水嚴重的領域之一——換模型、調參數就能發文章哎。

下面說到了調參數,問題又來了,究竟是參數多了好仍是少了好?參數少了模型太笨學不到數據內的複雜關係,參數多了模型太精明又可能會把數據中的隨機噪聲看成某種關係進行認真學習(過擬合)。最後你們一致認爲,肯定模型的複雜度時,要保證模型能力足夠強,可以學會數據之間的關係,能力又不能太強,以致於耍小聰明亂學習。這種選擇模型的思想被稱爲奧卡姆剃刀:選擇有能力的模型中最簡單的那個。此外,訓練模型的目標並非爲了使訓練樣本可以被儘可能正確分類,更須要對未知新樣本有好的分類效果,這樣模型纔有實用價值,這種能力被稱爲泛化能力。除了奧卡姆剃刀原理外,訓練時引入隨機性的模型比肯定的模型(好比BP神經網絡)具備更好的泛化能力。

模型的更新也是問題。若是引入了新數據,所有模型都須要從新訓練是一筆很大的開銷,在線學習模型採用來一個樣本學一點的模式,可以不斷自我更新;半監督學習利用少許帶標籤的樣本訓練一個原始模型,而後利用大量無標籤數據再學習。

我們來看看一些經典的學習模型能作成啥樣。首先隨便畫點散點圖,紅色和白色是兩類不一樣的數據,分類器須要對整個空間作分割,讓平均分類錯誤率儘可能小。你能夠先想一想若是讓你來分要如何劃分。


首先是神經網絡,使用了6個神經元把空間分紅了奇怪的形狀:
若是神經元數目變成10個,學到的模式將會十分怪異,說明模型過於複雜了:
下面是支持向量機的分類結果,這是這幾十年機器學習最重要的成果之一,它的發明是基於結構最小化準則,通俗地講就是把目標函數設爲:
J=模型分類正確率 + r * 模型複雜度
使得模型可以自動選擇分類效果好,而且儘可能簡單的參數。

接下來是隨機樹,它把空間劃分爲一系列矩形區域(葉子),全部的葉子區域由一顆樹形結構從根節點不斷劃分而成,隨機的意思是樹的生長每次劃分第一維仍是第二維是隨機的:

 

支持向量機對於小樣本數據和非線性結構數據的分類有十分優秀的表現:

 

在機器學習領域,還有不少重要問題被不斷討論,優秀的模型也不斷在涌現。這個領域的開山模型是神經元,由其組成的多層神經網絡因爲訓練速度慢、分類效果不佳,在支持向量機出現後很快就失去了熱度。你們卯着勁研究怎麼面對訓練樣本不足的窘境,PCA和核方法大行其道,前者致力於減小數據維數,後者致力於從低維數據中學習高維結構。可是近幾年隨着卷積神經網絡的流行,神經網絡又煥發出了第二春,研究者發現只要樣本量足夠大(百萬級甚至億級樣本量),網絡參數足夠多(百萬級參數),加上巧妙的防過擬合技術,利用現代並行計算帶來的強大計算能力,神經網絡可以學得和人類的判別能力同樣好。機器學習領域發展了幾十年,彷佛又回到了出發的地方。
相關文章
相關標籤/搜索