筆記:機器學習——吳恩達 第一週

課程目錄

一、 引言(Introduction)
1.1 歡迎
1.2 機器學習是什麼?
1.3 監督學習
1.4 無監督學習

二、單變量線性迴歸(Linear Regression with One Variable)
2.1 模型表示
2.2 代價函數
2.3 代價函數的直觀理解I
2.4 代價函數的直觀理解II
2.5 梯度下降
2.6 梯度下降的直觀理解
2.7 梯度下降的線性迴歸
2.8 接下來的內容

三、線性代數回顧(Linear Algebra Review)
3.1 矩陣和向量
3.2 加法和標量乘法
3.3 矩陣向量乘法
3.4 矩陣乘法
3.5 矩陣乘法的性質
3.6 逆、轉置

筆記內容


一、 引言(Introduction)

1.2 機器學習是什麼?

       由 卡內基梅隆大學的Tom Mitchell 提出,一個程序被認爲能從經驗 E 中學習,解決任務 T,達到性能度量值P。比如經驗e 就是程序上萬次的自我練習的經驗而任務 t 就是下棋。性能度量值 p ,就是它在與一些新的對手比賽時,贏得比賽的概率。 

      主要有兩種類型:監督學習無監督學習。這裏簡單說兩句,監督學習是指,我們將教計算機如何去完成任務,而在無監督學習中,是讓它自己進行學習。


1.3監督學習 


       監督學習指的就是我們給學習算法一個數據集。這個數據集由“正確答案”組成。在房價的例子中,我們給定數據集中每個樣本的正確價格,即它們實際的售價,然後運用學習算法,算出更多的正確答案。用術語來講,這也叫做迴歸問題。因爲我們試着推測出一個連續值的結果,即房子的價格。

       迴歸問題,即試着推測這一系列連續值屬性。 


       這個數據集中,橫軸表示腫瘤的大小,縱軸上,1 和 0 表示是或者不是惡性腫瘤。假設說腫瘤大概這麼大,那麼機器學習的問題就在於,能否估算出腫瘤是惡性的或是良性的概率。用術語來講,這是一個分類問題。 

       分類問題,即試着推測出離散的輸出值:0 或 1 (良性或惡性),而事實上在分類問題中,輸出可能不止兩個值。


       在其它一些機器學習問題中,可能會遇到不止一種特徵。以後會講一個算法,叫支持向量機,裏面有一個巧妙的數學技巧,能讓計算機處理無限多個特徵。

       回顧一下,這節課我們介紹了監督學習。其基本思想是,我們數據集中的每個樣本都有相應的“正確答案”,再根據這些樣本作出預測。我們還介紹了迴歸問題,即通過迴歸來推出一個連續的輸出;之後我們介紹了分類問題,其目標是推出一組離散的結果。 


1.4無監督學習 

       在無監督學習中,我們基本上不知道結果會是什麼樣子,但我們可以通過聚類的方式從數據中提取一個特殊的結構。在無監督學習中給定的數據是和監督學習中給定的數據是不一樣的。在無監督學習中給定的數據沒有任何標籤或者說只有同一種標籤。

       

       如上圖所示,在無監督學習中,我們只是給定了一組數據,我們的目標是發現這組數據中的特殊結構。例如我們使用無監督學習算法會將這組數據分成兩個不同的簇,,這樣的算法就叫聚類算法


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

 2.1模型表示 

      我們的第一個學習算法是線性迴歸算法


       它被稱作監督學習是因爲對於每個數據來說,我們給出了“正確的答案”,即告訴我們:根據我們的數據來說,房子實際的價格是多少。所以這是一個迴歸問題

      同時,還有另一種最常見的監督學習方式,叫做分類問題,當我們想要預測離散的輸出值,例如,我們正在尋找癌症腫瘤,並想要確定腫瘤是良性的還是惡性的,這就是 0/1 離散輸出的問題。

       我們將要用來描述這個迴歸問題的標記如下: 

  m  代表訓練集中實例的數量 
  x   代表特徵/輸入變量 
  y   代表目標變量/輸出變量 
 (x,y)   代表訓練集中的實例 
 (x(i),y(i))   代表第 i 個觀察實例 
  h     代表學習算法的解決方案或函數也稱爲假設(hypothesis) 


     要解決房價預測問題,我們實際上是要將訓練集“喂”給我們的學習算法,進而學習得到一個假設 h。h 代表 hypothesis(假設) ,h 根據輸入的 x 值來得出 y 值,y 值對應房子的價格 因此,h 是一個從  y 的函數映射。 然後將我們要預測的房屋的尺寸作爲輸入變量輸入給 h,預測出該房屋的交易價格作爲輸出變量輸出爲結果。

       一種可能的表達方式爲: , 因爲只含有一個特徵/輸入變量,因此這樣的問題叫作單變量線性迴歸問題


