LLM之Alpaca:深入了解大模型Alpaca

博客首发地址:LLM之Alpaca:深入了解大模型Alpaca - 知乎

  • 官方链接:https://crfm.stanford.edu/2023/03/13/alpaca.html
  • 官方Git:tatsu-lab/stanford_alpaca
  • 官方模型:https://huggingface.co/tatsu-lab/alpaca-7b-wdiff

什么是Alpace 7B?

 Alpaca是一个基于Meta的LLaMA 7B模型经过微调的指令遵循型语言模型。它由斯坦福大学的研究团队开发,旨在通过遵循和执行人类指令来完成各种复杂任务。这个模型的特别之处在于,尽管它只有7亿参数(比起一些其他模型来说相对较小),却能展现出与OpenAI的text-davinci-003模型相似的性能,这在当前AI研究中是一项显著成就。

 Alpaca模型的开发过程涉及到从LLaMA 7B模型开始,通过52K条指令遵循演示进行微调,这些演示是以OpenAI的text-davinci-003模型为样本生成的。这种方法不仅体现了基于已有成果上的进一步开发,也展示了在有限资源下进行有效AI训练的可能性。

 Alpaca的开发背景还包含了对现有指令遵循型模型的一种回应,如GPT-3.5、ChatGPT和Bing Chat等。这些模型虽然功能强大,但在生成虚假信息、社会刻板印象和有害语言方面仍存在缺陷。Alpaca模型的出现,提供了一个更容易获取、成本更低的研究平台,使得学术界可以更深入地研究这些问题,并寻找解决方案。

训练过程

 Alpaca模型的训练过程在人工智能领域具有重要意义,特别是考虑到其在有限预算下的实施。训练一个高质量的指令遵循模型主要面临两个挑战:一是需要一个强大的预训练语言模型,二是需要高质量的指令遵循数据。通过这个训练,Alpaca不仅展示了其在遵循和执行指令方面的强大能力,也证明了在有限的预算下创建有效的AI模型是可能的。

Alpace模型训练流程图

强大的预训练语言模型

 Alpaca的基础是Meta发布的新型LLaMA模型,这是一系列强大的语言模型。特别地,Alpaca是基于LLaMA 7B模型开发的,7B代表该模型拥有大约70亿个参数。尽管这比起某些更大的模型来说规模较小,但LLaMA 7B仍然是一个功能强大的模型,特别适合于学术研究和小规模实验。

高质量的指令遵循数据

指令数据的分布图

 为了训练Alpaca,研究团队面临的第二个挑战是获取高质量的指令遵循数据。他们采用了一个创新的方法,即使用OpenAI的text-davinci-003模型自动生成这些数据。具体来说,他们从self-instruct的175个人类编写的指令-输出对开始,然后使用OpenAI的text-davinci-003模型来生成更多的指令,以这些为上下文示例。通过这种方式,团队生成了52K个独特的指令和相应的输出,整个过程的成本不到500美元。指令数据的分布我们可以在上图中看到。 文件 alpaca_data.json 包含了用于微调Alpaca模型的52,000条指令遵循数据。这个JSON文件是一个字典列表,每个字典包含以下字段:

  • 指令(instruction): 字符串类型,描述模型需要执行的任务。这52,000条指令每一条都是独一无二的。
  • 输入(input): 字符串类型,为任务提供可选的上下文或输入信息。例如,当指令是“总结以下文章”时,输入内容就是那篇文章。大约40%的示例中包含输入信息。
  • 输出(output): 字符串类型,为text-davinci-003生成的对应指令的回答。

在微调Alpaca模型时使用了以下提示:

下方是一个描述任务的指令,与之配对的是进一步提供上下文的输入。请为下面的请求编写个合适的回答。### 指令:
{instruction}### 输入:
{input}### 回答:
对于输入字段为空的示例:

对于有非空输入字段的示例:

下方是一个描述任务的指令。请为下面的请求编写个合适的回答。### 指令:
{instruction}### 回答:
在推理过程中(例如用于网络演示),我们使用带有空输入字段的用户指令(第二种选项)。

