前向和反向传播公式推导

本文详细介绍了深度学习中前向传播和反向传播的算法,包括网络结构定义、前向传播计算预测值、反向传播计算梯度,以及梯度下降算法的使用。通过具体的例子和计算图展示了反向传播的过程,并将其向量化为代码形式,为神经网络的训练提供了理论基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 定义网络结构

        假设某二分类问题的网络结构由如图1.1组成(暂仅以2层网络举例,更高层数可依此类比),其输入的特征向量维数为n,隐藏层神经元个数为 n^{[1]} ,输出层神经元个数为n^{[2]}(由于是二分类问题,故仅含一个)。

神经网络结构
图1.1 神经网络结构

        其训练过程为:首先获取训练数据 X ,初始化每层的训练参数 w、b ,并通过前向传播算法(包含线性前向传播和激活函数前向传播)得到  \hat y 并计算 J(w,b) ,然后通过反向传播算法(包含线性反向传播和激活函数反向传播)计算每层的 dw 和 db,最终通过梯度下降算法更新参数 w、b,并多次迭代该过程,得到训练参数。

定义神经网络结构
图1.2 定义神经网络算法结构

其中参数为:

X = \begin{bmatrix} X_1^{(1)} X_1^{(2)} ... \ X_1^{(m)} \\ X_2^{(1)} X_2^{(2)} ... \ X_2^{(m)} \\ ... ... ... ... \\ X_{n^{[0]}}^{(1)} X_{n^{[0]}}^{(2)} ... \ X_{n^{[0]}}^{(m)} \end{bmatrix}_{(n^{[0]}\times m)}   W^{[1]T} = \begin{bmatrix} W_{11}^{[1]} \ \ W_{12}^{[1]} \ ... \ W_{1n^{[0]}}^{[1]} \\ W_{21}^{[1]} \ \ W_{22}^{[1]} ... \ W_{2n^{[0]}}^{[1]} \\ ... ... ... ... \\ W_{n^{[1]}1}^{[1]} W_{n^{[1]}2}^{[1]} ... \ W_{n^{[1]}n^{[0]}}^{[1]} \end{bmatrix}_{(n^{[1]}\times n^{[0]})}    b^{[1]} = \begin{bmatrix} b_{1}^{[1]} \\ b_{2}^{[1]}\\ ... \\ b_{n^{[1]}}^{[1]} \end{bmatrix}_{(n^{[1]}\times 1)}

类比可知 W^{[2]T} 维数为(n^{[2]} \times n^{[1]})b^{[2]} 维数为(n^{[2]} \times 1)

X 包含 m 个样本的 n^{[0]} 个特征值,W^{[1]} 包含网络第1层的所有权重参数,b^{[1]} 包含网络第1层的所有偏置参数。

2 前向传播算法

        输入数据 X ,然后通过每层的权重 w 和偏置 b 计算得到输出预测值 \hat y ,并最终通过代价函数衡量算法的运行情况。

Z^{[1]} =W^{[1]T}X + b^{[1]}= \begin{bmatrix} Z_{1}^{[1](1)} \ Z_{1}^{[1](2)} \ ... \ Z_{1}^{[1](m)} \\ Z_{2}^{[1](1)} \ Z_{2}^{[1](2)} ... \ Z_{2}^{[1](m)} \\ ... ... ... ... \\ Z_{n^{[1]}}^{[1](1)} Z_{n^{[1]}}^{[1](2)} ... \ \ Z_{n^{[1]}}^{[1](m)} \end{bmatrix}_{(n^{[1]}\times m)} 

注:上式中 {\color{Red} b^{[1]}} 需要先广播(python中的一种运算机制)至 {\color{Red} (n^{[1]} \times m)} 再参与运算。

A^{[1]}=g^{[1]}(Z^{[1]}),此处激活函数 g^{[1]}(z) 选择 Relu 函数。

Z^{[2]} =W^{[2]T}A^{[1]} + b^{[2]}

A^{[2]}=g^{[2]}(Z^{[2]}),此处激活函数 g^{[2]}(z) 选择 sigmoid 函数。

### 关于深度学习中反向传播公式推导过程解释 #### 神经网络基本概念 神经网络由多个层次构成,每一层包含若干个神经元。这些层次通常分为输入层、隐藏层以及输出层。对于给定的一个三层神经网络结构而言,在输入层有\(i\)个节点接收数据;中间存在一层或多层作为隐藏层,每层含有\(j\)个处理单元;最终到达拥有\(k\)个节点的输出层用于给出预测结果[^2]。 #### 传播与损失计算 当一组特征值被送入到这样的模型当中时,会依次经过各层之间的权重矩阵相乘加上偏置项的操作完成一次馈运算得到估计的结果\[y\hat{}=f(Wx+b)\]。这里的\(W\)代表权重量子化的集合而\(b\)则是对应的偏差向量。\(\sigma(z)= \frac{1}{1+e^{-z}}\)可以作为一个激活函数的例子应用于上述表达式之中用来引入非线性因素使得整个体系具备更强的学习能力。随后依据实际标签\(t\)同所获得的预估值对比得出误差程度即所谓的损失函数\(E=\sum_{n}(t_n-\hat y_n)^2/2\)【均方差形式】[^4]。 #### 应用链式法则进行梯度求解 为了调整那些连接着不同结点间的参数从而减小整体失误率,则需依赖于BP算法实现自动微分机制。具体来说就是利用复合函数求导性质——链式法则去追踪每一个参与影响最终得分变化的因素并量化其贡献大小。以最末端也就是靠近输出端的部分开始回溯: - **输出层** 对于第\(k\)类别的输出单元,根据交叉熵损失函数定义可知:\[\delta_k^{(l)}=(a_k^{(l)}-y_k)*g'(z_k^{(l)})\],其中\(a_k^{(l)}\)表示该位置处的实际响应强度,\(y_k\)为目标真值指示器, \(g'\)为激活函数的一阶导数值。 - **隐藏层** 当涉及到内部更深层次的时候则要继续沿路径传递敏感度信息直至抵达起点为止:\[\delta_j^{(l-1)}=\left (\sum_{k}w_{kj}\delta_k^{(l)}\right )*g'(z_j^{(l-1)})\] 此处涉及到了当层向一层反馈调节信号的过程,通过累加来自后续所有关联节点的影响因子并与局部斜率相结合形成新的更新指令以便指导上游部分做出相应改变[^3]。 #### 参数修正策略 有了面几步准备好的各个位置上关于成本变动情况的具体描述之后就可以着手实施具体的改进措施了。一般情况下采用批量随机梯度下降法(SGD),按照如下方式刷新待估系数集: \[ w_{ij}=w_{ij}-\eta*\delta_i*a_j \] \[ b_i=b_i-\eta*\delta_i \] 这里\(\eta\)指的是步长或者说学习速率控制变量决定了每次迭代过程中进的步伐幅度多大合适。 ```python def backpropagation(X, Y, weights, biases, learning_rate): # Forward pass to compute activations and outputs... # Compute deltas starting from the output layer moving backward # Update parameters using computed gradients with respect to each parameter. ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值