前文
本文是對吳恩達(dá)老師的 機器學(xué)習(xí) 章節(jié)2 教學(xué)視頻 進行學(xué)習(xí)時,所記錄的學(xué)習(xí)筆記。
以下是本章主要講的內(nèi)容:
1.模型、代價函數(shù)、假設(shè)函數(shù)是什么、干什么、怎么工作的。
2.監(jiān)督學(xué)習(xí)算法、梯度下降算法的工作過程。
3.批量梯度下降算法的細(xì)節(jié)以及如何使用。
本章總結(jié)
學(xué)習(xí)了機器學(xué)習(xí)的基礎(chǔ)概念還有第一個算法并且了解了其工作的整體過程。
正文
2.0?目錄
2.1?模型描述
? ? ? ? 2.1.1?模型概述
? ? ? ? 2.1.2?監(jiān)督學(xué)習(xí)算法的工作過程
2.2?代價函數(shù)
? ? ? ? 2.2.1?代價函數(shù)概述
? ? ? ? 2.2.2?詳細(xì)闡述
2.3 梯度下降
? ??????2.3.1 梯度下降概述
? ??????2.3.2 詳細(xì)闡述
? ??????2.3.3 梯度下降算法的同步更新問題
? ??????2.3.4 梯度下降算法中對學(xué)習(xí)率α乘導(dǎo)數(shù)項的理解
2.4 線性回歸的梯度下降
2.1 模型描述
首先我們通過一個線性回歸算法的例子來了解模型是什么,監(jiān)督學(xué)習(xí)的過程是什么樣子的。
然后我們會不斷用小例子深入了解相關(guān)知識。
2.1.1模型概述
模型:我們假設(shè)輸入與輸出存在某個函數(shù)關(guān)系式,這個關(guān)系式這就是模型。
我們先看一個小例子:
預(yù)測房價問題 (回歸問題)
首先我們把數(shù)據(jù)做成圖像,其中:
????????橫軸是不同房屋平方英尺數(shù)。
????????縱軸是不同房子的價格。
這是一個監(jiān)督學(xué)習(xí)算法例子,也是一個回歸過程的例子。

我們先了解兩個概念:
假設(shè):指通過學(xué)習(xí)后得到的一個預(yù)測結(jié)果的規(guī)律,即預(yù)測模型。
真相或真實:我們通過機器學(xué)習(xí)所得到的是一個假設(shè)的規(guī)律,真相或真實指的是真正的規(guī)律。
在上一個圖像中,假設(shè)就是那條直線,直線所代表的函數(shù)就是假設(shè)函數(shù)。

在監(jiān)督學(xué)習(xí)里還有這幾個概念:
學(xué)習(xí)或訓(xùn)練:從數(shù)據(jù)中學(xué)得模型的過程。
訓(xùn)練數(shù)據(jù):訓(xùn)練過程中使用的數(shù)據(jù)。
訓(xùn)練樣本:訓(xùn)練數(shù)據(jù)中的每一個樣本。
訓(xùn)練集:訓(xùn)練樣本所組成的集合。
屬性或特征:反應(yīng)樣本某一個性質(zhì)或表現(xiàn)的事項。
屬性值:落實到每一個樣本的某一個屬性的具體值。
以預(yù)測房價問題為例:
????????房價就是訓(xùn)練集
????????m表示訓(xùn)練樣本的數(shù)量
????????x代表輸入標(biāo)量或者特征
????????y代表輸出變量或者說是要預(yù)測的值
????????(x,y)代表一個訓(xùn)練樣本
????????(x^(i),y^(i))表示第i個訓(xùn)練樣本?i指樣本索引
2.1.2監(jiān)督學(xué)習(xí)算法的工作過程
監(jiān)督學(xué)習(xí)算法的工作過程
1.向?qū)W習(xí)算法提供訓(xùn)練集
2.學(xué)習(xí)算法會輸出一個函數(shù)通常以h表示,h代表假設(shè)函數(shù)
3.把輸入變量x輸入假設(shè)函數(shù)里來然后對輸出變量進行預(yù)測
如何表示假設(shè)函數(shù)h?
假設(shè)函數(shù):hθ(x)=θ0+θ1*x
此函數(shù)被稱為:一元線性回歸或者單變量線性回歸,它是一個預(yù)測y是一個關(guān)于x的線性函數(shù)。
θ0與θ1被稱為:模型參數(shù)。
2.2 代價函數(shù)
2.1.1?
代價函數(shù)概述
代價函數(shù):又叫損失函數(shù)或成本函數(shù),它是將一個或多個變量的事件閾值映射到直觀地表示與該事件。?在統(tǒng)計中,通常使用代價函數(shù)來進行參數(shù)估計,并且所討論的事件是數(shù)據(jù)實例的估計值和真值之間的差異的一些函數(shù)。