微调和优化

 得到了高质量的指令遵循数据后,接下来的步骤是微调LLaMA 7B模型。研究团队使用了Hugging Face的训练框架,利用了全分片数据并行(Fully Sharded Data Parallel)和混合精度训练等技术,他们首次尝试微调一个7B的LLaMA模型,在8个80GB的A100 GPU上仅用了3小时,这在大多数云计算提供商处的成本不到100美元。需要注意的是,这里的训练效率还有提升空间,比如使用PEFT库,使用lora相关技术等,可以进一步降低成本。

训练参数

HyperparameterLLaMA-7BLLaMA-13B
Batch size128128
Learning rate2e-51e-5
Epochs35
Max length512512
Weight decay00

配置环境

git clone https://github.com/tatsu-lab/stanford_alpaca.git
cd stanford_alpaca
pip install -r requirements.txt

启动训练

torchrun --nproc_per_node=4 --master_port=<your_random_port> train.py \--model_name_or_path <your_path_to_hf_converted_llama_ckpt_and_tokenizer> \--data_path ./alpaca_data.json \--bf16 True \--output_dir <your_output_dir> \--num_train_epochs 3 \--per_device_train_batch_size 4 \--per_device_eval_batch_size 4 \--gradient_accumulation_steps 8 \--evaluation_strategy "no" \--save_strategy "steps" \--save_steps 2000 \--save_total_limit 1 \--learning_rate 2e-5 \--weight_decay 0. \--warmup_ratio 0.03 \--lr_scheduler_type "cosine" \--logging_steps 1 \--fsdp "full_shard auto_wrap" \--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \--tf32 True

deepspeed训练

pip install deepspeed
torchrun --nproc_per_node=4 --master_port=<your_random_port> train.py \--model_name_or_path <your_path_to_hf_converted_llama_ckpt_and_tokenizer> \--data_path ./alpaca_data.json \--bf16 True \--output_dir <your_output_dir> \--num_train_epochs 3 \--per_device_train_batch_size 4 \--per_device_eval_batch_size 4 \--gradient_accumulation_steps 8 \--evaluation_strategy "no" \--save_strategy "steps" \--save_steps 2000 \--save_total_limit 1 \--learning_rate 2e-5 \--weight_decay 0. \--warmup_ratio 0.03 \--deepspeed "./configs/default_offload_opt_param.json" \--tf32 True

加载训练模型

import transformers
alpaca_model = transformers.AutoModelForCausalLM.from_pretrained("<path_to_store_recovered_weights>")
alpaca_tokenizer = transformers.AutoTokenizer.from_pretrained("<path_to_store_recovered_weights>")

模型评估

 在Alpaca模型的初步评估中,研究团队采用了几种方法来测试和对比其性能。这一部分对于验证Alpaca的有效性和确定其在实际应用中的潜力至关重要。

Alpaca交互示例01,Alpaca的答案通常比ChatGPT短,这是因为text-davinci-003的输出更短。

Alpaca交互示例02,Alpaca的答案通常比ChatGPT短,这是因为text-davinci-003的输出更短。

人类评估

 Alpaca模型的性能首先通过人类评估来衡量。斯坦福大学的研究团队——主要由五名学生组成——对Alpaca进行了详细的测试。他们使用了self-instruct评估集中的输入,这些输入覆盖了广泛的用户导向指令,包括编写电子邮件、社交媒体操作和生产力工具使用等。

盲目对比测试

 评估方法中最引人注目的是盲目对比测试。在这个测试中,研究团队将Alpaca 7B的输出与OpenAI的text-davinci-003模型的输出进行了比较。结果显示,Alpaca在90次比较中赢得了89次,这意味着Alpaca的性能与text-davinci-003非常接近。鉴于Alpaca模型相对较小的规模和训练数据的量,这个结果颇为令人惊讶。

互动测试

 除了静态评估,研究团队还在互动环境中测试了Alpaca模型。在多样化的输入集上,Alpaca通常表现出与text-davinci-003类似的行为。这种互动测试不仅可以揭示模型的预期能力,还可以暴露其潜在的失败模式。

