深度学习(六)——反向传播计算w对应的梯度

在这里插入图片描述
在这里插入图片描述
如下图,从下往上是第一阶段,第二阶段是从上往下
在这里插入图片描述
上图总结如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中正向传播过程是绿色的数字,从左导右
上图中反向传播(红色数字,从右到左),算法:求偏导之后将x代入算出结果,比如第一个结点1/x,它的偏导公式在上图中有,把1.37代入得-0.53,注意这里不是把0.73也不是把1当x代入,而是把1.37代入,因为x本来就是1.37,1/1.37才等于0.73,所以x是1.37,依次类推…

  • 怎么调整w?当算出w2 的梯度为 0.2时,此时下一次的w应为 -3-(学习率*梯度0.2),这就是怎么调w的方法

上述过程就是反向传播的过程

而tensorflow不会这么一层一层求导函数,它会把整个 f 函数(比如sigmod函数//(1+e**-z))求偏导,然后代入x

### 深度学习反向传播算法的数学原理 #### 1. 神经网络中的前向传播 在一个多层感知机(MLP)模型中,输入数据 \( x \) 经过一系列线性和非线性变换最终得到输出预测值 \( y' \)[^1]。假设有一个简单的三层神经网络,包含一个输入层、一个隐藏层以及一个输出层。 对于第\( l \) 层到第 \( l+1 \) 层之间的传递函数可以表示为: \[ a^{l} = f(z^{l})=f(W^{l}a^{l-1} + b^{l}) \] 其中, - \( W^{l} \) 表示当前层相对于下一层的权重矩阵; - \( b^{l} \) 是偏置项; - \( z^{l}=W^{l}a^{l-1} + b^{l}\),称为加权输入或净激活; - \( a^{l} \) 则是经过激活函数后的实际输出;而 - 函数 \( f(\cdot)\) 即为所使用的激活函数,比如Sigmoid, ReLU等[^2]。 #### 2. 定义损失函数并计算梯度 为了评估模型性能好坏,定义了一个衡量真实标签 \(y\) 和预测结果之间差异程度的目标函数——损失函数 \( L(y', y) \) 。常见的有均方误差(MSE),交叉熵(Cross Entropy Loss)等形式[^3]。 当给定一组训练样本及其对应的真值之后,就可以利用链式法则来逐层回溯地求得各参数关于总损失的变化率: \[ \nabla_{W^{L}} J=\delta ^{L}(a^{L-1})^\top \\ \nabla_{b^{L}}J=\delta^{L} \] 这里的 \( \delta^{L} \) 称作局部敏感度(local sensitivity),它反映了最后一层输出单元对整体代价的影响大小。具体来说, 如果采用的是平方差形式,则可进一步写成: \[ \delta^{L}=(y'-y)f'(z^{L}) \] 而对于中间隐含层而言,由于它们既受到来自上游节点的压力也会影响到下游节点的表现,因此需要综合考虑这两方面因素来进行调整: \[ \delta^{l}=[(W^{l+1})^\top\delta^{l+1}]⊙f'(z^{l}) \] 此处运算符 "⊙" 表明这是两个同维度数组做Hadamard Product (element-wise product). #### 3. 参数更新规则 有了上述各个部分对其贡献的比例关系后,便可以根据随机梯度下降(SGD)的思想,在每次迭代过程中按照一定步长η沿负梯度方向移动相应量级从而实现自动微调的效果: \[ ΔW=-η∇_WJ\\ Δb=-η∇_bj \] 综上所述,这就是完整的BP算法流程图解说明[^4]。 ```python def update_parameters(parameters, grads, learning_rate): """ Update parameters using gradient descent Arguments: parameters -- python dictionary containing your parameters grads -- python dictionary containing your gradients Returns: parameters -- python dictionary containing updated parameters parameters["W" + str(l)] = ... parameters["b" + str(l)] = ... """ L = len(parameters) // 2 # number of layers in the neural network # Update rule for each parameter. for l in range(L): parameters["W" + str(l+1)] -= learning_rate * grads['dW' + str(l+1)] parameters["b" + str(l+1)] -= learning_rate * grads['db' + str(l+1)] return parameters ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值