吳恩達(dá)-神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)(第二周神經(jīng)網(wǎng)絡(luò)基礎(chǔ))

未經(jīng)允許,不得擅自改動(dòng)和轉(zhuǎn)載

學(xué)習(xí)如何用神經(jīng)網(wǎng)絡(luò)的思維模式提出機(jī)器學(xué)習(xí)問題、如何使用向量化加速你的模型。

  • 先介紹一些名詞

    • training set (訓(xùn)練集)
    • feature vector(特征向量)
    • classifier(分類器)
    • calculus(微積分)
    • 循環(huán)(loop)
    • 數(shù)據(jù)集(datasets)
    • vectorization (向量化)
    • matrix(矩陣)
    • vector(向量)
  • 本周用到的一些符號(hào)【Notation】

    • (x,y)表示一個(gè)單獨(dú)的樣本
    • x是xn維的特征向量
    • 標(biāo)簽y值為0/1
    • 訓(xùn)練集由m個(gè)訓(xùn)練樣本構(gòu)成
    • (x^(1), y^(1))表示樣本一輸入和輸出,
    • {x^(1), y(1),.....x(n), y^(n).}整個(gè)訓(xùn)練集
    • 測試集的 樣本數(shù)。訓(xùn)練集的樣本數(shù)
    • 矩陣也可表示訓(xùn)練集輸入x,輸出標(biāo)簽y
    • 注意:訓(xùn)練樣本作為行向量堆疊
    • 輸出y是1xm矩陣

如下圖:


Notation

二分分類【Binary Classification】

  • 神經(jīng)網(wǎng)絡(luò)的計(jì)算過程中,通常有一個(gè)正向過程【forward pass】(或者正向傳播步驟),接著有一個(gè)反向過程【backward pass】(或者反向傳播步驟)

  • logistic回歸是一個(gè)用于二分分類的算法

  • 計(jì)算機(jī)保存圖片,要保存三個(gè)獨(dú)立矩陣(Red紅 blue綠 Green藍(lán))
    如果有64X64的一張圖片,則輸入向量的維度n=64X64X3=12288

  • 在二分分類問題中,目標(biāo)是訓(xùn)練出一個(gè)分類器,他以圖片的特征向量x作為輸入,,預(yù)測輸出的結(jié)果y(只有兩個(gè)值)

logistic回歸

這是一個(gè)學(xué)習(xí)算法,用在監(jiān)督學(xué)習(xí)中,
如下圖:


logistic

logistic回歸損失函數(shù)

損失函數(shù)【error function】在單個(gè)訓(xùn)練樣本中定義的,他衡量了在單個(gè)訓(xùn)練樣本上的表現(xiàn)
成本函數(shù)【cost function 】在全體訓(xùn)練集樣本下的表現(xiàn)-->對(duì)損失函數(shù)求和
對(duì)以上函數(shù)要找到合適的參數(shù)w和b
成本函數(shù)用于衡量參數(shù)w和b的效果

如下圖:


mark

mark

梯度下降法【Gradient Descent】

  • 訓(xùn)練或?qū)W習(xí)訓(xùn)練集上的參數(shù)w和b


    梯度下降法

    求最小值

導(dǎo)數(shù)

等于= be equal to

  • pluse
  • minus
    X times
    / divide

計(jì)算圖

可以說,一個(gè)神經(jīng)網(wǎng)絡(luò)的計(jì)算都是按照前向或者反向傳播過程來實(shí)現(xiàn)的,
首先計(jì)算出神經(jīng)網(wǎng)絡(luò)的輸出
首先計(jì)算出神經(jīng)網(wǎng)絡(luò)的輸出,緊接著一個(gè)反向傳播操作,后者我們用來計(jì)算出對(duì)應(yīng)的梯度或者導(dǎo)數(shù),流程圖解釋了為什么這樣實(shí)現(xiàn)
流程圖,是用藍(lán)色箭頭畫出來的的,從左到右的計(jì)算

流程圖

計(jì)算圖的導(dǎo)數(shù)計(jì)算

從右到左計(jì)算導(dǎo)數(shù)


mark

logistic回歸中的梯度下降法(用偏導(dǎo)數(shù)實(shí)現(xiàn))

導(dǎo)數(shù)流程圖來計(jì)算梯度用偏導(dǎo)數(shù)有點(diǎn)大材小用,但對(duì)理解比較好


mark

m個(gè)樣本的梯度下降

運(yùn)用到整個(gè)樣本集中


for循環(huán)

向量化

循環(huán)很低效率,用向量化來加速運(yùn)算(np.function)
z=np.dot(w, x) + b

mark

可能有人說:可擴(kuò)展深度學(xué)習(xí)實(shí)現(xiàn)是在GPU(圖像處理單元)上做的,而我們做的再jupyter notebook上(CPU)
但GPU和CPU都有并行化的指令,SIMD單指令流多數(shù)據(jù)流,這點(diǎn)對(duì)GPU和CPU上面是成立的,只是GPU更擅長SIMD運(yùn)算

  • for循環(huán)能不用就不用,如果可以使用內(nèi)置函數(shù)或者其他方法計(jì)算循環(huán),會(huì)比for循環(huán)更快


    mark

    mark

進(jìn)一步向量化logistic回歸

mark

向量化logistic回歸的梯度輸出

mark

這就得到高度向量化的,高效的logistic回歸梯度下降法

python中的廣播(使python和Numpy部分代碼更高效)

廣播(broadcasting)對(duì)列向量,行向量都有效
例子:


mark
mark

實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法時(shí)主要用到的廣播形式


mark

關(guān)于python/numpy向量的說明

千萬不要用秩為1的數(shù)組
隨意插入assert()聲明,要仔細(xì)檢查矩陣和數(shù)組的維度
不要害怕調(diào)用reshape,來確保你的矩陣和向量

mark

可以排除,簡化甚至消滅代碼中各種奇怪的bug

學(xué)習(xí)鏈接
4. Logistic代碼實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容