如何使用 DANN 改进神经网络

news2024/11/18 1:22:36

文章目录

  • 一、说明
  • 二、语言模型真的理解语言吗?
  • 三、了解分配转变
    • 3.1 样本选择偏差
    • 3.2 非静止环境
    • 3.3 领域适配挑战
    • 3.4 概念漂移
  • 四、对领域对抗训练的介绍

一、说明

   由于其多功能性,神经网络是大多数现代机器学习管道的主要内容。他们处理非结构化数据的能力是一种祝福,因为它让我们能够部分地——部分地——在这里发挥重要作用——用计算规模(更便宜、更容易获得)取代领域洞察力(昂贵且难以获得)。

   然而,事实证明,盲目地堆叠层层并在问题上投入资金并不像某些人希望你相信的那样有效。训练过程中有几个潜在的问题,规模无法解决,其中最主要的是分布转移和泛化。当我们以意想不到的方式/格式向它们提供输入时,神经网络就会中断。例如,尽管 LLM 能力取得了令人瞩目的进步,但这一直是他们最难解决的部分之一——
(本文为国外同行所写)

二、语言模型真的理解语言吗?

   有几种方法可以改进泛化,例如实现稀疏性和/或正则化以减少过度拟合,并应用数据增强来使模型千峰化并阻止它们成为如此精致的公主。

   在本文中,我们将研究超级有趣的“领域对抗神经网络”(简介)和“神经网络的领域对抗训练”(更多细节),以研究领域对抗神经网络 (DANN) 的技术以及它如何提高泛化。为了充分理解其影响,我们将首先介绍重要的背景信息——

   什么是分配转移: 分布偏移,也称为数据集偏移或协变量偏移,是机器学习中的一种现象,其中输入数据(特征或协变量)的统计分布在训练和部署环境之间发生变化。当模型遇到来自不同分布的数据时,这可能会导致在特定数据分布上训练的模型的性能显著下降。
在这里插入图片描述

   你们中的一些人可能已经足够大了,还记得世界从黑白到有色的时候。那是什么感觉?很想听听你们老人的意见。图片来源
分销转移的可能来源: 分布偏移可能来自各种来源,包括样本选择偏差,其中训练数据不能反映真实世界的分布;非静止环境,数据随时间变化;领域适应挑战,在一个领域训练的模型在另一个领域中挣扎;数据收集和标签问题;对抗性攻击;和概念漂移,改变特征和目标变量之间的关系(这是我在尝试构建向人们出售贷款的 AI 时处理的问题)博士。
   缓解分销转移:良好的数据 + 对抗性增强 + 持续监控可以创造奇迹。有些人试图使用复杂的增强方案,但这毫无意义。保持简单 - 并加入一些随机噪音。效果非常好。还有助于避免解决方案中不必要的复杂性。
   有了这些,我们将讨论 DANN 以及为什么我如此喜欢它们——

  •    什么是DANN- DANN 基于一个简单的观察——我们知道,如果神经网络(或任何 AI 模型)在未经训练的相关数据集上表现良好,那么它就具有很好的泛化能力。因此,在亚马逊上的评论(源数据集)上训练一个模型,看看它在 Reddit(目标数据集)上的评论上表现如何。我们想要像皇马瓦德里德的裘德那样表现的AI模型,而不是像曼联的桑乔那样。
  •    DANN 如何实现峰值泛化 - DANN 理论上通过学习域不变特征来实现域不变性 - 这些特征对主要任务有用,同时在源域和目标域之间不加区分。这是通过遵循领域对抗训练来完成的。
  •    领域对抗训练: 领域对抗训练 (DAT) 涉及训练具有两个相互竞争目标的神经网络:准确执行主要任务(例如,分类)和混淆试图区分源域和目标域数据的领域分类器。这种对抗性过程鼓励网络学习对任务有用但独立于域的特征,从而提高目标域的性能,即使标记数据有限。实现这一点的关键组件是梯度反转层,它在正向传递期间充当身份函数,但在反向传播期间反转梯度,从而在特征提取器和域分类器之间创建最小最大值博弈。
    在这里插入图片描述
    图 1:所提出的架构包括一个深度特征提取器(绿色)和一个深度标签预测器(蓝色),它们共同构成了一个标准的前馈架构。U监督域适应是通过添加一个域分类器(红色)来实现的,该分类器通过梯度反转层连接到特征提取器,该梯度反转层在基于反向传播的训练期间将梯度乘以某个负常数。否则,训练将按标准进行,并将标签预测损失(对于源示例)和域分类损失(对于所有样本)降至最低。梯度反转可确保两个域上的特征分布相似(域分类器尽可能无法区分),从而产生域不变特征
    我真的很喜欢 DANN 背后的想法,因为它很直观,可以作为量化其他复杂测量的良好代理,并且可以塑造成各种领域/模型。让我们在本文的其余部分更详细地探讨这些想法。这些论文本身已经很老了,但我认为这个想法与构建现代系统非常相关。

   我们在情感分析分类基准上的实验表明,我们的用于域自适应算法的神经网络比标准神经网络或 SVM 具有更好的性能,即使使用最先进的边缘化堆叠去噪自动编码器提取的输入特征进行训练

   我提供各种咨询和顾问服务。如果您想探索我们如何合作,请通过我的任何社交网站与我联系 这里 或回复这封电子邮件。

