神经网络与深度学习笔记①|BP网络+CNN基础全梳理

本周神经网络与深度学习课程核心围绕多层感知机、BP误差反传算法、卷积神经网络(CNN)基础及经典网络展开,从解决线性不可分问题到深度网络搭建,层层递进。本文结合课堂PPT,从原理拆解、公式推导、网络实例、优缺点总结四大维度,系统复盘本周核心知识点。

一、多层感知机与BP误差反传算法

1.1 多层感知机:解决线性不可分难题

1.1.1 痛点:XOR异或问题

1969年Minsky提出XOR问题,是典型的线性不可分问题

  • XOR真值表:(0,0)=0、(1,0)=1、(0,1)=1、(1,1)=0
  • 单层感知机(线性模型)无法用一条直线分割两类数据,导致单层网络能力受限。
1.1.2 解决方案:多层感知机(MLP)

多层感知机(多层前馈神经网络):在输入层和输出层之间加入1层或多层隐层,突破线性限制。

  • 最小有效结构:三层网络(输入层+1层隐层+输出层),可完美解决XOR问题。
  • 节点输出公式(阈值激活函数):
    y1[1]=f(w11[1]x1+w12[1]x2−θ1[1])y2[1]=f(w21[1]x1+w22[1]x2−θ2[1])y=f(w1[2]y1[1]+w2[2]y2[1]−θ) \begin{align*} y_{1}^{[1]}&=f\left( w_{11}^{[1]}x_{1}+w_{12}^{[1]}x_{2}-\theta _{1}^{[1]}\right) \\ y_{2}^{[1]}&=f\left( w_{21}^{[1]}x_{1}+w_{22}^{[1]}x_{2}-\theta _{2}^{[1]}\right) \\ y&=f\left( w_{1}^{[2]}y_{1}^{[1]}+w_{2}^{[2]}y_{2}^{[1]}-\theta \right) \end{align*} y1[1]y2[1]y=f(w11[1]x1+w12[1]x2θ1[1])=f(w21[1]x1+w22[1]x2θ2[1])=f(w1[2]y1[1]+w2[2]y2[1]θ)
    其中阈值激活函数:f(⋅)={1,⋅≥00,⋅<0f(\cdot)= \begin{cases}1, & \cdot \geq 0 \\ 0, & \cdot<0\end{cases}f()={1,0,0<0
1.1.3 核心定理:万能逼近能力
  • 定理1:三层阈值节点网络,可实现任意二值逻辑函数(隐层节点数可任意设置)。
  • 定理2:三层S型非线性节点网络,可一致逼近紧集上的连续函数(深度网络拟合能力的理论基础)。

1.2 BP算法:多层网络的训练核心

BP算法(误差反向传播算法)是有监督学习算法,本质是梯度下降法在多层前馈网络中的应用,核心是正向传播+反向传播

1.2.1 算法核心流程
  1. 正向传播:输入信号从输入层→隐层→输出层,计算网络输出;若输出与期望一致,训练结束;否则进入反向传播。
  2. 反向传播:计算输出误差(期望输出-网络输出),沿原路径反向传递误差,逐层调整权值和阈值,最小化误差。
1.2.2 算法详细推导(核心公式)
(1)符号定义
  • 网络层数:LLL(输入层为第0层,输出层为第LLL层)
  • 层输出:a[l]=σ(z[l])a^{[l]}=\sigma(z^{[l]})a[l]=σ(z[l])σ\sigmaσ为Sigmoid激活函数:σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}σ(x)=1+ex1
  • 线性输出:z[l]=W[l]a[l−1]z^{[l]}=W^{[l]} a^{[l-1]}z[l]=W[l]a[l1]WWW为权值矩阵)
  • 损失函数(均方误差):J=12(y−y^)2J=\frac{1}{2}\left(y-\hat{y}\right)^{2}J=21(yy^)2yyy为真实值,y^\hat{y}y^为预测值)
(2)输出层误差推导

误差δ[L]\delta^{[L]}δ[L](输出层):
δi[L]=∂J∂zi[L]=ai(1−ai)⋅(yi−ai) \delta_{i}^{[L]}=\frac{\partial J}{\partial z_{i}^{[L]}}=a_{i}(1-a_{i}) \cdot (y_i - a_i) δi[L]=zi[L]J=ai(1ai)(yiai)
权值更新:
Δwij[L]=α⋅δi[L]⋅aj[L−1] \Delta w_{i j}^{[L]}=\alpha \cdot \delta_{i}^{[L]} \cdot a_{j}^{[L-1]} Δwij[L]=αδi[L]aj[L1]
α\alphaα为学习率,控制步长)

