百川的大模型KnowHow

2023-09-13 09:18:48

卷友们好,我是rumor。

大模型是一个实验工程,涉及数据清洗、底层框架、算法策略等多个工序,每个环节都有很多坑,因此知道如何避坑和技术选型非常重要,可以节省很多算力和时间,说白了就是一摞摞毛爷爷。

be45d270ec98841e18db82358185489a.png

近期百川智能发布了Baichuan2的7B和13B版本,可能不少卷友被刷屏惯了没有仔细看,他们在放出模型的同时也给了一份技术报告,里面干货满满,因此我自来水一波,带大家一起看看百川积累的KnowHow。同时也有一些我没完全懂的地方,希望抛砖引玉,可以一起在评论区讨论。

Pre-train

数据

数据多样性

  1. 从不同的来源获取数据,最好建立一个类目体系,可以提升对整体数据分布的把控,方便后续增减。

  2. 进行聚类和去重,可以通过LSH局部敏感或者稠密向量作为聚类特征,LSH更快一些,但向量可以更好地编码语义。但这里有个问题是需要卡阈值,去重过猛会影响多样性降低泛化能力。因此百川选择的做法是去除一部分,并对剩余的样本打分,作为预训练时采样的权重。

整体去重的流程如下(这里我没太懂的是为何把Document去重放在最后一步,如果放在前面的环节应该可以显著减少句子和段落的数据量):

81c529f4b8a2c99b738a985da590d5cf.png

数据质量

  1. 采用句子级别的分类器进行过滤,这个是业内常用做法了,但具体用什么数据训练,用什么标准标注没有细说。

  2. 对于内容安全,用规则和模型洗掉有害内容,还额外找了一些正向价值观的数据源,提升采样概率。

模型结构

Tokenizer

Tokenizer的难点是平衡压缩比和词表尺寸,比如频繁出现的几个中文是可以用1个token表示的,这样inference时就会很快,但合并的话这几个中文字单独的embedding训练可能就不充分,跟其他字组合时语义表示会不够好。

因此百川使用BPE,选择了比较折中的12万大小,同时披露了以下细节:

  1. 对原始数据不做任何归一化

  2. 把数字完全拆开,可以更好理解数值数据

  3. 为了代码数据,专门增加空格token

  4. 覆盖率在0.9999,只有少量fall back(一种避免OOV的方法,在碰到unknown中文时会变成utf8的byte token)

位置编码

由于有外推的需求,最近位置编码有很多新的工作,比较火的当属RoPE和ALiBi,这里百川都用了,因为他们实验发现位置编码并没有显著影响模型表现,同时进行了速度优化:

  1. RoPE + Flash Attention

  2. ALiBi + xFormers

激活函数

采用了表现更好的SwiGLU,由于SwiGLU有三个矩阵,引入了更多参数,因此百川缩小了FFN层的尺寸(4->8/3再处理成128的倍数)。

Normalisations

  1. 对Transformer的输入采用LayerNorm,对warm-up更鲁棒

  2. 采用了RMSNorm的实现,指计算输入特征的方差,提升计算效率

混合精度

采用BF16,因为其具有更大的范围,可以让训练更稳定,但对于位置编码、优化器等,采用全精度。

提升稳定性

  1. NormHead:对输出的表示进行归一化。首先低频token的模会在训练中变小,进行归一化后可以提升稳定性。另外百川通过对输出表示聚类,发现cosine距离可以将相似语义的聚到一起而L2距离不行,归一化可以消除最终计算logits时点乘中L2的影响。从实验结果可以明显发现loss收敛更好更稳定。

  2. Max-z loss:在训练过程中,百川发现模型的logits都很大,这样就会对解码时的超参数鲁棒性较低,因此增加max-z loss拉低logits的值。

注:对于预训练的优化解读跳过了Infra的部分,不是那么懂。。

Alignment

