神经网络反向传播的矩阵复合求导计算

以前一直以为矩阵的复合求导和可微函数的链式求导是一样的,但是在推导神经网络梯度公式的时候往往会出现一些符号次序不对的问题,我这里借用吴恩达编程作业中给出的浅层神经网络的案例来计算反向传播的梯度。关于矩阵复合求导法则可以参考:矩阵的复合求导
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于更深层的网络来说同理,可以推出各层的梯度为:
在这里插入图片描述
Dropout求导:
在这里插入图片描述

### 神经网络反向传播算法的数学公式推导 #### 前向传播阶段概述 在神经网络中,前向传播是指输入数据通过各层传递直到输出的过程。每一层的激活值由该层权重矩阵 \( W \),偏置项 \( b \) 和来自前一层的激活值共同决定。对于第 \( l \) 层来说,其线性组合可以表示为: \[ z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)} \] 接着应用非线性的激活函数得到本层的激活值: \[ a^{(l)} = g(z^{(l)}) \] 这里 \( g(\cdot) \) 表示任意一种激活函数, 如 Sigmoid 或 ReLU 函数。 #### 计算损失并准备更新参数 完成一次完整的前向传播之后,会获得最终预测结果并与真实标签对比计算总误差或成本\( J(W,b; X,y)\)[^1]。此步骤旨在评估当前模型性能的好坏程度,并据此调整内部参数使未来预测更加精准可靠。 #### 反向传播核心概念 为了优化上述提到的成本函数,在已知目标变量的情况下采用梯度下降法逐步修正权值与阈值直至收敛于局部最优解附近。具体而言就是沿着负梯度方向移动一定距离从而减小整体差距大小;而实现这一目的的关键技术即所谓的“反向传播”。 #### 链式法则的应用 考虑到每一步操作都是基于之前步骤产生的中间产物来进行下一步运算的事实,则整个过程中涉及到大量复合函数间的相互作用关系。因此需要用到微积分里的一个重要工具——链式法则来简化求导过程。假设某一层的误差相对于某个特定权重的变化率可写作如下形式: \[ \frac{\partial}{\partial w_{ij}^{(l)}}J=\delta_j^{(l)}a_i^{(l-1)} \] 其中, - \( \delta_j^{(l)}=g'(z_j^{(l)})\sum_k{w_{jk}^{(l+1)}\delta_k^{(l+1)}} \) 代表了第 \( j \) 个单元格处累积下来的敏感度信息(也叫做残差),用于衡量该位置上的变化对总体影响有多大; - 而另一部分则是指向前一时刻状态下的实际贡献量级。 这种表达方式不仅直观而且易于编程实现自动化处理流程[^2]。 #### 权重更新规则 一旦获得了所有必要的梯度信息后就可以着手实施具体的参数修改工作了。一般情况下会选择按照下面给出的学习速率 η 的比例缩小后的相反数作为增量加入原始数值之中形成新的估计版本: \[ w_{ij}^{(l)} := w_{ij}^{(l)}-\eta\delta_j^{(l)}a_i^{(l-1)} \] 同样的道理适用于其他类型的待定系数比如偏移量等等[^4]。 ```python def update_weights(weights, deltas, activations, learning_rate): """ 更新权重 参数: weights (numpy.ndarray): 当前权重矩阵. deltas (list of numpy.ndarrays): 各层δ值列表. activations (list of numpy.ndarrays): 各层激活值列表. learning_rate (float): 学习速率. 返回: updated_weights (numpy.ndarray): 新的权重矩阵. """ updated_weights = [] num_layers = len(deltas) for layer in range(num_layers - 1): delta_matrix = np.outer(deltas[layer], activations[layer]) weight_update = -learning_rate * delta_matrix.T new_weight_layer = weights[layer] + weight_update updated_weights.append(new_weight_layer) return updated_weights ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值