梯度下降算法

梯度下降算法(最速下降算法),其是解決參數無約束最優化的一類方法。(無約束:對參數沒有任何限制,最多限制爲實數,有的根本就沒有限定)

在機器學習中,都會讓自己的一個模型達到一個最優值(最大或最小等等)。這裏有一個非常簡單的模型:

f(x) = wx+b

這裏先假設x就是一維情況。

如果我們知道f(x) 與x的對應點對,如(1,2),(2,4),(3,6)等等,我們就可以將這些點直接代入方程f(x)=wx+b

2=w*1+b   (1)

4=w*2+b   (2)

6=w*3+b   (3)

哎呀,媽呀!這個不就是我們小學學的二元一次方程組的嗎?是的。我們也可以將上面的點對數據稍作修改:(1,2),(2,4),(3,6),(4,7),(5,8),(6,11),(7,13)...

再來看這些數據,會發現這些點對數據其實不在一條直線上的,那麼w就不是能這麼簡單的解答出來了。此時,這個問題轉變成了大學統計學中迴歸問題。迴歸問題的本質還是求一條曲線(直線也叫曲線),使得測量出來的點(樣本)儘可能的都附着在這條曲線上。

定義如下方程:

J(w,b) = (w*x1+b-f(x1))*(w*x1+b-f(x1))+...+(w*xi+b-f(xi))*(w*xi+b-f(xi))+...+(w*xn+b-f(xn))*(w*xn+b-f(xn))

xn代表第n個樣本。

那麼,對於迴歸問題,可以看做一個求最優的問題(使得現有的點都儘可能的附着到我們所求的這條直線上),也就是求J(w,b)的最小值。

仔細觀察J(w,b),其實它的未知數是w和b,這裏xi,f(xi)都是已知數。那麼J(w,b)就是一個關於w和b的一個參數方程了。

高中的數學就學過一些知識,求一個函數的極大值或極小值時其導數爲0(不用最小二乘法,這裏J(w,b)可能會是一個非常複雜的表達式(樣本太多))。不過,我們可以再回想一下極值的性質(這裏以極小值爲例):在極小值的左邊(可以想象爲一元函數,多元函數就是偏導)其導數是小於0的,在其右邊導數是大於0的;那麼,如果從極小值的左邊去尋找極小值,我們必需沿着導數變大的方向走;如果從極小值的右邊尋找,我們必需沿着導數變小的方向走。這裏讓我們再聯繫一下我們所學的知識:梯度。根據梯度的定義,尋找極小值時,我們走的方向其實都是和梯度方向相反的。這裏直接讓我們看到了尋找極小值時的一個共性了。

那麼求J(w,b)的極小值就可以從選定的一個點開始(初始w,b的值),然後沿着梯度相反的方向行走,慢慢的就能夠找到我們所要的極小值了(梯度下降法是不能保證找到全局最優值:最小值)。

好吧,今天就先寫到這。這裏留個問題:這裏w,b的調整是一個樣本調整一次,還是所有樣本都要參與一次參數調整中來?







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章