训练自己的ChatGPT 语言模型(一).md

news2024/11/26 2:42:13

0x00 Background

为什么研究这个?
ChatGPT在国内外都受到了广泛关注,很多高校、研究机构和企业都计划推出类似的模型。然而,ChatGPT并没有开源,且复现难度非常大,即使到现在,没有任何单位或企业能够完全复现GPT3的能力。最近,OpenAI发布了GPT4模型,它支持图文多模态,相较于ChatGPT,其能力大幅提升,似乎预示着第四次工业革命以通用人工智能为主导的到来。

无论是国内还是国外,与OpenAI的差距越来越大。大家都在竭力追赶,在这场技术革新中竞争激烈,目前许多大型企业都采取了闭源的研发策略。ChatGPT和GPT4的细节非常少,也不像之前发布论文时那么详细。OpenAI的商业化时代已经到来。当然,也有一些组织或个人在开源平台上进行了探索。本文将对这些探索进行总结,并将持续跟踪和更新开源平台的情况。

0x01

一种平价的chatgpt实现方案

下面推荐一下我最近看的几个比较火的大模型

image-20230507165821987

ChatGLM

https://github.com/THUDM/ChatGLM-6B

ChatGLM是一个对话模型,由清华技术成果转化的公司智谱AI开源的GLM系列推出。该模型支持中英两个语种,并开源了其62亿参数量的模型。它不仅继承了之前GLM模型的优势,还在模型架构上进行了优化,从而使得它的部署和应用门槛更低,可以在消费级显卡上实现大模型的推理应用。具体的技术细节可以参考其Github页面。

从技术路线上看,ChatGLM实现了ChatGPT的强化学习人类对齐策略,使得生成效果更加贴近人类的价值。目前它的能力包括自我认知、提纲写作、文案写作、邮件写作助手、信息抽取、角色扮演、评论比较、旅游建议等。此外,该模型还开发了一个正在内测的1300亿的超大模型,是目前开源平台中参数规模最大的对话大模型之一。

LLAMA

LLaMA模型是一种基于自然语言处理技术的大型语言模型。该模型的名称是“Language Model for the Martian”(火星人的语言模型)的缩写。该模型由Meta(Facebook旗下的人工智能研究机构)发布,是一个由超过700亿个参数组成的预训练模型。

https://github.com/facebookresearch/llama

LLaMA模型在自然语言生成、对话生成、文本摘要、数学定理证明和蛋白质结构预测等任务上表现出色。与其他类似的语言模型相比,LLaMA模型具有更好的通用性和适用性,支持超过20种语言,包括英语、西班牙语、阿拉伯语、俄语和德语等多种语言。此外,LLaMA模型还支持使用不同的字母和符号系统,如拉丁字母、希腊字母、西里尔字母等。

在自然语言生成方面,LLaMA模型可以自动生成包括段落、故事、诗歌和对话等不同类型的文本。在文本摘要方面,LLaMA模型可以根据给定的文章自动生成简短的摘要。在数学定理证明方面,LLaMA模型可以生成相应的证明步骤和解释。在蛋白质结构预测方面,LLaMA模型可以根据蛋白质序列信息预测其三维结构。

LLaMA模型的发布对人工智能领域产生了重大影响,为自然语言处理技术的发展提供了有力支持。此外,LLaMA模型也为其他类似的大型语言模型的开发和应用提供了重要参考。

值得一提的是,LLaMA模型曾在2021年发生泄露事件,导致模型的数据被公开。该事件对人工智能领域产生了巨大的影响,推动了类ChatGPT的开源发展。

Alpaca

由于目前LLama的授权比较有限,只能用作科研,不允许做商用。

Alpaca(全称:Stanford Alpaca)是斯坦福大学发布的一种自然语言处理模型。该模型是基于LLaMA模型微调得出的一种模型。Alpaca的基本思想是让OpenAI的text-davinci-003模型以self-instruct方式生成大量指令样本,然后使用这些样本对LLaMA模型进行微调。

只用了52K的数据集,就训练出来了非常好的效果 https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json

Alpaca的训练过程十分有趣。在训练过程中,研究人员将text-davinci-003模型暴力训练,让它根据自己的判断和指令生成一系列的指令样本,包括对话、文字、代码等。这些指令样本随后被用于微调LLaMA模型,从而提高其在特定任务上的性能。这种自我训练的方式使得Alpaca的微调过程不需要人工干预,大大降低了训练成本和时间。

