反向传播原理

本文探讨了反向传播在优化权重参数中的作用。通过链式法则计算Etotal对权重ω5的偏导,以判断权重调整的方向:偏导数大于0时减少ω5,小于0时增加ω5。同时,对于ω1的更新,通过比较每次权重调整后Etotal的变化来判断是否达到收敛状态。

1. 要对ω5权值更新,先求Etotal对ω5的偏导

(链式法则)

各值代入,求出,此值表示ω5为当前值时,Etotal的变化率。

若此值>0,表示Etotal正在上升,需要调小ω5

此值<0表示Etotal正在下降,需要调大ω5




2. 要对ω1更新



每次调整完权重,求得新的Etotal,与上次比较,不再变化或变化较小则收敛。

<think>我们正在讨论卷积神经网络(CNN)的反向传播原理。根据用户需求,我们需要详细解释CNN反向传播的推导过程,包括直观理解和数学公式。同时,根据系统指令,所有行内数学表达式使用$...$格式,独立公式使用$$...$$格式,并用中文回答。 参考引用的资料,特别是引用[2]中提到了DNN反向传播的四个核心公式(BP1-BP4),并指出CNN的反向传播需要针对卷积层和池化层进行特殊处理。我们也将参考引用[5]提供的课件链接(虽然无法直接访问,但可以推断其中包含CNN反向传播的详细推导)。 我们将按照以下步骤进行: 1. 回顾全连接神经网络(DNN)的反向传播。 2. 介绍CNN的基本结构(卷积层、池化层、全连接层)及其前向传播。 3. 分别推导卷积层和池化层的反向传播。 4. 结合直观解释和数学公式。 注意:由于用户要求生成相关问题,我们将在回答后提出几个相关问题。 下面开始正式回答。</think>### 卷积神经网络(CNN)反向传播算法原理与推导 卷积神经网络的反向传播是训练CNN的核心,其关键在于**链式法则的逐层应用**,但需针对卷积层和池化层的特性进行特殊推导。以下分步骤解析: --- #### 一、核心概念回顾 1. **反向传播本质** 通过损失函数$C$对权重$w$的偏导数$\frac{\partial C}{\partial w}$更新参数,使用链式法则: $$\frac{\partial C}{\partial w^{(l)}} = \frac{\partial C}{\partial z^{(l)}} \cdot \frac{\partial z^{(l)}}{\partial w^{(l)}} = \delta^{(l)} \cdot a^{(l-1)}$$ 其中$\delta^{(l)}$是第$l$层的误差项。 2. **CNN与DNN的差异** - **权值共享**:卷积核在输入上滑动,同一核参数被多次复用 - **局部连接**:输出神经元仅与局部输入区域相连 - **池化操作**:下采样会改变数据维度[^2] --- #### 二、卷积层的反向传播 设第$l$层为卷积层,其前向传播为: $$z^{(l)} = w^{(l)} \ast a^{(l-1)} + b^{(l)}$$ 其中$\ast$表示卷积运算。 1. **误差项$\delta^{(l)}$的计算** 根据链式法则,误差项由后一层误差反向传播: $$\delta^{(l)} = \frac{\partial C}{\partial z^{(l)}} = \delta^{(l+1)} \cdot \frac{\partial z^{(l+1)}}{\partial a^{(l)}} \cdot \sigma'(z^{(l)})$$ 由于下一层可能是卷积层或池化层,需分情况: - **后接卷积层**:误差反向卷积(Full Convolution) $$\delta^{(l)} = \delta^{(l+1)} \ast_{full} rot180(w^{(l+1)}) \odot \sigma'(z^{(l)})$$ 其中$rot180$表示核旋转180°,$\ast_{full}$是全卷积操作[^5] - **后接全连接层**:按DNN的BP2公式计算 2. **权重梯度计算** 考虑权值共享特性,梯度是所有位置贡献之和: $$\frac{\partial C}{\partial w_{pq}^{(l)}} = \sum_{i,j} \delta_{ij}^{(l)} \cdot a_{i+p,j+q}^{(l-1)}$$ 等价于$\delta^{(l)}$与$a^{(l-1)}$的互相关运算: $$\nabla w^{(l)} = \delta^{(l)} \star a^{(l-1)}$$ 其中$\star$表示互相关(cross-correlation)[^2] --- #### 三、池化层的反向传播 设池化层为$l$,前向传播为$a^{(l)} = pool(a^{(l-1)})$。 1. **最大池化(Max Pooling)** - 记录前向传播时每个池化窗口的最大值位置 - 误差$\delta^{(l)}$仅传递到原最大值位置: $$ \delta_{ij}^{(l-1)} = \begin{cases} \delta_k^{(l)} & \text{若 } a_{ij}^{(l-1)} \text{ 是池化窗口k的最大值} \\ 0 & \text{否则} \end{cases} $$ 2. **平均池化(Average Pooling)** 误差均匀分配到前一层对应窗口的所有神经元: $$\delta^{(l-1)} = upsample(\delta^{(l)}) \odot \sigma'(z^{(l-1)})$$ 其中$upsample$将误差按窗口大小复制扩展[^5] --- #### 四、完整算法流程 1. **前向传播**:计算各层输出$a^{(l)}$和$z^{(l)}$ 2. **初始化输出层误差**:$\delta^{(L)} = \nabla_a C \odot \sigma'(z^{(L)})$ 3. **反向迭代**: ```plaintext for l = L-1 downto 1: if l is convolutional layer: δ(l) = δ(l+1) * rot180(W(l+1)) ⊙ σ'(z(l)) # 卷积误差传递 ∇W(l) = δ(l) ⋆ a(l-1) # 权重梯度计算 if l is pooling layer: δ(l-1) = upsample(δ(l)) ⊙ σ'(z(l-1)) # 池化误差传递 ``` 4. **参数更新**:$w \leftarrow w - \eta \nabla w$ > **计算复杂度**:反向传播计算量约为2次前向传播(第一次前向计算输出,第二次计算误差)[^4] --- #### 五、直观理解 - **卷积核梯度**:可视作"用输入特征图作为卷积核,在误差图上做卷积" - **误差传递**:类似于将误差图"放大"回原尺寸的过程 - **权值共享**:梯度是所有位置共享参数的累加,体现参数复用特性 > 示例:输入为5×5,卷积核3×3,输出3×3。 > 反向传播时,3×3的误差矩阵需旋转180°后与5×5输入做全卷积(结果仍为3×3核梯度)[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值