在这里插入图片描述

   适应对提取特征分布的影响(最好以彩色查看)。该图显示了t-SNE (van der Maaten, 2013) CNN 激活的可视化 (a) 在没有进行适应的情况下,以及 (b) 当我们的适应程序被纳入训练时。蓝点对应于源域示例,而红色点对应于目标域。在所有情况下,我们方法中的适应使特征的两个分布更加接近。
   加入 150K+ 技术领导者的行列,通过我的免费时事通讯 AI Made Simple 直接在您的收件箱中深入了解 AI 中最重要的想法

三、了解分配转变

   我将跳过重新解释什么是分配转移,因为我们已经在亮点中做到了,我相信你的智慧。如果你需要额外的帮助,可以看一个更传统的例子,说明人工智能中的分配转变是什么样子的——
在这里插入图片描述

来源。在特征 1 上训练的模型显然需要考虑这些变化。
   人们往往会低估转变发生的频率和方式。在介绍如何修复它之前,让我们先了解一些示例。其中一些会相互重叠,但我将它们分开,以展示人们在应对这些挑战时可以采取的不同观点。

3.1 样本选择偏差

   当训练数据不能准确表示真实世界的数据分布时,就会发生样本选择偏差。这种不匹配可能导致模型在训练数据上表现良好,但对真实场景的泛化效果不佳。

   示例 1:面部识别系统和人口统计偏差:
不久前,有一个关于 SOTA Vision 模型的故事,该模型旨在在比赛中跟踪足球。然而,它最终追踪了裁判的光头。我猜数据集没有任何秃头人的俯角图片,导致它被平滑度弄糊涂了。
在这里插入图片描述

图片来源。我敢肯定,X-Risk的工作人员会加班加点地说服你,这实际上是人工智能已经决定将秃头人从基因库中删除,并要求我们用他们的头作为球的证据。
   示例 2:医学诊断和医院特定偏差:
根据特定医院的数据训练的疾病预测模型可能无法很好地推广到来自不同医院或人口统计学的患者。这是因为医疗实践、患者人口统计甚至疾病患病率在不同的医疗环境中可能会有很大差异。

3.2 非静止环境

   在许多实际应用中,数据不是静态的。随着世界的变化,随着时间的流逝和数据分布的发展,基于历史数据训练的模型可能会变得不那么准确。

   示例 1:金融市场和不断变化的趋势:
由于不断变化的市场动态、新法规或不可预见的全球事件等因素,根据历史股价训练的股票预测模型可能会随着时间的推移而变得不那么准确。
   示例 2:语言模型和语言转换:
在社交媒体数据上训练的语言模型需要适应不断变化的语言使用、俚语(我最近了解了 brainrot 这个词)和新兴话题。不同的世代甚至可能完全改变词语(“可怕”这个词已经与原来的含义有很大的偏差)或使用不同类型的交流方式(一代人可能会受到《是的部长》和《硅谷》等节目的启发,使其更具讽刺意味)。更不用说文化总是在与群体互动的 b/c 中转移,这可能会导致新的语言模式/改变修辞手法。

