1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai
第二週 神經網絡基礎 Basics of Neural Network programming
- 2.1 二分分類
- 2.2 logistic 迴歸 Logistic Regression
- 2.3 logistic 迴歸損失函數 Logistic Regression cost function
- 2.4 梯度下降法 Gradient Descent
- 2.5 導數 Derivatives
- 2.6 更多導數的例子 More derivatives examples
- 2.7 計算圖 Computation Graph-前向傳播
- 2.8 計算圖的導數計算 Derivatives with a Computation Graph-反向傳播
- 2.9 logistic 迴歸中的梯度下降法 Logistic Regression Gradient descent - 反向傳播
- 2.10 m 個樣本的梯度下降 Gradient descent on m examples
- 2.11 向量化 Vectorization-加速計算
- 2.12 向量化的更多例子 More vectorization examples
- 2.13 向量化 logistic 迴歸 Vectorizing Logistic Regression - 前向傳播
- 2.14 向量化 logistic 迴歸的梯度輸出 Vectorizing Logistic Regression’s Gradient Computation -反向傳播
- 2.15 Python 中的廣播 Broadcasting in Python
- 2.16 關於 python / numpy 向量的說明 A note on p ython/numpy vectors
- 2.17 Jupyter / Ipython 筆記本的快速指南
- 2.18 (選修)logistic 損失函數的解釋 Explanation of logistic regression cost function(Optional)
學習如何用神經網絡的思維模式提出機器學習問題、如何使用向量化加速你的模型。
本週學習內容
- NN,不需要用for循環遍歷m個樣本的訓練集
- NN計算過程分爲正向傳播和反向傳播2個分開的過程
- 邏輯迴歸的應用
2.1 二分分類
邏輯迴歸是一個用於二分分類的算法。
二分分類問題中,目標就是訓練出一個分類器,以圖片特徵向量x作爲輸入,預測結果標籤y是1或者0。
python命令: X.shape,輸出矩陣X的維度(nx,m),表示X是一個nx X m矩陣
python命令: Y.shape,輸出矩陣X的維度(1,m),表示Y是一個1 X m矩陣(構建NN中的輸出標籤通常放在矩陣列中)
慣用符號約定
2.2 logistic 迴歸 Logistic Regression
本節介紹邏輯迴歸模型。
給定x,想知道預測y爲1的概率,
x是一個nx維向量,
已知邏輯迴歸2個參數:w也是一個nx維向量,;b是一個實數,
由於在這裏,y的預測概率值範圍,顯然使用線性迴歸來分類是不適合的(y可能比1大很多,也可能是複製)。
所以,我們這裏要使用sigmoid函數,y預測值
sigmoid函數表示如下
- 如果z是一個很大的正數,那麼e-z就接近0,接近1
- 如果z是一個很大的負數,那麼e-z就是一個很大的數,接近0
這樣一來,邏輯迴歸算法就是要學習w和b參數,使得y得到很好的預測。
2.3 logistic 迴歸損失函數 Logistic Regression cost function
爲了訓練邏輯迴歸的參數w和b,需要定義一個損失函數Loss function(或者叫誤差函數error function)。優化模型,就是要最小化損失函數。
我們定義
其中
符號約定:帶有上標i的x,y和z,表示x,y和z與第i個訓練樣本有關。
損失函數(誤差函數)
用來測量預測值和期望輸出值之間的差異。它可以用來衡量算法的運行情況。
簡單來說,損失函數就是用來衡量預測值和實際值有多接近,即算法的效果。
我們可以利用平方誤差定義損失函數,但是用這個損失函數學習參數,優化時候可能會非凸(可以得到多個局部最優值,但是找不到全局最優值),這對於梯度下降算法不太好。
在邏輯迴歸中定義損失函數如下,它會起到和平方誤差相似的作用,這會給我們凸的優化問題(容易優化)
分析一下這個損失函數的效果。這也是爲什麼要在邏輯迴歸中選用這個損失函數的原因。
- 當y=1時,,此時要想讓L變小,或者說讓變小,那就是要讓變大,這也就意味着讓變大。由於有sigmoid函數限制存在,那的最大值就是1。總結一下:如果y=1,就要讓接近1。
- 當y=0時,,此時要想讓L變小,顯然就是要讓變大。由於有sigmoid函數限制存在,那的最小值就是0。總結一下:如果y=0,就要讓接近0。
損失函數是在單個訓練樣本中定義的,它衡量了(參數w和b在)單個訓練樣本上的表現。
成本函數
(cost function)衡量的是(參數w和b在)全體樣本上的表現。
上式表面成本函數即所有訓練樣本損失函數之和。
所以在邏輯迴歸中,我們就是要找到合適的w和b,讓成本函數J(總體成本)儘量小。
2.4 梯度下降法 Gradient Descent
梯度下降算法用來訓練或者學習訓練集上的參數w和b。
我們已經知道成本函數J(w,b)被定義成損失函數的平均值,即的損失函數之和。顯然,要提高算法的效果,就是要找到使得成本函數J儘可能小的w和b。下圖中,最下方紅色箭頭所指的紅點,就是J的最小值。
上圖中的J函數是一個凸函數。凸函數是邏輯迴歸使用這個特定成本函數J的重要原因之一。
爲了找到更好的參數值,我們首先要用某個初始值來初始化w和b。
對於邏輯迴歸,任何初始化方法都有效。一般做法會用0來初始化,不過邏輯迴歸並不需要如此。因爲函數是凸的,無論在哪個點初始化,最終都會到達(或者大致到達)同一個點。
梯度下降法所做的就是,從初始點(圖中最上方紅色箭頭指向的點)開始,朝最陡的下坡方向走一步。梯度下降一步後(初始點下方,箭頭指向的點),或許會停下來,因爲它試圖沿着最快的方向向下走,或者說盡快向下走,這就是梯度下降的一次迭代。反覆迭代後,梯度下降終於到達(或者大致接近)全局最優值點(圖中最下方紅點)。
以上就是梯度下降法的基本原理。
下面進一步解釋梯度下降法
觀察上圖,有一個代表成本函數J(w)的曲線,爲了方便說明,這裏做了簡化,省略了參數b,只使用一維曲線來替代多維曲線。
梯度下降算法實際就是在重複更新參數w
其中
- 代表學習率,控制每一次迭代或者說下降算法的步長。
- 函數J(w)的導數(或者說函數J(w)在w方向上的斜率),是參數w的變化量。通常用dw來表示,即。它讓w朝下降最快的方向走,知道下一步更新(迭代)的方向在哪裏。
在算法收斂之前,會重複更新w。
上圖中,假設算法從右邊開始計算,函數J曲線上最右邊點的導數代表了這個點的斜率dw,即高除以寬(看上去象一個小三角形)。在這個點的斜率dw是正的,根據公式,w會變小,也就是沿曲線向左下方移動一步。梯度下降算法就是按照方法,逐步的減少參數w。
同理,如果w在曲線的最左部,這裏點的斜率是負數,,所以w是逐步增加。不斷用梯度下降法來迭代,w會變得越來越大。
無論初始位置在左邊或者右邊,梯度下降法都會讓參數w朝着全局最小值方向移動。
以上是J(w)只有一個參數w的簡化情況。
對於J(w,b),梯度下降法實際需要更新兩個參數w和b
這裏的是函數J對於w的偏導數,通常用dw表示。是函數J對於b的偏導數,通常用db表示。偏導數就是計算函數關於其中一個變量在對應點的斜率。
符號約定
導數用符號 d 表示,而偏導數通常用符號 ∂ 表示。
2.5 導數 Derivatives
2020-4-29 吳恩達-NN&DL-w2 NN基礎(2.5 導數,2.6 更多導數的例子)
2.6 更多導數的例子 More derivatives examples
2020-4-29 吳恩達-NN&DL-w2 NN基礎(2.5 導數,2.6 更多導數的例子)
2.7 計算圖 Computation Graph-前向傳播
2020-4-30 吳恩達-NN&DL-w2 NN基礎(2.7 計算圖,2.8 計算圖的導數計算,2.9 邏輯迴歸中的梯度下降法,2.10 m 個樣本的梯度下降)
2.8 計算圖的導數計算 Derivatives with a Computation Graph-反向傳播
2020-4-30 吳恩達-NN&DL-w2 NN基礎(2.7 計算圖,2.8 計算圖的導數計算,2.9 邏輯迴歸中的梯度下降法,2.10 m 個樣本的梯度下降)
2.9 logistic 迴歸中的梯度下降法 Logistic Regression Gradient descent - 反向傳播
2020-4-30 吳恩達-NN&DL-w2 NN基礎(2.7 計算圖,2.8 計算圖的導數計算,2.9 邏輯迴歸中的梯度下降法,2.10 m 個樣本的梯度下降)
2.10 m 個樣本的梯度下降 Gradient descent on m examples
2020-4-30 吳恩達-NN&DL-w2 NN基礎(2.7 計算圖,2.8 計算圖的導數計算,2.9 邏輯迴歸中的梯度下降法,2.10 m 個樣本的梯度下降)
2.11 向量化 Vectorization-加速計算
2020-5-1 吳恩達-NN&DL-w2 NN基礎(2.11 向量化 Vectorization,2.12 向量化的更多例子)
2.12 向量化的更多例子 More vectorization examples
2020-5-1 吳恩達-NN&DL-w2 NN基礎(2.11 向量化 Vectorization,2.12 向量化的更多例子)
2.13 向量化 logistic 迴歸 Vectorizing Logistic Regression - 前向傳播
2020-5-2 吳恩達-NN&DL-w2 NN基礎(2.13 向量化邏輯迴歸,2.14 向量化邏輯迴歸的梯度輸出)
2.14 向量化 logistic 迴歸的梯度輸出 Vectorizing Logistic Regression’s Gradient Computation -反向傳播
2020-5-2 吳恩達-NN&DL-w2 NN基礎(2.13 向量化邏輯迴歸,2.14 向量化邏輯迴歸的梯度輸出)
2.15 Python 中的廣播 Broadcasting in Python
2020-5-3 吳恩達-NN&DL-w2 NN基礎(2.15 Python 中的廣播)
2.16 關於 python / numpy 向量的說明 A note on p ython/numpy vectors
2020-5-3 吳恩達-NN&DL-w2 NN基礎(2.16 關於 python / numpy 向量的說明)
2.17 Jupyter / Ipython 筆記本的快速指南
省略