均方差损失函数MSELoss详解及反向传播中的梯度求导

本文深入探讨了均方差损失函数MSELoss,包括其定义和在反向传播中的梯度计算。通过实例解析,展示了MSELoss如何应用于预测值与实际值的误差计算,并提供了相关代码实现。

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

摘要

本文给出均方差损失函数 MSELoss 的定义并求解其在反向传播中的梯度.

相关

系列文章索引 :
https://blog.youkuaiyun.com/oBrightLamp/article/details/85067981

正文

均方差损失函数 MSELoss 定义简洁, 梯度求导简单, 应用广泛.

1. 梯度

设向量 s 作为预测值, 向量 y 为实际值, 由 MSELoss 函数计算得出误差值 error (标量 e ), 求 e 关于 s 的梯度.
e = M S E L o s s ( s , y ) = 1 n ∑ t = 1 n ( s t − y t ) 2 e = MSELoss(s, y) =\frac{1}{n}\sum^{n}_{t=1} (s_t-y_t)^2 e=MSELoss(s,y)=n1t=1n(styt

### RNN 反向传播求导的计算方法与原理 #### 背景介绍 循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的强大工具。其核心特点是通过隐藏状态 \( h_t \) 将当前时刻的信息传递到下一时刻,从而捕捉时间上的依赖关系。然而,在训练过程中,为了优化模型参数,需要利用反向传播算法来更新权重矩阵。 RNN 的反向传播不同于传统前馈神经网络中的 BP 算法,它被称为 **Backpropagation Through Time (BPTT)**。这是因为 RNN 中的时间步共享相同的权重矩阵,因此在展开时间轴后,误差会沿着时间维度向前传播并累积[^1]。 --- #### BPTT 过程详解 ##### 1. 定义目标函数 假设损失函数为 \( L \),它是所有时间步上预测值 \( y^{<t>} \) 和真实标签 \( \hat{y}^{<t>} \) 差距的总和: \[ L = \sum_{t=1}^T L^{<t>}, \quad L^{<t>} = f(y^{<t>}, \hat{y}^{<t>}) \] 其中 \( T \) 表示整个序列长度,\( f(\cdot,\cdot) \) 是具体的损失形式(如交叉熵或均方差)。最终的目标是最小化整体损失 \( L \)[^2]。 ##### 2. 参数定义及其作用范围 对于标准 RNN 结构而言,主要涉及三类权重矩阵: - 输入到隐藏层之间的权值矩阵 \( W_{ax} \) - 隐藏层内部转移的权值矩阵 \( W_{aa} \) - 隐藏层到输出层映射的权值矩阵 \( W_{ya} \) 这些矩阵在整个序列中被重复使用,即它们不随具体某个时间点而改变。 ##### 3. 导数链式法则应用 根据微积分基本理论——复合函数求导时采用链条规则,则可以写出任意单个参数相对于总体成本变化率表达式: 以 \( W_{ax} \) 为例, \[ \frac{\partial L}{\partial W_{ax}} = \sum_{t=1}^T \left( \frac{\partial L^{<t>}}{\partial z_a^{<t>}} \cdot \frac{\partial z_a^{<t>}}{\partial W_{ax}} \right), \] 这里引入中间变量 \( z_a^{<t>} = W_{ax}x^{<t>} + W_{aa}h^{<t-1>} + b_a \),代表第 t 步激活输入线性组合部分;进一步分解得到每项贡献累加而成的结果。 同样道理适用于其余两类权重以及偏置项等其它待估参量之上。 ##### 4. 时间方向梯度积累机制 值得注意的是,因为不同时间节点间存在相互影响联系,所以当回溯至更早阶段时候,相应位置处产生的局部敏感程度也会受到后来发展态势所调节修正。比如考虑某固定 k 层次下的情况, \[ \delta_h^{<k>}=\nabla _{{h}^{<{k}>}}J+\Theta ^{T}\delta _{h}^{<{k+1}>}. \] 这表明当前单元格内的调整幅度不仅取决于自身直接造成的后果大小,还包含了来自未来若干轮迭代反馈过来的影响成分综合考量效果[^3]。 --- ### 总结说明 综上所述,通过对各组成部分细致剖析可知,尽管表面上看去似乎只是简单扩展版常规BP流程而已,但由于加入了动态特性因素考量进去以后,实际操作起来还是存在一定技术难度挑战之处需克服解决才行。 ```python import numpy as np def rnn_backward(da_next, cache): """ 实现单一时间步的RNN反向传播 参数: da_next -- 来自下一个时间步的隐藏层梯度 cache -- 缓存信息 返回: gradients -- 字典类型的数据结构,包含以下键值对: dx -- 对应于输入X的梯度 dWax -- 对应于Wax的梯度 dWaa -- 对应于Waa的梯度 dba -- 对应于ba的梯度 """ # 提取缓存中的必要组件... pass # TODO: Complete the implementation based on theoretical analysis above. ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值