3.3 领域适配挑战

   域适应解决了将在一个域(源域)上训练的模型应用于另一个不同但相关的域(目标域)的挑战。即使任务保持不变,数据特征的差异也会显著影响性能。

   示例 1:医学图像分割 — 不同模式:
在脑部 MRI 扫描中训练用于分割肿瘤的模型在应用于脑部 CT 扫描时可能表现不佳。尽管这两种模式都提供了大脑的图像,但成像技术和图像特征的差异需要域适应。
   示例 2:自然语言处理 — 评论与推文:
在产品评论上训练的情绪分析模型可能会难以处理推文等社交媒体帖子。较短的长度、非正式的语言和在推文中使用俚语与产品评论的更有条理的语言相比,创造了一个不同的领域。
对抗性攻击:故意愚弄模型
对抗性攻击涉及故意制作恶意输入数据以利用机器学习模型中的漏洞。这些攻击旨在导致模型做出错误的预测,从而可能导致严重后果。

   示例 1:图像识别 — 对抗性噪声:
在图像中添加微妙的、精心制作的噪声对人类来说可能是察觉不到的,但会导致图像识别系统对其进行错误分类。例如,攻击者可能会对停车标志图像进行微小的修改,从而导致自动驾驶汽车的视觉系统误解它。
结果表明,Kaggle CIFAR-10测试数据集中67.97%的自然图像和16.04%的ImageNet(ILSVRC 2012)测试图像仅修改一个像素即可被扰动到至少一个目标类别,平均置信度分别为74.03%和22.91%。我们还在原始 CIFAR-10 数据集上显示了相同的漏洞。因此,拟议的攻击在极端有限的情况下探索了对抗性机器学习的不同方式,表明当前的 DNN 也容易受到这种低维攻击。

-一个像素攻击

   示例 2:垃圾邮件检测 — 不断发展的垃圾邮件技术:
垃圾邮件发送者不断改进其技术以绕过垃圾邮件过滤器。垃圾邮件检测模型需要适应这些不断发展的策略,例如使用细微的拼写错误或插入隐藏的文本,以保持有效。我们正在研究类似的东西,以探索多模态人工智能的安全性,以及对抗性黑客如何能够绕过那里的任何安全检查。
   示例 3:语言模型攻击:
   与视觉模型类似,我们可以攻击语言模型以越狱它们——撤消通过对齐或护栏实现的保护——或者让它们吐出训练数据。这通常涉及使用提示注入的类型,其中最著名的是 Deepmind 的 Poem Attack。
在这里插入图片描述

从 ChatGPT 中提取数据

3.4 概念漂移

   当输入要素与目标变量之间的基础关系随时间变化时,就会发生概念漂移。如果我们不小心,这会导致完全摧毁旧模型。

   示例 1:信用评分 — 不断变化的经济因素:
由于经济状况或消费者行为的变化,几年前预测高信用度的因素在今天可能不成立。信用评分模型需要适应这些不断变化的关系,以确保公平和准确的评估。
   示例 2:推荐系统 — 改变用户偏好:
推荐系统依赖于对用户偏好的理解,这些偏好会随着时间的推移而变化。根据过去的购买历史推荐产品的模型需要适应不断变化的口味和偏好,以保持相关性。
修复分配转移围绕着通常的嫌疑人——

   数据质量和数量:确保训练数据包含实际部署中预期的多样性。最重要的是,通过对现有数据应用变换(例如,轮作、裁剪、颜色变化)来扩展训练数据集,从而提高对变化的鲁棒性。一些团队试图在数据增强方面变得过于聪明,实施复杂的方案来解决数据集的局限性。你可能不需要那个。在你决定变得太聪明之前,请考虑以下来自 TrivialAugment 的陈述-

   其次,TA教导我们永远不要忽视最简单的解决方案。有很多复杂的方法可以自动查找增强策略,但迄今为止,最简单的方法被忽略了,即使它的性能相当或更好

   最后,您应该记住,探索不同的特征提取以构建更丰富的数据表示有很多好处。这是提高模型性能的最佳方法之一。

   集成方法: 结合来自不同数据子集或不同架构训练的多个模型的预测,以提高对单个模型偏差的弹性。

   持续学习和模型更新: 实施持续学习和适应新数据的系统,确保模型在数据分布的发展中保持相关性。重新训练变得昂贵,这也是简单模型为王的另一个原因。

   稳健的评估和监控: 评估不同数据集上的模型并监控一段时间内的性能,以检测和解决潜在的分布变化。

   随着对分布转移的探索,让我们来看看 DANN 以及它如何帮助我们更好地处理域转移。

   我们展示了我们的方法在两个不同的分类问题(文档情感分析和图像分类)上的成功,其中在标准基准上实现了最先进的领域适应性能。我们还验证了在人员重新识别应用背景下描述符学习任务的方法。

四、对领域对抗训练的介绍

   本次培训中领域适应的关键是培训过程。DANN 惊人性能的秘诀在于他们的架构。

   我们表明,这种适应行为几乎可以在任何前馈模型中实现,方法是用几个标准层和一个新的梯度反转层来增强它。由此产生的增强架构可以使用标准反向传播和随机梯度下降进行训练,因此可以使用任何深度学习包轻松实现。

   让我们更深入地分析一下。为此,我们将再次拉出架构图。
在这里插入图片描述

   更多的人工智能研究人员应该在他们的图表中使用漂亮的颜色
   其核心思想是训练模型在特定任务上表现良好,同时难以区分源域和目标域。

   以下是主要组件-

   特征提取器:模型的第一部分学习从输入数据中提取特征。这些特征应该与主要任务(例如,分类)相关,同时在两个领域中尽可能相似。

   标签预测因子:该组件侧重于主要任务,利用提取的特征进行预测(例如,对图像进行分类)。它通常仅根据源域中的标记数据进行训练。

   域分类器:此部件充当特征提取器的对手。其目标是确定给定的特征表示是源域还是目标域。

   对抗训练:训练过程涉及特征提取器和域分类器之间的连续来回切换:

   特征提取器试图学习欺骗域分类器的表示,从而难以区分域。
   反过来,域分类器会尝试提高其根据提供的特征区分域的能力。从数学上讲,这些方程决定了训练——
在这里插入图片描述

   这与标准深度学习基本相似。这里的θ代表参数,μ是学习率。需要注意的重要一点在等式 13 中。首先,我们得到了 λ,它权衡了我们的域损失。其余的一切照常进行,“唯一的区别是,在(13)中,类和域预测变量的梯度被减去,而不是相加(差异很重要,否则SGD会尝试使不同域的特征不同,以尽量减少域分类损失)。

   很整洁,对吧?现在让我们介绍最后一位重要球员。

   梯度反转层 (GRL):这个特殊层是 DAT 中的关键元素。它位于特征提取器和域分类器之间。在前向传递(预测)期间,它只是通过梯度。但是,在向后传递(学习)期间,它会反转梯度的方向。

   这是有效的,因为它利用了域分类器、主任务和特征提取器之间的动态。特征提取器在反向传播期间接收到两个冲突信号:

   从标签预测器:更新参数以提高任务性能(例如,分类准确性)。
   从域分类器(通过 GRL):以相反的方向更新参数,使域分类器更难区分域。
   最终结果是提取出对主要任务仍然有用的特征,但关于域来源的信息越来越少。换句话说,它学习域不变特征。

在这里插入图片描述

   在某种程度上,这让我想起了麻省理工学院的优秀论文,“对抗性示例不是错误,它们是功能”。 作者向我们提出了一个简单的理论——图像分类器中有两种类型的信息特征——脆弱特征和鲁棒特征。这两个特征都可用于对高精度图像进行分类,但脆弱的特征会在扰动时断裂,而鲁棒特征则不会。
在这里插入图片描述

   对抗性攻击攻击脆弱的特征。
