大模型的三大法宝:Finetune, Prompt Engineering, Reward

article/2025/9/24 19:27:53

编者按:基于基础通用模型构建领域或企业特有模型是目前趋势。本文简明介绍了最大化挖掘语言模型潜力的三大法宝——Finetune, Prompt Engineering和RLHF——的基本概念,并指出了大模型微调面临的工具层面的挑战。

以下是译文,Enjoy!

作者 | Ben Lorica

编译 | 岳扬

随着语言模型越来越流行,采用一套通用的方法和工具来充分释放语言模型的潜力就变得至关重要。这些方法中最重要的是提示工程(prompt engineering),其涉及到如何在提示(prompt)或查询(query)中选择和组合词语来请求模型产生所需的回复(response)。如果能够从ChatGPT或Stable Diffusion中获得所需的输出(output),那么你就离成为一名熟练的提示工程师(prompt engineer)又近了一步。

在tuning spectrum的背后是基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),当模型需要在多种输入和准确率要求极高的情况下训练时,这种方法是最有效的。RLHF被广泛用于微调通用模型,如ChatGPT、谷歌的Bard、Anthropic的Claude或DeepMind的Sparrow。

下图中,我们总结了Finetune,Prompt Engineering, RLHF的核心特点和适用场景。

帮助我们充分利用基础模型的策略(中文图片由Baihai IDP翻译)

对于大多数团队来说,最佳选择是使用一个已初步训练好的模型,并将其Fine-tune以适应特定的任务或数据集。这个过程需要从大型语言模型(LLM)开始,这种模型已经在大量文本数据上进行了训练。虽然许多LLM目前是专有的(proprietary),只能通过API访问,但开源数据集、学术论文甚至开源模型代码的出现使技术团队能够用在他们特定的领域和应用程序。

另一个有趣的趋势是出现了更易于私有化部署和管理的基础模型,例如LLaMA和Chinchilla,这为将来出现更多的中型模型提供了可能性。选择合适的模型进行微调需要团队不仅考虑特定领域中可用数据的数量,还要评估模型的(开源)许可证与其具体要求的兼容性。

微调基础模型的简略手册

随着我们对基础模型实际应用的理解不断拓展,出现了很多定制化的工具(bespoke tools),能够方便在模型部署前完善这些模型。这里有一些用于微调和定制语言模型的资源:

  • Hugging Face的微调教程[1][2])。

  • OpenAI的微调指南[3]

  • co:here编写的关于如何创建自定义模型的指南[4]

  • AI21 Labs编写的关于创建自定义模型的教程[5]

在NLP(John Snow Labs[6])和CV(Matroid[7])领域中,已经有了无代码工具开发的实例,可以无代码创建自定义模型。在大模型领域,我期待类似的工具的出现,以完善基础模型的微调和应用。

尽管RLHF在训练顶尖语言模型的团队中获得了肯定,但由于缺乏可用的工具,其可及性( accessibility )仍然不足。此外,RLHF需要开发一个容易受misalignment(即出现了统计分布不一致现象)和其他问题影响的奖励函数(reward function),并且RLHF仍然是一种只有少数团队掌握的专有技术。

虽然提示工程有用,但在生成针对特定任务和领域优化的可靠基础模型方面仍然不足。尽管有些团队可能会选择从头开始构建自己的模型,但由于从头开始训练模型的成本,这些团队不太可能总是这样做。因此,现在的趋势是倾向于微调预训练模型。

这就会导致,技术团队需要简单而多功能的工具,使他们能够使用各种技术[8]来创建自定义模型。

尽管微调(fine-tuning)可以产生最佳模型(optimal models),但在部署模型之前,还需要进一步使用RHLF进行调整。此外,Anthropic最近进行的一项研究表明[9],提示方法(prompting methods)可以帮助使用RLHF训练的LLMs产生更少有害内容。

微调预训练模型比提示工程,或从头开始训练模型更有优势

END

小编注:需要大语言模型微调和训练工具平台的小伙伴,欢迎体验IDP。我们也基于平台,快速搭建了多模态模型IDPChat,欢迎关注和贡献。https://github.com/BaihaiAI/IDPChat

参考资料

[1]https://huggingface.co/docs/transformers/training

[2]https://huggingface.co/blog/trl-peft

[3]https://platform.openai.com/docs/guides/fine-tuning

[4]https://dashboard.cohere.ai/models/create

[5]https://docs.ai21.com/docs/custom-models

[6]https://nlp.johnsnowlabs.com/docs/en/alab/training_configurations

[7]https://www.matroid.com/detector-creation/

[8]https://powerml.co/?utm_source=newsletter&utm_id=gradientflow

[9]https://arxiv.org/abs/2302.07459

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

原文链接

https://gradientflow.com/llm-triad-tune-prompt-reward/


http://chatgpt.dhexx.cn/article/ukYJAqH6.shtml

相关文章

RCNN网络源码解读(Ⅲ) --- finetune训练过程

目录 0.回顾 1.finetune二分类代码解释(finetune.py) 1.1 load_data(定义获取数据的方法) 1.2 CustomFineTuneDataset类 1.3 custom_batch_sampler类( custom_batch_sampler.py) 1.4 训练train_mod…

FinSH

finSH介绍 FinSH 是 RT-Thread 的命令行组件,提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口 / 以太网 / USB 等与 PC 机进行通信。 命令执行过程 功能: 支持鉴权,可在系统配置中选择打开/关闭。(TODO…

从统一视角看各类高效finetune方法

每天给你送来NLP技术干货! 来自:圆圆的算法笔记 随着预训练模型参数量越来越大,迁移学习的成本越来越高,parameter-efficient tuning成为一个热点研究方向。在以前我们在下游任务使用预训练大模型,一般需要finetune模型…

finetune

finetune的含义是获取预训练好的网络的部分结构和权重,与自己新增的网络部分一起训练。下面介绍几种finetune的方法。 完整代码:https://github.com/toyow/learn_tensorflow/tree/master/finetune 一,如何恢复预训练的网络 方法一&#xf…

11.2 模型finetune

一、Transform Learning 与 Model Finetune 二、pytorch中的Finetune 一、Transfer Learning 与 Model Finetune 1. 什么是Transfer Learning? 迁移学习是机器学习的一个分支,主要研究源域的知识如何应用到目标域当中。迁移学习是一个很大的概念。 怎么理解源域…

飞桨深度学习学院零基础深度学习7日入门-CV疫情特辑学习笔记(四)DAY03 车牌识别

本课分为理论和实战两个部分 理论:卷积神经网络 1.思考全连接神经网络的问题 一般来收机器学习模型实践分为三个步骤,(1)建立模型 (2)选择损失函数 (3)参数调整学习 1.1 模型结构不…

unity sdk(android)-友盟推送SDK接入

注意:一开始想接友盟Unity的SDk,但是导入后缺少各种jar,所以最后还是接了android的,demo文档齐全 官方文档:开发者中心 按照官方文档对接即可, 接入流程 1、项目中com.android.tools.build:gradle配置&…

友盟推送学习

一、首次使用U_Push 1、首先注册友盟账号,进入工作台,选择产品U_Push。 2、创建应用 3、在自己的项目中自动集成SDK 开发环境要求: Android Studio 3.0以上 Android minSdkVersion: 14 Cradle: 4.4以上 在根目录build.gradle中添加mav…

Android 学习之如何集成友盟推送

我是利用Android studio 新建一个空的Android项目。 步骤一 导入第三方库 1.切换Android项目状态为Project状态 2.在main文件下新建 jniLibs文件夹(用来导入PushSDK项目下lib文件中的so文件) 3.在libs文件夹下添加友盟PuskSDK中的 jar 文件&#xff…

用PaddlePaddle(飞浆)实现车牌识别

项目描述:本次实践是一个多分类任务,需要将照片中的每个字符分别进行识别,完成车牌的识别 实践平台:百度AI实训平台-AI Studio、PaddlePaddle1.8.0 动态图 数据集介绍(自己去网上下载车牌识别数据集) 数据…

深度学习(五) CNN卷积神经网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CNN卷积神经网络 前言一、CNN是什么?二、为什么要使用CNN?三、CNN的结构1.图片的结构2.卷积层1.感受野(Receptive Field)2.卷积…

CNN网络实现手写数字(MNIST)识别 代码分析

CNN网络实现手写数字(MNIST)识别 代码分析(自学用) Github代码源文件 本文是学习了使用Pytorch框架的CNN网络实现手写数字(MNIST)识别 #导入需要的包 import numpy as np //第三方库,用于进行科学计算 import torc…

Android删除chartty证书,C/C++知识点之android应用安全分析

本文主要向大家介绍了C/C知识点之android应用安全分析,通过具体的内容向大家展示,希望对大家学习C/C知识点有所帮助。 应用名 :OKEx(OKEx-android.apk) 包名 :com.okinc.okex MD5 :1ffbd328d13e91b661592cdf58516bd2 版…

代码编写过程 - 正确率折线图

获取绘图函数 首先,看到需要画acc和loss图。先去参考现成的,于是打开猫12分类,找到生成折线图的地方。 发现框内的两个函数绘制了折线图。既然是作为函数出现,说明已经有一定的封装,考虑能不能把整个函数搬走用。 由…

李宏毅机器学习课程HW03代码解释

作业3任务是将图片进行分类 从官网上下载数据到data文件里面。此外,将代码分为三个模块,分别是dataset,model以及main。 一、dataset模块 此模块作用是读取图片数据。 重要函数:os.path.join(path,x) 将path和x路径组合在一起 #导入库…

接入友盟厂商push通道遇到的坑

目录 调试友盟Push问题的检查清单 客户端、服务端数据协议 客户端接入方式 小米厂商通道 华为厂商通道 魅族厂商通道 VIVO厂商通道 OPPO厂商通道 支持桌面角标的厂商 吐槽一下集成友盟厂商通道时发现的问题 调试友盟Push问题的检查清单 过滤UmengPushAgent开头的日志…

Android集成友盟消息推送SDK

消息推送SDK快速集成: 申请AppKey ——> 接入Push SDK ——> 基础接口引入 ——> 消息推送测试 ——> 接入完成 1.申请AppKey 2.接入Push SDK 1)、加入依赖 //友盟push相关依赖(必须)implementationcom.umeng.umsdk:push:6.1.0impleme…

机器学习之手写决策树以及sklearn中的决策树及其可视化

文章目录 决策树理论部分基本算法划分选择信息熵 信息增益信息增益率基尼系数基尼指数 决策树代码实现参考 决策树理论部分 决策树的思路很简单,就是从数据集中挑选一个特征,然后进行分类。 基本算法 从伪代码中可以看出,分三种情况考虑&…

android使用友盟推送注册失败获取不到token accs bindapp error!

使用友盟推送注册失败获取不到token public void onFailure(String s, String s1)的值分别是“-9”和“accs bindapp error!”或者s的值为-11.都是同一个问题 就是主工程(除友盟PushSDK 其他的module均看成为主工程)so目录与PushSDK下的so目录不一致…

同时集成阿里云旺与友盟推送,初始化失败s:-11,s1:accs bindapp error!的解决办法

在应用中需要同时集成聊天和推送功能,聊天选用阿里的sdk(百川云旺),推送选用友盟的pushSDK。 这时候悲剧就出现了,注册友盟的时候报错。 I/com.umeng.message.PushAgent: register-->onFailure-->s:-11,s1:accs …