【Machine Learning】梯度下降算法介紹_01

梯度是什麼
梯度下降又是什麼?
梯度下降是用來幹嘛的?
梯度下降算法學習

一、何爲梯度

說法一:
在微積分裏面,對多元函數參數求偏導數,把求的各參數的偏導數以向量的形式寫出來,就是梯度。 那麼這個梯度向量求出來有什麼意義呢?梯度向量從幾何意義(數學意義)上講,就是函數變化增加最快的地方,沿着梯度向量的方向更容易找到函數的最大值,沿着向量相反的方向,梯度減小最快,更容易找到函數最小值
說法二:
梯度是函數在某點處的一個方向,並且沿着該方向變化最快,變化率最大。沿着梯度這個方向,使得值變大的方向是梯度上升的方向,沿着使值變小的方向便是下降的方向。綜上,梯度下降的方向就是在該點處使值變小最快的方向

二、梯度下降的用處

【百度百科】梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常採用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。在機器學習中,基本的梯度下降法發展了兩種梯度下降方法,分別爲隨機梯度下降法和批量梯度下降法。
具體的梯度下降知識可參考:梯度下降算法

三、梯度下降算法分析學習

3.1 求梯度

在上篇文章中我們得出了最小二乘項的代價函數(不好理解的話,可以理解爲極大似然估計時,某個部分必須取得極小值,它被稱爲代價函數):
J(θ)=12i=1m(y(i)θTx(i))2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2} 其中,mm代表樣本個數,y(i)y(i)表示第ii個樣本的標籤值(就是我們高中數學的因變量),θ\theta的轉置表示各個特徵的權重參數的矩陣,x(i)x(i)表示各個特徵的取值(就是自變量)。
我們知道可以用數學方法直接求出代價函數的極小值,進而求出權重參數爲:
θ=(XTX)1XTy \theta=\left(X^{T} X\right)^{-1} X^{T} y 上式中的參數θ\theta是特徵的權重參數向量,如果有5個特徵,它就對應着5個元素,如果它有100個特徵,對應着100個元素。
在用梯度求解時的代價函數與直接求法有一點小區別,代價函數要除以樣本個數,言外之意,我們的代價函數不會因爲樣本個數太多,而變得越大吧,應該不受樣本個數的影響吧,因此,微調後的代價函數爲:
J(θ)=12mi=1m(y(i)θTx(i))2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
如何用梯度下降來求權重參數的向量呢? 還是從概念入手,首先得求出梯度來吧,說白了就是求出代價函數的偏導數。爲什麼是偏導數呢?因爲就像上面說的,如果有100個特徵,那可是對應着100個權重參數的,自然要對每個θ\theta求導數,也就是含有多個自變量的函數求導數,也就是求偏導。
J(θ)θ=1mi=1m(y(i)θTx(i))x(i) \frac{\partial J(\theta)}{\partial \theta}=-\frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)}
其中θj\theta_{j}表示第jj個特徵的權重參數,x(i)x^{(i)}表示第ii個樣本的第jj個特徵的權重參數。

3.2 參數迭代公式

每次調整一點點,不能一次調整太多,調整的係數稱爲學習率,因此每次參數的調整迭代公式可以寫爲如下所示:
θj=θj(1mi=1m(y(i)θTx(i))xj(i)) \theta_{j}^{\prime}=\theta_{j}-\left(-\frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)}_{j}\right) 其中θj\theta_{j}^{\prime}表示第t+1t+1個迭代時步的第jj個特徵的權重參數,θj\theta_{j}爲第tt個迭代時步的第jj個特徵的權重參數。相減是因爲梯度下降,沿着導數求得的反方向

3.3 應用技巧

觀察上式,權重參數的迭代公式,如果我們參與計算的所有樣本爲mm個,如果樣本個數爲10萬個,共有10個特徵,共需要迭代1萬步,可想而知這個計算量得多大呀?10萬 * 10 * 1萬 = 1e10。因此,在實際的應用中,往往選取10萬個樣本中的一小批來參與本時步的迭代計算,比如每次隨機選取20個樣本點,再乘以一個學習率,即下面的公式:
θj=θj+α120i=120(y(i)θTx(i))x(i) \theta_{j}^{\prime}=\theta_{j}+\alpha \frac{1}{20} \sum_{i=1}^{20}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)} 這樣的計算量就小很多了吧,因此在機器學習中,每個時步要想讓所有的樣本都參與計算,往往是不可取的,相對應的,是隨機選取一小批數據來參與當前時步的迭代計算,纔是上策。

四、總結

        在最小二乘項中的兩種求解方法:直接發和梯度下降法,而在現實中,往往更復雜的模型是不可能直接求出權重參數的,更可能是通過梯度下降的方法求權重參數。當然!!!這兩種方法都相同的是:建立模型—>得到目標函數—>求解樣本的似然函數—>然後極大對數似然估計求參數—>獲取代價函數
        除了梯度下降算法之外還有批量梯度下降(BGD)、隨機梯度下降(SGD),這裏就不一一介紹了,具體可參考此博文,敘述的比較詳細。

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