限制与挑战

 尽管Alpaca在初步评估中表现出色,研究团队也承认评估的规模和多样性可能有限。因此,他们发布了Alpaca的互动演示,并鼓励广大读者自己评估Alpaca并提供反馈。这种开放的评估方式能够帮助团队收集更广泛的数据,从而更全面地理解Alpaca的性能和局限性。

 经过评估表明,Alpaca模型不仅在理论上有效,而且在实际应用中展示了强大的性能和可靠性。通过这些评估,Alpaca证明了自己不仅是一个有趣的学术项目,也是一个有潜力在多种实际场景中发挥作用的工具。这为后续更深入的研究和开发铺平了道路,为理解和优化基于指令的语言模型提供了宝贵的见解。

限制

 虽然Alpaca在初步评估中展现了令人印象深刻的能力,但它也不可避免地呈现出了一些与当前语言模型共有的限制。这些局限性是理解和进一步发展Alpaca模型的重要部分。

虚假信息的生成(Hallucination)

Alpaca在某次回答中错误地声称坦桑尼亚的首都是达累斯萨拉姆,而实际上自1974年起首都已经更改为多多马。

Alpaca在生成信息时可能产生虚假内容,这被称为“hallucination”(幻觉)。这种误信息的产生可能源于训练数据的限制或模型自身的理解局限。

有害内容和社会刻板印象

 像许多其他语言模型一样,Alpaca也存在产生有害内容和加强社会刻板印象的风险。这可能包括对特定群体的偏见表达或传播有问题的观点。这类问题通常是因为模型训练数据中存在的偏差所导致的,需要通过更精细的训练和过滤机制来解决。

性能的不一致

 尽管Alpaca在多数情况下与text-davinci-003表现相似,但也存在一些性能不一致的情况。这可能是因为它所使用的训练数据和规模较小的模型结构,限制了其处理更复杂或多样化查询的能力。

潜在的误用风险

Alpaca散播错误信息

 由于Alpaca可以生成流畅和有说服力的文本,存在被误用来散播错误信息或用于其他不良目的的风险。尽管有一些缓解措施,如内容过滤器,但这些措施可能不足以完全防止滥用。

发布的责任和限制

 Alpaca团队对于发布这一模型表现出了责任感,他们强调该模型仅用于学术研究,任何商业用途都被禁止。这主要是因为模型基于LLaMA,后者具有非商业性质的许可,以及考虑到模型尚未设计足够的安全措施。

发布的资源

 Alpaca项目的研究团队公开发布了多种资源,以促进学术研究和开放科学的进展。以下是目前已经发布的关键资源:

  1. 数据集: 公开了用于微调Alpaca模型的52,000条指令遵循演示数据,这些数据是从text-davinci-003模型中生成的。
  2. 数据生成过程: 提供了生成上述数据集的代码,让其他研究者可以重现或修改这一过程。
  3. 训练代码: 分享了使用Hugging Face API进行Alpaca模型微调的代码,便于其他研究者进行相似的训练实验。

发布的动机

 发布Alpaca及其相关资源的主要动机是推动学术界对指令遵循型语言模型的研究,特别是在如何解决这些模型存在的缺陷方面。这一开放式发布有多重考量:

  1. 促进科学研究: 通过分享训练配方、数据、模型权重和代码,研究团队旨在提供一个标准化、可复现的科学研究基础。
  2. 增强模型安全性和透明性: 公开Alpaca的工作方式和限制可以帮助科学界更好地理解这类模型的潜力和风险,从而开发出更有效的安全和伦理标准。
  3. 应对现有挑战: 面对生成虚假信息、传播社会刻板印象等问题,公开Alpaca为学术界提供了一个研究和改进的工具。
  4. 防范潜在风险: 虽然任何发布都存在风险,但团队相信,通过提高社区对这些模型潜能的认识,可以激励更快的防御性行动和更深入的安全研究。

结束语

 这个博客是大语言模型教程系列的第二篇,之后会把大语言模型相关的知识点做更多的整理,在本次大语言模型的探索之旅的尾声,感谢每位朋友的陪伴,如果对您有点帮助,就顺手点个赞呗。您的点赞、关注是我持续分享的动力。我是APlayBoy,期待与您一起在AI的世界里不断成长!

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

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

相关文章

Android Studio 打包 Maker MV apk 详细步骤

一.使用RPG Make MV 部署项目&#xff0c;获取项目文件夹 这步基本都不会有问题&#xff1a; 二.安装Android Studio 安装过程参考教材就行了&#xff1a; https://blog.csdn.net/m0_62491877/article/details/126832118 但是有的版本面板没有Android的选项&#xff08;勾…

龙芯新世界系统(安同AOCS OS)安装Cinnamon桌面最新版6.0.4

龙芯的新世界系统安同AOCS OS是十分优秀的操作系统&#xff0c;处于纯社区方式运行&#xff0c;她的各组件更新得很及时&#xff0c;很多组件都处于最新的状态&#xff0c;给我们安装使用最新的开源软件提供了很好的基础。由于本人一直使用Cinnamon桌面环境&#xff0c;各方面都…

LM2903BIDR比较器芯片中文资料规格书PDF数据手册参数引脚图功能封装尺寸图

产品概述&#xff1a; M393B 和 LM2903B 器件是业界通用 LM393 和 LM2903 比较器系列的下一代版本。下一代 B 版本比较器具有更低的失调电压、更高的电源电压能力、更低的电源电流、更低的输入偏置电流和更低的传播延迟&#xff0c;并通过专用 ESD 钳位提高了 2kV ESD 性能和输…

【教学类-44-07】20240318 0-9数字描字帖 A4横版整页(宋体、黑体、文鼎虚线体、print dashed 德彪行书行楷)

背景需求: 前文制作了三种字体的A4横版数字描字帖 【教学类-44-06】20240318 0-9数字描字帖 A4横版整页&#xff08;宋体、黑体、文鼎虚线体&#xff09;-CSDN博客【教学类-44-06】20240318 0-9数字描字帖 A4横版整页&#xff08;宋体、黑体、文鼎虚线体&#xff09;https://…

stable diffusion webui 搭建和初步使用

官方repo: GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 关于stable-diffusion的介绍&#xff1a;Stable Diffusion&#xff5c;图解稳定扩散原理 - 知乎 一、环境搭建和启动 准备在容器里面搞一下 以 ubuntu22.04 为基础镜像&#xff0c;新建…

UnityShader(十六)凹凸映射

前言&#xff1a; 纹理的一种常见应用就是凹凸映射&#xff08;bump mapping&#xff09;。凹凸映射目的就是用一张纹理图来修改模型表面的法线&#xff0c;让模型看起来更加细节&#xff0c;这种方法不会改变模型原本的顶点位置&#xff08;也就是不会修改模型的形状&#xf…

数据结构之顺序存储-顺序表的基本操作c/c++(创建、初始化、赋值、插入、删除、查询、替换、输出)

学习参考博文&#xff1a;http://t.csdnimg.cn/Qi8DD 学习总结&#xff0c;同时更正原博主在顺序表中插入元素的错误。 数据结构顺序表——基本代码实现&#xff08;使用工具&#xff1a;VS2022&#xff09;&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdi…

gitlab cicd问题整理

1、docker设置数据目录&#xff1a; 原数据目录磁盘空间不足&#xff0c;需要更换目录&#xff1a; /etc/docker/daemon.json //写入/etc/docker/daemon.json {"data-root": "/data/docker" } 2、Dockerfile中ADD指令不生效 因为要ADD的文件被.docker…

【计算机网络】什么是http?

​ 目录 前言 1. 什么是HTTP协议&#xff1f; 2. 为什么使用HTTP协议&#xff1f; 3. HTTP协议通信过程 4. 什么是url&#xff1f; 5. HTTP报文 5.1 请求报文 5.2 响应报文 6. HTTP请求方式 7. HTTP头部字段 8. HTTP状态码 9. 连接管理 长连接与短连接 管线化连接…