GRL的集成似乎起到了与鲁棒特征提取类似的作用——它使我们能够提取最鲁棒的特征。

   把所有这些放在一起,就得到了DANN。它优雅、直观且性能卓越。每天都有很多新的人工智能论文发表,但我认为浏览旧的出版物,从第一性原理重新发展想法会很有帮助。希望这篇文章能让你更多地探索研究的这一方面。您认为哪些人工智能领域没有得到足够的尊重?很想知道。
在这里插入图片描述

   在标准办公室(Saenko et al., 2010)数据集上对不同发展议程方法的准确性评估。所有方法(SA除外)均在“完全
转导”方案中进行评估(一些结果转载自Long和Wang,2015)。
我们的方法(最后一行)优于竞争对手,设置了新的最先进的技术。
   如果您喜欢这篇文章并希望分享它,请参阅以下指南。

   这件作品就是这样。感谢您抽出宝贵时间。与往常一样,如果您有兴趣与我合作或查看我的其他作品,我的链接将位于此电子邮件/帖子的末尾。如果你在这篇文章中发现了价值,我将不胜感激你与更多的人分享。正是像您这样的口碑推荐帮助我成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Web学习笔记12——JavaScript字符串

String&#xff1a; String字符串对象创建方法有两种&#xff1a; 方式一&#xff1a; var str new String("Hello String"); 方式二&#xff1a; var str "Hello String"; 常见的属性和方法&#xff1a; <!DOCTYPE html> <html lang"…

根据租户id切换数据源

花了半天时间&#xff0c;使用spring-boot实现动态数据源&#xff0c;切换自如 在一个项目中使用多个数据源的情况很多&#xff0c;所以动态切换数据源是项目中标配的功能&#xff0c;当然网上有相关的依赖可以使用&#xff0c;比如动态数据源&#xff0c;其依赖为&#xff0c;…

JS-10-es6常用知识-对象扩展

目录 1 Object.assign&#xff1a;实现拷贝继承 2 扩展运算符(...) 1&#xff09;介绍 2&#xff09;数组中的扩展运算符 3&#xff09;对象中的扩展运算符 1 Object.assign&#xff1a;实现拷贝继承 1&#xff09;目的&#xff1a;Object.assign()方法在 JavaScript 中被…

vscode 搜索框乱码

vscode 搜索文件夹 搜索txt文件 ignore取消 搜索中文乱码 https://zhuanlan.zhihu.com/p/661347670 文件 -》首选项-》设置 搜索encoding -》设置 simpified chinese 中文插件

LabVIEW开发EOL功能测试系统

LabVIEW开发EOL功能测试系统 介绍了一种基于LabVIEW开发的EOL功能测试系统方案&#xff0c;涵盖软件架构、工作流程、模块化设计、低耦合性、易于修改与维护、稳定性及硬件选型。系统通过高效的CAN通信实现对电机控制器的全面测试&#xff0c;确保运行可靠并支持未来的升级需求…

VM-Import 导入 Debian 12 系统

介绍 之前介绍过使用 VM-Import 导入 Windows 系统到 AWS 环境启动 EC2 实例, 本文将介绍如何导入 Debian 12 系统. 本地虚拟化使用 VMWare Workstation 创建虚拟机安装和准备 Debian 12 系统, 导出 OVA 文件后上传到 S3 存储桶中再使用 AWSCLI 执行 VM-Import 命令实现导入过…

线性代数|机器学习-P7SVD奇异值分解

文章目录 1. 奇异值分解1.1 SVD求解1.2 行基和列基转换 2. Ax图像表示3. 极坐标表示4. 小结 1. 奇异值分解 现在我们用的是一个m行n列的矩阵A&#xff0c;那么我们计算下特征值方程&#xff1a; A m n x n 1 λ x n 1 ; b m 1 A m n x n 1 \begin{equation} A_{m\tim…

攻防世界---misc---misc_pic_again

1、题目描述&#xff0c;flag为hctf{}格式&#xff0c;下载附件是一张图片 2、将图片放在winhex中分析&#xff0c;没有发现奇怪的信息&#xff0c;接着将图片用Stegsolve分析&#xff0c;查看通道没有发现奇怪的图片&#xff0c;接着分析&#xff0c;对数据进行提取 3、将三个…

