1. 程式人生 > >演算法工程師修仙之路:吳恩達機器學習(二)

演算法工程師修仙之路:吳恩達機器學習(二)

吳恩達機器學習筆記及作業程式碼實現中文版

第二章 單變數線性迴歸

模型描述

  • 我們使用一個監督學習演算法的例子:預測住房價格。

    • 我們要使用一個數據集,資料集包含俄勒岡州波特蘭市的住房價格。
    • 在這裡,我要根據不同房屋尺寸所售出的價格,畫出我的資料集。
    • 比方說,如果你朋友的房子是 1250 平方尺大小,你要告訴他們這房子能賣多少錢。
    • 那麼模型也許是條直線,從這個資料模型上來看,他能以大約 220000(美元)左右的價格賣掉這個房子。
      在這裡插入圖片描述
  • 在監督學習中我們有一個數據集,這個資料集被稱訓練集。以房屋交易問題為例,假使我們迴歸問題的訓練集( Training Set)如下表所示:
    在這裡插入圖片描述

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

    • m代表訓練集中例項的數量。
    • x代表特徵/輸入變數。
    • y代表目標變數/輸出變數。
    • (x, y)代表訓練集中的例項。
    • ( x ( i )
      , y ( i )
      x^{(i)}, y^{(i)}
      )代表第i個觀察例項。
    • ℎ 代表學習演算法的解決方案或函式也稱為假設( hypothesis)。
  • 要解決房價預測問題,我們實際上是要將訓練集“喂”給我們的學習演算法, 進而學習得到一個假設ℎ,然後將我們要預測的房屋的尺寸作為輸入變數輸入給ℎ,預測出該房屋的交易價格作為輸出變數輸出為結果。

  • 一種可能的表達方式為: h θ ( x ) = θ 0 + θ 1 x ℎ_\theta(x) = \theta_0 + \theta_1x ,因為只含有一個特徵/輸入變數,因此這樣的問題叫作單變數線性迴歸問題。

代價函式

  • 線上性迴歸中我們有一個像這樣的訓練集, m代表了訓練樣本的數量,而我們的假設函式,也就是用來進行預測的函式,是這樣的線性函式形式: h θ ( x ) = θ 0 + θ 1 x ℎ_\theta(x) = \theta_0 + \theta_1x

  • 我們現在要做的便是為我們的模型選擇合適的引數(parameters) θ 0 \theta_0 θ 1 \theta_1 ,在房價問題這個例子中便是直線的斜率和在y 軸上的截距。

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

  • 我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型引數。即使得代價函式 J ( θ 0 , θ 1 ) = 1 2 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) 2 J(\theta_0, \theta_1)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 最小。

  • 代價函式也被稱作平方誤差函式,有時也被稱為平方誤差代價函式。我們之所以要求出誤差的平方和,是因為誤差平方代價函式,對於大多數問題,特別是迴歸問題,都是一個合理的選擇。

梯度下降

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

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

  • 批量梯度下降( batch gradient descent)演算法

    • 公式為: θ j = θ j α J ( θ 0 , θ 1 ) θ j \theta_j=\theta_j-\alpha*\frac{\partial J(\theta_0, \theta_1)}{\partial \theta_j}
    • 其中 α \alpha 是學習率( learning rate),它決定了我們沿著能讓代價函式下降程度最大的方向向下邁出的步子有多大。
    • 在批量梯度下降中,我們每一次都同時讓所有的引數減去學習速率乘以代價函式的導數。
    • 實現梯度下降演算法的微妙之處。
      • 在這個表示式中,如果你要更新這個等式,你需要同時新 θ 0 \theta_0 θ 1 \theta_1
      • 實現方法是計算公式右邊的部分,通過那一部分計算出 θ 0 \theta_0 θ 1 \theta_1 的值,然後同時更新 θ 0 \theta_0 θ 1 \theta_1
    • 如果 α \alpha 太小。
      • 學習速率太小。
      • 這樣就需要很多步才能到達最低點。
      • 可能會很慢,因為它會一點點挪動,它會需要很多步才能到達全域性最低點。
    • 如果 α \alpha 太大。
      • 梯度下降法可能會越過最低點,甚至可能無法收斂。
      • 下一次迭代移動了一大步,越過一次,又越過一次,一次次越過最低點,直到你發現實際上離最低點越來越遠。
      • 導致無法收斂,甚至發散。
    • 假設你將 θ 1 \theta_1 初始化在區域性最低點。
      • 在這兒,它已經在一個區域性的最優處或區域性最低點。
      • 結果是區域性最優點的導數將等於零,因為它是那條切線的斜率。
      • 這意味著你已經在區域性最優點,它使得 θ 1 \theta_1 不再改變,也就是新的 θ 1 \theta_1 等於原來的 θ 1 \theta_1
      • 如果你的引數已經處於區域性最低點,那麼梯度下降法更新其實什麼都沒做,它不會改變引數的值。
      • 這也解釋了為什麼即使學習速率 α \alpha 保持不變時,梯度下降也可以收斂到區域性最低點。
    • 在梯度下降法中,當接近區域性最低點時,梯度下降法會自動採取更小的幅度。
      • 這是因為當我們接近區域性最低點時,很顯然在區域性最低時導數等於零。
      • 當我們接近區域性最低時,導數值會自動變得越來越小,所以梯度下降將自動採取較小的幅度,這就是梯度下降的做法。
      • 實際上沒有必要再另外減小 α \alpha
    • 批量梯度下降指的是在梯度下降的每一步中, 我們都用到了所有的訓練樣本。
      • 在梯度下降中,在計算微分求導項時,我們需要進行求和運算。
      • 在每一個單獨的梯度下降中,我們最終都需要對所有m個訓練樣本求和。
      • 批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓練樣本。
      • 事實上,有時也有其他型別的梯度下降法,不是這種"批量"型的,不考慮整個的訓練集,而是每次只關注訓練集中的一些小的子集。