2.2 代價函數 

       在這段視頻中我們將定義代價函數的概念,這有助於我們弄清楚如何把最有可能的直線與我們的數據相擬合。如圖: 


       我們選擇的參數決定了我們得到的直線相對於我們的訓練集的準確程度,模型所預測的值與訓練集中實際值之間的差距(下圖中藍線所指)就是建模誤差(modeling error)。 


       我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型參數。即使得代價函數 最小。

       我們繪製一個等高線圖,三個座標分別爲 θ0 和 θ1 和 J(θ0,θ1): 


則可以看出在三維空間中存在一個使得 J(θ0,θ1)最小的點。 

       代價函數也被稱作平方誤差函數,有時也被稱爲平方誤差代價函數。我們之所以要求出誤差的平方和,是因爲誤差平方代價函數,對於大多數問題,特別是迴歸問題,都是一個合理的選擇。其他的代價函數也能很好地發揮作用,但是平方誤差代價函數可能是解決回歸問題最常用的手段了。 


2.3 代價函數的直觀理解 I 

       在上一個視頻中,我們給了代價函數一個數學上的定義。在這個視頻裏,讓我們通過一些例子來獲取一些直觀的感受,看看代價函數到底是在幹什麼。 

 


2.4 代價函數的直觀理解 II 

         

      代價函數的樣子,等高線圖,則可以看出在三維空間中存在一個使得 J(θ0,θ1)最小的點。 

                

       我們真正需要的是一種有效的算法,能夠自動地找出這些使代價函數 J 取最小值的參數 θ0 和 θ1 來。 在下一節視頻中,我們將介紹一種算法,能夠自動地找出能使代價函數 J 最小化的參數 θ0 和 θ1 的值。


2.5梯度下降 

       梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數 J(θ0,θ1) 的最小值。 

       梯度下降背後的思想是:開始時我們隨機選擇一個參數的組合(θ0,θ1,...,θn),計算代價函數,然後我們尋找下一個能讓代價函數值下降最多的參數組合。
       我們持續這麼做直到到到一個局部最小值(local minimum),因爲我們並沒有嘗試完所有的參數組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數組合,可能會找到不同的局部最小值。 

 

       想象一下你正站立在山的這一點上,在梯度下降算法中,我們要做的就是旋轉 360 度,看看我們的周圍,並在某個方向上,用小碎步儘快下山。這些小碎步需要朝什麼方向?如果我們站在山坡上的這一點,你看一下週圍,你會發現最佳的下山方向,你再看看周圍,然後再一次想想,我應該從什麼方向邁着小碎步下山?然後你按照自己的判斷又邁出一步,重複上面的步驟,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山,然後又邁進了一小步,並依此類推,直到你接近局部最低點的位置。 

      批量梯度下降(batch gradient descent)算法的公式爲: 

 

       其中 α 學習率(learning rate),它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的參數減去學習速率乘以代價函數的導數。 


       實現方法是:你應該計算公式右邊的部分,通過那一部分計算出 θ0 和 θ1 的值,然後同時更新 θ0 和 θ1。 

       同時更新梯度下降中的一種常用方法。我們之後會講到,同步更新是更自然的實現方法。當人們談到梯度下降時,他們的意思就是同步更新。 


