梯度下降與隨機梯度下降概念及推導過程


接前一章:常用算法一 多元線性回歸詳解2(求解過程)

        同這一章的梯度下降部分加起來,才是我們要講的如何求解多元線性回歸.如果寫在一章中,內容過長,擔心有的同學會看不完,所以拆分成兩章.[壞笑]

        上一章中有提到利用解析解求解多元線性回歸,雖然看起來很方便,但是在解析解求解的過程中會涉及到矩陣求逆的步驟.隨着維度的增多,矩陣求逆的代價會越來越大(時間/空間),而且有些矩陣沒有逆矩陣,這個時候就需要用近似矩陣,影響精度.所以本章我們一起來學習求解多元線性回歸最常用的,也是后邊可能會講的深度學習最常用的求解辦法:梯度下降與隨機梯度下降.

        其實隨機梯度下降才是咱們最常用的求解辦法,但是不知道梯度下降,理解隨機梯度下降就有些直接蓋二樓的感覺了(我的意思是空中樓閣).那什么是梯度下降呢?

        從字面意思上,我們就可以get到他最重要的點--梯度.所以首先我們來看梯度的概念.(事先聲明,好多概念純粹為了方便理解)

 

什么是梯度:

        1-先看官方解釋:

                   梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。

        2-通俗理解:

                   我們對一個多元函數求偏導,會得到多個偏導函數.這些導函數組成的向量,就是梯度.

                   這里需要開拓一下你聰明的頭腦.一元函數的梯度是什么?思考一下.它的梯度可以理解為就是它的導數.

                   我們求解一元函數的時候有一種辦法是對函數求導得到導函數,令導函數為零得到這個函數的解析解.那我們可不可以理解為求解一元函數時利用讓一元函數的梯度變為0的時候,梯度所在的位置就是函數的最優解呢?  (稍稍有點偷天換日,但是在一元函數中梯度和導數並無區別,這塊一定要理解)

 

                   梯度中元素(導函數)的個數的個數同未知數的個數是對應,每一個未知數都可以像求解一元一次函數一樣,通過它所對應的梯度求得最優解.其實求解多元函數和一元函數的道理是一樣的,只不過函數是一元的時候,梯度中只有一個導函數,函數時多元的時候,梯度中有多個導函數.

                  當我們把梯度中的所有偏導函數都變為0的時候,就可以找到每個未知數的對應解?(事實證明是這樣的)

          附上一張梯度的圖

         

          假設這個曲面是一個多元函數,我們可以把這個曲面看成是由無數條曲線組成,每條曲線代表了多元函數的一個維度,當所有維度都下降到梯度為0的點,是不是這個點就是多元函數的解的那個點呢?

 

什么是梯度下降:

        1-還是按照慣例,先看官方解釋.

         梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常采用的方法之一,另一種常用的方法是解析解。

         上一段來源於網絡,對於咱們要理解的內容來看,上邊一段等於沒說.

        2-通俗講

         梯度下降就是讓梯度中所有偏導函數都下降到最低點的過程.(划重點:下降)

         都下降到最低點了,那每個未知數(或者叫維度)的最優解就得到了,所以他是解決函數最優化問題的算法

         這里需要注意一點,梯度是對所有未知數求偏導,所得偏導函數組成的向量.在多元線性回歸中,誰才是未知數呢?我們使用梯度下降法的目的是求解多元線性回歸中的最小二乘函數的,在最小二乘函數中,已擁有的條件是一些樣本點和樣本點的結果,就是矩陣X和每一條X樣本的lable值y.X是矩陣,y是向量.

         所以我們要知道,梯度下降中求偏導數的未知數不是x和y,而是x的參數W或者叫\Theta(就是個名字,只不過常用這兩個字母表示).

         數據集中數據是固定的,結果是固定的,我們要找到的是數據中樣本與結果的對應規律.所以求得\Theta才是我們的目的.我們梯度下降,下降的也是\Theta而不是X.

怎樣理解下降:

          梯度下降中的下降,意思是讓函數的未知數隨着梯度的方向運動.什么是梯度的方向呢?把這一點帶入到梯度函數中,結果為正,那我們就把這一點的值變小一些,同時就是讓梯度變小些;當這一點帶入梯度函數中的結果為負的時候,就給這一點的值增大一些.

        (圖一)

         如上圖,點A的導函數(此時把導函數看作梯度)為負,就讓點A沿着函數軌跡往右移動一點,點B的導數為正,就讓點B往左移動一點,這個移動的過程中,點A和店B的高度都在慢慢下降,所以這個過程叫做梯度下降.

         在這個下降的過程中.因為我們並不知道哪一個點才是最低點,也沒有辦法來預測下降多少次才能到最低點.這里梯度下降給出的辦法是:先隨便蒙一個點出來,然后根據這個點每次下降以丟丟.什么時候下降得到的值(點帶入偏導函數得到的)和上一次的值基本基本一樣也就是相差特別特別小的時候,我們認為就到了最低點.

         當然這里有兩個問題:

                 1-這個值並不是完全准確:

                            我們並不需要一個完完全全准確的值來當做函數的解,因為多元線性回歸構的理念中就講了,我們是用一條回歸線來預測未來結果,本身我們預測出的這個結果就存在一個誤差,所以梯度下降的結果是否完全准確並不特別重要.

                 2-如果函數圖像是一個波浪形,我們只能找到其中一個浪谷的最低點,這個點可能不是所有浪谷最低點中的最小值.

                           我們初始點的位置是隨機蒙出來的造成了這種情況,多次隨機可以有效解決解決這個問題.

                           如果我們多次有規律的隨機都沒有采集到的最低點,可能是因為這個最低點造成的原因是出現了某個離群值.(這句話不用理解,你就記得其實是不是最小值也並不是特別重要就行了.)

 

        函數在點\Theta_{A}\Theta_{B}的移動過程如何用公式來表達呢?公式如下:

        \Theta_{k} = \Theta_{k-1} - \alpha \cdot g     (公式一)

        公式中,\Theta_{k}為當前時刻的\theta值,\Theta_{k+1}為下一時刻的\theta值.g為梯度.\alpha是一個正數,我們先不看他.

        此時我們隨機一個點,將這個點叫做k+1點,如果它的梯度為正,那么按照公式一,我們會將這個給它的梯度減去一個正數,得到一個k+1點梯度更小的梯度的點k;如果k+1的梯度像圖一的點B一樣梯度為負數,此時我們減去一個負數,就等於給他加了一個正數,得到的k點的梯度要比原來k+1點的梯度大.

         所以,按照公式一,無論k+1點的梯度是正還是負,我們都可以讓他沿着函數圖像向比原來更低的方向運動.

 

