全連接層->卷積層
- 用有一個隱藏層的MLP訓練ImageNet數據集(300*300的圖像,有1000個類別),要有10000個輸出
會有10億個可學習的參數,量太大
全連接:一個輸出是根據所有輸入加權得到 - 在圖片中識別物體:
- translation invariance(變換不變性):無論這個物體在哪,模型都會有相近的輸出
- 本地性:像素點與周圍的像素點聯系更緊密
卷積層
- 本地性:一個輸出只從k*k個輸入的窗口中計算
- 變換不變性:不同的輸出是使用相同的k*k的權重
由此一個卷積層模型的參數不再依賴于輸入/輸出的大小,只與窗口大小相關
一個核可以學習識別一個模式
單通道的輸入和輸出的卷積
# X是輸入,K是權重,都是矩陣
h,w = K.shape
Y = torch.zeros((X.shape[0] - h + 1,X.shape[1] - w + 1))
for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i,j] = (X[i:i+h,j:j+w]*K).sum()
池化層(匯聚層)
- 卷積神經網絡對位置很敏感,輸入的一個像素的變化會導致輸出的一個像素的變化
- 池化層會在k*k的窗口中計算元素的均值(均值匯聚)/最大值(最大匯聚)
# h,w是池化窗口的高和寬
# mode:max or avg
Y = torch.zeros((X.shape[0] - h + 1,X.shape[1] - w + 1))
for i in range(Y.shape[0]):for j in range(Y.shape[1]):if mode == 'max':Y[i,j] = X[i:i+h,j:j+w].max()elif mode == 'avg':Y[i,j] = X[i:i+h,j:j+w].mean()
卷積神經網絡
- 一個用卷積層的堆提取特征的神經網絡
激活函數用在每個卷積層后
使用池化來減少位置敏感度 - 現代化的CNN是有各類超參數和層連接(AlexNet,VGG等)的深度神經網絡