Gin 框架中实现路由的几种方式介绍

本文将为您详细讲解 Gin 框架中实现路由的几种方式&#xff0c;并给出相应的简单例子。Gin 是一个高性能的 Web 框架&#xff0c;用于构建后端服务。在 Web 应用程序中&#xff0c;路由是一种将客户端请求映射到特定处理程序的方法。以下是几种常见的路由实现方式&#xff1a; …

JavaScript | 检测文档在垂直方向已滚动的像素值用pageYOffset在webstorm上显示弃用了,是否应该继续使用?还是用其他替代?

在学习JavaScript的时候&#xff0c;深入学习时会遇到一些实际案例需要检测文档在垂直方向已滚动的像素值。 例如&#xff0c;当前页面内容很多&#xff0c;我想要滚动鼠标滑轮或者拖拽滚动条来浏览网页下面的内容。这时候一动滚动条&#xff0c;一些绝对固定的盒子却想要随着…

【Kubernetes】k8s删除master节点后重新加入集群

目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上&#xff0c;创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群&#xff0c;检查业务…

Unity触发器的使用

1.首先建立两个静态精灵&#xff08;并给其中一个物体添加"jj"标签&#xff09; 2.添加触发器 3.给其中一个物体添加刚体组件&#xff08;如果这里是静态的碰撞的时候将不会触发效果&#xff0c;如果另一个物体有刚体可以将它移除&#xff0c;或者将它的刚体属性设置…

文件的基础

一、文件 什么是文件 文件流&#xff1a; 一、1、文件的相关操作 创建文件的三种方式&#xff1a; public class FileCreate {public static void main(String[] args) {}//方式1 new File(String pathname)Testpublic void create01() {String filePath "e:\\news1.…

C语言-memcpy(不重复地址拷贝 模拟实现)

memcpy&#xff08;不重复地址拷贝&#xff09; 语法格式 在C语言中&#xff0c;memcpy 是一个标准库函数&#xff0c;用于在内存之间复制数据。它的原型定义在 <string.h> 头文件中。memcpy 的语法格式如下&#xff1a; c void *memcpy(void *destination, const voi…

健身·健康行业Web3新尝试:MATCHI

随着区块链技术进入主流&#xff0c;web3 运动已经开始彻底改变互联网&#xff0c;改写从游戏到金融再到艺术的行业规则。现在&#xff0c;MATCHI的使命是颠覆健身行业。 MATCHI是全球首个基于Web3的在线舞蹈健身游戏和全球首个Web3舞蹈游戏的发起者&#xff0c;注册于新加坡&a…

【JVM】(内存区域划分 为什么要划分 具体如何分 类加载机制 类加载基本流程 双亲委派模型 类加载器 垃圾回收机制(GC))

文章目录 内存区域划分为什么要划分具体如何分 类加载机制类加载基本流程双亲委派模型类加载器 垃圾回收机制&#xff08;GC&#xff09; 内存区域划分 为什么要划分 JVM启动的时候会申请到一整个很大的内存区域,JVM是一个应用程序,要从操作系统这里申请内存,JVM就需要根据,把…

【Leetcode-73.矩阵置零】

题目&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

如何写好Stable Diffusion的prompt

Stable Diffusion是一种强大的文本到图像生成模型&#xff0c;其效果在很大程度上取决于输入的提示词&#xff08;Prompt&#xff09;。以下是一些关于如何编写有效的Stable Diffusion Prompt的秘诀&#xff1a; 明确描述&#xff1a;尽量清晰地描述你想要的图像内容。使用具体…

2024全新返佣商城分销商城理财商城系统源码 全开源PHP+VUE源码

2023全新返佣商城分销商城理财商城系统源码 全开源PHPVUE源码 程序安装环境要求&#xff1a; nginx1.16 php7.2 mysql5.6 程序全开源PHPVUE源码 有需要测试的老铁&#xff0c;拿去测试吧