Coursera課程《Machine Learning》學習筆記(week1)


這是Coursera上比較火的一門機器學習課程,主講教師為Andrew Ng。在自己看神經網絡的過程中也的確發現自己有基礎不牢、一些基本概念沒搞清楚的問題,因此想借這門課程來個查漏補缺。目前的計划是先看到神經網絡結束,后面的就不一定看了。

當然,看的過程中還是要做筆記做作業的,否則看了也是走馬觀花。此筆記只針對我個人,因此不會把已經會了的內容復述一遍,相當於是寫給自己的一份筆記吧。如果有興趣,可以移步《Machine Learning》仔細學習。

接下來是第一周的一些我認為需要格外注意的問題。

1 強調了hypothesis與cost函數究竟是“ it of who ”

設一個待擬合函數為y=θ1x+θ0,其中x為輸入樣本點,θi為待學習參數,這樣一個表達式我們把它稱之為hypothesis。在這門課程中,可以發現吳恩達老師在念h(x)時念的是“ h of x ”,意思是h是x的函數,在h(x)中x為自變量,即輸入樣本點x為自變量。

需要強調的是,對於hypothesis h(x),自變量為輸入樣本點x;而對於cost函數J(θ),這個自變量是待學習參數。所謂的梯度下降法常常給出的那個山一樣的圖,正是讓參數θi密密地取很多很多個值,然后看θi取到多少時整個cost函數達到最低點。

2 梯度下降法

2-1 輪廓圖

采用輪廓圖的方式代替三維圖。

比方說對於一個待擬合函數h(x)=θ1x+θ0,當參數有兩個(θ1與θ0),則把cost函數畫成三維圖是長這樣的:

但是用輪廓圖表述就是這樣的:

 

如圖所示,每一圈上的點它的cost函數值是一樣的,相當於對一座山的俯視圖吧。好比地理中畫山不是畫成立體的那個樣子,而是以等高線圖來表述,因此畫的是一圈一圈的。

當極值點落在那個打紅叉的位置,擬合結果就是左邊這幅圖的藍色直線,可以發現這個時候的 θ1 與 θ0 對應的 hypothesis(即那條藍色直線的直線方程) 就是一個不錯的結果。打紅叉的位置可說是這座山的最低谷處。

2-2 強調梯度下降法是所有參數同步更新

就直接拿這幅圖說明好了……

上面一目了然地列出了啥叫同步更新,啥叫非同步更新。

好比神經網絡一堆的權值,不是說改一個參數然后再算下一個梯度然后再改下一個參數的,而是一次性利用bp算法把所有的梯度值都算出來,並且對整個神經網絡所有的參數值都實施同步更新。

原因也很顯然,看看右邊這個非同步更新的圖,是把 θ0 的值都改了,然后你再拿這個改了之后的 θ0 去算 θ1 的梯度值,再去更新 θ1 ,這顯然沒意義。

(2016.6.28 記)

2-3 用“求導=求某一點處切線的斜率”來理解梯度下降法

這個想法雖然簡單,但是絕妙地用高中的基本導數知識解釋了梯度下降法為何是往最低點走的。如圖所示,橫坐標為參數值θ1,縱坐標為cost函數。

(1)在上面那個圖中,所取的點處的導數(即斜率)為正,而α為學習速率也為正,故[θ1-(導數值*α)]所得到的新的θ1是往左移了,也就是往cost更低的地方走去。

(2)在下面那個圖中,當所取的點的導數為負,與(1)同理,可以發現這一次[θ1-(導數值*α)]增大了,所得到的新的θ1是往右移的,也一樣是往cost更低的地方走去。

(2016.6.29記)

2-4 從“大跨步”到“小碎步”

以只有一個待確定參數為例,此時 cost 函數 J(θ1) 的圖還是2-3中所示的那幅圖。在這里我們以上面那個圖為例,即初始點取在曲線的右半邊。

如圖所示,使用梯度下降法時,因為越往下走,斜率 dJ(θ1)/dθ1 越小,而學習率α不變,因此相應的,每次θ1所要減去的那個Δθ1會越來越小(梯度下降法更新參數:θ1←θ1-△θ1,其中△θ1=α*dJ(θ1)/dθ1),也就是步子越來越碎。

