<p>?</p><p/><h1>人工智能之核心技術(shù) 深度學(xué)習(xí)</h1><p/><p>第三章 卷積神經(jīng)網(wǎng)絡(luò)(CNN)</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/30827302-c11ec17f9316d3b6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p>
<h1>前言:卷積神經(jīng)網(wǎng)絡(luò)(CNN)—— 計(jì)算機(jī)視覺(jué)核心</h1><p>卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)是深度學(xué)習(xí)在<strong>計(jì)算機(jī)視覺(jué)</strong>領(lǐng)域取得革命性成功的基石。它通過(guò)模擬人類(lèi)視覺(jué)系統(tǒng)的局部感知和層次抽象機(jī)制,高效地從圖像中提取特征。</p>
<p><strong>一、CNN 核心組件</strong></p><p>傳統(tǒng)全連接網(wǎng)絡(luò)處理圖像存在兩大問(wèn)題:</p><ol><li><p>1.?<strong>參數(shù)爆炸</strong>:一張 224×224 的 RGB 圖像有 150,528 個(gè)像素,若第一層有 1000 個(gè)神經(jīng)元,參數(shù)量高達(dá)?<strong>1.5 億</strong>!</p></li><li><p>2.?<strong>忽略空間結(jié)構(gòu)</strong>:全連接將像素視為無(wú)序向量,丟失了圖像的局部相關(guān)性。</p></li></ol><p>CNN 通過(guò)以下三大核心組件解決這些問(wèn)題:</p><p><strong>1.1 卷積層(Convolutional Layer)</strong></p><p><strong>核心思想:</strong></p><ul><li><p>??<strong>局部感受野(Local Receptive Field)</strong>:每個(gè)神經(jīng)元只關(guān)注輸入圖像的一小塊區(qū)域(如 3×3)。</p></li><li><p>??<strong>權(quán)值共享(Weight Sharing)</strong>:同一個(gè)卷積核在整個(gè)圖像上滑動(dòng),使用同一組權(quán)重 → 大幅減少參數(shù)!</p></li></ul><p><strong>關(guān)鍵超參數(shù):</strong></p><p/><p/><p><strong>輸出尺寸公式:</strong></p><p/><p>其中??= 卷積核大小,?= padding,?= stride。</p><pre>輸入圖像?5x53x3?卷積核Stride=1,?Padding=0輸出特征圖?3x3</pre><blockquote><p>???<strong>為什么有效?</strong>
卷積操作天然捕捉<strong>邊緣、紋理、形狀</strong>等局部模式,且具有<strong>平移不變性</strong>(物體在哪都能識(shí)別)。</p></blockquote>
<p><strong>1.2 池化層(Pooling Layer)</strong></p><p><strong>目的</strong>:降維 + 增強(qiáng)魯棒性(對(duì)微小位移不敏感)</p><p/><p/><ul><li><p>? 典型設(shè)置:2×2 窗口,Stride=2 → 尺寸減半</p></li><li><p>??<strong>無(wú)參數(shù)、不可學(xué)習(xí)</strong></p></li></ul><pre>4x4?特征圖MaxPool?2x2,?Stride=22x2?輸出</pre>
<p><strong>1.3 全連接層(Fully Connected Layer)</strong></p><ul><li><p>? 位于 CNN 末端,將前面提取的<strong>高維特征</strong>映射到類(lèi)別概率</p></li><li><p>? 輸入需展平(Flatten)為一維向量</p></li><li><p>??<strong>參數(shù)量大</strong>,是過(guò)擬合主要來(lái)源 → 常配合 Dropout 使用</p></li></ul>
<p><strong>1.4 卷積核設(shè)計(jì)原則</strong></p><p/><p/>
<p><strong>二、經(jīng)典 CNN 模型演進(jìn)</strong></p><p><strong>2.1 LeNet-5(1998,Yann LeCun)</strong></p><ul><li><p>??<strong>首個(gè)成功 CNN</strong>,用于手寫(xiě)數(shù)字識(shí)別(MNIST)</p></li><li><p>? 結(jié)構(gòu):<strong>Conv → Pool → Conv → Pool → FC → FC</strong></p></li><li><p>? 使用?<strong>tanh</strong>?激活,<strong>平均池化</strong></p></li></ul><pre>InputConv1Pool1Conv2Pool2FlattenFC1FC2Output</pre><blockquote><p>???<strong>意義</strong>:證明了端到端學(xué)習(xí)圖像特征的可行性。</p></blockquote>
<p><strong>2.2 AlexNet(2012,ImageNet 冠軍)</strong></p><ul><li><p>??<strong>引爆深度學(xué)習(xí)熱潮</strong></p></li><li><p>? 創(chuàng)新點(diǎn):</p></li><ul><li><p>? 使用?<strong>ReLU</strong>?激活(解決 Sigmoid 梯度消失)</p></li><li><p>??<strong>Dropout</strong>?防止過(guò)擬合</p></li><li><p>??<strong>GPU 加速訓(xùn)練</strong></p></li><li><p>??<strong>重疊池化</strong>(3×3 window, stride=2)</p></li></ul></ul><blockquote><p>? 參數(shù)量:6000 萬(wàn),遠(yuǎn)超 LeNet</p></blockquote>
<p><strong>2.3 VGG(2014)</strong></p><ul><li><p>??<strong>統(tǒng)一使用 3×3 小卷積核</strong>,深度達(dá) 16~19 層</p></li><li><p>? 發(fā)現(xiàn):<strong>深度比寬度更重要</strong></p></li><li><p>? 結(jié)構(gòu)簡(jiǎn)潔,成為后續(xù)模型 backbone</p></li></ul><pre>#?VGG?塊示例def?vgg_block(num_convs,?in_channels,?out_channels):????layers?=?[]????for?_?in?range(num_convs):????????layers.append(nn.Conv2d(in_channels,?out_channels,?kernel_size=3,?padding=1))????????layers.append(nn.ReLU())????????in_channels?=?out_channels????layers.append(nn.MaxPool2d(kernel_size=2,?stride=2))????return?nn.Sequential(layers)</pre>
<p><strong>2.4 GoogLeNet / Inception(2014)</strong></p><ul><li><p>? 引入?<strong>Inception 模塊</strong>:并行使用多種卷積核(1×1, 3×3, 5×5)+ 池化</p></li><li><p>??<strong>1×1 卷積用于降維</strong>,控制計(jì)算量</p></li><li><p>? 引入?<strong>輔助分類(lèi)器</strong>(中間層加 loss),緩解梯度消失</p></li></ul><pre>Input1x1?Conv1x1?Conv?-->?3x3?Conv1x1?Conv?-->?5x5?Conv3x3?MaxPool?-->?1x1?ConvConcatOutput</pre>
<p><strong>2.5 ResNet(2015,里程碑)</strong></p><ul><li><p>??<strong>殘差連接(Residual Connection)</strong>?解決深度網(wǎng)絡(luò)退化問(wèn)題</p></li><li><p>? 核心思想:學(xué)習(xí)?<strong>殘差函數(shù)</strong>?,而非直接擬合?</p></li><li><p>? 公式:</p></li></ul><pre>xF(x):?兩層卷積Addy</pre><blockquote><p>? 效果:訓(xùn)練 1000+ 層網(wǎng)絡(luò)成為可能!ImageNet 錯(cuò)誤率降至 3.6%</p></blockquote>
<p><strong>2.6 DenseNet(2017)</strong></p><ul><li><p>??<strong>密集連接</strong>:每一層接收前面所有層的特征作為輸入</p></li><li><p>? 公式:</p></li><li><p>? 優(yōu)點(diǎn):特征重用、緩解梯度消失、參數(shù)更少</p></li></ul>
<p><strong>三、CNN 應(yīng)用場(chǎng)景</strong></p><p><strong>3.1 圖像分類(lèi)(Image Classification)</strong></p><ul><li><p>??<strong>任務(wù)</strong>:給整張圖打標(biāo)簽(如 “貓”、“狗”)</p></li><li><p>??<strong>代表模型</strong>:ResNet, EfficientNet</p></li><li><p>??<strong>評(píng)估指標(biāo)</strong>:Top-1 / Top-5 Accuracy</p></li></ul><p><strong>3.2 目標(biāo)檢測(cè)(Object Detection)入門(mén)</strong></p><p>目標(biāo)檢測(cè) =?<strong>定位(Bounding Box) + 分類(lèi)</strong></p><p><strong>R-CNN 系列演進(jìn):</strong></p><p/><p/><blockquote><p>???<strong>關(guān)鍵組件</strong>:</p><ul><li><p>??<strong>RoI Pooling / RoI Align</strong>:將不同尺寸區(qū)域映射為固定大小特征</p></li><li><p>??<strong>Anchor Boxes</strong>:預(yù)設(shè)多尺度框,提升召回率</p></li></ul></blockquote>
<p><strong>四、配套代碼實(shí)現(xiàn)(PyTorch)</strong></p><p><strong>示例 1:構(gòu)建簡(jiǎn)易 CNN(類(lèi)似 LeNet)</strong></p><pre>import?torchimport?torch.nn?as?nnclass?SimpleCNN(nn.Module):????def?init(self,?num_classes=10):????????super().init()????????self.features?=?nn.Sequential(????????????nn.Conv2d(3,?32,?kernel_size=5,?padding=2),??#?32x32x3?→?32x32x32????????????nn.ReLU(),????????????nn.MaxPool2d(2),?????????????????????????????#?→?16x16x32????????????nn.Conv2d(32,?64,?kernel_size=5,?padding=2),?#?→?16x16x64????????????nn.ReLU(),????????????nn.MaxPool2d(2),?????????????????????????????#?→?8x8x64????????)????????self.classifier?=?nn.Sequential(????????????nn.Flatten(),????????????nn.Linear(8??8?*?64,?256),????????????nn.ReLU(),????????????nn.Dropout(0.5),????????????nn.Linear(256,?num_classes)????????)????def?forward(self,?x):????????x?=?self.features(x)????????x?=?self.classifier(x)????????return?x#?測(cè)試model?=?SimpleCNN()x?=?torch.randn(1,?3,?32,?32)print(model(x).shape)??#?torch.Size([1,?10])</pre><p><strong>示例 2:ResNet 基本殘差塊</strong></p><pre>class?BasicBlock(nn.Module):????def?init(self,?in_channels,?out_channels,?stride=1,?downsample=None):????????super().init()????????self.conv1?=?nn.Conv2d(in_channels,?out_channels,?kernel_size=3,????????????????????????????????stride=stride,?padding=1,?bias=False)????????self.bn1?=?nn.BatchNorm2d(out_channels)????????self.relu?=?nn.ReLU(inplace=True)????????self.conv2?=?nn.Conv2d(out_channels,?out_channels,?kernel_size=3,????????????????????????????????padding=1,?bias=False)????????self.bn2?=?nn.BatchNorm2d(out_channels)????????self.downsample?=?downsample??#?用于維度匹配????def?forward(self,?x):????????identity?=?x????????out?=?self.relu(self.bn1(self.conv1(x)))????????out?=?self.bn2(self.conv2(out))????????if?self.downsample?is?not?None:????????????identity?=?self.downsample(x)????????out?+=?identity????????return?self.relu(out)</pre>
<p><strong>五、總結(jié)與對(duì)比</strong></p><p/><p/><blockquote><p>??<strong>現(xiàn)代實(shí)踐建議</strong>:</p><ul><li><p>? 圖像分類(lèi):<strong>ResNet-50 / EfficientNet-B0</strong></p></li><li><p>? 移動(dòng)端:<strong>MobileNetV3 / ShuffleNet</strong></p></li><li><p>? 目標(biāo)檢測(cè):<strong>YOLOv8 / DETR</strong></p></li></ul></blockquote><h1>資料關(guān)注</h1><p>公眾號(hào):咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/30827302-22c6b9c6d0f9789f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>《Python編程:從入門(mén)到實(shí)踐》
《利用Python進(jìn)行數(shù)據(jù)分析》
《算法導(dǎo)論中文第三版》
《概率論與數(shù)理統(tǒng)計(jì)(第四版) (盛驟) 》
《程序員的數(shù)學(xué)》
《線性代數(shù)應(yīng)該這樣學(xué)第3版》
《微積分和數(shù)學(xué)分析引論》
《(西瓜書(shū))周志華-機(jī)器學(xué)習(xí)》
《TensorFlow機(jī)器學(xué)習(xí)實(shí)戰(zhàn)指南》
《Sklearn與TensorFlow機(jī)器學(xué)習(xí)實(shí)用指南》
《模式識(shí)別(第四版)》
《深度學(xué)習(xí) deep learning》伊恩·古德費(fèi)洛著 花書(shū)
《Python深度學(xué)習(xí)第二版(中文版)【純文本】 (登封大數(shù)據(jù) (Francois Choliet)) (Z-Library)》
《深入淺出神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)+(邁克爾·尼爾森(Michael+Nielsen)》
《自然語(yǔ)言處理綜論 第2版》
《Natural-Language-Processing-with-PyTorch》
《計(jì)算機(jī)視覺(jué)-算法與應(yīng)用(中文版)》
《Learning OpenCV 4》
《AIGC:智能創(chuàng)作時(shí)代》杜雨+&+張孜銘
《AIGC原理與實(shí)踐:零基礎(chǔ)學(xué)大語(yǔ)言模型、擴(kuò)散模型和多模態(tài)模型》
《從零構(gòu)建大語(yǔ)言模型(中文版)》
《實(shí)戰(zhàn)AI大模型》
《AI 3.0》</p><p/><p/><p>?</p><p/>