第四周——深層神經(jīng)網(wǎng)絡(luò)
1、Introduction to DNN
只不過是把之前的單隱含層網(wǎng)絡(luò)拓展了一下罷了,符號(hào)約定基本一致。
2、在DNN中做forward pass
通過for循環(huán)逐層計(jì)算Z和A,得到模型的輸出矩陣。
3、核對(duì)矩陣的shape
(1)Z和dZ的shape一致,其他也是。
(2)前向或反向傳播,只需確保等號(hào)兩邊的矩陣shape一致即可。
4、為什么使用深層表示
(1)有特征的內(nèi)部變化,低層次的特征組合得到高層次抽象的特征,做特征的自動(dòng)抽取。
(2)人臉檢測(cè)任務(wù):先檢測(cè)出圖像哪里有edge,再進(jìn)一步檢測(cè)出哪里有眼鼻嘴等,再進(jìn)一步檢測(cè)出哪里有人臉。
(3)感知野在逐步擴(kuò)大(In CNN)。
(4)如果用淺層網(wǎng)絡(luò)擬合一個(gè)函數(shù),相較于small L-layer DNN,需要指數(shù)增長(zhǎng)更多的hidden unit。
(5)當(dāng)解決一個(gè)新的問題時(shí),從logistic回歸開始,然后嘗試淺層網(wǎng)絡(luò),再逐步加深,將層數(shù)做為一個(gè)超參來調(diào)整。
5、DNN的building block
(1)參考Chainer DL框架,Linear Link是層(這個(gè)class的成員變量W和b是該層的參數(shù)),它包裝了LinearFunction,要實(shí)現(xiàn)Function的forward and backward over cpu and gpu,forward和backward方法使用了模板方法模式。
(2)一個(gè)層只做一件事,例如線性層和激活層等,符合OOP的思想。
(3)自定義一個(gè)層,只需實(shí)現(xiàn)forward and backward pass即可,forward(self, inputs)和backward(self, inputs, grad_outputs),其中inputs和grad_outputs都是ndarray的元組,這兩個(gè)方法返回的也是tuple of ndarray。
6、前向和反向傳播
見基于Chainer的DNN實(shí)現(xiàn)代碼(見我的Github):(1)實(shí)現(xiàn)Linear Link、ReLU Link和Sigmoid Link;(2)通過組合/堆疊這些層構(gòu)建二分類模型,即Link => Chain;(3)數(shù)據(jù)驅(qū)動(dòng),訓(xùn)練得到二分類器。
7、參數(shù) VS 超參
(1)超參,即需要告訴學(xué)習(xí)算法的東西,包括:學(xué)習(xí)率、迭代數(shù)、多少隱含層、隱含單元數(shù)和激活函數(shù)等。
(2)應(yīng)用DL是一個(gè)經(jīng)驗(yàn)性的過程,通過實(shí)驗(yàn)確定最佳超參。
8、DL和大腦的關(guān)系
目前的DL和大腦沒什么關(guān)系。