未經(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矩陣
如下圖:
二分分類【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回歸損失函數(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的效果
如下圖:
梯度下降法【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ù)
logistic回歸中的梯度下降法(用偏導(dǎo)數(shù)實(shí)現(xiàn))
導(dǎo)數(shù)流程圖來計(jì)算梯度用偏導(dǎo)數(shù)有點(diǎn)大材小用,但對(duì)理解比較好
m個(gè)樣本的梯度下降
運(yùn)用到整個(gè)樣本集中
向量化
循環(huán)很低效率,用向量化來加速運(yùn)算(np.function)
z=np.dot(w, x) + b
可能有人說:可擴(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回歸
向量化logistic回歸的梯度輸出
這就得到高度向量化的,高效的logistic回歸梯度下降法
python中的廣播(使python和Numpy部分代碼更高效)
廣播(broadcasting)對(duì)列向量,行向量都有效
例子:
實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法時(shí)主要用到的廣播形式
關(guān)于python/numpy向量的說明
千萬不要用秩為1的數(shù)組
隨意插入assert()聲明,要仔細(xì)檢查矩陣和數(shù)組的維度
不要害怕調(diào)用reshape,來確保你的矩陣和向量
可以排除,簡化甚至消滅代碼中各種奇怪的bug
學(xué)習(xí)鏈接
4. Logistic代碼實(shí)戰(zhàn)