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

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还可以用于模型的调试和改进,通过分析每个解释层的输出,我们可以发现模型中可能存在的问题,并采取相应的措施进行改进。

模型微调的问题

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【内控版】BLM 战略方法论:战略意图篇

目录 介绍 战略意图 专栏列表 详细内容 配图 介绍 欢迎大家继续来到华为战略方法论的系列内容。 今天就来讲讲 BLM 模型中的战略意图篇。 战略意图在 BLM 模型中的位置,大家可以看这张图。 战略意图</

Redis 主从复制 哨兵 集群

Redis 主从复制 哨兵 集群 一、Redis 主从复制1.1 Redis 主从复制介绍1.2 主从复制的作用1.3 主从复制的流程 二、搭建Redis 主从复制2.1 安装 Redis2.2 创建redis工作目录2.3 环境变量2.4 定义systemd服务管理脚本2.5 修改 Redis 配置文件&#xff08;Master节点操作&#xff…

基于TF-IDF+Tensorflow+PyQt+孪生神经网络的智能聊天机器人(深度学习)含全部Python工程源码及模型+训练数据集

目录 前言总体设计系统整体结构图系统流程图孪生神经网络结构图 运行环境Python 环境TensorFlow 环境 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型生成 工程源代码下载其它资料下载 前言 本项目利用TF-IDF&…

Microsoft Remote Desktop for mac安装教程

适用于Mac的Microsoft远程桌面测试版&#xff01;Microsoft Remote Desktop Beta for Mac是一种远程工具&#xff0c;允许用户从Mac远程访问基于Windows的计算机。使用此工具&#xff0c;用户可以随时随地使用Mac连接到远程桌面、应用程序和资源。 Microsoft Remote Desktop B…

【玩转Linux操作】一文带你明白Shell的判断,循环语句

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;判断语句⭐单层if&#x1f388;示例 ⭐…

【python】制作一个串口工具(下)!

上一章节我们说了UI界面的设计&#xff0c;这一节来说下怎样实现其功能。 一.实例演示 1.创建一个.py文件&#xff0c;以下代码用来实现获取所有的串口信息&#xff1a; import serial import serial.tools.list_portsfrom PyQt5.QtWidgets import QComboBoxclass My_ComBoBo…

signed char 与 unsigned char 的取值范围

&#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; 【C语言趣味教程】(2) 整数类型 | 数据类型的概念 | 原码反码与补码 | 有符号型和无符类型 | 研究 signed char 与 unsigned char 的取值范围 ​—— 热门专栏《维生素C语言》的重…

小程序页面顶部标题栏、导航栏navigationBar如何隐藏、变透明?

在app.json中的 "window"下面追加一行 "navigationStyle": "custom" 小程序顶部的白色背景条就不见了&#xff0c;直接变透明&#xff0c;只剩下右上角的胶囊按钮 警告&#xff1a; 如果页面有 <web-view src"{{src}}" /> …

【网络原理】TCP连接管理机制(三次握手四次挥手)

&#x1f94a;作者&#xff1a;一只爱打拳的程序猿&#xff0c;Java领域新星创作者&#xff0c;CSDN、阿里云社区优质创作者。 &#x1f93c;专栏收录于&#xff1a;计算机网络原理 在使用TCP协议进行网络交互时&#xff0c;TCP会进行三次握手即建立连接&#xff0c;TCP四次挥手…

密码学学习笔记(八):Public-Key Encryption - 公钥加密1

简介 公钥加密也被称为非对称加密。下面是一个例子&#xff1a; Bob生成一个密钥对&#xff0c;发布他的公钥&#x1d443;&#x1d43e;&#x1d435;, 保管密钥&#x1d446;&#x1d43e;&#x1d435; 私有的Alice使用&#x1d443;&#x1d43e;&#x1d435; 加密明文M…

TypeScript - 函数(下)

目录 1、在函数中声明this 2、其他需要知道的类型 2.1 void 2.2 object 2.3 unknow 2.4 never 2.5 Function 3、其余参数&#xff08;rest&#xff09;和参数 4、参数解构 5、函数的可分配性 1、在函数中声明this TypeScript 将通过代码流分析推断函数中应该是什么&…

安卓JNI从0到1入门教程(二)

经过上一篇《安卓JNI从0到1入门教程&#xff08;一&#xff09;》介绍&#xff0c;我们对JNI有了初步认识&#xff0c;接下来我会从ndk-build方式和cmake方式分别来介绍怎么构建native库&#xff1a; 一、ndk-build ndk-build依赖配置文件Android.mk&#xff0c;存放代码的位…

AI PPT 一句话搞定PPT讲演搞

相信大家在职场中&#xff0c;一定会接触过写PPT&#xff0c;经常会把你搞得焦头烂额。在大部分的公司里&#xff0c;写PPT汇报又是不可能逃避的事情。但随着AI时代的到来&#xff0c;有很多AI帮你写PPT的工具也逐渐崭露头角&#xff0c;可以自动帮助你制作出华丽的PPT&#xf…

docker部署rabbitmq 后访问管理首页常见问题

1.项目启动后 管理首页无法访问 1&#xff09;检查15672端口是否可以访问 2&#xff09;docker exec -it your_container_name /bin/bash 进入docker容器执行如下命令&#xff1a; 3) rabbitmq-plugins enable rabbitmq_management 2.访问首页时提示不是私密连接&#xff1a;…

自动化测试 selenium 篇

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录 什么是自动化测试&#xff1f;Selenium 介绍Selenium 是什么Selenium 特点工作原理 seleniumJava环境搭建ChromeJava1.下载ch…

抖音seo源码--矩阵系统开发者日志

这是矩阵系统源码开发者的日志分享&#xff0c;我们致力于为开发者们提供优质的SEO源码。我们研究用户行为、数据分析和搜索引擎算法&#xff0c;以提高内容的搜索排名和曝光度。通过不断优化关键词、元数据和链接策略&#xff0c;我们帮助抖音用户更好地被发现和分享。这个日志…

flutter开发实战-指纹、面容ID验证插件实现

flutter开发实战-指纹、面容ID验证插件实现 在iOS开发中&#xff0c;经常出现需要指纹、面容ID验证的功能。 指纹、面容ID是一种基于用生物识别技术&#xff0c;通过扫描用户的面部特征来验证用户身份。 一、效果图 二、iOS指纹、面容ID验证 在iOS中实现指纹、面容ID验证功能…

如何用爬虫实现GPT功能

如何用爬虫实现GPT功能&#xff1f; GPT&#xff08;Generative Pre-trained Transformer&#xff09;和爬虫是两个完全不同的概念和技术。GPT是一种基于Transformer模型的自然语言处理模型&#xff0c;用于生成文本&#xff0c;而爬虫是一种用于从互联网上收集数据的技术。 …

【数据结构与算法】力扣:对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 来源&#xff1a;…

GlusterFs 分布式复制卷(Distributed-Replicate)性能测试

目录 fio工具参数解释 Glusterfs 和NFS 性能测试 顺序写&#xff1a; 随机写&#xff1a; 顺序读&#xff1a; 随机读&#xff1a; 随机读写&#xff1a; 参数说明&#xff1a; 测试结论&#xff1a; 与NFS对比 压测对比结果 NFS和GlusterFs的优缺点 NFS的优点 NFS…