現(xiàn)在有圖片中的訓(xùn)練集和假設(shè)函數(shù),接下來我們討論如何選擇這些模型參數(shù)θ0、θ1。

由上圖我們可以看出:不同的模型參數(shù)得到不同的假設(shè)和假設(shè)函數(shù)。
在線性回歸中我們有以下的一個訓(xùn)練集:

我們需要從訓(xùn)練集中得出模型參數(shù)θ0、θ1的值 ,好讓直線更好的與數(shù)據(jù)點擬合。
在上圖中,圖中的假設(shè)函數(shù)所選擇的模型參數(shù)θ0、θ1的值就很合適,這會使代價函數(shù)的值很小并且其模型所做出的預(yù)測會更貼合真實。
解決最小化的問題
由以上可知,在線性回歸中,其實我們需要解決一個最小化的問題!
我們要寫出關(guān)于模型參數(shù)θ0、θ1值的最小化,并且需要想辦法讓h(x)和y之間的差異盡量的小。
對于上文h(x)這個假設(shè)函數(shù)來講,我們需要做的就是盡量減少假設(shè)輸出與樣本結(jié)果之間差的平方(即求均方差代價函數(shù)得最小值)。
注意:因為數(shù)學(xué)輸入板無法輸入代表代價函數(shù)的大寫J所以有時候我會拿大寫T來代替J。
2.2.2 詳細(xì)闡述

盡量減少上圖所示的求均方差代價函數(shù)的值,這個表達(dá)式因θ0和θ1的變化而變化,其中m為訓(xùn)練集的樣本容量。

換句話來講也就是找到上圖所示的假設(shè)函數(shù)中模型參數(shù)θ0和θ1的最小值。
接下來我們進行詳細(xì)說明,首先我們定義一個代價函數(shù)如下:

這是一個關(guān)于θ0和θ1對J(θ0,θ1)求最小值的代價函數(shù),也被稱為平方誤差函數(shù)或者平方誤差代價函數(shù) 。
我們選擇此種函數(shù)是因為,它對于大多數(shù)問題特別是回歸問題很合適。他是最常用的手段,在后續(xù)我們會討論其他的代價函數(shù)。
因為使用簡化的代價函數(shù)可以更好地讓我們理解代價函數(shù)的概念,所以接下來我們用例子來理解上面的知識。
例一:假設(shè)θ0=0

假設(shè)θ0=0,訓(xùn)練集如下:


如果θ1=1時的代價函數(shù) J(θ1)=0


如果θ1=0.5時的代價函數(shù) J(θ1)=3.5/6≈0.58


如果θ1=0時的代價函數(shù) J(θ1)=14/6≈2.3
如果繼續(xù)不斷的設(shè)定θ1的值來求代價函數(shù),我們會得到代價函數(shù)J(θ1)的圖像如下。

總結(jié):
對于每一個θ1來說都有一個與其他值不同的假設(shè)函數(shù),其假設(shè)函數(shù)就是hθ(x)。
對于每一個θ1來說都有其對應(yīng)代價函數(shù)J(θ1)的值,并且代價函數(shù)T(θ1)的值越小,預(yù)測也就越準(zhǔn)確。
學(xué)習(xí)算法的優(yōu)化目標(biāo)是通過選擇θ1的值來使T(θ1)的值更小
對于上一個例子我們可以看到,當(dāng)θ1=1時T(θ1)的值達(dá)到了最小為0,? 我們看θ1=1時的假設(shè)函數(shù)hθ(x)的圖像是完全吻合訓(xùn)練數(shù)據(jù)的,并且已經(jīng)完美的擬合了它。
所以說我們就是要最小化代價函數(shù)J(θ1)的值,來找到一條最符合數(shù)據(jù)的直線。
例二:假設(shè)θ0,θ1都存在

以下是房價數(shù)據(jù)集

θ0=50?θ1=0.06時假設(shè)函數(shù)如下

其用等高線圖表達(dá)代價函數(shù)的三維圖如下


說明:簡單來說每一個橢圓都對應(yīng)了一系列J(θ0,θ1)相同值的點。?
如果θ0取800、θ1取-1.5、情況如下:

我們可以發(fā)現(xiàn)在代價函數(shù)J(θ0,θ1)的圖像里,(θ0,θ1)這一點離橢圓中心即代價函數(shù)J(θ0,θ1)值最小的那個點比較遠(yuǎn)。并且,從假設(shè)函數(shù)也可以看出其擬合效果并不好。
如果θ0取360、θ1取0、情況如下:

此時函數(shù)的擬合效果跟上一次比好了些,但是仍然沒有接近我們的理想狀態(tài),依然需要一定的代價。
讓我們再舉一個例子如下:

最后一個例子如下:

由上圖所見,此點相當(dāng)接近最小值了。這表明函數(shù)對數(shù)據(jù)的擬合已經(jīng)挺不錯了。
小節(jié)總結(jié):
根據(jù)以上兩個例子,我們就可以更好的理解假設(shè)函數(shù)和代價函數(shù)的意義了。
可以說為了使假設(shè)函數(shù)所做出的預(yù)測更接近真實,我們可以利用代價函數(shù)幫助假設(shè)函數(shù)找到使J(θ0,θ1)的值最小的模型參數(shù)θ0和θ1的值。
接下來我們將討論找到這個最小值的一種算法,即梯度下降算法。
2.3 梯度下降
2.3.1 梯度下降概述
梯度下降:是一種求代價函數(shù)最小值的算法。
梯度下降是常用算法,它應(yīng)用于機器學(xué)習(xí)的眾多領(lǐng)域。
利用梯度下降求最小化不只有代價函數(shù)J(θ0,θ1)。
接下來我們舉例利用梯度下降算法來求得代價函數(shù)J的最小值。
梯度下降算法思路?
開始時我們隨機選擇一個參數(shù)的組合(θ0,θ1,...,θn),計算代價函數(shù),然后我們尋找下一個能讓代價函數(shù)值下降最多的參數(shù)組合。我們持續(xù)這么做直到到到一個局部最小值,因為我們并沒有嘗試完所有的參數(shù)組合,所以不能確定我們得到的局部最小值是否便是全局最小值,選擇不同的初始參數(shù)組合,可能會找到不同的局部最小值。
2.3.2 詳細(xì)闡述
接下來我們舉例說明梯度下降算法如何工作的

上圖是一個用等高線圖表達(dá)某個代價函數(shù)的三維圖,假如說我們首先找到了圖中的一個點,A點。(如下圖)

然后我們以A點環(huán)繞360度找到更低的那個方向,再先前走一步。然后如此類推,直到走到不能再向下的B點時,此時B點就是局部最低點。
當(dāng)我們把出發(fā)點換成點C時(如下圖),按階梯下降算法會達(dá)到局部最低點點D。

批量梯度下降算法的公式:

梯度下降算法會j減去被減數(shù)項并且更新參數(shù)θj,然后反復(fù)執(zhí)行此過程,直到收斂到三維圖的底部位置。

現(xiàn)在我們詳細(xì)說一下此公式的細(xì)節(jié):
:=?????代表一個賦值運算符。
α? ? ? 被稱為學(xué)習(xí)率的數(shù)字,用來控制我們向下的步子大小。
(for j=0 and j=1)????當(dāng)此種情況出現(xiàn)時,我們將更新θ0和θ1,因為已經(jīng)找到代價函數(shù)的最小值或者最大值了。
對于表達(dá)式和更新方程,我們需要同時更新θ0和θ1。
實現(xiàn)過程是首先進行計算學(xué)習(xí)速率乘以代價函數(shù)的導(dǎo)數(shù)(如下圖中的這一項)這一部分,然后更新θ0和θ1在開始接著計算。

總結(jié):可以說,在批量梯度下降中,我們每一次都同時讓所有的參數(shù)減去學(xué)習(xí)速率乘以代價函數(shù)的導(dǎo)數(shù)。
2.3.3 梯度下降算法的同步更新問題
梯度下降算法最重要的一點是同步更新,同步更新時需要注意同步更新是否“同步”的問題。

上圖是正確的同步更新。

上圖是錯誤的同步,錯誤在于提前更新了另一個值,這使得模式參數(shù)θ0和θ1不是同一對。所以,我們在計算的過程中要注意是否做到同步更新。
2.3.4 梯度下降算法中對學(xué)習(xí)率α乘導(dǎo)數(shù)項的理解
批量梯度下降公式:

公式中的減項:

公式中的減項其實是由學(xué)習(xí)率α乘導(dǎo)數(shù)項所組成。接下來我們通過幾個例子來理解這部分的含義。
理解導(dǎo)數(shù)項
例三:假設(shè)θ0為零,θ1為圖像中的值。

取這個紅點的切線的斜率,這條直線的斜率正好是這個三角形的高度除以這個水平長度。根據(jù)斜率的定義我們在上面的圖像中可以判斷出它是一個正斜率,所以導(dǎo)數(shù)也是正數(shù)。
因此,當(dāng)我們進行對θ1的更新后,等于θ1減去一個正數(shù)乘以學(xué)習(xí)率α。θ1在更新后,我們可以發(fā)現(xiàn)θ1一定會向左側(cè)圖像最低點移動。然后此過程不斷反復(fù),最后會固定在我需要的最低點,它也是我們要求的值。
例四:假設(shè)θ0為零,θ1為圖像中的值。

