Andrew NG Coursera教程學(xué)習(xí)筆記-Week1

Introduction

什么是Machine Learning

Andrew給出了幾種定義如下:
Arthur Samuel給了一個(gè)較老的定義:

He defined machine learning as the field of study that gives computers the ability to learn without being explicitly programmed.

also Tom Mitchell 給了一個(gè)較新的定義

He says, a computer program is said to learn from experience E, with respect to some task T, and some performance measure P, if its performance on T as measured by P improves with experience E.

這里機(jī)器學(xué)習(xí)就是指一個(gè)計(jì)算機(jī)程序可以通過學(xué)習(xí)經(jīng)驗(yàn)E,然后去執(zhí)行任務(wù)T,并通過表現(xiàn)P來判定學(xué)得好壞,最后這個(gè)程序可以不斷的進(jìn)化改進(jìn)P來執(zhí)行T通過學(xué)習(xí)E

有哪些類型的機(jī)器學(xué)習(xí)

總體上來說,機(jī)器學(xué)習(xí)分為以下兩種:

  • 監(jiān)督式機(jī)器學(xué)習(xí)(supervised machine learning): 即我們需要一個(gè)數(shù)據(jù)集,并且在這個(gè)數(shù)據(jù)集中含有正確的答案。比如課堂上舉例關(guān)于房價(jià)的預(yù)測模型,其訓(xùn)練集中必須含有房價(jià)這個(gè)正確的答案。
  • 無監(jiān)督機(jī)器學(xué)習(xí)(unsupervised machine learning): 在下一節(jié)講到了無監(jiān)督學(xué)習(xí),無監(jiān)督學(xué)習(xí)一般不會(huì)有明確的分類標(biāo)簽,只是告訴模型我這里有一些數(shù)據(jù),你看看能分成幾類,可以怎么分類。(常見的聚類算法就是用于無監(jiān)督學(xué)習(xí))

機(jī)器學(xué)習(xí)要解決的問題,可以分為兩種類型:

  • 回歸問題:輸出結(jié)果是一個(gè)連續(xù)值,比如預(yù)測房價(jià)
  • 分類問題:輸出結(jié)果非連續(xù),比如預(yù)測是和否之類的問題。

此小節(jié)還提到一個(gè)問題,即現(xiàn)實(shí)工程中,我們可能有無窮多的屬性,而這些屬性可以通過數(shù)學(xué)技巧來解決其存儲(chǔ)問題。不過并沒有細(xì)講。

這里我的問題是真的需要無窮多的屬性嗎?通過有限的屬性,比如幾千個(gè)屬性值不可以嗎?

無監(jiān)督學(xué)習(xí)

Andrew給出了什么是無監(jiān)督學(xué)習(xí)的定義,無監(jiān)督學(xué)習(xí)首先是沒有所謂的正確答案的,它只是有一堆數(shù)據(jù),輸入給這些無監(jiān)督學(xué)習(xí)的算法,然后讓算法將這些數(shù)據(jù)分類。Andrew還給出了幾個(gè)例子,比如Google News就是通過將網(wǎng)上的新聞通過無監(jiān)督學(xué)習(xí)算法進(jìn)行自動(dòng)分類,從而可以使得相同story的新聞聚合。還比如有一堆用戶的數(shù)據(jù),可以讓聚合算法自動(dòng)聚類,將客戶分類(這里我感覺可以用于推薦,聚合不同類型的客戶,然后推薦此類客戶近期購買過的其它類型的產(chǎn)品);另外還有一種是非聚類算法(non-clustering algorithm)

最后,Andrew還推薦了Octave,因?yàn)槭褂肙ctave或者M(jìn)atlab可以快速實(shí)驗(yàn)原型,可以快速的幾行代碼就寫出算法的原型。這里還涉及到了一個(gè)概念叫奇異值分解(singular value decomposition),就是課程講的雞尾酒算法的數(shù)學(xué)表達(dá)吧?

  • clustering: 算法自動(dòng)分類,但我們事先并不知道分的什么類型,也就是我們不知道分類的標(biāo)簽是什么
  • non-clustering: 比如將不同聲源的聲音分離

Model and Cost Function

Model Representation

針對訓(xùn)練集的數(shù)據(jù),用如下符號(hào)來標(biāo)記一些東西:
m: 訓(xùn)練集的樣本數(shù)
x: 輸入,variables/features x(i)表示第i行的輸入
y: 輸出的結(jié)果,所謂right answer y(i) 表示第i個(gè)樣本的輸出
(x, y)來表示一個(gè)樣本
h: 算法函數(shù) hypothesis. h maps from x to y. 就是一個(gè)映射函數(shù),可以通過給定的X輸出Y

# ? refers to theta
# 實(shí)際就是一個(gè)一元線性函數(shù)
h(x) = ?0 + ?1x

我們通常把這種線性函數(shù)叫做linear regression with one variable 或者 univariate linear regression

本質(zhì)上,所有機(jī)器學(xué)習(xí)算法其實(shí)都是一個(gè)映射函數(shù),通過訓(xùn)練,找到合適的參數(shù),從而可以實(shí)現(xiàn)這樣一種映射,即給定一組輸入值,可以輸出一個(gè)值,而這個(gè)輸出值就是我們的預(yù)測值

cost function

如下公式就是一個(gè)cost function,實(shí)際是一個(gè)類平方差的公式,關(guān)于平方差請參考文章《統(tǒng)計(jì)基礎(chǔ)一》,但是平方差的計(jì)算并不會(huì)除2,這里之所以乘以1/2,是為了后續(xù)做梯度下降(gradient descent)方便

cost function

這個(gè)cost function最終是要測度h(x)與y之間的距離,我們也叫這個(gè)cost function為square error function. square error function對于線性回歸問題是非常通用的cost function,當(dāng)然還有一些其它的cost function,但是square error function更常用。

Cost Function Intuition1

為了簡化問題,先假設(shè)?0 = 0,J(?0, ?1) -> J(?1)
h(x)是關(guān)于x的函數(shù);而J(?1)是關(guān)于?1的函數(shù),即這個(gè)函數(shù)的橫坐標(biāo)是?1。
課程假定有三個(gè)樣本(1, 1), (2, 2), (3, 3),這時(shí),如果?1=1,那么h(x) = x,根據(jù)J(?1)的公式,可以計(jì)算如下
J(?1) = (1/2*3) * ( (1-1)**2 + (2-2)**2 + (3-3)**2) = 0
假設(shè)?1= 2,計(jì)算如下:
J(?1) = (1/6) * ((2-1)**2 + (4-2)**2 + (6- 3)**2) = (1/6) * 14 ≈ 2.33
以此類推,最終的J(?)函數(shù)的圖形如下:


J(?)

我們知道這個(gè)平方差函數(shù)是用來測度h(x)的預(yù)測值和實(shí)際樣本的y的距離,因此距離越小說明我們選取的參數(shù)越準(zhǔn)確,因此,我們的目標(biāo)是尋找J(?)的最小值,這個(gè)時(shí)候的?值就可以產(chǎn)生最優(yōu)的h(x)算法。
實(shí)際運(yùn)用時(shí),我們可以通過程序自動(dòng)尋找這個(gè)最小值。

Cost Function Intuition2

這一小節(jié)主要講了當(dāng)?0 != 0時(shí)的情況,這時(shí)cost function就成了J(?0, ?1),由于有兩個(gè)variables,因此其函數(shù)表示就成了三維的圖像,如下:


J(?0, ?1)

這里有個(gè)問題,為啥不把?0, ?1的0點(diǎn)放在一起?是為了展示的圖形更直觀?

但通常我們使用contour plot來表示J(?0, ?1),這個(gè)contour plot實(shí)際是上邊那個(gè)3-D的平面投影,同一個(gè)等高線對應(yīng)相同的函數(shù)值。contour plot如下圖:


contour plot

從這個(gè)圖可以看出中心點(diǎn)那個(gè)值是J(?0, ?1)的最小值,也就是說這個(gè)時(shí)候的h(x)最接近實(shí)際情況。

Parameter Learning

Gradient Decent

我們在尋找特定的θ0和θ1并使得J(θ0, θ1)可以獲得最小值時(shí),我們就需要gradient decent function(梯度下降函數(shù))。首先來直觀看下如何尋找θ0, θ1使得J(θ0, θ1)最?。?br>

gradient decent

這個(gè)過程非常像我們站在山上往山下走,一直走到最低處。但是這里可能存在這樣的情況:即當(dāng)我們的初始點(diǎn)不同時(shí),可能最后下降到不同的低點(diǎn)(這里可以看Andrew的視頻,講得非常清楚),所以我們說局部最小值 (local minimum value)。

這里有個(gè)問題,就是有沒有數(shù)學(xué)方法可以找到全局最小值呢?

走的過程是分步走的,每走一步都會(huì)停下來看看往哪個(gè)方向走可以下降得更快,然后再往那個(gè)方向走下一步。我們是通過導(dǎo)數(shù)(derivative)來判斷方向的,導(dǎo)數(shù)就是函數(shù)曲線在某一個(gè)點(diǎn)的切線的斜率(The slope of the tangent is the derivative at that point),我們就是根據(jù)這個(gè)斜率來判斷哪個(gè)方向可以最陡下降(steepest descent)。
先來看看梯度下降的公式


gradient decent term

這個(gè)公式中的??就是所謂的learning rate,它來決定步子邁多大。
梯度下降的過程就是不斷迭代梯度下降的公式,直到收斂(convergence), 即達(dá)到最低點(diǎn)。這里需要注意的是,每次迭代,θ0和θ1必須同時(shí)計(jì)算,如下圖所示:


θ update

Gradient Descent Intuition

gradient decent

從圖中我們可以看到上方的圖表明,其導(dǎo)數(shù)為正時(shí),θ會(huì)減一個(gè)正數(shù)(這個(gè)數(shù)的大小顯然跟??有關(guān)),因此θ值會(huì)向左移動(dòng),因此向local minimum value收斂。下邊的圖類似,只是θ會(huì)向右移動(dòng)收斂。

gradient decent2

上邊的坐標(biāo)圖表明當(dāng)??很小時(shí),收斂的非常慢,因?yàn)檫~的步子小啊
下邊的坐標(biāo)圖說明當(dāng)??很大時(shí),會(huì)導(dǎo)致收斂失敗,因?yàn)闀?huì)導(dǎo)致離最小值點(diǎn)越來越遠(yuǎn)
所以,當(dāng)收斂時(shí)間非常長或者收斂失敗時(shí),說明我們的??設(shè)置的不合適。

gradient decent

這幅圖說明了當(dāng)我們采用一個(gè)固定的??時(shí),收斂的step也會(huì)越來越小(因?yàn)樾甭试絹碓叫?,直到最終收斂,所以最終我們是可以收斂成功的。

Gradient Descent For Linear Regression

要進(jìn)行梯度下降,就需要迭代地計(jì)算θ0和θ1,根據(jù)前面的課程我們知道需要知道J(θ)導(dǎo)數(shù)才能計(jì)算,這個(gè)涉及到微積分的知識(shí),暫且不表,先看下求導(dǎo)后的公式:


gradient decent equation

注意:θ1與θ0是不同的,這是求導(dǎo)后的結(jié)果
求導(dǎo)的過程如下:


derivation

梯度下降的過程就是尋找J(θ)最小值的過程,針對線性回歸這種特殊情況,J(θ)實(shí)際上是一個(gè)二次的凸函數(shù)(convex quadratic function),因此只有一個(gè)最小值,即我們找到的這個(gè)局部最小值一定是全局最小值。

另外,還涉及到一個(gè)概念叫batch gradient decent, 這是由于我們每次迭代的時(shí)候,都需要針對所有的樣本進(jìn)行計(jì)算再求和,因此我們說是batch。Andrew還提到了某些其它的方式可以不用全部的樣本進(jìn)行計(jì)算,每次只需要樣本的一個(gè)子集即可,后續(xù)課程再講。

另外,線性代數(shù)還有一個(gè)叫做normal equations的方法可以不需要迭代的方法來找到最小值,這個(gè)也是以后會(huì)涉及到。

Linear Algebra Review

Matrices and Vectors

矩陣請參考線性代數(shù)之矩陣
向量vector即n x 1的矩陣,即只有一個(gè)column的矩陣。
向量通常使用小寫字母表示,而matrix通常使用大寫字母表示
在表示向量的元素的時(shí)候,其下標(biāo)可以從0開始,也可以從1開始,從0開始就是0-indexed vector,而從1開始就是1-indexed vector。
另外,

"Scalar" means that an object is a single value, not a vector or matrix.
? refers to the set of scalar real numbers.
??? refers to the set of n-dimensional vectors of real numbers.

Addition and Scalar Multiplication