\alpha是什么:是學習率

         我們把公式一中的\alpha叫做學習率.

         讓點沿着梯度方向下降慢慢求得最優解的過程我們叫做學習,學習率就是用來限制他每次學習別太過"用功"的,因為機器學習也存在書呆子[奸笑].請看下圖:

         (圖二)

       圖二中,左圖是我們所期望的,一個點按照梯度方向下降,慢慢逼近最低點,右圖中展示的就是那個書呆子.模型每次下降都是減去梯度的值,當這個梯度值過大的時候,點下降的step就過大了,一次性邁過了最低點,導致函數無法找到最優解.

       \alpha就是來限制這種情況的.我們讓梯度乘以一個很小的數,雖然增加了它到達最低點的step數,但是可以讓圖二這種情況發生概率降低.

 

        到現在,我們知道了梯度下降法到底是什么,也知道了每一步是如何下降的,按照這個方法一次一次迭代下降就可以得到函數的最優解.但是還有很重要的一點:如何求梯度.

        重復一下:梯度就是對一個多元函數的未知數求偏導,得到的偏導函數構成的向量就叫梯度.那我們要求解的多元函數是哪個?

        是最小二乘函數:

                        (公式二)

       求導過程如下:

                         (公式三)

        公式三種,h_{\Theta }(x)W^{T}X,y所有樣本點的lable值向量y.得到的公式(h_{\theta}(x) -y)x_{i}中,x_{i}是一個維度的所有數據,(h_{\theta}(x) -y)x_{i}本身是對這個維度的所有數據求梯度的和.所以我們得到梯度下降中的梯度g:

         g=1/m x (h_{\theta}(x) -y)x_{i}.   m為樣本點的個數.

 公式的另一種表達形式:

         

到這里,梯度下降就講解完畢了.梯度下降又叫做批量梯度下降,簡稱BGD.

(休息兩分鍾)

 

 

下面我們來看隨機梯度下降(SGD):

        批量梯度下降是,求出一個維度中所有的數據,取個平均來當做每一次梯度下降的step.這樣做雖然准確,但是每次要計算一個維度的所有數據的梯度,花費資源較大.所以才有了隨機梯度下降的思想:每次只隨機取一個維度中的一條數據求梯度,來當做這個維度梯度下降的step.公式如下:

          

        可以看出,隨機梯度下降和梯度下降公式的區別就是,里邊的x由矩陣x變成了x的分量x^{i}

       為了更好的讓大家理解梯度下降和隨機梯度下降的區別,看下圖:

       (批量梯度下降)   (隨機梯度下降)

        途中,藍色點為兩個\Theta的取值,圓形越靠近里邊表示誤差越小.

        BGD總是綜合所有數據的梯度,取到的下降至一直很平滑,SGD隨機抽取一條數據作為參數,步子很不穩定.但是最終都可以到達函數的最優解位置.雖然看起來SGD比BGD的誤差要大一些,但是SGD隨着迭代次數的增加,誤差會越來越小.

     

最后,SGD因為每次只隨機抽取一條數據來做梯度下降,計算代價比SGD小的不是一點半點.所有后邊無論機器學習還是深度學習,對SGD的應用是非常非常廣泛的.

在SGD和BGD中間,還有一個集合了兩種下降法的有點的辦法:mini-bach-GD,你猜一猜他是啥?對了,是隨機抽取小批量數據來做下降,但是用的並不多.

 

利用梯度下降法求解梯度的過程:

        一般情況下分為三步:

        1-隨機一個初始值,在多元線性回歸中,我們隨機一組w,帶入到損失函數中,得到一個初始點.

        2-讓這個點按照負梯度的方向運動,就是我們前邊講的 \Theta_{k} = \Theta_{k-1} - \alpha \cdot g,梯度的計算如上文所述.

        3-迭代第二步,當迭代此處達到某一個數,或者上一步和這一步的結果誤差小於某個數,就認為是最優解了,停止迭代.迭代次數和最小誤差值都是可以設置的.

        通過第三步,我們就可以得到一個我們想要的最優解.

        最后補充一點,梯度下降的公式\Theta_{k} = \Theta_{k-1} - \alpha \cdot g     (公式一)看起來好像開玩笑一樣就定下來了,沒有任何依據,其實不是這樣的,它背后的理論依據是泰勒展開式.這里不再過多贅述了.文章就到這里,請大家幫忙勘誤.

(寫文章很耗神,如果對您有幫助,歡迎點贊和評論)

 

梯度下降與隨機梯度下降概念及推導過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM