RLHF 技术:如何能更有效?又有何局限性?

news2024/11/17 7:45:22

编者按:自ChatGPT推出后,基于人类反馈的强化学习(RLHF)技术便成为大模型构建和应用人员关注的热点。但该方法一些情况下效果却差强人意,有些基础模型经RLHF调优后反而表现更差。RLHF技术的适用性和具体操作细节似乎成谜。

这篇文章探讨了基于人类反馈的强化学习(RLHF)的工作机制,分析了RLHF的三个关键组成部分:基础模型、偏好模型和强化学习。并总结了RLHF的局限性:无法纠正事实错误或添加新能力。但它仍然是一个强大的工具,未来RLHF可能会整合更多的反馈方式,并持续优化其技术栈。让我们拭目以待!

以下是译文,Enjoy!

作者 | NATHAN LAMBERT

编译 | 岳扬

有一段时间,我最常被问到的问题是:“为什么基于人类反馈的强化学习(RLHF)能起作用,并且还能这么有效?”直到上周 (译者注:原文发表于2023年6月21日) ,我的回答一直都是:“没有人知道。”然而,现在这个问题的答案已经开始有了一些眉目。

只有在满足以下两个条件的情况下,RLHF才能在语言模型和其他领域中取得长期的成功。

首先,需要有一些实践或实验表明仅应用传统的监督学习(supervised learning)是不够的,pairwise preference data就是其中一个例子。 (译者注:此处pairwise preference data是指通过比较两个或多个选项,获取的用户喜好数据。在收集这种数据时,被调查者需要逐对比较选项,然后选择其喜好的选项。通过这种方式,可以确定不同选项之间的相对用户喜好关系。例如,假设我们要评估三种不同的手机品牌(A、B和C)的受欢迎程度。我们可以通过向被调查者提供一系列两两比较的选择来收集pairwise preference data。被调查者将被要求比较A与B、A与C以及B与C,然后选择他们更喜欢的选项。收集足够的pairwise preference data后,可以统计每个选项的用户喜好次数,从而确定它们在受访者中的相对受欢迎程度。)。

其次,这一点虽然不那么重要,但我怀疑RLHF在下面这种情况下也能表现得相当出色,即为了取得成功,需要在复杂的优化空间(complex optimization landscape)中进行渐进性的调整和优化。(讨论path dependency时,最好用constitutional AI 这篇论文中描述的内容来具体说明)

在这篇文章中,我将分享我们在数据和优化方面的一些发现,这些发现真正说明了为什么RLHF可以产生如此惊人的效果,同时也揭示了使用RLHF的困难之处。

图片

DALL·E 2023-06-18 16.45.45 - two humans plugged physically plugged into a computer, digital art

RLHF的影响相对难以衡量。从历史上看,并没有相关报告指出在传统的模型效果测试中RLHF会对模型效果产生显著影响。从这个角度来看,RLHF并不只是为了选择正确答案,这个观点将在后文的preference model部分详细阐述。我们可以参考GPT4技术报告[1]中的图8(提到RLHF在处理 toxicity(毒性)问题上有作用,然而这并不是一个确定的评估标准)。

图片

摘自GPT4技术报告

在 InstructGPT 的相关论文中指出, 与指令调优相比,RL 步骤实际上增加了幻觉(参见图4[2]),因此该论文备受关注。

然而,在WebGPT[3]相关文章中,研究人员发现相比于使用奖励模型(reward model)选择得分最高的生成样本的 “best-of-N sampling” 方法,RL 的优化效果效果乏善可陈。

在WebGPT和InstructGPT中,输出的风格和内容相对较少依赖于用户的偏好或指导,这也揭示出RLHF的一些局限性。

对话系统的开发与其他任务相比更具挑战性。对话涉及到多个方面,如语义理解、语言生成、上下文处理以及对用户意图的准确理解等,因此,对话系统的设计和实现面临着更广泛和更复杂的问题。

因此,如果我们回顾一下生成既对人有帮助又不会产生有毒、有害或不正确陈述的chat agents的常见流程,我们会发现首先要创建一个对人有帮助的大语言模型(LLM),然后,通过应用一系列微调(fine-tunings)系统工程(systems engineering) 的方法来实现减少其危害性的目标。Anthropic的技术研究线路(从dialogue agents[4]到RLHF[5]再到CAI[6])以及John Schulman在RLHF方面的交流(演讲[7]和播客[8])都有力地支持了这一点。

01 基础模型 BASE MODEL

RLHF的起点非常重要,似乎需要一个非常强大的能够遵循指令的基础模型。尝试去模仿专有模型和使用不完善的数据集都会严重影响模型的性能,导致RLHF的初始优化难度更大。

Imitating models是指有些人使用市场上效果较好模型的输出,并将该数据投入到transformer的自回归预测损失(autoregressive prediction loss,用于评估生成模型预测准确性的指标)中。

不完善的数据集源于过去人们对如何收集这些数据并不确定(例如,对社区来源的prompt分布控制得不够)或反复复制数据集而没有对其进行足够的检查。在 "作为一个由…训练出来的语言模型 "这个主题下,这两种问题都会引入一些回避回答问题或转移话题的数据,从而降低了其实用性。Anthropic在他们的论文中详细讨论了这个问题,如果你想要了解更多信息,可以查看原论文。

这种实用性的下降,表现为排行榜上标记为“未经审查”(uncensored)的模型的排名上升。 我不喜欢这个标签,也不喜欢将模型与此类方式关联,因为实际上,这些模型在控制生成模型在生成文本的主题分布方面仍有改进的空间,因此实际上不存在一个完整的审查制度。 (译者注:此处主题分布指的是生成模型生成文本时所呈现的主题的概率分布。换句话说,它表示了生成模型生成不同主题文本的相对概率。生成模型可能会在多个主题上生成文本,每个主题的概率可能不同。例如,如果我们有一个生成模型用于生成新闻报道,那么它可能会生成关于体育、政治、娱乐等不同主题的文本。主题分布可以告诉我们在这种情况下,每个主题的生成概率是多少。)

现在我们可以暂时将“未经审查”(uncensored)标签理解为筛选后的。这种筛选是比较关键的,后面我们会多次看到这个步骤的重要性。

有一些常见的数据处理方法可能会导致这些数据(译者注:指的是上文提到的特定数据,具体来说是与RLHF相关的数据)被包含在内。例如,Anthropic公司在Hub上提供的HH数据集[9]是最大的RLHF数据集之一。有些人为了省略构建偏好模型和RLHF步骤,直接使用整个数据集,将偏好数据集(preference dataset pairs)中的偏好选项(preferred entry)作为指令。(译者注:假设有一个偏好数据集,其中包含多个数据对,每个数据对由两个条目(A和B)组成。用户在每个数据对中选择了他们更喜欢或更优先的选项。那么将用户在每个数据对中选择的偏好选项作为指导,可用于训练或指导模型在其他数据对中进行预测。)这个看似无伤大雅的决定可能会导致模型产生许多混乱的回应,从而降低下游应用的使用效果。

02 偏好模型 PREFERENCES

一旦有了一个实用的模型,我们就可以轻松地使用它生成一大批回复,并请一群人将这些成对的回复标记为偏好对(“chosen“和“rejected“是本文偏好对案例中使用的术语)。这些偏好数据在初看时相对简单,但一旦深入细节,尤其是在追求最优模型性能的过程中,要做出这些偏好决策(preference decisions)就变得异常困难。(译者注:此处的preference decisions是根据某种风格或其他因素,阅读两个回答并决定哪个更好的过程。这些decisions可能是主观的,完全基于个人的直觉和喜好。)

我会每隔几个月进行一次批量的数据标注,以便对模型进行校准或在工作项目中积累经验,而最近一次标注确实相当艰难。这项任务需要阅读两个针对某个问题的多段落回答,这些回答必须连贯且条理清晰,然后判断哪个回答更好(通常基于答案的语言风格判断)。为了增加挑战性,我们只收集了一部分偏好数据(如果有的话),并在这个过程中启用了 fact-checking 功能。在判断事件发生日期的准确性时,我们只能依靠自己的直觉。这就是为什么像InstructGPT这样的论文报告中,奖励模型仅能学习到工作人员60-70%的一致性,因为这可能是在原始数据上能够达到的最高一致性水平。