本節(jié)相對簡單,主要是矩陣加減運(yùn)算以及標(biāo)量與矩陣相乘。不再贅述
需要注意的是,在矩陣的加減運(yùn)算時(shí),兩個(gè)矩陣必須是相同的維數(shù)。

Matrix Vector Multiplication

本節(jié)主要講了Matrix和Vector的乘

矩陣與向量的乘本質(zhì)上就是對多元方程式的計(jì)算,可以想象矩陣的每一行都是一個(gè)樣例的特征(每個(gè)特征值都是對應(yīng)一個(gè)變量值x, y, z...),而向量就是方程的θ0, θ1, ....θn,通過相乘,實(shí)際上就可以計(jì)算出對應(yīng)的h(x)結(jié)果。需要注意的是,在構(gòu)筑的時(shí)候,常數(shù)項(xiàng)也需要構(gòu)筑一列,即把變量當(dāng)做1

假設(shè)我們有房價(jià)的尺寸數(shù)據(jù)[123; 234; 555; 666], h(x) = 40 + 2x
那么我們在使用矩陣計(jì)算時(shí),需要構(gòu)筑如下矩陣

A = [1, 123; 1, 234; 1, 555; 1, 666]
v = [40; 2]
h(x) = A * v

通過這種方式不僅代碼會(huì)變得簡單,而且計(jì)算時(shí)會(huì)更加有效率

另外,矩陣的乘是有順序的,且前一個(gè)矩陣的column必須與后一個(gè)矩陣的row相等。
比如一個(gè)3 x 2矩陣只能跟一個(gè)2 x n矩陣相乘,結(jié)果為3 x n矩陣
最后關(guān)于矩陣的乘,可以參考線性代數(shù)之矩陣

Matrix-Matrix Multiplication

矩陣乘有的時(shí)候是比較繞的,我覺得Andrew講解的非常好,基本上我們需要把第二個(gè)矩陣分解成向量,然后用第一個(gè)矩陣分別于這些向量相乘,得到一個(gè)新的向量,最終再把所有的結(jié)果向量組合在一起就是最終結(jié)果。
矩陣和矩陣乘主要用于有多個(gè)假設(shè)h(x)的時(shí)候,這個(gè)時(shí)候第二個(gè)矩陣的每個(gè)向量都對應(yīng)一個(gè)假設(shè)。
這塊看Andrew的視頻會(huì)非常清楚,不再贅述,需要注意的是
矩陣是有順序的,而且第一個(gè)矩陣的列數(shù)必須與第二個(gè)矩陣的行數(shù)相等
A x B, 如果A為m, n矩陣, 那么B就必須為n,x矩陣,結(jié)果是m, x矩陣

Matrix Multiplication Properties

此小節(jié)主要介紹了矩陣乘法的幾個(gè)屬性:

  • 非community屬性:community屬性指乘號(hào)兩邊的變量可以交換順序,即ab = ba,但是對于矩陣而言,通常是非community的,即AB != BA
  • associative屬性:指當(dāng)有多個(gè)乘數(shù)的時(shí)候,先計(jì)算前邊的乘和先計(jì)算后邊的乘是一樣的,即a * b * c = a * (b * c) = (a * b) * c,而矩陣是associative的,即A * (B * C) = (A * B) * C
    之后Andrew引入了單位矩陣的概念(identity matrix),單位矩陣與方形矩陣相乘的時(shí)候是community的,即I * A = A * I,關(guān)于單位矩陣,可以參考線性代數(shù)之矩陣

Inverse and Transpose

此小節(jié)主要講了什么是逆矩陣(inverse matrix), 以及什么是轉(zhuǎn)置矩陣(transpose of matrix)。
逆矩陣的計(jì)算比較復(fù)雜,涉及到行列式和余子式的概念,Andrew沒有在課程上講,可以參考線性代數(shù)之矩陣以及線性代數(shù)之逆矩陣。Andrew演示了通過octave來自動(dòng)計(jì)算逆矩陣的方式。需要注意的是,并不是所有的square matrix都有逆矩陣,如果矩陣是奇異的singular或者退化的degenerate時(shí),是沒有逆矩陣的。

矩陣的轉(zhuǎn)置,簡單來說就是把行轉(zhuǎn)為列,如下:


matrix

transpose

即一個(gè)m x n matrix轉(zhuǎn)置后變?yōu)閚 x m matrix,且滿足


transpose
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容