1. 程式人生 > >文字上的演算法讀書筆記二--我們生活在一個尋求最優的世界裡

文字上的演算法讀書筆記二--我們生活在一個尋求最優的世界裡

最優化模型是機器學習的內功,幾乎每一個機器學習背後都是一個最優化模型。

2.1 最優化問題

科學抽象於生活,科學服務於生活。每個機器學習背後都是個最優化問題。希望付出最小的成本來獲得最大的收益。

一般的最優化形式表示如下:

是目標函式,分別是約束條件,沒有約束條件的(只有,稱為無約束優化,只有稱為等式約束優化,都有稱為不等式約束優化)

設計一個模型來代替真實模型(假設為你設計的模型,為真實模型,為整個模型的輸入),怎麼才能說你設計的模型很好呢?只要你設計的模型與真實的模型誤差很小,那麼說明你的模型越好,誤差通常使用損失函式來表示,常用的有:

平方誤差:

絕對損失:

合頁損失:

似然損失:

似然損失的最小就是,的最大化。

損失函式的期望,稱為期望風險,學習的目標是使期望風險最小,

期望風險是指你設計的模型和真實模型的期望誤差,雖然不知道真實模型是什麼,但是可以用(x,y)的輸入對,用計算好的

直接替代真實模型就可以了,這種方法計算出來的風險就是經驗風險。根據大數定力,樣本對趨於無窮大,經驗風險也就是越接近期望風險。

經驗風險最小化,如果樣本有限,產生過擬合現象。過擬合現象就是把資料擬合的太完美,模型複雜度高,然而到未知資料中擬合的很差(對未知資料的預測能力叫做泛化能力)。欠擬合就是在樣本資料上擬合的不好,在未知資料上也不好。為了避免過擬合現象,就要對模型的複雜度進行懲罰,這就是正則化。

結構風險最小化。

正則化公式:

範數,範數,範數

最終的結果,如何確定一個好的模型呢?

需要交叉驗證

交叉驗證:

隨機的把樣本分為:訓練集,驗證集

首先在訓練集中訓練各種模型然後在驗證集上評價各個模型的誤差,選出一個誤差最小的模型就是好的模型。

偏差:

衡量單個模型的誤差,比如這個模型的偏差來表示,這個模型的偏差可以用來表示。所以偏差是衡量單個模型自身的好壞,而不管別的模型怎麼樣。

方差:

方差是多個模型間比較,並不管自己的這個模型和真實模型的誤差多大,而是從別的模型來衡量自己的好壞,也就是認為所有模型的平均值,就可以代表真實模型。

(潛在假設是大多數情況是正常無噪聲的,否則代表不了真實模型)

比如這個模型的方差可以用來表示

模型越複雜,偏差越小,方差就越大

模型越簡單,偏差越大,方差就越小,博弈的過程,最好的模型就是偏差和方差之和最優的模型。

根據交叉驗證選個最好的模型。

2.2 最大似然估計/最大後驗估計

選模型,比如:線性模型,高斯模型等。這些公式只需根據資料帶入公式就可以求解,這就是引數估計,如果對一無所知的模型估計引數,那就是非引數估計。

最大似然估計和貝葉斯代表了頻率派和貝葉斯派的觀點。

頻率派是引數是客觀存在的,只是未知而已,頻率派關係最大似然函式,觀察的變數是x,x的分佈函式是,那麼最大似然函式就是的估計值,它使得事件發生的可能性最大,即:

通常認為x是獨立同分布的,

由於連乘會造成浮點下溢,通常最大化對數形式,就是:

擬合樣本資料好,不見得擬合未知資料就很好,所以頻率派認為我沒見過飛機相撞,那麼飛機就不可能相撞。

貝葉斯說了,引數也應該是隨機變數,和一般隨機變數沒有本質區別,也有概率。沒見過飛機相撞,飛機還是有概率相撞,正是因為引數不能固定,當輸入一個x,不能用確定的Y表示結果,必須用概率的方式表達出來。希望得到所有在獲得觀察資料x後的分佈情況,就是後驗概率,有:

積分其實就是所有的後驗概率的彙總,其實是與最優無關的,採用近似的方法求後驗概率,這就是最大後驗估計:

最大似然估計其實是經驗風險最小化的一個例子,而最大後驗估計是結構風險最小化的一個例子。

如果樣本足夠大,最大後驗概率和最大似然估計趨向於一致,如果樣本數量為0,最大後驗就僅由先驗概率決定,就像推薦系統中對於毫無歷史資料的使用者,只能推熱門的內容。進入最大後驗估計看著要比最大似然估計完善,但是最大似然估計簡單,很多方法還是使用最大似然估計。

最小二乘估計:

估計值和觀測值之差的平方和最小。最小二乘有個假設,模型服從高斯分佈。

2.3 梯度下降法

求解最優化問題,本質上就是怎麼向最優解移動,達到某個條件就停止。

導數為0。有的最優化問題沒有解析解,只能通過一些啟發式演算法(遺傳演算法等)或者數值計算的方法來求解。對於無約束優化問題常用的演算法有:梯度下降法,牛頓法/擬牛頓法,共軛梯度法,座標下降法等

對於有約束問題大多是通過拉格朗日乘子法轉換成無約束問題來求解。

線性迴歸模型來看梯度下降法:

線性函式:

損失函式使用平方損失函式,則有:

梯度下降法指出,函式f在某點x沿著梯度相反的方向下降最快。

其中是個定值,就是學習速度,控制每步移動的幅度。

相反,如果是損失函式最大化,就是梯度上升法:

又有:

這就是梯度下降的迭代流程,首先選定一個然後使用公式迭代,一直到收斂停止,就解出了引數

公式中有個求和,也就是每次迭代都需要計算全部的樣本,當樣本M很大時,計算代價很大,需要相關好的辦法減少計算,這就是隨機梯度下降法(SGD).

可以平行計算,因為樣本間是無關的。介於梯度下降和隨機梯度下降之間的辦法,是批梯度下降,思想是使用b個樣本來更新梯度,流程如下:

等式約束優化問題:

寫出它的拉格朗日乘子法:

分別對求導數,然後令導數為零,就可以解出求導數,然後令導數為0,可以解出的候選最優解了。

 

不等式約束優化問題:

寫出它的拉格朗日乘子法:

要想有和原不等式約束化問題一樣的最優解,必須滿足KKT條件:

1.分別對x求導為0

2.

3.

4.

5.

當原問題不好求解的時候,可以利用拉格朗日乘數法得到其對偶問題,滿足強對偶性條件時它們的解是一致的。

定義一個函式:

這個函式是的函式,如果x違反原始問題的約束條件,即或者,那麼總是可以調整來使得有最大值為正無窮,而只有都滿足約束時,,也就是說的取值是:或者,所以,就是求了。即:

再定義一個函式:,則有:

互為對偶問題。可以證明:,如果滿足強對偶性,目標函式和所有不等式約束函式都是凸函式,等式約束是仿射函式(),且所有不等式約束都是嚴格的約束,那麼,那麼原問題和對偶問題一致。

如果不好求解,可以用求解。

最優化問題很簡單:首先要有一個模型:目標函式和約束函式,不同的問題會對應不同的模型,需要自己設計,然後對模型的引數進行求解。