這篇文章記錄看dive into pytorch遇到的所有有意義的點(diǎn),主要是以后可能在吹B或者面試的時(shí)候問(wèn)到的知識(shí)點(diǎn),因此主要以問(wèn)答的形式記錄。正因?yàn)樯鲜鲈颍酒恼掠涗浀闹饕禽^為基礎(chǔ)的,非嚴(yán)肅推導(dǎo)性的點(diǎn)。
練習(xí)代碼在這里。
Q:為什么需要激活函數(shù)?
Full Connection Layer只是對(duì)數(shù)據(jù)的仿射變換,而多個(gè)仿射變換的疊加本質(zhì)上仍然是一個(gè)仿射變換,解決的方法就是引入非線性變換,如對(duì)隱藏變量使用按元素運(yùn)算的非線性函數(shù),作為下一個(gè)全連接層的輸入。
Q:什么是訓(xùn)練誤差?什么是泛化誤差?二者關(guān)系是什么?
前者指模型在訓(xùn)練集上表現(xiàn)出來(lái)的誤差,后者指模型在任意一個(gè)測(cè)試數(shù)據(jù)樣本上表現(xiàn)出來(lái)的誤差的期望?;讵?dú)立同分布假設(shè),任意一個(gè)給定的ML模型,他的訓(xùn)練誤差和泛化誤差都是相同的。但是實(shí)際上,模型的參數(shù)是在訓(xùn)練集上訓(xùn)練的,依據(jù)的是最小化訓(xùn)練誤差,所以訓(xùn)練誤差的期望小于或等于泛化誤差。因?yàn)闊o(wú)法從訓(xùn)練誤差估計(jì)出泛化誤差,所以一味地降低訓(xùn)練誤差不等于泛化誤差也會(huì)降低。
Q:導(dǎo)致過(guò)擬合的原因?
1.模型過(guò)于復(fù)雜。2.訓(xùn)練集不夠大。
Q:權(quán)重衰減(L2正則化)是怎么防止模型過(guò)擬合的?
Q:model.eval()的作用?
主要在于關(guān)閉Dropout。Dropout的定義為小于某個(gè)概率閾值P0的cell清零,大于P0的cell會(huì)被除以1-P0做拉伸,這保證了不改變其輸?的期望值。在測(cè)試模型的時(shí)候,人們期望得到確定性的結(jié)果(特定輸入就得到特定輸出),所以要關(guān)閉Dropout,這也就是eval模式的作用(之一)。
Q:在深度學(xué)習(xí)中,卷積和互相關(guān)運(yùn)算的關(guān)系?
互相關(guān)運(yùn)算是指以滑動(dòng)窗口的形式將輸入矩陣和核矩陣對(duì)應(yīng)計(jì)算乘積和,得出結(jié)果矩陣;卷積運(yùn)算是指將核矩陣左右翻轉(zhuǎn)再上下翻轉(zhuǎn)后得到的新矩陣進(jìn)行互相關(guān)運(yùn)算。因?yàn)榫矸e核的參數(shù)信息都是不斷更新學(xué)習(xí)得來(lái)的,所以本質(zhì)上在深度學(xué)習(xí)中,卷積就是一種互相關(guān)運(yùn)算(最后會(huì)收斂到等效的參數(shù)上)。
Q:什么是特征圖?什么是感受野?
二維卷積層輸出的二維數(shù)組可以看做是輸入在空間維度(寬和高)上某一級(jí)的表達(dá),叫做特征圖。影響元素x的前向計(jì)算的所有可能輸入?yún)^(qū)域(可能大于輸入實(shí)際尺寸)叫做x的感受野。
Q:1*1卷積的作用?
因?yàn)?*1是卷積的最小窗口,失去了卷積層可以識(shí)別高和寬維度上相鄰元素構(gòu)成模式的功能。實(shí)際上1*1卷積的主要計(jì)算發(fā)生在通道維度上,通過(guò)使用不同數(shù)量的kernel,可以得出不同通道數(shù)量的輸出。假如將通道當(dāng)做特征維,寬高的元素當(dāng)做數(shù)據(jù)樣本,那么1*1卷積的作用與全連接層類(lèi)似。
Q:池化層(pooling)的作用?
緩解卷積層對(duì)位置的過(guò)度敏感性。使用p*q池化時(shí),只要卷積層的識(shí)別模式在高和寬上移動(dòng)不超過(guò)p-1(q-1)個(gè)像素,都可以被檢測(cè)出來(lái)。
Q:LeNet、AlexNet和VGG?
這三個(gè)是典型的卷積網(wǎng)絡(luò)。卷積層主要解決兩個(gè)問(wèn)題:1.卷積層保留輸入形狀,使圖像在高和寬兩個(gè)方向上的相關(guān)性均可能被有效識(shí)別;2.卷積層使用滑動(dòng)窗口將同一個(gè)卷積核與不同位置的輸入重復(fù)計(jì)算,避免了參數(shù)尺寸過(guò)大。LeNet是最早的卷積網(wǎng)絡(luò),用于10分類(lèi),sigmoid為激活函數(shù),具體結(jié)構(gòu)如下:
FashionMINST,GF940MX 2G顯卡 20 sec/epochAlexNet則是第一個(gè)深度卷積網(wǎng)絡(luò),他包含5層卷積、2層隱藏層和1層全連接輸出層。因?yàn)楹竺?層全連接參數(shù)過(guò)大(接近1GB),Alex設(shè)計(jì)了雙數(shù)據(jù)流,使得數(shù)據(jù)在兩塊GPU上并行處理(不同硬件上的數(shù)據(jù)是沒(méi)辦法交互計(jì)算的),這在現(xiàn)在當(dāng)然不是問(wèn)題了。AlexNet用了更簡(jiǎn)單的ReLU,求導(dǎo)更簡(jiǎn)單而且不會(huì)出現(xiàn)梯度消失的問(wèn)題,sigmoid在x值特別大時(shí),對(duì)應(yīng)的導(dǎo)師f`(x)趨向于0,不利于BP。AlexNet使用了Dropout,提升了泛化性的同時(shí),減少了計(jì)算量。AlexNet使用了圖像增強(qiáng),如翻轉(zhuǎn)裁切和顏色變化,擴(kuò)大了數(shù)據(jù)集以緩解數(shù)據(jù)過(guò)擬合。具體結(jié)構(gòu)如下:
GF940MX 2G顯卡 700 sec/epochAlexNet雖然在網(wǎng)絡(luò)結(jié)構(gòu)上只是LeNet的簡(jiǎn)單增加,但是科研思路和精度提升卻是有非常重大意義的。AlexNet和LeNet雖然是卷積網(wǎng)絡(luò),但是沒(méi)有給后來(lái)者提供進(jìn)一步的研究思路。VGG提出了可以復(fù)用簡(jiǎn)單模塊來(lái)構(gòu)建深度模型的思路。VGG提出的簡(jiǎn)單模塊稱為VGGblock,連續(xù)使用數(shù)個(gè)相同的填充為1,窗口形狀為3*3的卷積核,最后接上一個(gè)步幅為2,窗口形狀2*2的最大池化。結(jié)果就是數(shù)據(jù)每過(guò)一個(gè)VGG_block,尺寸就減半。VGG-11的結(jié)構(gòu)如下:
這就不難為我的小卡了吧一個(gè)224*224的圖像經(jīng)過(guò)VGG-11的5個(gè)block后,尺寸變化為7*7。
Q:什么是Network in Network(NiN)?
在AlexNet中因?yàn)槟┪驳娜齻€(gè)全連接層的參數(shù)太大,Alex做過(guò)一些改進(jìn)。NiN也是改進(jìn)之一,它兼具VGG的block思想和減少AlexNet參數(shù)的思想,核心做法是用1*1卷積代替全連接層,使用1*1卷積將卷積層通道數(shù)變?yōu)轭?lèi)別數(shù),然后使用全局平均池化(即kernel等于特征size)得出對(duì)應(yīng)輸出。NiN的好處是可以顯著減小模型參數(shù)尺寸,緩解了過(guò)擬合問(wèn)題。但是實(shí)際過(guò)程中,NiN的收斂時(shí)間要長(zhǎng)于VGG等全連接輸出層。
哈哈哈 VSC修好了
1*224*224的圖片尺寸變化 629 sec/epoch,訓(xùn)練的快,收斂的慢
Q:什么是GoogLeNet?
GoogLeNet和VGG-11是2014年imageNet挑戰(zhàn)賽的第一、二名,兩者擁有相似的思想,那就是分塊。相比于VGG-11,GoogLeNet在通道設(shè)計(jì)和深度上都更復(fù)雜,核心在于并行結(jié)構(gòu)的Inception塊。
四路并行
GoogLeNet第一版本架構(gòu) 大卷積核明顯少雖然模型看著更復(fù)雜,但是實(shí)際上計(jì)算復(fù)雜度是更低的,可以說(shuō)是一個(gè)更加精妙的設(shè)計(jì)。至于Inception塊的通道設(shè)計(jì)分配比例,則是在ImageNet數(shù)據(jù)集上大量數(shù)據(jù)實(shí)驗(yàn)得來(lái)的。
Q:簡(jiǎn)單理解Batch Normalization?
訓(xùn)練時(shí)使用BN,不斷調(diào)整網(wǎng)絡(luò)中間層的輸出,從而使網(wǎng)絡(luò)更穩(wěn)定。BN分為對(duì)Conv的和對(duì)FC的,兩者稍有不同。和Dropout一樣,訓(xùn)練模式和測(cè)試模式下輸出是不同的。因?yàn)橛?xùn)練時(shí)用的是一個(gè)batch的均值和方差,而測(cè)試時(shí)用的是移動(dòng)平均估算整個(gè)數(shù)據(jù)集的均值和方差。
Q: 什么是ResNet和DenseNet?
對(duì)于NN,原則上對(duì)充分訓(xùn)練的模型添加新的層,訓(xùn)練誤差都會(huì)降低,因?yàn)樵P偷慕饪臻g是新模型解空間的子集。特殊的,如果后添加的層如果能擬合成恒等映射f(x)=x那么新模型和原模型同樣有效。 然而,實(shí)際上過(guò)深的層使得誤差不降反升。即使BN使得數(shù)值穩(wěn)定性提高,訓(xùn)練深層模型更容易,但是誤差上升的問(wèn)題依舊沒(méi)有解決。
假設(shè)虛線框內(nèi)為一局部擬合函數(shù),目標(biāo)是f(x)。那么普通網(wǎng)絡(luò)結(jié)構(gòu)的目標(biāo)是擬合f(x),ResNet則擬合f(x)-x?;谏鲜龅暮愕扔成渌枷?,擬合f(x)-x=0比f(wàn)(x)=x更容易優(yōu)化。實(shí)際上,權(quán)重W和偏差b都接近于0,更容易捕捉恒等映射的細(xì)微波動(dòng)。(也不太懂,你說(shuō)是那就是)具體實(shí)現(xiàn)則是依靠殘差塊,以ResNet-18 結(jié)構(gòu)為例:每個(gè) Residual 結(jié)構(gòu) 2 個(gè) conv(Not 1*1)每個(gè) 殘差塊(blk) 2 個(gè) Residual 結(jié)構(gòu)共計(jì) 4 個(gè) blk 16 個(gè) conv輸入層的 conv + 輸出的 FC共計(jì) 18 層
224*224的圖片尺寸和通道變化DenseNet則是將元素相加操作換成了通道連接操作,一個(gè)dense塊內(nèi)的conv會(huì)用到前面所有的輸入通道。其中尺寸是相同的,但是通道數(shù)會(huì)逐漸加大。所以需要一個(gè)1*1卷積層調(diào)整通道數(shù),使之不會(huì)太夸張,成為過(guò)渡層。
96*96的圖片尺寸和通道變化ResNet使用stride=2的殘差塊使feature map的size減半,DenseNet則在過(guò)渡層1*1conv之后在接一個(gè)kernel=2的池化,使得feature map的size減半。
To Be Continued