機器學習筆記

10:28

1. 引言(Introduction)  

1.1 Welcome  

1.2 什麼是機器學習(What is Machine Learning)  

1.3 監督學習(Supervised Learning)  

1.4 無監督學習(Unsupervised Learning)  

2 單變量線性迴歸(Linear Regression with One Variable)  

2.1 模型表示(Model Representation)  

2.2 代價函數(Cost Function)  

2.3 代價函數 - 直觀理解1(Cost Function - Intuition I)  

2.4 代價函數 - 直觀理解2(Cost Function - Intuition II)  

2.5 梯度下降(Gradient Descent)  

2.6 梯度下降直觀理解(Gradient Descent Intuition)  

2.7 線性迴歸中的梯度下降(Gradient Descent For Linear Regression)  

3 Linear Algebra Review  

3.1 Matrices and Vectors  

3.2 Addition and Scalar Multiplication  

3.3 Matrix Vector Multiplication  

3.4 Matrix Matrix Multiplication  

3.5 Matrix Multiplication Properties  

3.6 Inverse and Transpose  

1. 引言(Introduction)

1.1 Welcome

隨着互聯網數據不斷累積,硬件不斷升級迭代,在這個信息爆炸的時代,機器學習已被應用在各行各業中,可謂無處不在。

一些常見的機器學習的應用,例如:

  • 手寫識別

  • 垃圾郵件分類

  • 搜索引擎

  • 圖像處理

使用到機器學習的一些案例:

  • 數據挖掘

    • 網頁點擊流數據分析

  • 人工無法處理的工作(量大)

    • 手寫識別

    • 計算機視覺

  • 個人定製

    • 推薦系統

  • 研究大腦

  • ……