此例子與上例正好相反。在斜率為負(fù)時θ1更新后,我們可以發(fā)現(xiàn)θ1一定會向右側(cè)圖像最低點移動。然后此過程不斷反復(fù),最后會固定在我需要的最低點,它也是我們要求的值。
理解學(xué)習(xí)率α
學(xué)習(xí)率α用來控制我們向下的步子大小。
第一種情況:學(xué)習(xí)率α太小
我們可以想象到,如果學(xué)習(xí)率α太小那么在圖像上θ1的移動就會很慢。我們可能需要很長時間才能接近最低點,學(xué)習(xí)率α越小浪費的時間也就越多。

第二種情況:學(xué)習(xí)率α太大
當(dāng)學(xué)習(xí)率α太大時,θ1邁的步子也會很大。所以θ1會反復(fù)邁過最低點,出現(xiàn)無法收斂到最低點的情況。
例五:假設(shè)θ0為零,θ1為圖像中的局部最低點。

我們可以看到如果θ1在最低點,那么此處斜率一定為0,因此減項也為零。那么批量梯度下降公式的結(jié)果即使在更新下去,值也永遠(yuǎn)是θ1在最低點的值即θ1保持不變,這也代表著已經(jīng)在局部最低點了。
例六:
假設(shè)θ0為零時,
理解導(dǎo)數(shù)的變化。

我們從右向左看θ1從右側(cè)高點向最低點的變化可以發(fā)現(xiàn),θ1的邁步幅度是由大到小的。在上例中邁步的幅度并不是因為我們不斷改變學(xué)習(xí)率的值,而是因為導(dǎo)數(shù)本身會因為θ1在圖像中的位置而變化。當(dāng)θ1越接近最低點時,其導(dǎo)數(shù)也會越小,所以θ1更新的幅度就會更小。
總結(jié)一下,隨著梯度下降法的運行,你移動的幅度會自動變得越來越小,直到最終移動幅度非常小,你會發(fā)現(xiàn),已經(jīng)收斂到局部極小值。這是因為當(dāng)我們接近局部最低點時,很顯然在局部最低時導(dǎo)數(shù)等于零,所以當(dāng)我們接近局部最低時,導(dǎo)數(shù)值會自動變得越來越小,所以梯度下降將自動采取較小的幅度,這就是梯度下降的做法。所以實際上沒有必要再另外減小。
2.4 線性回歸的梯度下降
以下是之前學(xué)習(xí)的模型和公式:

接下來我們將梯度下降算法應(yīng)用到最小化平方差代價函數(shù),首先我們將導(dǎo)數(shù)項領(lǐng)出來處理一下。

當(dāng)我們通過上面的過程得出導(dǎo)數(shù)項結(jié)果的時候,就可以把導(dǎo)數(shù)項結(jié)果代入到下面的梯度下降算法中來了。在此過程中注意同步更新的問題!

例七:實際應(yīng)用的例子
假設(shè)θ0,θ1都存在,橫坐標(biāo)是建筑面積,縱坐標(biāo)是房價,我們有其假設(shè)函數(shù)和代價函數(shù)的圖像如下。
下圖為θ0為900,θ1為-0.1時的圖像,h(x) = -900 - 0.1x。

然后我們使用梯度下降算法找最低點。
在下圖中我們到達(dá)第二個點,左側(cè)是第二個點的假設(shè)函數(shù)圖像。





在這個過程中我們可以發(fā)現(xiàn),隨著梯度下降算法對模型參數(shù)的更新,假設(shè)函數(shù)也隨之不斷變化越來越符合數(shù)據(jù),直到梯度下降算法使模型參數(shù)在代價函數(shù)圖像中達(dá)到最低點即全局最小值時,假設(shè)函數(shù)很好的擬合了數(shù)據(jù)。
小總結(jié):
”批量梯度下降”指的是在梯度下降的每一步中,我們都用到了所有的訓(xùn)練樣本,在梯度下降中,在計算微分求導(dǎo)項時,我們需要進行求和運算,所以,在每一個單獨的梯度下降中,我們最終都要計算這樣一個東西,這個項需要對所有個訓(xùn)練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓(xùn)練樣本,而事實上,有時也有其他類型的梯度下降法,不是這種"批量"型的,不考慮整個的訓(xùn)練集,而是每次只關(guān)注訓(xùn)練集中的一些小的子集。在后面的課程中,我們也將介紹這些方法。