吳恩達深度學習筆記(7)--邏輯迴歸的代價函式(Cost Function)
在上一篇文章中,我們講了邏輯迴歸模型,這裡,我們講邏輯迴歸的代價函式(也翻譯作成本函式)。

吳恩達讓我轉達大家:這一篇有很多公式,做好準備,睜大眼睛! 代價函式很重要!
為什麼需要代價函式:
為了訓練邏輯迴歸模型的引數 w和引數b我們,需要一個代價函式,通過訓練代價函式來得到引數w和引數b 。先看一下邏輯迴歸的輸出函式:

為了讓模型通過學習調整引數,你需要給予一個m樣本的訓練集,這會讓你在訓練集上找到引數w和引數b,來得到你的輸出。
對訓練集的預測值,我們將它寫成y^,我們更希望它會接近於訓練集中的y值,為了對上面的公式更詳細的介紹,我們需要說明上面的定義是對一個訓練樣本來說的,這種形式也使用於每個訓練樣本,我們使用這些帶有圓括號的上標來區分索引和樣本,訓練樣本 所對應的預測值是 y(i),是用訓練樣本的 (w^T) (x^(i))+b 然後通過 sigmoid 函式來得到,也可以把z定義為

,我們將使用這個符號(i) 註解,上標(i) 指明資料表示x或者y 或者z或者其他資料的第i個訓練樣本,這就是上標(i) 的含義。
損失函式:
損失函式又叫做誤差函式,用來衡量演算法的執行情況(後續的網路判定與評估效能就是要找到一個合適的loss, Loss function:

我們 通過這個 L 稱為的損失函式,來衡量預測輸出值和實際值有多接近。
一般我們 用預測值和實際值的平方差或者它們平方差的一 半,但是通常在邏輯迴歸中我們不這麼做,因為當我們在學習邏輯迴歸引數的時候,會發現我們的優化目標不是凸優化,只能找到多個區域性最優值,梯度下降法很可能找不到全域性最優值,雖然平方差是一個不錯的損失函式,但是我們在邏輯迴歸模型中會定義另外一個損失函式。
我們在 邏輯迴歸中用到的損失函式是 :

為什麼要用這個函式作為邏輯損失函式?
當我們使用平方誤差作為損失函式的時候,你會想要讓這個誤差儘可能地小,對於這個邏輯迴歸損失函式 ,我們也想讓它儘可能地小,為了更好地理解這個損失函式怎麼起作用,我們舉兩個例子(y^代表預測值):
當y = 1時損失函式L = -log(y^),如果想要損失函式L儘可能得小,那麼y^就要儘可能大,因為sigmoid函式取值 [0,1],所以 y^會無限接近於1。
當y = 0 時損失函式L = -log(1 - y^) ,如果想要損失函式L儘可能得小,那麼y^ 就要儘可能小,因為sigmoid函式取值 ,所以y^會無限接近於0。
在這門課中有很多的函式效果和現在這個類似,就是如果y等於1,我們就儘可能讓 y^ 變大,如果 y 等於0,我們就儘可能讓y^變小。 損失函式是在單個訓練樣本中定義的,它衡量的是演算法在單個訓練樣本中表現如何,為了衡量演算法在全部訓練樣本上的表現如何,我們需要定義一個演算法的代價函式(代價函式用J表達) ,演算法的代價函式是對m個樣本的損失函式求和然後除以 m(因為要均值化) :

損失函式只適用於像這樣的單個訓練樣本,而代價函式是引數的總代價 ,所以
在訓練邏輯迴歸模型時候,我們需要找到合適的w和b ,來讓代價函式 J 的總代價降到最低 。
根據我們對邏輯迴歸演算法的推導及對單個樣本的損失函式的推導和針對演算法所選用引數的總代價函式的推導,結果表明邏輯迴歸可以看做是一個非常小的神經網路,在下一篇文章中,我們會看到神經網路會做什麼。