2.6梯度下降的直觀理解 

       在之前的視頻中,我們給出了一個數學上關於梯度下降的定義,本次視頻我們更深入研究一下,更直觀地感受一下這個算法是做什麼的,以及梯度下降算法的更新過程有什麼意義。梯度下降算法如下圖: 


      描述:對 θ 賦值,使得 J(θ)按梯度下降最快方向進行,一直迭代下去,最終得到局部最小值。其中 α 是學習率(learning rate),它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大。 


       對於這個問題,求導的目的,就是取這個紅點的切線的斜率,現在,這條線有一個正斜率,也就是說它有正導數,因此,我得到的新的 θ1,θ1 更新後等於 θ1 減去一個正數乘以 α。 
       梯度下降法的更新規則:

       如果 α 太小或 α 太大會出現什麼情況?

       如果 α 太小了,即學習速率太小,結果就是隻能一點點地挪動,去努力接近最低點,這樣就需要很多步才能到達最低點。
       如果 α 太大,那麼梯度下降法可能會越過最低點,甚至可能無法收斂,下一次迭代又移動了一大步,越過一次,又越過一次,一次次越過最低點,直到你發現實際上離最低點越來越遠。所以,如果 α 太大,它會導致無法收斂,甚至發散。 

       如果我們預先把 θ1放在一個局部的最低點,你認爲下一步梯度下降法會怎樣工作?

      假設你將 θ1初始化在局部最低點,在這兒,它已經在一個局部的最優處或局部最低點。結果是局部最優點的導數將等於零。這意味着你已經在局部最優點,它使得 θ1不再改變,也就是新的 θ1等於原來的 θ1。因此,如果你的參數已經處於局部最低點,那麼梯度下降法更新其實什麼都沒做,它不會改變參數的值。

      我們來看一個例子,這是代價函數 J(θ)。 

  

       回顧一下,在梯度下降法中,當我們接近局部最低點時,梯度下降法會自動採取更小的幅度,這是因爲在局部最低時導數等於零,當我們接近局部最低點時,導數值會自動變得越來越小,所以梯度下降將自動採取較小的幅度,這就是梯度下降的做法。所以實際上沒有必要再另外減小 α。 

       這就是梯度下降算法,你可以用它來最小化任何代價函數 J,不只是線性迴歸中的代價函數 J。 在接下來的視頻中,我們要用代價函數 J,回到它的本質,線性迴歸中的代價函數。也就是我們前面得出的平方誤差函數,結合梯度下降法,以及平方代價函數,我們會得出第一個機器學習算法,即線性迴歸算法。 


2.7 梯度下降的線性迴歸

       在以前的視頻中我們談到關於梯度下降算法,梯度下降是很常用的算法。在這段視頻中,我們要將梯度下降和代價函數結合。我們將用到此算法,並將其應用於具體的擬合直線的線性迴歸算法裏。 

        梯度下降算法和線性迴歸算法比較如圖:


        對我們之前的線性迴歸問題運用梯度下降法,關鍵在於求出代價函數的導數,即: 


     則算法改寫成:


       我們剛剛使用的算法,有時也稱爲批量梯度下降。指的是在梯度下降的每一步中,我們都用到了所有的訓練樣本,在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以,在每一個單獨的梯度下降中,我們最終都要對所有 m 個訓練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓練樣本。
       而事實上,有時也有其他類型的梯度下降法,不是這種"批量"型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。在後面的課程中,我們也將介紹這些方法。 

       有一種計算代價函數 J 最小值的數值解法,不需要梯度下降這種迭代算法。它可以在不需要多步梯度下降的情況下,也能解出代價函數 J 的最小值,這是另一種稱爲正規方程(normal equations)的方法。實際上在數據量較大的情況下,梯度下降法比正規方程要更適用一些。 

      在下一段視頻中,告訴你泛化的梯度下降算法,這將使梯度下降更加強大。 


2.8 接下來的內容

       線性代數不僅僅在線性迴歸中應用廣泛,它其中的矩陣和向量將有助於幫助我們實現之後更多的機器學習模型,並在計算上更有效率。正是因爲這些矩陣和向量提供了一種有效的方式來組織大量的數據,特別是當我們處理巨大的訓練集時。事實上,爲了實現機器學習算法,我們只需要一些非常非常基礎的線性代數知識。

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