当前位置: 首页 > news >正文

FDD损失函数 损失函数和梯度的关系

来自读的一篇论文:
Hybrid robust convolutional autoencoder for unsupervised anomaly detection of machine tools under noises
Shen Yan a , Haidong Shao a , b , * , Yiming Xiao a , Bin Liu c , Jiafu Wan
Robotics and Computer–Integrated Manufacturing 79 (2023) 102441
其中对于损失函数的优化值得学习。
目前的损失函数构建使用的是:
MSE= \frac{1}{n}\sum_{i=1}^{n}\left ( \hat{X_{i}} -X_{i}\right )^{2}
其中:
\hat{X}_{i}是重建数据,即输出数据。 X_{i}是输入数据。
使用输出数据减去输入数据的均方来代标重建的误差。
通过阅读这篇文章指出,欧氏距离很难忠实的表示复杂特征空间的相似性。
所以设计了一种基于距离和角度两个方向来衡量的损失函数,可以有效地抑制噪声影响,提高机床的鲁棒性。
并通过多项研究表明,欧氏距离和余弦相似性可以在图像识别、语言转换、音乐分类等领域取得良好效果。
度量公式关注点
余弦相似度$\frac{A·B}{\|A\|\|B\|}$方向差异
欧式距离$\sqrt{\sum(A_i-B_i)²}$绝对距离
因为余弦相似度测量的是数据之间的几何角度,对每个维度的数值差异不敏感,因此能更好地捕捉特征在方向上的差异。

角度的余弦=向量点积/向量模长乘积

论文中的公式如上图所示,其中:

分子部分:计算两个向量的点积,表示两个向量在相同方向上的投影乘积和

分母部分::第一个向量的欧几里得范数 (模长)和第二个向量的欧几里得范数,相当于向量长度的乘积

因此,CS属于 [- 1, 1] ,值越小表示方向差异越大,CS 可以很好地考虑了数据间的距离和角度差异。

创新后的损失函数公式为:

λ 是一个可调整的超参数,用于平衡数据间的距离和角度差的权重。

然后损失值被输入Adam优化器来自动优化网络的学习参数。

拓展学习:

损失值(Loss Value) = 最终目的地的“不满意程度”

梯度(Gradient) = 指路牌告诉你“往哪个方向、走多快”能降低不满意程度

梯度是什么?

定义

梯度是一个向量(一个有序的数字集合)。简单来说(在机器学习/深度学习语境下),它是损失函数 L 相对于模型每一个可学习参数(如权重 w、偏置 b)的偏导数组成的向量 (∂L/∂wᵢ∂L/∂bᵢ)

计算来源

前提: 必须在计算出一个损失值 (loss_value) 之后才能计算梯度。

过程: 在损失值计算的基础上进行反向传播算法。这个算法从输出(损失值)反向应用链式法则,高效地计算出损失相对于所有模型参数的偏导数。

输出: gradients (一个向量或张量集合,与模型参数的形状一一对应)。

# 伪代码示例 (续上)
loss_value.backward() # 关键! 执行反向传播计算梯度
# 假设 w 是一个参数张量
w_gradient = w.grad # 获取损失L对w的梯度 (gradients of L w.r.t w)

所以损失函数与梯度的关系:

损失值是评估标准: 你需要知道当前表现有多差(损失值),才知道是否需要改进(更新参数)。

梯度的计算依赖于损失值: 必须首先执行前向传播计算出一个损失值 (loss_value),才能执行反向传播 (backward()) 来计算梯度 (gradients) 的。 没有损失值,就没有计算的起点。

梯度是更新指南: 光知道损失值还不够,梯度告诉你怎么有效地修改模型参数 (wb) 来降低这个损失值。优化器(如亚当Adam)使用梯度 (gradients) 来决定具体的参数更新公式和步长(学习率),最终目标是减少下一个时刻的损失值 (loss_value)

损失值 (loss_value) --> 反向传播 --> 梯度 (gradients) --> 优化器 (如 Adam) --> 更新参数 --> 期望在新的损失值 (loss_value) 

# 标准训练循环核心步骤:
optimizer.zero_grad() # 清除旧梯度
y_pred = model(X)     # 1. 前向传播 -> 得到预测值
loss = criterion(y_pred, y) # 2. 计算损失值 (Loss Value 产生!)
loss.backward()       # 3. 反向传播 -> 计算梯度 (利用loss_value生成gradients)
optimizer.step()      # 4. 优化器用梯度更新参数 (Adam等在这里工作)
      [输入数据 + 模型参数]⬇[模型前向传播 (Forward Pass)]⬇[预测值 (y_pred)]+真实标签 (y_true)⬇[损失函数 (Loss Function)]⬇**损失值 (Loss Value) (标量)** ⬅ 这是最终评价结果⬇(从这个值开始反向回溯)[反向传播 (Backward Pass) / 链式法则]⬇**梯度 (Gradients) (向量/张量)** ⬅ 这是更新参数的依据 (形状同参数)⬇[优化器 (如Adam)] ⬅ 使用梯度计算参数更新量⬇[更新模型参数 (w, b)]

http://www.xdnf.cn/news/959095.html

相关文章:

  • Day49 Python打卡训练营
  • 【前端】js Map集合的使用方法
  • C++11委托构造函数和继承构造函数:从入门到精通
  • 查询宝塔的数据库信息
  • 共享存储系统
  • 动画直播如何颠覆传统?解析足球篮球赛事的数据可视化革命
  • ONNX详解:跨平台模型部署解决方案
  • 【Java】谈谈HashMap
  • 2025.06.09【RNA-seq】|逆转录元件(retrotransposon)表达分析全流程详解
  • 运动控制--小车的启动和停止算法
  • 数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
  • 数据集转换xml2txt 、xml2json、json2coco
  • 重排和重绘是什么,怎么解决?
  • GruntJS-前端自动化任务运行器从入门到实战
  • CAR:推理长度自适应新框架,提升精度同时还降低推理token数!!
  • python爬虫之数据存储
  • LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《一》
  • 视频监控厂商“以图搜图”能力比对(大华/海康)
  • Java数值运算常见陷阱与规避方法
  • 华为WLAN概述知识点及案例试题
  • day26/60
  • java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
  • 项目课题——基于LoRa的农业环境监测节点
  • GC-QA-RAG 智能问答系统的问答生成
  • Spring Bean的初始化过程是怎么样的?​​
  • ROS mapserver制作静态地图
  • FreeRTOS学习01_移植FreeRTOS到STM32(图文详解)
  • 前缀和+哈希:和为K的子数组
  • 免费好用的专业提词器有哪些~~~
  • 复盘与导出工具最新版V24.5版本更新--精选新增盘中板块涨停数量