1.2 什麼是機器學習(What is Machine Learning)

  1. 機器學習定義 這裏主要有兩種定義:

  • T(Task): 過濾垃圾郵件任務。

  • P(Performance): 電子郵件系統過濾垃圾郵件的準確率。

  • E(Experience): 用戶對電子郵件的標記。

  • Tom Mitchell 的定義更爲現代和正式。在過濾垃圾郵件這個例子中,電子郵件系統會根據用戶對電子郵件的標記(是/不是垃圾郵件)不斷學習,從而提升過濾垃圾郵件的準確率,定義中的三個字母分別代表:

  • Tom Mitchell (1998) Well-posed Learning Problem: 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.

  • 這個定義有點不正式但提出的時間最早,來自於一個懂得計算機編程的下棋菜鳥。他編寫了一個程序,但沒有顯式地編程每一步該怎麼走,而是讓計算機自己和自己對弈,並不斷地計算佈局的好壞,來判斷什麼情況下獲勝的概率高,從而積累經驗,好似學習,最後,這個計算機程序成爲了一個比他自己還厲害的棋手。

  • Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.

  • 機器學習算法

    • 主要有兩種機器學習的算法分類

    1. 監督學習

    2. 無監督學習

  • 兩者的區別爲是否需要人工參與數據結果的標註。這兩部分的內容佔比很大,並且很重要,掌握好了可以在以後的應用中節省大把大把的時間~

  • 還有一些算法也屬於機器學習領域,諸如:

    • 半監督學習: 介於監督學習於無監督學習之間

    • 推薦算法: 沒錯,就是那些個買完某商品後還推薦同款的某購物網站所用的算法。

    • 強化學習: 通過觀察來學習如何做出動作,每個動作都會對環境有所影響,而環境的反饋又可以引導該學習算法。

    • 遷移學習

    1.3 監督學習(Supervised Learning)

    監督學習,即爲教計算機如何去完成預測任務(有反饋),預先給一定數據量的輸入和對應的結果即訓練集,建模擬合,最後讓計算機預測未知數據的結果。

    監督學習一般有兩種:

    1. 迴歸問題(Regression)

    • 迴歸問題即爲預測一系列的連續值。

    • 在房屋價格預測的例子中,給出了一系列的房屋面基數據,根據這些數據來預測任意麪積的房屋價格。給出照片-年齡數據集,預測給定照片的年齡。

    clip_image001  


    1. 分類問題(Classification)

    • 分類問題即爲預測一系列的離散值。

    • 即根據數據預測被預測對象屬於哪個分類。

    • 視頻中舉了×××腫瘤這個例子,針對診斷結果,分別分類爲良性或惡性。還例如垃圾郵件分類問題,也同樣屬於監督學習中的分類問題。

    clip_image002[4]  


    視頻中提到支持向量機這個算法,旨在解決當特徵量很大的時候(特徵即如×××例子中的腫塊大小,顏色,氣味等各種特徵),計算機內存一定會不夠用的情況。支持向量機能讓計算機處理無限多個特徵。

    1.4 無監督學習(Unsupervised Learning)

    相對於監督學習,訓練集不會有人爲標註的結果(無反饋),我們不會給出結果或無法得知訓練集的結果是什麼樣,而是單純由計算機通過無監督學習算法自行分析,從而“得出結果”。計算機可能會把特定的數據集歸爲幾個不同的簇,故叫做聚類算法。

    無監督學習一般分爲兩種:

    1. 聚類(Clustering)

    • 新聞聚合

    • DNA 個體聚類

    • 天文數據分析

    • 市場細分

    • 社交網絡分析

  • 非聚類(Non-clustering)

    • 雞尾酒問題

    新聞聚合

    在例如谷歌新聞這樣的網站中,每天后臺都會收集成千上萬的新聞,然後將這些新聞分組成一個個的新聞專題,這樣一個又一個聚類,就是應用了無監督學習的結果。

    雞尾酒問題

    clip_image003  

    在雞尾酒會上,大家說話聲音彼此重疊,幾乎很難分辨出面前的人說了什麼。我們很難對於這個問題進行數據標註,而這裏的通過機器學習的無監督學習算法,就可以將說話者的聲音同背景音樂分離出來,看視頻,效果還不錯呢~~。

    嗯,這塊是打打雞血的,只需要一行代碼就解決了問題,就是這麼簡單!當然,我沒復現過 ^_^……

    神奇的一行代碼: [W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

    編程語言建議

    在機器學習剛開始時,推薦使用 Octave 類的工程計算編程軟件,因爲在 C++ 或 Java 等編程語言中,編寫對應的代碼需要用到複雜的庫以及要寫大量的冗餘代碼,比較耗費時間,建議可以在學習過後再考慮使用其他語言來構建系統。 另外,在做原型搭建的時候也應該先考慮使用類似於 Octave 這種便於計算的編程軟件,當其已經可以工作後,纔將模型移植到其他的高級編程語言中。

    注:Octave 與 MATLAB 語法相近,由於 MATLAB 爲商業軟件,課程中使用開源且免費的 Octave。

    機器學習領域發展迅速,現在也可使用 Tensorflow 等開源機器學習框架編寫機器學習代碼,這些框架十分友好,易於編寫及應用。

    2 單變量線性迴歸(Linear Regression with One Variable)

    2.1 模型表示(Model Representation)

    1. 房價預測訓練集


      • Size in ()clip_image004[4]


      • Price ($) in 1000's()clip_image005


      • 2104


      • 460


      • 1416


      • 232


      • 1534


      • 315


      • 852


      • 178


      • ...


      • ...

    房價預測訓練集中,同時給出了輸入 和輸出結果 ,即給出了人爲標註的”正確結果“,且預測的量是連續的,屬於監督學習中的迴歸問題。clip_image006[4]  

    1. 問題解決模型

    clip_image007  

    其中 代表結果函數,也稱爲假設(hypothesis) 。假設函數根據輸入(房屋的面積),給出預測結果輸出(房屋的價格),即是一個 的映射。clip_image008[4]  

    ,爲解決房價問題的一種可行表達式。clip_image009  

    : 特徵/輸入變量。clip_image010[4]  

    上式中, 爲參數, 的變化才決定了輸出結果,不同以往,這裏的 被我們視作已知(不論是數據集還是預測時的輸入),所以怎樣解得 以更好地擬合數據,成了求解該問題的最終問題。clip_image011  

    單變量,即只有一個特徵(如例子中房屋的面積這個特徵)。

    2.2 代價函數(Cost Function)

    李航《統計學習方法》一書中,損失函數與代價函數兩者爲同一概念,未作細分區別,全書沒有和《深度學習》一書一樣混用,而是統一使用損失函數來指代這類類似概念。

    吳恩達(Andrew Ng)老師在其公開課中對兩者做了細分。如果要聽他的課做作業,不細分這兩個概念是會被打小手扣分的!這也可能是因爲老師發現了業內混用的亂象,想要治一治吧。

    損失函數(Loss/Error Function): 計算單個訓練集的誤差

    代價函數(Cost Function): 計算整個訓練集所有損失函數之和的平均值

    綜合考慮,本筆記對兩者概念進行細分,若有所謬誤,歡迎指正。

    機器學習中的目標函數、損失函數、代價函數有什麼區別?- 知乎  

    我們的目的在於求解預測結果 最接近於實際結果 時 的取值,則問題可表達爲求解 的最小值。clip_image012[4]  

    : 訓練集中的樣本總數clip_image013  

    : 目標變量/輸出變量clip_image014[6]  

    : 訓練集中的實例clip_image015  

    : 訓練集中的第 個樣本實例clip_image016[6]  

    clip_image017  

    上圖展示了當 取不同值時, 對數據集的擬合情況,藍色虛線部分代表建模誤差(預測結果與實際結果之間的誤差),我們的目標就是最小化所有誤差之和。clip_image018  

    爲了求解最小值,引入代價函數(Cost Function)概念,用於度量建模誤差。考慮到要計算最小值,應用二次函數對求和式建模,即應用統計學中的平方損失函數(最小二乘法):

    clip_image019  

    : 的預測值clip_image020[8]  

    係數 存在與否都不會影響結果,這裏是爲了在應用梯度下降時便於求解,平方的導數會抵消掉 。clip_image021  

    討論到這裏,我們的問題就轉化成了求解 的最小值。clip_image022[4]  

    2.3 代價函數 - 直觀理解1(Cost Function - Intuition I)

    根據上節視頻,列出如下定義:

    • 假設函數(Hypothesis): clip_image023

    • 參數(Parameters): clip_image024[4]

    • 代價函數(Cost Function): clip_image025

    • 目標(Goal): clip_image026[4]

    爲了直觀理解代價函數到底是在做什麼,先假設 ,並假設訓練集有三個數據,分別爲,這樣在平面座標系中繪製出 ,並分析 的變化。clip_image027  

    clip_image028[24]  

    右圖 隨着 的變化而變化,可見當 時,,取得最小值,對應於左圖青色直線,即函數 擬合程度最好的情況。clip_image029  

    2.4 代價函數 - 直觀理解2(Cost Function - Intuition II)

    注:該部分由於涉及到了多變量成像,可能較難理解,要求只需要理解上節內容即可,該節如果不能較好理解可跳過。

    給定數據集:

    clip_image030[4]  

    參數在 不恆爲 時代價函數 關於 的3-D圖像,圖像中的高度爲代價函數的值。clip_image031  

    clip_image032[4]  

    由於3-D圖形不便於標註,所以將3-D圖形轉換爲輪廓圖(contour plot),下面用輪廓圖(下圖中的右圖)來作直觀理解,其中相同顏色的一個圈代表着同一高度(同一 值)。clip_image033  

    時:clip_image034[6]  

    clip_image035  

    大概在 時:clip_image036[4]  

    clip_image037  

    上圖中最中心的點(紅點),近乎爲圖像中的最低點,也即代價函數的最小值,此時對應 對數據的擬合情況如左圖所示,嗯,一看就擬合的很不錯,預測應該比較精準啦。clip_image038[4]  

    2.5 梯度下降(Gradient Descent)

    在特徵量很大的情況下,即便是借用計算機來生成圖像,人工的方法也很難讀出 的最小值,並且大多數情況無法進行可視化,故引入梯度下降(Gradient Descent)方法,讓計算機自動找出最小化代價函數時對應的 值。clip_image039  

    梯度下降背後的思想是:開始時,我們隨機選擇一個參數組合即起始點,計算代價函數,然後尋找下一個能使得代價函數下降最多的參數組合。不斷迭代,直到找到一個局部最小值(local minimum),由於下降的情況只考慮當前參數組合周圍的情況,所以無法確定當前的局部最小值是否就是全局最小值(global minimum),不同的初始參數組合,可能會產生不同的局部最小值。clip_image040[4]  

    下圖根據不同的起始點,產生了兩個不同的局部最小值。

    clip_image041  

    視頻中舉了下山的例子,即我們在山頂上的某個位置,爲了下山,就不斷地看一下週圍下一步往哪走下山比較快,然後就邁出那一步,一直重複,直到我們到達山下的某一處陸地。

    梯度下降公式:

    $\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; &{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( {\theta_{0}},{\theta_{1}} \right) \newline \rbrace \end{align*}$

    : 第 個特徵參數clip_image042  

    ”:=“: 賦值操作符

    : 學習速率(learning rate), clip_image043  

    : 的偏導clip_image044[10]  

    公式中,學習速率決定了參數值變化的速率即”走多少距離“,而偏導這部分決定了下降的方向即”下一步往哪裏“走(當然實際上的走多少距離是由偏導值給出的,學習速率起到調整後決定的作用),收斂處的局部最小值又叫做極小值,即”陸地“。

    clip_image045  

    注意,在計算時要批量更新 值,即如上圖中的左圖所示,否則結果上會有所出入,原因不做細究。clip_image046[4]  

    2.6 梯度下降直觀理解(Gradient Descent Intuition)

    該節探討 的梯度下降更新過程,即 ,此處爲了數學定義上的精確性,用的是 ,如果不熟悉微積分學,就把它視作之前的 即可。clip_image047  

    clip_image048[4]  

    把紅點定爲初始點,切於初始點的紅色直線的斜率,表示了函數 在初始點處有正斜率,也就是說它有正導數,則根據梯度下降公式 , 右邊的結果是一個正值,即 會向左邊移動。這樣不斷重複,直到收斂(達到局部最小值,即斜率爲0)。clip_image049  

    初始 值(初始點)是任意的,若初始點恰好就在極小值點處,梯度下降算法將什麼也不做()。clip_image050[6]  

    不熟悉斜率的話,就當斜率的值等於圖中三角形的高度除以水平長度好啦,精確地求斜率的方法是求導。

    對於學習速率 ,需要選取一個合適的值才能使得梯度下降算法運行良好。clip_image051  

    • 學習速率過小圖示:

    clip_image052[8]  


    • 收斂的太慢,需要更多次的迭代。

    • 學習速率過大圖示:

    clip_image053  


    • 可能越過最低點,甚至導致無法收斂。

    學習速率只需選定即可,不需要在運行梯度下降算法的時候進行動態改變,隨着斜率越來越接近於0,代價函數的變化幅度會越來越小,直到收斂到局部極小值。

    如圖,品紅色點爲初始點,代價函數隨着迭代的進行,變化的幅度越來越小。

    clip_image054[8]  

    最後,梯度下降不止可以用於線性迴歸中的代價函數,還通用於最小化其他的代價函數。

    2.7 線性迴歸中的梯度下降(Gradient Descent For Linear Regression)

    線性迴歸模型

    • clip_image055

    • clip_image056[4]

    梯度下降算法

    • $\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; &{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( {\theta_{0}},{\theta_{1}} \right) \newline \rbrace \end{align*}$

    直接將線性迴歸模型公式代入梯度下降公式可得出公式

    clip_image057  

    當 時,線性迴歸中代價函數求導的推導過程:clip_image058[8]  

    clip_image059  

    clip_image060[4]  

    clip_image061  

    所以當 時:clip_image062[4]  

    clip_image063  

    所以當 時:clip_image064[4]  

    clip_image065  

    上文中所提到的梯度下降,都爲批量梯度下降(Batch Gradient Descent),即每次計算都使用所有的數據集 更新。clip_image066[4]  

    由於線性迴歸函數呈現碗狀,且只有一個全局的最優值,所以函數一定總會收斂到全局最小值(學習速率不可過大)。同時,函數 被稱爲凸二次函數,而線性迴歸函數求解最小值問題屬於凸函數優化問題。clip_image067  

    clip_image068  

    另外,使用循環求解,代碼較爲冗餘,後面會講到如何使用向量化(Vectorization)來簡化代碼並優化計算,使梯度下降運行的更快更好。

    3 Linear Algebra Review

    這部分,學過線性代數的可以複習一下,比較基礎。筆記整理暫留。

    3.1 Matrices and Vectors

    Octave/Matlab 代碼:

    % The ; denotes we are going back to a new row.

    A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]

    % Initialize a vector

    v = [1;2;3]

    % Get the dimension of the matrix A where m = rows and n = columns

    [m,n] = size(A)

    % You could also store it this way

    dim_A = size(A)

    % Get the dimension of the vector v

    dim_v = size(v)

    % Now let's index into the 2nd row 3rd column of matrix A

    A_23 = A(2,3)

    執行結果:

    A =

    1 2 3

    4 5 6

    7 8 9

    10 11 12

    v =

    1

    2

    3

    m = 4

    n = 3

    dim_A =

    4 3

    dim_v =

    3 1

    A_23 = 6

    3.2 Addition and Scalar Multiplication

    Octave/Matlab 代碼:

    % Initialize matrix A and B

    A = [1, 2, 4; 5, 3, 2]

    B = [1, 3, 4; 1, 1, 1]

    % Initialize constant s

    s = 2

    % See how element-wise addition works

    add_AB = A + B

    % See how element-wise subtraction works

    sub_AB = A - B

    % See how scalar multiplication works

    mult_As = A * s

    % Divide A by s

    div_As = A / s

    % What happens if we have a Matrix + scalar?

    add_As = A + s

    執行結果:

    A =

    1 2 4

    5 3 2

    B =

    1 3 4

    1 1 1

    s = 2

    add_AB =

    2 5 8

    6 4 3

    sub_AB =

    0 -1 0

    4 2 1

    mult_As =

    2 4 8

    10 6 4

    div_As =

    0.50000 1.00000 2.00000

    2.50000 1.50000 1.00000

    add_As =

    3 4 6

    7 5 4

    3.3 Matrix Vector Multiplication

    Octave/Matlab 代碼:

    % Initialize matrix A

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

    % Initialize vector v

    v = [1; 1; 1]

    % Multiply A * v

    Av = A * v

    執行結果:

    A =

    1 2 3

    4 5 6

    7 8 9

    v =

    1

    1

    1

    Av =

    6

    15

    24

    3.4 Matrix Matrix Multiplication

    Octave/Matlab 代碼:

    % Initialize a 3 by 2 matrix

    A = [1, 2; 3, 4;5, 6]

    % Initialize a 2 by 1 matrix

    B = [1; 2]

    % We expect a resulting matrix of (3 by 2)*(2 by 1) = (3 by 1)

    mult_AB = A*B

    % Make sure you understand why we got that result

    執行結果:

    A =

    1 2

    3 4

    5 6

    B =

    1

    2

    mult_AB =

    5

    11

    17

    3.5 Matrix Multiplication Properties

    Octave/Matlab 代碼:

    % Initialize random matrices A and B

    A = [1,2;4,5]

    B = [1,1;0,2]

    % Initialize a 2 by 2 identity matrix

    I = eye(2)

    % The above notation is the same as I = [1,0;0,1]

    % What happens when we multiply I*A ?

    IA = I*A

    % How about A*I ?

    AI = A*I

    % Compute A*B

    AB = A*B

    % Is it equal to B*A?

    BA = B*A

    % Note that IA = AI but AB != BA

    執行結果:

    A =

    1 2

    4 5

    B =

    1 1

    0 2

    I =

    Diagonal Matrix

    1 0

    0 1

    IA =

    1 2

    4 5

    AI =

    1 2

    4 5

    AB =

    1 5

    4 14

    BA =

    5 7

    8 10

    3.6 Inverse and Transpose

    Octave/Matlab 代碼:

    % Initialize matrix A

    A = [1,2,0;0,5,6;7,0,9]

    % Transpose A

    A_trans = A'

    % Take the inverse of A

    A_inv = inv(A)

    % What is A^(-1)*A?

    A_invA = inv(A)*A

    執行結果:

    A =

    1 2 0

    0 5 6

    7 0 9

    A_trans =

    1 0 7

    2 5 0

    0 6 9

    A_inv =

    0.348837 -0.139535 0.093023

    0.325581 0.069767 -0.046512

    -0.271318 0.108527 0.038760

    A_invA =

    1.00000 -0.00000 0.00000

    0.00000 1.00000 -0.00000

    -0.00000 0.00000 1.00000

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