(3)隐层误差推导

误差反向传递,隐层误差由后一层误差加权求和:
δi[l]=[∑jwji[l+1]δj[l+1]]⋅ai[l](1−ai[l]) \delta_{i}^{[l]}=\left[\sum_{j} w_{j i}^{[l+1]} \delta_{j}^{[l+1]}\right] \cdot a_{i}^{[l]}(1-a_{i}^{[l]}) δi[l]=[jwji[l+1]δj[l+1]]ai[l](1ai[l])
隐层权值更新:
Δwij[l]=α⋅δi[l]⋅aj[l−1] \Delta w_{i j}^{[l]}=\alpha \cdot \delta_{i}^{[l]} \cdot a_{j}^{[l-1]} Δwij[l]=αδi[l]aj[l1]

1.2.3 算法优缺点
  • ✅ 优点:自主学习、可逼近任意非线性函数、适配多分类/回归任务。
  • ❌ 缺点:非全局收敛(易陷入局部极小值)、收敛速度慢、学习率难调、网络结构(层数/节点数)无固定设计标准。
1.2.4 训练数据集:Fashion-MNIST

替代手写数字MNIST的图像数据集:

  • 数据规模:6万训练集+1万测试集,28×28灰度图,10类服饰标签。
  • 优势:与MNIST格式一致,可直接复用代码,适合快速验证网络性能。

二、卷积神经网络(CNN)基础

2.1 痛点:全连接网络的致命缺陷

全连接网络(BP网络)处理图像时,存在参数爆炸、难收敛、易过拟合三大问题:

  • 示例:1000×1000图像+100万隐层节点,输入→隐层参数达101210^{12}1012量级,无法训练。
  • 根源:图像具有局部空间相关性,全连接无视局部特征,冗余参数过多。

2.2 CNN核心:三大基础概念

CNN通过局部连接、权值共享、池化降维,解决全连接网络痛点,核心组件:卷积层、池化层、全连接层

2.2.1 卷积(Convolution):提取局部特征
  • 核心:用**卷积核(滤波器)**扫描图像,提取边缘、纹理、形状等局部特征。
  • 关键参数:
    1. 填充(Padding):图像边缘补0,避免卷积后尺寸缩小。
    2. 步长(Stride):卷积核滑动距离,步长越大,输出尺寸越小。
    3. 多通道卷积:适配RGB图像(3通道),卷积核需与输入通道数一致。
2.2.2 池化(Pooling):降维+抗干扰
  • 核心:对卷积特征图下采样,压缩尺寸、减少参数、保留关键特征、提升鲁棒性
  • 常用类型:
    • 最大池化(Max Pooling):取局部区域最大值,保留纹理特征,主流首选。
    • 平均池化(Avg Pooling):取局部区域平均值,保留背景特征。

2.3 CNN的BP反向传播

CNN误差反传适配卷积、池化层,核心规则:

  1. 池化层:无参数,误差直接上采样传递(最大池化还原最大值位置,平均池化均分误差)。
  2. 卷积层:误差通过卷积核转置反向传递,权值更新同BP梯度下降。

2.4 经典CNN网络演进

2.4.1 LeNet-5(1998):CNN开山之作
  • 用途:手写数字识别,首个成功商用CNN。
  • 结构:32×32输入→C1卷积层→S2池化层→C3卷积层→S4池化层→C5全连接→F6全连接→10分类输出。
  • 特点:无填充、平均池化、Sigmoid激活、参数仅6万,结构简洁。
2.4.2 AlexNet(2012):深度学习里程碑
  • 突破:首次用ReLU激活、最大池化、Dropout、双GPU训练,ImageNet竞赛夺冠。
  • 结构:5层卷积+3层全连接,参数约6000万。
  • 核心改进:ReLU替代Sigmoid(解决梯度消失)、Dropout抑制过拟合、数据增强提升泛化性。
2.4.3 VGG-16(2014):极简规整网络
  • 特点:全3×3小卷积核、固定步长/填充,结构规整易复刻。
  • 结构:13层卷积+3层全连接,参数约1.38亿。
  • 核心规律:网络越深,特征图尺寸缩小、通道数翻倍,保证计算量稳定。
2.4.4 ResNet(残差网络,2015):深层网络救星
  • 痛点:深层网络(>20层)易出现梯度消失/爆炸、性能退化
  • 核心创新:残差块+捷径连接(Skip Connection),公式:H(x)=F(x)+xH(x)=F(x)+xH(x)=F(x)+x
    • xxx:浅层输入,直接传递到深层;F(x)F(x)F(x):卷积学习的残差映射。
  • 效果:可训练1000+层网络,精度随深度提升,成为深度学习标配。