注意這個步子指的是橫坐標上每次θ1朝左挪動多長的距離(即△θ1),這就是“從大跨步到小碎步”的含義。在這個過程中,即使不減小α,也可以實現△θ1逐步減小。

2-5 batch gradient descent

即批量梯度下降法。在這里給出了批量梯度下降法的概念,即每次更新權值時都使用全部的樣本點。

我想這應該與之前經常用的“隨機梯度下降法”相對,對於隨機梯度下降法,正是為了解決一次性使用全部樣本點會導致訓練速度太慢的問題,因此隨機梯度下降法每次都從訓練樣本點中抽取部分點來進行訓練,如此一來保證了全部點都有可能被抽到,同時也不至於每次都把所有的點都過一遍,大大提升了速度。

3 線性回歸總結

3-1 線性回歸歸根結底就是求參數θi

在此我想回顧一下第一周的整個過程:

第一周圍繞的主題就是給定一堆樣本點,然后用一條直線來擬合這些點,現在我們要用機器學習的方法求解這條直線的方程。

在機器學習中,這條待學習直線被稱之為“hypothesis”,記為h(x),我們的目標是求得h(x)=θ1x+θ0,顯然,只需要求得θ0和θ1的值,就能夠得到這條直線的方程。

那么如何去求得這兩個參數的值呢?我們定義了cost函數J(θ0,θ1),然后使用梯度下降法,通過調整θ0與θ1的值,來讓cost函數持續下降。最后當cost函數減小到最低的時候,此時的θ0和θ1即我們所求。

因此本質上我們的線性回歸,就是為了求得θ0和θ1的值。

3-2 線性回歸的cost函數

對於線性回歸,其cost函數必然是弓形的(凸函數),只有一個全局最低點,如圖所示:

3-3 一道錯題

這是在做測驗的時候我做錯的一道題,在此進行分析一下。原題目如下:

Suppose that for some linear regression problem (say, predicting housing prices as in the lecture), we have some training set, and for our training set we managed to find some θ0, θ1 such that J(θ0,θ1)=0. Which of the statements below must then be true?

翻譯一下:假如說我們擬合好了一個hypothesis h(x),使得能夠對所有的訓練樣本點達到cost函數的值為0,以下哪個是對的?

 A. For these values of θ0 and θ1 that satisfy J(θ0,θ1)=0, we have that hθ(x(i))=y(i) for every training example (x(i),y(i))

【解析】這個是正確的,可以說明至少在訓練集之內,每一個樣本點都滿足“label=網絡輸出”,即hθ(x(i))=y(i)。

 B. For this to be true, we must have y(i)=0 for every value of i=1,2,…,m.

【解析】錯誤,跟訓練樣本點的y值是否等於0沒有任何關系,只需要讓所有的訓練樣本點落在擬合直線上就可以了。

C. Gradient descent is likely to get stuck at a local minimum and fail to find the global minimum.

【解析】錯誤,正如剛才所說,對於線性回歸,只有一個全局最小值,所以不存在陷入局部這種問題。

D.We can perfectly predict the value of y even for new examples that we have not yet seen. 

【解析】錯誤,說起來cost函數為0我的第一反應就是:是不是過擬合了……所以不一定能對新的實例達到100%正確預測。

4 線性代數基礎

今天總結的時候才發現這門課的信息量其實也不小……第一周還有線代復習專欄。整理了一下自己覺得有幫助的內容發一下:

4-1 矩陣的維數

概念:矩陣的維數指的是“行×列”,用 R行×列 表示;而向量的維數指的是“該向量中有多少個元素”,用R維數表示。

比方說對於R3就是一個由世間所有三維向量所組成的集合(就像實數集R一樣),里面的元素可以是:

a =

    0.9649
    0.1576
    0.9706

而R3×4則是由全部 3×4 矩陣所組成的集合,里面的元素可以是:

b =

    0.9572    0.1419    0.7922    0.0357
    0.4854    0.4218    0.9595    0.8491
    0.8003    0.9157    0.6557    0.9340

4-2 矩陣乘法

1、“矩陣與列向量乘法”一節視頻的8分50秒處,有個利用矩陣乘法批量計算輸出值的技巧。

2、“矩陣與矩陣乘法”一節中講到,矩陣和矩陣相乘,可以把后面的矩陣視為由若干列向量組成,分別讓前一個矩陣與這些列向量相乘,並把乘出的結果擺放在一起,即得矩陣與矩陣相乘的結果。

3、矩陣乘法不滿足交換律,但滿足結合律。

4-3 單位矩陣&矩陣的逆&矩陣轉置

1、單位矩陣(identity matrix)

(1)首先說明一下什么是單位矩陣。單位矩陣記作I,它必然為n×n方陣,且對角線都是1。以下是MATLAB生成5×5單位矩陣的實例:

>> eye(5)

ans =

     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1

(2)對於單位矩陣,必滿足A·I=I·A=A。

這里A可能為3×4矩陣,那么對於前一個I來說它是一個4×4單位陣,對於后一個I來說則是一個3×3單位陣。拿matlab試試如下:

>> a

a =

    0.6787    0.3922    0.7060    0.0462    0.6948
    0.7577    0.6555    0.0318    0.0971    0.3171
    0.7431    0.1712    0.2769    0.8235    0.9502

>> b

b =

     1     0     0
     0     1     0
     0     0     1

>> c

c =

     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1

>> a*c

ans =

    0.6787    0.3922    0.7060    0.0462    0.6948
    0.7577    0.6555    0.0318    0.0971    0.3171
    0.7431    0.1712    0.2769    0.8235    0.9502

>> b*a

ans =

    0.6787    0.3922    0.7060    0.0462    0.6948
    0.7577    0.6555    0.0318    0.0971    0.3171
    0.7431    0.1712    0.2769    0.8235    0.9502

2、矩陣的逆(matrix inverse)

一個矩陣的逆,就好比一個常數的倒數一樣,有AA^(-1)=A^(-1)A=I。其中:

(1)I為單位矩陣。

(2)A為方陣(“行數=列數”的矩陣稱之為方針),只有方陣才有逆矩陣。

(3)以下是一個MATLAB求逆矩陣的操作:

>> a=[1,2;3,4]

a =

     1     2
     3     4

>> b=inv(a)

b =

   -2.0000    1.0000
    1.5000   -0.5000

>> b

b =

   -2.0000    1.0000
    1.5000   -0.5000

 可以很容易發現a與b的乘積正是一個單位矩陣I:

>> a*b

ans =

    1.0000         0
    0.0000    1.0000

3、線性代數中的0和1

(1)單位矩陣I和常數1非常相似。

(2)不存在逆矩陣的矩陣叫做奇異矩陣(又叫退化矩陣),可以把它想象成是和0非常相似的東西(就像0也沒有倒數一樣)。比如全零矩陣沒有逆矩陣,但看Ng老師的意思,退化矩陣一定不止只有全零矩陣一種。

4、矩陣的轉置(matrix transpose

(1)定義是:Aij=Bji,其中A、B互為轉置矩陣。

(2)可以視為把矩陣分成若干行,然后每一行都以最左邊元素為中心,順時針旋轉90度,由一行變成一列。然后再按順序一列一列重新編排好。

(3)例如:

>> a=[1,2,3;4,5,6;7,8,9]

a =

     1     2     3
     4     5     6
     7     8     9

>> a'

ans =

     1     4     7
     2     5     8
     3     6     9

step1:首先將矩陣拆成三行:[1,2,3][4,5,6][7,8,9]

step2:分別以最左邊元素為旋轉中心,順時針旋轉90度,得到3個列向量;

step3:把這三個列向量按順序一列一列放好,得到:

[1]   [4]   [7]

[2]   [5]   [8]

[3]   [6]   [9]

(4)再給一個列向量的例子:

>> b=[3;6;9]

b =

     3
     6
     9

>> b'

ans =

     3     6     9

這里仍然是把這個列向量跟矩陣一樣處理。

step1:先拆成三行,每行只有一個元素:[3][6][9]

step2:每行都以最左邊的元素為旋轉中心,順時針旋轉90度。由於現在每行只有一個元素,因此旋轉完畢后得到的是其本身,得到的三個列向量分別為:[3][6][9]

step3:將得到的列向量按順序一列一列放好,得到:

[3]   [6]   [9]

這就是矩陣轉置具體該如何實施。

(2016.6.30記)

by 悠望南山


免責聲明!

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



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