neural network programming 神經網絡編程python
implement a neural network 構建神經網絡算法
forward pass/forward propagation step 正向傳播編程
backward pass/backword propagation step 反向傳播數組
logistics regression logistic迴歸網絡
binary classification 二分分類函數
dimension 維度學習
input feature vector 輸入的特徵向量spa
classifier 分類器3d
training sets 訓練集blog
training examples 訓練樣本
transpose 轉置
matrix 矩陣 vector 向量
supervised learning 監督學習
gradient descent algorithm 梯度降低法
the global optimum 全局最優解
calculus 微積分
derivatives 導數
slope 斜率
vectorization 向量化
scaleable deep learning 可擴展深度學習
graphics processing unit GPU 圖像處理單元 CPU和GPU均有並行化的指令 統稱SIMD,即 single instruction multiple data 單指令流多數據流
parallelization instructions 並行化指令
儘可能不要直接使用for循環,可能存在數量巨大的數據集,建議使用向量化技術,即便用向量化技術擺脫for循環
X.shape 輸出矩陣X的維度
因爲都是計算的J對其餘變量的導數,因此用dw表示dJ對w的導數
Z=np.dot(W,x) 經過向量化計算W*x
相似的np. 即Python中的numpy可以充分利用並行化:np.exp(v) np.log(v) np.maximum(v,0) .......
u=np.zeros((n,1)) 生成n個包含一個元素0的矩陣
cal=A.sum(axis=0) 表明將A矩陣中的元素進行豎直相加 若是是水平軸,則axis=1
在編寫時,當不徹底肯定是什麼矩陣、不肯定矩陣的尺寸時,使用reshape,確保其是正確的列向量或行向量
廣播的應用:
一個列向量+一個數,python會自動把實數擴展爲相應的列向量(進行相應的水平復制或者垂直複製):
例如:
編程時容易出現的錯誤:
儘可能不使用秩爲1的數組a(既不是行向量,也不是列向量,a=a的轉置,a和a的轉置的內積是一個數)
應使用以下相似的矩陣:(將(n,1)看作列向量,(1,n)看作行向量)
編寫時能夠加相似以下的聲明:
當發現了秩爲1的數組時,可使用reshape將其轉化爲向量:
a=a.reshape((5,1))
logistic迴歸:用於二分分類的算法
例子:用y表示一個預測的圖片中是否是包含貓,y表示結果,1表示是,0表示不是
例如用一個X表示一個圖片亮度的像素值,假如是64*64,則X的維度爲:64*64*3
二分分類問題中,目標是訓練一個分類器,這個分類器 以圖片的特徵向量x做爲輸入,輸出結果y(0或1)
訓練樣本(i)對應的預測值是y^(i)
其中的w、x都是n維列向量:
loss函數做用於單個樣本
cost函數J(w,b)做用於整個訓練集
須要找到更合適的w,b 使得cost函數儘量小
須要使用初始值初始化w和b ,對於logistic 迴歸而言,幾乎任意的初始化方法都有效,雖然通常會進行初始化爲0的操做,但在此不進行這樣的初始化
梯度降低法的作法:從初始點開始,朝着最陡的下坡方向走,通過屢次迭代,最終收斂到全局的最優解
先忽略b,作w的圖像:
學習率控制每一次的迭代
在w函數的右側,導數是正的,w不斷減小,在左邊,導數是負的,w不斷增長
函數的導數即爲函數的斜率,一次函數中爲高/寬,其餘函數在每一個不一樣的點,斜率不同,參考微積分對應的公式進行求導/求斜率
使用流程圖,求更加複雜的函數的導數:
正向傳播計算正常的J:(從左到右計算成本函數)
假設樣本有兩個特徵,x1和x2
在logistic迴歸中,咱們要作的是:經過變換參數w和b的值,使loss函數最小化
反向傳播計算導數:
m個樣本的logistic迴歸(對logistic迴歸應用梯度降低法,實現梯度降低法的迭代):
一次梯度降低:
在此包含兩個for循環,一個用來遍歷m個訓練樣本,一個用來遍歷全部的特徵
向量化:
for循環和向量化的對比:
向量化的例子:
矩陣和向量相乘,for循環與np.dot()比較
作指數運算,應該用numpy裏面的內置函數代替for循環:
只剩一次for循環的屢次梯度降低迭代:
向量化logistic迴歸:(正向傳播一步迭代的向量化實現,同時處理全部m個訓練樣本)
X矩陣由x進行豎排堆疊獲得
Z矩陣由z進行橫排堆疊獲得
A矩陣由a進行橫排堆疊獲得
實現不須要for循環就能夠從m個訓練樣本一次性計算出z和a
其中的Z=np.dot(w.T,X)+b ,在此b爲一個實數,向量+實數,經過python的廣播,能夠將其擴展爲1*m的行向量
去掉反向傳播中的全部for循環:
過程:
目前實現了對全部訓練樣本進行預測和求導:(沒有使用for循環)
最外層循環有時候是沒法去掉的(好比要求上千次導數進行梯度降低的狀況)