第二周——神經網絡基礎
1呆瞻、二分類問題
(1)二分類器輸入為sample feature vector,輸出為0和1径玖,用于預測該樣本是否為正類痴脾,本質上是在計算給定樣本,它屬于正類的概率梳星。
(2)input sample feature vector作為輸入矩陣X的列向量赞赖,output label作為輸出矩陣y的列向量。
(3)向量是矩陣的特殊形式冤灾,標量是向量的特殊形式前域。
(4)NN的矩陣的表示形式,Y=activation(WX+b)韵吨,W為權重矩陣匿垄,b為偏置向量。
2、logistic回歸
(1)計算給定樣本椿疗,它屬于正類的概率漏峰,是一個二分類器。
(2)使用sigmoid激活函數的單神經元的網絡届榄,y^=logistic(z)浅乔,z=wx+b
,w為權重向量铝条,x為特征向量靖苇,b為偏置值,y^攻晒,z和b均為標量顾复。
(3)往線性回歸加上了一個非線性激活函數。
(4)more in sigmoid
3鲁捏、logistic回歸的損失函數
(1)針對樣本i芯砸,損失函數為:L(y^i, yi)=-(ylogy^+(1-y)log(1-y^))
。
這是一個凸函數给梅,loss(w, b)刻畫了real output 和 expect output之間的差異假丧。
(2)if y=1, L = -logy^
,調整模型參數使得loss盡可能小动羽,則y^
會盡可能大包帚,則y^會趨近于1,即實際輸出會趨近于真實輸出运吓;同理渴邦,if y=0,則y^會趨近于0拘哨。
(3)由于sigmoid函數將z歸一化到(0, 1)之間谋梭,故y^的取值也只能在0和1之間。
(4)loss刻畫了模型在某個樣本之上的表現倦青,成本函數cost function J(w, b)刻畫了在整個訓練集上的表現瓮床。
(5)J(w, b)=1/m * sum of loss function。
(6)The cost function is the average of the loss function of the entire training set. We are going to find the parameters w and b that minimize the overall cost function.
(7)logistic回歸可以看作是一個使用sigmoid激活函數的單神經元的網絡产镐。
(8)機器學習是一個優(yōu)化問題隘庄,我們說學到一個模型,學到這些模型參數癣亚,其實就是求解一個優(yōu)化問題 =>
cost function/loss func作為目標函數(需要使得實際輸出趨近于預期輸出)丑掺,優(yōu)化變量是模型參數,調整模型參數述雾,使得目標函數最小 =>
即找到全局最小值吼鱼,最小值點即最優(yōu)解(解空間即參數向量空間)=>
于是就學到了參數蓬豁,我們就說從數據中學到了模型。
4菇肃、梯度下降法
(1)每一輪迭代,每一個min batch(可以是一個樣本+label取募,也可以為整個訓練集)琐谤,update param,確定梯度方向玩敏,loss在loss曲面上沿著最速下降方向下降斗忌。
(2)如果函數只有一個變量,則使用導數符號d旺聚,若函數有多個變量织阳,則使用偏導數符號。
5砰粹、導數
(1)導數:對于一元函數(即該函數只有一個變量)唧躲,即(原)函數的導(函)數鼻忠,自變量取各個值時撑教,函數在該點的變化率饺蚊,函數在該點切線的斜率妖滔。
(2)偏導:對于多元函數(該函數有多個變量)哨啃,固定其他自變量接校,對當前變量求導數袁铐,只有當前變量可變杨伙,當前變量取各個值時爽航,函數的變化率蚓让。
(3)微分:導數刻畫了函數的變化率,微分則刻畫了函數的增量讥珍,當自變量增加了Δx历极,因變量則增加Δy=Δx×y'。
6串述、更多導數的例子
主要是講了如何計算函數的導數执解,直接看高數書即可。
7纲酗、計算圖
張量 -> 張量 -> 張量
TensorFlow
forward pass計算模型的輸出和loss衰腌,backward pass通過鏈式求導計算loss關于各個模型參數的偏導,即用BP算法計算梯度觅赊。
8右蕊、在計算圖中計算導數
(1)forward pass計算針對這個input-output pair的loss,the loss of min-batch = the average of loss func of min-batch data吮螺,該輪迭代的損失=各個min-batch的損失求平均饶囚。
(2)loss func是模型參數的函數帕翻,但是由于每個input sample和label可能是不一樣的,所以每個輸入輸出對對應的損失函數也可能是不一樣的萝风。
(3)BP算法就是在反向地逐層計算梯度嘀掸。針對每一個input-outpu pair,都會有一個前向和反向過程(非向量化實現)规惰。
(4)y=f(z), z=g(x)睬塌,復合函數,計算y關于x的導數歇万,鏈式法則揩晴,鏈式求導,dy/dx=dy/dz * dz/dx贪磺。
(5)一個簡單的計算圖硫兰,x -> m -> n -> y,dy/dx = dy/dm * dm/dx寒锚。簡化表示為劫映,dx = dm * dm/dx。
(6)更多詳見下圖:
(7)NN就是一個復合函數壕曼,backward pass通過BP算法計算針對這個input-output pair的梯度苏研,求平均得到針對這個min-batch的梯度。
9腮郊、單樣本訓練logistic回歸模型
10摹蘑、基于訓練集(有m個輸入輸出對)訓練logistic回歸模型
(1)u=f(x), v=g(x), (u+v)' = u' + v'。
(2)我們只畫針對一個input-output pair的計算圖轧飞,針對每一個input-outpu pair衅鹿,都會有一個前向和反向過程。
(3)這里實際上是一個BGD过咬,求平均大渤,得到針對整個訓練集的梯度。
(4)訓練的偽代碼如下掸绞,也就是如何通過BP算法計算梯度泵三,然后利用梯度下降求解該優(yōu)化問題。
J = 0 // cost func
dw1 = 0 // dJ/dw1
dw2 = 0 // dJ/dw2
db = 0 // dJ/db
// 一輪迭代
for i=1 to m:
// forward pass
zi = wTxi+b // linear model
ai = sigmoid(zi) // the output of logistic regression model
J += -[yi*logai + (1-yi)log(1-ai)] // 每個input-output pair都會計算一個loss
// backward pass
dzi = ai - yi
dw1 += x1i*dzi // 每個input-output pair都會計算dloss/dw1
dw2 += x2i*dzi
db += dzi
J /= m // 得到整個訓練集平均的loss
dw1 /= m // 得到針對整個訓練集的梯度
dw2 /= m
db /= m
// update model param
w1 := w1 - LR * dw1
w2 := w2 - LR * dw2
b := b - LR * db
11衔掸、向量化
如果要計算兩個向量的點積烫幕,使用np.dot(x, y),向量化敞映,避免顯示的for循環(huán)(這是串行的)较曼。
CPU和GPU都有SIMD指令,數據并行振愿,加速代碼的運行過程捷犹。
SIMD和向量化還有待繼續(xù)學習3诜埂!
12萍歉、更多向量化的例子
u = np.exp(v)
u = np.log(v)
u = np.abs(v)
u = v**2
u = 1/v
13侣颂、向量化logistic回歸
通過向量化,避免使用顯示的for循環(huán)枪孩。
每個input sample作為輸入矩陣X的列向量横蜒。
Z = wTX + b
A = sigmoid(Z)
X -> Z -> A,完成了logistic回歸模型的一次forward pass销凑。
14、向量化logistic回歸的梯度計算
向量化之后仅炊,backward pass如何計算梯度斗幼,如何鏈式求導,還有待進一步學習抚垄。
15蜕窿、Python中的廣播
(1)A矩陣和B矩陣為同型矩陣,則A和B可以做element wise的操作呆馁,例如+-*/桐经。
(2)若A為m*n
的矩陣,B為(m, 1)或(1, n)浙滤,或為一個標量阴挣,則Python的廣播機制會復制堆疊使得B的shape與A一致,使得A和B可以做element wise的操作纺腊。
(3)若a為(1, n)的行向量畔咧,b為(m, 1)的列向量,它兩會先復制堆疊使得shape一致揖膜,變成(m, n)誓沸,然后可以做element wise的操作。
16壹粟、Python numpy向量的一些注意事項
(1)不要使用rank 1 array拜隧,即不要使用秩為1的數組,例如a = np.random.randn(5)趁仙,a.shape為(5, )洪添,這是一個秩為1的數組。
(2)使用(5, 1)的矩陣幸撕,將它視做列向量薇组,使用(1, 5)的矩陣,將它視做行向量坐儿。
(3)使用斷言來判斷變量的shape律胀,assert(a.shape == (5, 1))
(4)將shape為(5, )的變量通過reshape操作變?yōu)閟hape為(5, 1)的矩陣宋光,即列向量。
17炭菌、logistic回歸成本函數的一些解釋
我們基于有標簽數據集以監(jiān)督學習的方式訓練模型 =>
基于MLE的思想罪佳,既然該數據集出現了,則認為該數據集有這樣的一些label概率是最大的 =>
調整模型參數黑低,使得該概率最大 =>
由于label已知赘艳,而模型參數未知,故為似然函數 =>
取對數是為了易于計算(由于樣本標簽取值是條件獨立的克握,所以該數據集有這樣的一些label的聯合概率可以轉換為連乘的形式) =>
取負數蕾管,將負的訓練集的對數似然函數作為目標函數,即成本函數菩暗。