三、本周总结与学习思考

3.1 核心知识脉络

  1. 多层感知机解决单层网络线性不可分问题,BP算法通过梯度下降训练多层网络。
  2. CNN用卷积+池化替代全连接,适配图像数据,大幅减少参数、提升效率。
  3. 经典网络从LeNet→AlexNet→VGG→ResNet,核心演进:激活函数优化→网络加深→残差连接突破深度限制

3.2 课后思考题

  1. 为什么Sigmoid激活函数易导致梯度消失?ReLU如何解决该问题?
    参考答案:
    ①Sigmoid造成梯度消失原因
    Sigmoid函数取值范围为(0,1)(0,1)(0,1),其导数值域最大仅为0.25\boldsymbol{0.25}0.25,且当输入值绝对值较大时,导数迅速趋近于0。深层神经网络反向传播时,梯度需逐层与激活函数导数连续相乘,多层累积后梯度会指数级衰减,最终靠近输入层的梯度几乎变为0,参数无法更新,即发生梯度消失
    ②ReLU解决思路
    ReLU函数表达式:f(x)=max⁡(0,x)f(x)=\max(0,x)f(x)=max(0,x)
    a.输入大于0时,导数恒为1,反向传播中梯度无衰减,可顺畅逐层传递;
    b.大幅缓解深层网络梯度消失问题,计算速度远快于Sigmoid;
    c.仅在负区间梯度为0,仅会出现神经元失活,不会出现大范围梯度消失。

  2. 推导CNN卷积层和池化层的反向传播公式,对比全连接BP的差异。
    参考答案:
    ①卷积层反向传播
    设卷积层前向输出:Z=X∗W+bZ = X*W + bZ=XW+b,损失函数为LLL
    a. 对卷积核权重梯度:∂L∂W=X∗∂L∂Z\displaystyle \frac{\partial L}{\partial W} = X * \frac{\partial L}{\partial Z}WL=XZL
    b. 对偏置梯度:∂L∂b=∑H,W∂L∂Z\displaystyle \frac{\partial L}{\partial b} = \sum_{H,W}\frac{\partial L}{\partial Z}bL=H,WZL
    c. 向前传播梯度(上一层误差):∂L∂X=∂L∂Z∗翻转(W)\displaystyle \frac{\partial L}{\partial X} = \frac{\partial L}{\partial Z} * \text{翻转}(W)XL=ZL翻转(W)
    ②池化层反向传播
    a. 最大池化:误差仅回传至前向最大值对应位置,其余位置梯度置0;
    b. 平均池化:将上层误差均匀均分,回分到池化前所有对应像素位置。
    ③与全连接BP差异
    a. 全连接层为矩阵乘法,参数独立无共享,反向传播为简单矩阵求导;
    b. 卷积层权重共享、局部感受野,反向传播采用互相关运算,参数更新量更少;
    c. 池化层无学习参数,仅做维度压缩,反向传播只分配误差、不更新权重;
    d. CNN反向传播利用空间局部性,计算量远小于同等规模全连接网络。

  3. 残差网络的捷径连接为什么能缓解深层网络梯度消失?
    参考答案:
    a. 残差块前向公式:H(x)=F(x)+x\boldsymbol{H}(x)=F(x)+xH(x)=F(x)+xF(x)F(x)F(x)为非线性映射学习残差,xxx恒等捷径连接
    b. 反向传播求梯度:∂H∂x=∂F∂x+1\displaystyle \frac{\partial H}{\partial x}=\frac{\partial F}{\partial x}+1xH=xF+1
    c. 核心原理:梯度传播存在直连通路,梯度由两部分组成:残差分支梯度 + 恒等映射梯度1。即使残差分支∂F∂x\frac{\partial F}{\partial x}xF趋近于0,整体梯度仍近似等于1,不会出现多层相乘导致的梯度指数衰减。
    d. 深层网络可直接通过捷径传递原始梯度,打破层数加深梯度消失的限制,让数百层极深网络能够正常训练收敛。

3.3 学习感悟

本周从基础的BP网络到进阶的CNN,清晰感受到深度学习“从线性到非线性、从浅层到深层、从低效到高效”的演进逻辑。理论推导+网络实例结合,能快速夯实基础,后续需结合代码实现(如PyTorch搭建LeNet、ResNet),加深对网络结构和训练过程的理解~

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