无害性偏好数据

HARMLESSNESS PREFERENCE DATA

收集有害prompts的偏好数据其实非常简单。既然我们拥有了一个可通过prompt进行控制的大模型,那么我们需要完全排除模型对有害prompt的回答。然后,将模型对负面请求的任何回应与固定回答“作为一个语言模型,我不希望回答这个问题”进行匹配,即可创建配对数据(pair)。现在这些偏好数据随时可以进行大规模优化了。

下面是为什么RLHF不是万能的,但仍然非常有用的一个原因:在监督学习中,很难将这种成对关系(pairwise nature)编码到文本生成模型中。通过训练奖励模型,我们通过增加所选择样本与未选样本的预测奖励(predicted reward)之间的差异来提高模型的性能。

至于有多少负面prompt可以自动转化为偏好数据,目前尚不清楚。 在实际操作中,我猜这并不是一个自动化的过程,而更多是由像Surge和Scale这样的系统执行,它们存在严重的数据积压问题(有太多人想要进行RLHF,但却没有足够的人愿意以整天阅读模型生成的内容为生)。我怀疑我们从一些开源友好型的API处获得了许多未经过滤的偏好数据,比如BlenderBot或OpenAssistant。另外,我也怀疑这些数据可能无法直接用于训练出优秀的模型,其构建方式可能也不会是很多数据集使用公司会满意的,无论这个模型中编码的"偏好"是什么。

在preference model这一步骤中,我们一般情况下都会捕捉到一些奇怪的模型输出,这会导致我们对基于人类反馈的强化学习(RLHF)有所困惑,误以为它有助于减少虚构内容[10]的生成。在偏好标注(preference labeling)过程中,人类很容易注意到诸如看起来蠢蠢的文本格式、重复的短语、恼人的写作风格、忘记对话中的最后一条消息等问题。现在,我的观点是将RLHF视为一种文本风格转换(style transfer) RLHF可以看作是一种主题过滤器(topic filter),并且还添加了较温和的错误修正功能。主题过滤器主要用于检测有害内容,而需要帮助减少奇怪文本的产生,则是为了适应“幻觉”这个广泛而模糊的现象。

在这个模型中编码偏好(Encoding preferences)会以一种与指令微调(instruction tuning)截然不同的方式改变模型行为,我认为这是RLHF的核心。在这个观点中,preference modeling是让RLHF能够被使用的核心步骤,而且可能确实没有其他好的资源、数据或信息源来引导模型的学习和训练过程。

03 强化学习 RL

最后,有了这个可以指导说什么的模型(即 prefernece model), RLHF 剩下的一个重要部分就是知道如何通过偏好模型(prefernece model)来引导大模型。在这个阶段,需要进行两个核心的分布检查(distribution checks)。首先, 需要 preference model 覆盖RLHF模型处理的所有文本(甚至是基本问题) 。其次,RLHF的prompt列表需要涵盖preference model的所有内容,但不能超过其范围。 如果RLHF的prompt集不完整,将无法从 preference model 和数据集中提取出所有优点。当然,每一步都可能会面临超出分布(out-of-distribution)的问题。所以如果你尝试在一个你并不真正了解的preference model上进行RLHF,那就祝你好运吧。

我认为我们没有看到很多preference models 或 RLHF’s models 发布的主要原因,是这种对matching distributions的强烈需求。(译者注:matching distributions这种情况指使模型生成的数据与真实数据的分布需要尽可能相似。)开源社区可能会创建更小、更专注于某一领域的 preference model (例如StackLLaMA),而不是像OpenAI/Anthropic 那样拥有通用性强且相当完整的模型。如果你还需要为RLHF引入提示分布(prompt distributions)(或类似的东西),我也不会感到惊讶。从相关文献来看,RLHF是一种富有变化的过程。不能简单地通过评估loss值来判断准确率提高了多少(尽管这当然是其中的一部分)。 在训练损失函数中,需要对自动基准测试(例如多项选择题)和模型偏好进行一系列评估(通过人工标注,模型从preference model中学习)。我一直听说RLHF是从preference model中提取信息,但并没有很好地记录下RLHF如何快速/慢速地整合所有的偏好数据(preference data)。这个过程应当会随着模型大小、数据集大小、训练设置、RL超参数等的不同而有所变化。

