Machine Learning學習日記 — Coursera篇 (Week 3.2):Cost Function, Simplified Cost Function and Gradient Descent, Advanced Optimization

Pandora123
8 min readMay 31, 2016

--

Logistic Regression Model

大綱

  1. Cost Function
  2. Simplified Cost Function and Gradient Descent
  3. Advanced Optimization

1. Cost Function

我們可不可以繼續用之前Linear Regression的cost function呢?

答案是不行。

但是cost function不就是為了求得我們的預測函數的誤差嗎?

為什麼不能繼續沿用呢?

因為當函數不再是線性函數時,sigmoid的函數平方項將會造成一個 unconvex的函數圖形

這意味著,我們很有可能走到一個距離global optimal solution還很遠的地方就停下來了(local optimal solution),正如上圖所示

因此我們要找到一個新的函數可以讓我們的J(θ)長得像下面的convex圖形

新的cost function函數:

大家可能會感到疑惑:這個函數到底要幹什麼?

這個函數的精華就是當預測失敗的時候,我們要讓預測誤差變得很大

並隨著預測數字離正確答案越近,預測誤差會漸漸趨近於0

第一行:-log(hθ(x)),if y=1

這代表當y為1的時候,根據我們的hypothsis及正確答案的數據計算所得到的預測誤差

而hθ(x)所得出的就是一個介於0和1的機率數值(預測結果為1的機率)

而這個函式會形成下列圖形(實際上這只是圖形的一部分,因為我們只繪出x=0~1的函式圖形):

可以想像成f(x) = -log(x),x的範圍是從0至1

而我們可以發現當x越往0趨近,cost(其誤差)會趨近無限大,因為這代表著其與正確答案 y=1的差距

反之當x越往1趨近,cost會趨近於0直至變成0

第二行:-log(1-hθ(x)),if y=0

則會形成下列圖形

當x越往1趨近,cost(其誤差)會趨近無限大,因為這代表著其與正確答案 y=0的差距

反之當x越往0趨近,cost會趨近於0直至變成0

在上述的cost function中,可以發現當我們設定出一個 hypothesis後,我們透過加總其hypothesis跟solution的誤差來求得我們的J(θ)

而我們預期可以找到一個最佳的hypothesis使得所有的cost加總為最小(Andrew說covex的相關分析超出課程範圍)

總之,這代表著此函數將可以形成一個 convex圖形,並可以依此找到global optimal solution

隨堂練習

Ans:

Regardless of:無論/whether:是否

2. Simplified Cost Function and Gradient Descent

我們現在有了計算每個誤差及cost function的函式

但現在有個問題:

難道每次我們計算預估誤差時,都要先檢查一下y是1或是0嗎?

而且這種需要先行判別的函數沒有辦法直接偏微分,並導出Gradient Descent

有沒有更簡潔有力的寫法呢?

for i = 1 to m {
x = X(i); // x為第i項的資料
-----------------------------------------------
if (y == 1){
Total_cost = Total_cost + (-log(hθ(x)));
}
else if (y == 0){
Total_cost = Total_cost + (-log(1-hθ(x)));
}
-----------------------------------------------
}

是可以更簡潔的。

下面這個函式大家可以試著把 y = 1跟 0代入,在消掉項目就可以得到原本的cost function,可以參考下圖的做法

OK,那Gradient Descent的函式便一如既往的將cost function偏微分

將上圖展開後會發現,若單看下面這張圖(Logistic的Gradient Descent)會發現跟Linear Regression的Gradient Descent的函數差不了多少

差別是在hθ(x):藍色是Linear Regression,紅色是Logistic Regression

隨堂練習(1)

fit:使符合/ properly:適當的 / reasonable:合理的 / horizontal axis:橫軸 / iteration:迭代 / convex:凸的

Ans:

隨堂練習(2)

simultaneously:同時地 / perform:執行 / vectorized implementation:實行陣列化

Ans:

3. Advanced Optimization

Methods to run the algorithm(using Gradient Descent) more efficiently

有兩件事是需自行定義的項目:J(θ)及J(θ)的偏導向

但是在這之後的處理方法的不同,導致了所選擇的演算法的不同

Conjugate:結合、配對

在圖中紅色圈起來的就是我們一直以來都在使用的Gradient Descent演算法

其他的數種方法都超出課程範圍。下面是對於conjugate,BFGS,L-BFGS與Gradient Descent之間大略的比較:

manually:人工的

簡單的說,就是這些演算法我們不用指定α值,但缺點就是更為複雜

Andrew建議我們直接使用前人已經建立好的函式庫,而不是自己重新造輪。

以下將會介紹在Octave中的一個函式庫,我們僅需代入一些參數即可快速算出最佳的θ值跟J(θ)

假設我們已得知了函式J(θ)跟偏導數,一般人可以一眼看出,若要得到最小的J(θ)值的話,θ1跟θ2都設為5將會得到最小的 cost。

但今天我們要用Gradient Descent來求得最佳的θ值要怎麼解呢?

要怎麼讓電腦自己運行這個函數、運行多少次、監控函數有沒有收斂?

答案就是:呼叫fminuc函數。

fminuc函數會導入一共三個參數:

1. initialTheta:一般會設定 θ值為0

2. options:設定
(1)使用Gradient Descent方法('GradObj'),並設定開啟狀態('on')
(2)設定最大('MaxIter')循環的次數('100'),這邊的最大指的是在函數最多只會run 100次(如果有提早達成J(θ)最小值的標準的話就會提早結束)

3.@costFunction
@costFunction 指的就是下圖的函式

最後fminunc會回傳三個值:

1. optTheta:使J(θ)最小化的θ值

2. functionVal:最小的J(θ)值

3. exitFlag:不同的數字代表著不同的含義,ex:若為 1代表函數已收斂
可參考fminunc的文件

隨堂練習

Suppose:假設 / parameters:參數 / derivative:衍生物

Ans:

--

--