SFT

  1. 数据质量:采用抽检的方式进行质量把控,抽一批数据检查,不合格全部退回。

  2. 数据数量:100k(目前开源SFT数据还是挺多的,不知道百川出于什么考虑

Reward Model

  1. Prompt多样性:构造了一个200+细分类目的数据体系,尽可能覆盖用户需求,同时提升每类prompt多样性,从而提升泛化能力

  2. Response多样性:用不同尺寸和阶段的百川模型生成答案,不使用其他开源模型(经验证无法提升RM准确率)

PPO

  1. 预先对critic模型进行了warmup

  2. 为提升RL稳定性,进行梯度裁剪

安全

由于模型开源,百川在内容安全上非常细致,包括:

  1. 聘请10位专业审核人员构建了100+安全类目

  2. 用50人的标注团队构建了200K攻击指令

  3. 对于攻击指令,生产多样性很大的回答

总结

Baichuan2的效果比第一版提升了很多,在推理任务上效果翻倍,是目前开源模型中过了最多中文语料的模型399756b20ef25fce76f1f3c819f36874.png。欢迎用过的朋友在评论区反馈效果~

4094d631da1daffa53f747dc1388b35e.jpeg


我是朋克又极客的AI算法小姐姐rumor

北航本硕,NLP算法工程师,谷歌开发者专家

欢迎关注我,带你学习带你肝

一起在人工智能时代旋转跳跃眨巴眼

「感恩开源,白嫖开心」a601e984dd2a051e76c757830cfbf896.png

更多推荐

MySQL---优化&日志

目录一、MySQL优化3、mysqlserver上的优化3.1、MySQL查询缓存3.2、索引和数据缓存3.2、线程缓存二、MySQL日志2.1、redolog重做日志2.2、undolog回滚日志2.3、错误日志2.4、查询日志2.5、二进制日志2.5.1、基于binlog数据恢复实践操作六、慢查询日志一、MySQL

渗透测试信息收集方法和工具分享

文章目录一、域名收集1.OneForAll2.子域名挖掘机3.subdomainsBurte4.ssl证书查询二、获取真实ip1.17CE2.站长之家ping检测3.如何寻找真实IP4.纯真ip数据库工具5.c段,旁站查询三、端口扫描1.端口扫描站长工具2.masscan(全端口扫描)+nmap扫描3.scanport

科大讯飞分类算法挑战赛2023的一些经验总结

引言:ResNet是hekaiming大佬的早年神作,当年直接刷榜各大图像分类任务。ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络,而ResNext在其基础上,进行了一定修改完善,通过引入Cardinatity后,模型性能得到了大幅度提升。(下图是经典ResNet残差

知识图谱实战应用28-基于py2neo的ICD-11疾病分类的知识图谱的查询与问答实战应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用28-基于py2neo的ICD-11疾病分类的知识图谱的查询与问答实战应用。使用基于py2neo的ICD-11疾病分类知识图谱,我们能够像探索一座生物医学宇宙般,穿梭在各种疾病之间。这个神奇的图谱可以帮助我们揭示各种疾病之间复杂而微妙的联系。就像一位专业的侦探,我

【大数据】Neo4j 图数据库使用详解

目录一、图数据库介绍1.1什么是图数据库1.2为什么需要图数据库1.3图数据库应用领域二、图数据库Neo4j简介2.1Neo4j特性2.2Neo4j优点三、Neo4j数据模型3.1图论基础3.2属性图模型3.3Neo4j的构建元素3.3.1节点3.3.2属性3.3.3关系3.3.4标签四、Neo4j搭建过程4.1搭建步

泰安ITSS认证流程,认证条件

ITSS认证流程,认证条件一、ITSS的意义ITSS认证——信息技术服务标准,是在工业和信息化部、国家标准化委的领导和支持下,由ITSS工作组研制的一套IT服务领域的标准库和一套提供IT服务的方法论。ITSS认证-信息技术服务标准是一套成体系和综合配套的信息技术服务标准库,全面规范了IT服务产品及其组成要素,用于指导实

结构型模式-享元模式

主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建5个对象来画出20个分布于不同位置的圆来演示这种模式。由于只有5种可用的颜色,所以color属性

2-1 张量数据结构

张量概念张量是什么?单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)。在深度学习中,标量、向量、矩阵、高维矩阵都统称为张量。在pytorch中,一个Tensor内部包含数据和导数两部分。Pytorch的基本数据结构是张量

Learn Prompt-角色扮演

模拟面试​当你在新闻中读到更多关于ChatGPT的内容时,你会听说ChatGPT可以代替医生、面试官、教师、律师等。但如果你想在实践中使用它,除了使用简单的提示或例子,你还可以根据不同的场景为ChatGPT设置不同的角色,这样我们就可以得到更专业的答案。让我们从一个简单的例子开始:首先我们可以让ChatGPT担任面试官

Improving 3D Imaging with Pre-Trained Perpendicular 2D Diffusion Models

使用预先训练的垂直2D扩散模型改进3D成像论文链接:https://arxiv.org/abs/2303.08440项目链接:https://github.com/hyn2028/tpdmAbstract扩散模型由于其众多的优点已经成为一种流行的图像生成和重建方法。然而,大多数基于扩散的逆问题解决方法只处理2D图像,甚

【数据结构-树】红黑树

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

热文推荐