Alpaca的模型文件目前还未被开源,但其训练数据、生成训练数据的代码和超参数已经在GitHub上公开。由于成本低廉、数据易得等特点,Alpaca的项目在自然语言处理领域受到了广泛的关注和赞誉。

stanford-alpaca

https://github.com/tatsu-lab/stanford_alpaca

alpaca-lora

斯坦福大学发布了另一个重要项目:alpaca-lora。

该项目使用 LoRA 技术重新实现了 Alpaca 的结果,并采用更低成本的方法,仅使用一块 RTX 4090 显卡进行 5 小时的训练,就得到了一个与 Alpaca 相当的模型。而且,该模型可以在树莓派上运行。该项目使用 Hugging Face 的 PEFT 实现了廉价高效的微调。PEFT 是一个支持 LoRA 技术的库,可以使用各种基于 Transformer 的语言模型并使用 LoRA 进行微调,从而在一般的硬件上实现廉价而有效的模型微调。该项目的 GitHub 地址是:https://github.com/tloen/alpaca-lora。

虽然 Alpaca 和 alpaca-lora 取得了较大的提升,但它们都是以英语作为种子任务,缺乏对中文的支持。为了解决这个问题,三位个人开发者从华中师范大学等机构开源了中文语言模型骆驼 (Luotuo)。该模型基于前人的工作,如 alpaca-lora,并可在单个显卡上进行训练和部署。该项目已经发布了两个模型:luotuo-lora-7b-0.1 和 luotuo-lora-7b-0.3,另一个模型也在计划中。该项目的 GitHub 地址是:https://github.com/LC1332/Chinese-alpaca-lora。

Vicuna和Chinese-Vicuna

斯坦福学者与CMU、UC伯克利等合作推出了一个全新模型,即130亿参数的Vicuna(俗称小羊驼、骆马)。这个模型可以通过在ShareGPT收集的用户共享对话上对LLaMA进行微调训练来得到。在测试过程中,使用GPT-4作为评判标准,结果显示Vicuna-13B在超过90%的情况下实现了与ChatGPT和Bard相匹敌的能力,而且仅需300美元就能实现ChatGPT 90%的性能。最近,UC伯克利LMSys org还发布了一个70亿参数的Vicuna,它不仅体积小、效率高、能力强,而且只需两行命令就能在M1/M2芯片的Mac上运行,还能开启GPU加速。这个项目的github开源地址为:https://github.com/lm-sys/FastChat/

另外,还有一个中文版的Vicuna被命名为Chinese-Vicuna,它也已经开源了,github地址为:https://github.com/Facico/Chinese-Vicuna

微调方案

模型微调的问题

这有几个微调的方案的结果对比:

也是

image-20230507153212764

Abstract

Prompt turning通过在frozen language model上仅仅tuning 连续的 prompts可以減少前绪任务的
存储和训练中内存的消耗。然而,之前的工作揭示prompt tuning在正常大小的预训练模型的NLU
任务表现的并不好。本文也发现现有的prompt方法不能处理hard的序列标注问题,显示缺少通用
性。适当的优化prompt tuning可以有效的应用•在不同的模型scale和NLU任务上。文章提出的P-
Tuning V2不是一个新的方法是,是一个优化和改良的Pretix-tuning1版本。
Introduction

Finetune

在Fine-tuning中,我们会将预训练模型中的一部分或全部权重复制到新的任务中,然后使用新任务的数据对这些权重进行微调,使其适应新任务。微调通常需要在新任务上训练一些额外的层,这些层是预训练模型之外的新层,它们的主要作用是对预训练模型的输出进行适当的调整,使其适用于新任务。

现有的fineturjng模式可以获得不错的结果,但是同时也有很大的问题

尤其是在一个大数据的情况下,我们微调其实需要大量的数据才有一个好的效果

需要各种各样的数据,才能调整各种

lora

简单的说就是:
在模型外面在潜入一个层
用小模型去影响大模型

LORA(Layer-wise Relevance Analysis)是一种模型解释方法,用于解释深度神经网络的预测结果。它的基本思想是在模型的每一层之间插入一个解释层,通过计算每个输入特征对每个解释层的重要性来解释模型的预测过程。