性能工具之 JMeter 常用组件介绍(三)

文章目录 一、常用组件介绍二、Sampler&#xff1a;取样器三、Controller:控制器&#xff08;逻辑控制器&#xff09;四、Pre Processor:预处理五、Post Processor:请求之后的处理六、Assertions:断言七、Timer:定时器八、Test Fragment&#xff1a;片段九、Config Element:配置…

【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)

便捷、高效的在线调研与考试新选择​ 云调查考试问卷是一款基于FastAdminThinkPHPUniapp开发的问卷调查考试软件&#xff0c;可以自由让每一个用户自由发起调查问卷、考试问卷。发布的问卷允许控制问卷的搜集、回答等各个环节的设置&#xff0c;同时支持系统模板问卷&#xff…

【CMake】CMake从入门到实战系列(十五)—— CMake中添加编译选项的几种方法

文章目录 一、前言二、add_compile_options【1】基本语法【2】参数含义【3】示例【4】备注 三、target_compile_options【1】基本语法【2】参数含义【3】示例【4】备注 四、CMAKE_C_FLAGS 或 CMAKE_CXX_FLAGS 一、前言 在嵌入式工作开发调试过程中&#xff0c;我们常会遇到需要…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

【C语言之排序】-------六大排序

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月18日 前言&#xff1a; 今天我们就给大家带来几种排序的讲解&#xff0c;包括冒泡排序&#xff0c;插入排序&#xff0c;希尔排序&#xff0c;选择排序&#xff0c;堆排序&…

jmeter的infludb+grafana实时监控平台

目的&#xff1a;可以实时查看到jmeter拷机信息 框架&#xff1a;将 Jmeter 的数据导入 InfluxDB &#xff0c;再用 Grafana 从 InfluxDB 中获取数据并以特定的模板进行展示 性能监控平台部署实践 一、influxDB 官网&#xff1a;https://www.influxdata.com/downloads/ wget h…

Unity 自定义房间布局系统 设计与实现一个灵活的房间放置系统 ——物体占用的区域及放置点自动化

放置物体功能 效果&#xff1a; 功能&#xff1a; 自定义物体占用区域的大小一键调整占用区域调整旋转度数&#xff0c;分四个挡位&#xff1a; NoRotation&#xff1a;该物体不能调整旋转。MaximumAngle&#xff1a;每次转动90。NormalAngle&#xff1a;每次转动45&#xff…

Vue03-HelloWord

一、Hello World 1-1、示例1 1、现有html容器&#xff1b; 2、再有vue实例。 new Vue({});中的{}是配置对象。配置对象是&#xff1a;key&#xff1a;value的格式。 el&#xff1a;element元素。id对应#&#xff0c;class对应. 把容器中变化的数据&#xff0c;交给Vue实例去保…

嵌入式软件跳槽求指导?

嵌入式软件行业的跳槽确实需要一些特定的策略和技巧。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 因为这个…

[Algorithm][动态规划][两个数组的DP][最长公共子序列][不相交的线][不同的子序列][通配符匹配]详细讲解

目录 1.最长公共子序列1.题目链接2.算法原理详解3.代码实现 2.不相交的线1.题目链接2.算法原理详解3.代码实现 3.不同的子序列1.题目链接2.算法原理详解3.代码实现 4.通配符匹配1.题目链接2.算法原理详解3.代码实现 1.最长公共子序列 1.题目链接 最长公共子序列 2.算法原理详…

Linux网络编程:数据链路层协议

目录 前言&#xff1a; 1.以太网 1.1.以太网帧格式 1.2.MTU&#xff08;最大传输单元&#xff09; 1.2.1.IP协议和MTU 1.2.2.UDP协议和MTU 1.2.3.TCP协议和MTU 2.ARP协议&#xff08;地址解析协议&#xff09; 2.1.ARP在局域网通信的角色 2.2.ARP报文格式 2.3.ARP报文…

SpringBoot高手之路02-全局异常处理器

RestControllerAdvice 可以将响应数据返回json格式然后响应 那么开始做全局异常处理器 首先先定义一个类 package com.healer.exception;import com.healer.common.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.we…