今天深入复习了BP(Backpropagation)神经网络,作为深度学习的基础,其“前馈计算误差,反向传播梯度”的思想贯穿现代许多复杂模型。记录关键点以备回顾:
- 核心思想:双向流动的信息
• 前向传播:数据从输入层经隐藏层流向输出层,逐层加权求和并激活,最终得到预测结果。可类比“组装流水线”,每一层对数据进行非线性变换。
• 反向传播:从输出层开始,根据预测与真实值的误差,利用链式法则计算每层参数的梯度(即权重和偏置的调整方向)。本质是误差的逆向分配。
- 公式与代码的对应关系
以单隐藏层网络为例,关键步骤的公式与伪代码一一对应:
• 前向传播:
• 隐藏层输入: net_h = W_h \cdot x + b_h
• 隐藏层输出:( h = sigmoid(net_h) )
• 输出层结果:( y = sigmoid(W_o \cdot h + b_o) )
• 反向传播:
• 输出层误差:( \delta_o = (y - t) \cdot sigmoid'(net_o) ) (即伪代码中的损失函数导数与激活函数导数的乘积)
• 隐藏层误差:( \delta_h = (W_o^T \cdot \delta_o) \cdot sigmoid'(net_h) )
• 参数更新:梯度下降调整权重与偏置(见伪代码中的W = W - η * δ * a_prev^T)。
- 关键细节提醒
• 激活函数选择:sigmoid易导致梯度消失,实际常用ReLU或Leaky ReLU。
• 梯度下降变体:伪代码中的批量梯度下降计算全局梯度,但实际更常用小批量(Mini-batch) 兼顾效率与稳定性。
• 初始化重要性:权重初始化为随机小值(如Xavier初始化),避免对称性破坏和学习停滞。
- 个人思考
BP算法的精髓在于链式法则的高效应用,它将复杂网络的误差责任精准分配至每个参数。理解这一点后,再学习CNN或RNN的反向传播会更容易迁移。后续可结合具体代码(如Python+numpy)实现一个简单分类任务,加深对矩阵维度和梯度计算的理解。