具体而言,在LORA中,首先将一个小型的解释模型嵌入到原始模型的每个层之间。这个解释模型通常是一个简化的线性模型或者是一个浅层神经网络。然后,通过计算每个输入特征在解释模型中的权重,来评估该特征对模型预测结果的重要性。这样,就可以通过分析每个解释层的输出来解释原始模型的预测过程。

通过LORA方法,我们可以获得每个特征对模型预测的贡献程度,从而更好地理解模型的决策过程。这对于模型的可解释性和可信度评估非常有帮助。此外,LORA还可以用于模型的调试和改进,通过分析每个解释层的输出,我们可以发现模型中可能存在的问题,并采取相应的措施进行改进。

模型微调的问题

尤其是在一个大数据的情况下,我们微调其实需要大量的数据才有一个好的效果

在模型微调中,一个主要的问题是需要大量的数据才能获得良好的效果。特别是在面对大规模数据时,微调模型需要各种类型的数据来适应不同的任务。这使得微调变得困难和耗时。

另一个问题是微调过程中的过拟合。当微调模型时,可能会出现过拟合的情况,即模型在训练数据上表现良好,但在测试数据上表现较差。这可能是由于微调数据的数量有限,导致模型过度适应微调数据而无法泛化到新的数据。

此外,微调过程中的权衡也是一个挑战。在微调中,需要在保留预训练模型的知识的同时,对新任务进行适当的调整。这需要在保持模型的泛化能力和适应性之间找到平衡点。

综上所述,模型微调面临着数据需求大、过拟合和权衡的问题。解决这些问题需要采用合适的数据增强技术、正则化方法和模型架构设计,以及仔细调整微调过程中的超参数。

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

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

相关文章

Atlas200 DK A2与Arduino进行UART串口通信

我们在做一些人工智能的应用开发时往往使用人工智能开发板作为上位机(比如我们的小滕),Arduino、stm32等作为下位机控制板,通过上位机进行人工智能模型的推理之后进而给下位机传输对应的控制命令实现智能控制。那么如何实现两者的…

简化交互体验——探索Gradio的ClearButton模块

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ndarray对象怎样创建?ndarray基本属性列举

numpy中包含一个N维数组对象,即ndarray对象,该对象具有矢量算术能力和复杂的广播能力,常用于科学计算。ndarray对象中的元素可以通过索引访问,索引序号从0开始;ndarray对象中存储的所有元素的类型必须相同。创建ndarray对象的方式…

输入框设置placeholder的文字居中

<input classlogin-form-pwd placeholder请输入商家登录密码 placeholder-class"center"></input> .center{ text-align: center; }

Linux下 MHA故障切换 主从角色提升

目录 所有主机共同操作 manger操作 其他四台安装 搭建主从复制环境 nobe slave1 配置 slave2 slave3 配置 配置MHA环境 简述MHA&#xff1a; MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由…

MySQL中的DDL操作,MySQL中DML操作,MySQL查询数据,SQL函数,MySQL中的索引,MySQL事务,MySQL的用户管理,MySQL分页查询

目录 MySQL中的DDL操作 一、创建表与删除表 1&#xff0c;创建表 2&#xff0c;查看已创建的表。 3&#xff0c;删除表 二、修改表 1&#xff0c;修改表名 2&#xff0c;修改列名 3&#xff0c;修改列类型 4&#xff0c;添加新列 5&#xff0c;删除指定列 三、MySQ…

劳保鞋厂家带你深入了解防静电安全鞋——百华劳保

静电小则电人&#xff0c;大则引起火灾。静电的能量虽然不大&#xff0c;但其易放电&#xff0c;会出现静电火花&#xff0c;在易燃易爆场所&#xff0c;可能因静电火花引起火灾和爆炸。现在的工厂不少都是要求穿着具有防静电性能的工作鞋&#xff0c;很多劳动者都会穿着防静电…

使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三节点-镜像模式)

1. 部署规划 当前规划中&#xff0c;只启动一个HAProxy服务&#xff0c;主要用来做RabbitMQ节点的负载均衡和代理&#xff0c;但是HAProxy可能会出现单点故障&#xff0c;后续需要启动多个HAProxy节点&#xff0c;然后结合Keepalived来进行 设置虚拟IP 做故障转移 节点名称节…