模型扩展性 SCALING

关于模型扩展的基本主题贯穿了这篇文章的每一行,虽然没有明确介绍,但它在文章的每一个观点中都隐含着。Anthropic的RLHF论文(如下图)显示,将模型参数扩展到 50B 规模能够带来明显的好处。 对于开源社区和学术界来说,明年训练出 50 B 参数的模型将相对容易实现,这是很有价值的,因为在计算资源有限的情况下进行实验是非常困难的。此外,Anthropic还发布了另一篇关于拥有 200B 参数的preference models的论文(图1,Ganguli等人,2023[11]),展示了这个参数规模上的巨大进展。因此,人们使用的RLHF将会有所差异。这些项目涉及许多种扩展方式,在我们获得更多数据之前,很难确定“RLHF能否解决我所在领域的问题”的答案。

图片

Figure from Anthropic’s CAI work.

我已经与一些常被大众提及的公司的几名员工核实了这种观点,他们确认了这一观点的真实性,所以我认为我已经开始逐渐理解6个月前的RLHF是如何工作的了。这耗费了我6到8个月的时间,所以如果你需要一些时间才能掌握,不要感到气馁。我相信各家公司已经开始在尝试扩展这个流程了。

04 结语与讨论 Loose ends

这篇文章可能会迅速引发很多问题和方向指引,希望我能提前回答其中几个问题。

当我说相对完整地描述了我对当前RLHF实现方式的看法时,这意味着它并没有做到一些人可能认为它能够做到的关键事情:

  • 更正一些微小事实/检查问题的真实性/修改错别字。
  • 为模型添加基本能力(例如,学习关于主题的直觉和推理能力、学习如何编码等等) 。 (译者注:学习关于主题的直觉是指,模型通过与大量相关文本相互作用,从中提取并理解有关特定主题的信息、概念和知识。通过这种方法,模型能够形成对主题的直观理解,从而更好地应用和运用与主题相关的知识。它不仅仅是对事实和信息的记忆,还包括了对主题之间的内在联系和模式的把握。这种直觉性的理解有助于模型在回答问题、进行推理和生成内容时更加灵活和准确。)

此外,还有一些非常令人激动的论文即将发表,其中包括完整的RLHF(例如,Allen AI关于不同类型反馈的研究)、RLCF(当人类的偏好不被考虑时)、或者其他不同的优化技术(例如,Direct Policy Optimization,DPO) 。(译者注:Direct Policy Optimization可以直接利用偏好数据(preference data),而无需训练一个额外的奖励模型。这意味着在训练过程中能够更直接地使用人类的偏好信息,从而提高策略的质量和适应性。)我非常期待继续跟进这些研究,特别是DPO(因为我认为它在那些更加明确定义数据分布的小规模场景中可能表现良好)。

我认为尽管在选取的人口样本和人口结构等方面存在一些问题,但偏好数据(preference data)仍是训练模型最核心的部分

此外,我还有一些问题:

  • RLHF结果的敏感度如何暂时未知:开源组织或学术团队能够管理多少个seeds、trials和babysitters?
  • 如何整合大规模对话数据集:目前不断有许多新的数据集发布(例如最近的BlenderBot3),它们具有不同的反馈类型(feedback types),比如对消息的赞/踩。谁将是第一个能够有效整合这些数据集的人?
  • 市场上没有明确使用RLHF的大型公司:Google只是说为Bard使用了RLHF,并且在我上次了解时Cohere根本没有使用RLHF。这其中有什么原因吗?感谢Ryan Sullivan在Bard报告中提及这一点:

当前的RLHF技术栈确实是一把威力强大的巨锤,但同时我们也需要一系列能够精确调节的凿子。 以下是我对进一步发展当前技术持有积极兴趣的一些原因:

  • 基于结果的优化(多重奖励目标,其中chatbots会因为完成用户想要的任务而得到奖励):可以通过根据用户的偏好训练模型,然后在结果上进行第二次微调/RLHF(更传统的强化学习形式)来实现。
  • 持续对预期技术栈进行优化:正如我们在Anthropic的工作流程中所看到的,当前模型不再需要像上下文蒸馏(context distillation)这样的步骤。此外,在一些情况下,思维链推理(chain-of-thought reasoning)(在用户输入之前添加 system prompt ,悄悄告诉模型解释其工作)显示出一定的效益。我猜想在未来,所有的语言模型在进行基础训练之后都不再需要指令调整(在基础模型中加入了更多的指令数据),并且将内置一定程度的思维链推理。
  • Constitutional AI (CAI) :虽然我不同意任何未经监督的公司选择将他们的价值观加入到我所使用的模型中,但我们迟早会获得超出宪法(Constitution)公司规定的generation time controls(译者注:可以用来限制模型生成特定内容的范围或时间段。这意味着用户可以设定一个时间界限,使模型只能生成在该时间界限之前或之后的内容;宪法人工智能 (CAI) 是指人类监督将完全来自一套应该管理 AI 行为的原则,以及用于少量提示的少量示例。这些原则共同构成宪法。AI 将基于这些宪法原则在指导模型进行迭代优化)。

END

参考资料

1.https://arxiv.org/abs/2303.08774

2.https://arxiv.org/abs/2203.02155

3.https://arxiv.org/abs/2112.09332

4.https://arxiv.org/abs/2112.00861

5.https://arxiv.org/abs/2204.05862

6.https://arxiv.org/abs/2212.08073

7.https://www.youtube.com/watch?v=hhiLw5Q_UFg&t=4s

8.https://www.talkrl.com/episodes/john-schulman

9.https://huggingface.co/datasets/Anthropic/hh-rlhf

10.https://www.interconnects.ai/p/specifying-hallucinations-llms

11.https://arxiv.org/abs/2302.07459

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

https://www.interconnects.ai/p/how-rlhf-works

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

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

相关文章

分享 13 个有用的 JavaScript 片段,提升你的工作效率

JavaScript 是您可以学习的最流行的语言之一。当我开始学习 JavaScript 时,我总是在 StackOverflow、medium 和其他博客上寻找代码片段。在这篇文章中,我将分享我发现它们有用的 15 个 JavaScript 代码片段。 1. 不循环地重复字符串 此 JS 片段将展示如何…

<C++> STL_string

目录 1.string类 2.string类的接口 2.1 成员函数 2.1.1 string构造函数 2.1.2 string赋值运算 2.1.3 string析构函数 2.2 string对象访问以及迭代器 2.2.1 string的遍历方式 2.2.2 迭代器的使用 2.2.3 const_迭代器的使用 2.2.4 at 2.2.5 back和front 2.3 string容…

手机防窥膜对眼睛危害非常大,快速避坑,避免智商税!

背景 如果你的手机贴了防窥膜,在室外阳光下你想看清楚机屏幕上的文字,是不是有个动作就是调亮屏幕!因为防窥膜透光率比较低,那你就得提高手机亮度。 国产的防窥膜透光率只有30%左右韩国进口防窥膜的透光率在50%左右 透光率越低意味…

Semantic Kernel 入门系列:Kernel 内核和Skills 技能

理解了LLM的作用之后,如何才能构造出与LLM相结合的应用程序呢? 首先我们需要把LLM AI的能力和原生代码的能力区分开来,在Semantic Kernel(以下简称SK),LLM的能力称为 semantic function ,代码的…

innovus设置size only的方法

dbSet [dbGetInstByName $inst].dontTouch sizeOk 我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口

【BMC】OpenBMC使用基础(WSL2版本)

代码准备 OpenBMC是一个开源的项目,用于开发BMC固件。官网是https://www.openbmc.org/,不过里面似乎没有什么内容,所以还需要依赖其它的网站,https://github.com/openbmc,在这里可以下载到需要的代码和文档。其主体部…

工作中遇到的关于配置问题

工作中遇到的问题 想记录一下 一个程序员小白每天遇到的问题 1.创建了一个Maven的web工程,但是启动一直是404,原服务器未能找到目标资源 解决办法: 选择deployment,点击加号选择war格式就OK啦 目录里面无法创建类&#xff0…

如何在面试IT公司时展现出色的表现

在面试IT技术岗位的过程中,展现出色的表现是至关重要的。下面我将分享一些我个人的经验和观察,希望对大家有所帮助。 首先,提前准备是非常重要的。在面试前,你应该充分了解目标公司的业务和技术需求。这样你就能更好地回答面试官…

一些高频的C++ cache line面试

C那些事之False Sharing与Cache line 最近看到一段代码&#xff0c;手动做的对齐&#xff0c;于是研究一下不对齐又会带来什么影响&#xff1f; template <typename T> class AtomicWithPadding {private:static constexpr int kCacheLineSize 64;uint8_t padding_befor…

HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放

一、需求 昨天我们做了轮播图的自动播放&#xff0c;即每隔一秒自动切换一次 今天我们增加两个需求&#xff1a; 1、鼠标点击向右按钮&#xff0c;轮播图往后切换一次&#xff1b;鼠标点击向左按钮&#xff0c;轮播图往前切换一次 2、鼠标悬停在轮播图区域中时&#xff0c;…

闲鱼链接生成 仿闲鱼链接搭建

教程&#xff1a;修改数据库账号密码直接使用。 源码带有教程! 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

layui框架学习(36:数据表格_复杂表头)

table数据表格模块中的col属性支持配置复杂表头&#xff0c;其为二维数组&#xff0c;用于描述复杂表头中每个表头单元格的位置和尺寸信息&#xff08;colspan和rowspan描述表头单元格所占行数和列数&#xff09;。   从参考文献2-3给出的示例来看&#xff0c;描述复杂表头的…

[数学公式] 1秒移动x米是多少码 x码一秒钟移动几米

1秒移动x米是多少码&#xff1a;3.6x码 x码一秒钟移动几米&#xff1a;

6、用restful风格写controller方法接口,单元测试依赖

编写单元测试&#xff0c;用restful风格写controller方法 单元测试依赖 实际项目开发中&#xff0c;单元测试与业务代码通常都会要求同步进行 TDD测试驱动开发&#xff1a;先编写单元测试&#xff0c;然后努力去开发业务代码去满足所有的单元测试用例。 添加SpringBoot的测试…

LeetCode_双指针_中等_143.重排链表

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → L~n - 1~ → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → L~n - 1~ → L2 → L~n - 2~ → … 不…

python网站创建006:常见CSS样式

1. 给标签添加样式有三种方式(在标签上添加、在head中添加、通过独立文件添加)。 其中(在head中添加、通过独立文件添加)是有选择器存在的 直接在标签上添加 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><tit…

如何部署Redis哨兵

目录 一、Redis数据库 二、Redis哨兵模式 三、部署Redis哨兵 第一步 关闭防火墙和安全机制 第二步 修改Redis配置文件 第三步 开启Master主节点 第四步 查看哨兵信息 一、Redis数据库 ●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主…

使用 python 读取Excel文件并转换为时间格式

通过Excel 做配置文件调整参数&#xff0c;转换为实时参数&#xff1a; naclo_reduce_ratio pd.read_excel(./config/naclo_reduce_ratio.xlsx, header0) # col_name [Time, r1, r2]time_lst [] for i, row in naclo_reduce_ratio.iterrows():now_time_lst str(row[Time]…

Linux常用命令——dpkg-query命令

在线Linux命令查询工具 dpkg-query Debian Linux中软件包的查询工具 补充说明 dpkg-query命令是Debian Linux中软件包的查询工具&#xff0c;它从dpkg软件包数据库中查询并辨识软件包的信息。 语法 dpkg-query(选项)(参数)选项 -l&#xff1a;列出符合匹配模式的软件包&…

Android studio修改app图标

步骤如下&#xff1a; 1.右键app名称→New→ImageAsset 2. 进行下面的配置 图源&#xff1a;https://blog.csdn.net/Qingshan_z/article/details/126661650 3.配置分辨率 4.图标自动保存在mipmap文件夹下 再启动就更换成功了&#xff01;&#xff01;&#xff01; 参考&…