nvm安装nodejs-2023年6月29日

nvm安装nodejs-2023年6月29日 cmd命令行&#xff0c;执行如下代码&#xff0c;表示安装最新稳定版本的node,这里默认是国外的node节点服务器 nvm install lts报错的话&#xff0c;找到安装目录&#xff0c;打开settings.txt&#xff0c;添加如下代码 更换node的国内淘宝镜像节…

cnocr安装和识别文字

cnocr 介绍 参考&#xff1a; cnocr: 极简的中文OCR Python包 https://cnocr.readthedocs.io/zh/latest/ cnocr 主要针对的是排版简单的印刷体文字图片&#xff0c;如截图图片&#xff0c;扫描件等。目前内置的文字检测和分行模块无法处理复杂的文字排版定位。如果要用于场景…

《从零开始编写一个直播服务器》音视频封装FLV

流媒体服务系列文章 文章目录 流媒体服务系列文章前言一、FLV 封装格式解析二、实例分析总结 前言 一、FLV 封装格式解析 flv header flv body flv header previous size0 tag1 previous size1 tag2 … prvious sizen tagn1 flv header previous size0 tag1 header ta…

华为OD机试真题 Python 实现【获得完美走位】【2022Q4 200分】

一、题目描述 在第一人称射击游戏中&#xff0c;玩家通过键盘的 A、S、D、W 四个按键控制游戏人物分别向左、向后、向右、向前进行移动&#xff0c;从而完成走位假设玩家每按动一次键盘&#xff0c;游戏任务会向某个方向移动一步&#xff0c;如果玩家在操作一定次数的键盘并且…

经典文献阅读之--Wheel-SLAM(低成本轮式机器人定位算法)

0. 简介 最近随着越来越多的团队开始注重将SLAM应用在机器人和无人驾驶上&#xff0c;最近SLAM的顶刊顶会也开始想着多模态和低成本这两个方向开始发力。而本文讲的这个《Wheel-SLAM: Simultaneous Localization and Terrain Mapping Using One Wheel-mounted IMU》就是讲了如…

Scala中那些奇怪的符号

<- 运算符 用于 for 循环中&#xff0c;如下所示&#xff1a; for ( i <- arr ){println( "i" i ) } -> 只会用在 k->v 里面 // Map 键值对演示 val colors Map("red" -> "#FF0000", "azure" -> "#F0FF…

WPF 控件设置透明度的方法

方法一&#xff1a;通过 Opacity 属性设置背景色透明度。范围从0-1&#xff0c;0表示完全透明&#xff0c;看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度&#xff0c;是因为Opacity属性是在UIElement 类(以及Brush基类)中定义&#xff0c;所有元素都具有该…

python分析QQ群聊天记录全过程,从获取到可视化

​ 随着社交媒体的兴起&#xff0c;QQ群成为了人们交流的重要平台&#xff0c;而提取这些数据可以帮助我们了解用户关注的重点和行为&#xff0c;那么如何获取QQ群聊天记录呢&#xff1f;如何对其进行处理并分析呢&#xff1f; 这是一套完整的流程&#xff0c;从选定的QQ群中…

2023最新版SpringCloudAlibaba笔记,把微服务玩的出神入化

SpringCloud Alibaba 大家都知道&#xff0c;新的东西出现必然是因为市场的需求。由于 SpringCloud 版本更新较快&#xff0c;日积月累之下产生了许多的 Bug&#xff0c;所以 SpringCloud 微服务实现方式&#xff1a;Spring Cloud Netflix 自然而然地进入了维护状态&#xff0…

java计算器拓展

源代码&#xff1a; package shixun; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.SwingConstants;import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; impor…

Golang项目引入第三方依赖库

基本目录 第一步&#xff1a; 初始化依赖&#xff0c;切换到项目根目录下面&#xff0c;执行一下命令&#xff0c;g6 为 module 的名称 go mod init g6 生成 go.mod 文件 module g6 go 1.20 将来我们项目的所有依赖都会依赖于 g6 第二步&#xff1a; 引入第三方依赖 &qu…

禁烟警示器报警器

本例介绍的禁止吸烟警示器&#xff0c;可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时&#xff0c;该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声&#xff0c;提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…