千问的大模型KnowHow

news2024/12/23 6:13:58

卷友们好,我是rumor。

通义千问昨天放出了14b参数的模型,还有一份比较详尽的技术报告,包含作者们训练8个模型的宝贵经验。

e265b10ae41a8eb7d68250213dee58e6.png

同时他们开源的13B比起开源的SOTA也有不少提升:

6bc935aba37510944770cb0f2b2b942d.png

今天我们就来一起白嫖,更多细节请移步原文:

https://qianwen-res.oss-cn-beijing.aliyuncs.com/QWEN_TECHNICAL_REPORT.pdf

预训练

数据

  • 过了3T token,超过了Baichuan2的2.6T,(大概率)是目前中文社区过了最多语料的开源模型

  • 提升多样性:数据归一化、MinHash和LSH去重

  • 提升质量:通过规则和分类器,给样本打标,包括语言、质量分、有害内容等;随机抽样再进行review;对高质量数据源进行上采样

Tokenization

  • BPE,开源tiktoken的实现

  • 把数字切成digit

  • 最终词表152k,压缩比优于llama、Baichuan、ChatGLM等,但未跟llama2、Baichuan2对比

模型结构

  • 本来LM里为了节省内存,词表大小的embedding层和输出的预测层是权重共享的,千问为提升效果取消了embedding和output的权重共享

  • 采用RoPE[1],为了提升精度和表现,inverse frequency矩阵采用FP32

  • 参考PaLM,去掉了大部分层的bias计算,但为了提升外推能力,保留了QKV计算时的bias

  • 把Pre-Norm换成了RMSNorm,免去了均值的计算,主要是提升效率,效果差不多

  • 激活函数用SwiGLU,为了保证参数量不变,缩小了FFN的维度

  • 对于外推,提出了一种dynamic NTK-aware[2]的插值方法,可以避免效果下降

  • 在attention计算时使用LogN-Scaling,根据上下文长度调整点乘,保证注意力的熵在上下文长度增加时也保持稳定,同时能提升外推表现。公式如下,完整的讲解请移步苏神博客[3]

  • c87d9bfc3e01cd6e7d282935a4233cc9.png

  • 采用window attention,只在一段窗口内做注意力计算,减少计算量。同时发现较低的层对上下文长度更敏感,因此用更短的窗口

精调

  • 数据质量上,去除了只用prompt模版构造的数据,在人类风格的对话上精调

  • 采用了ChatML的格式,让模型可以区分角色和多轮

[
 {"token": "<|im_start|>"},
 "system\nYou are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\nKnowledge cutoff: 2021-09-01\nCurrent date: 2023-03-01",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "assistant\nI am doing well!",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you now?",
 {"token": "<|im_end|>"}, "\n"
]
  • 过了128*4000step数据,但没说过了多少epoch,这样算最多51万精调数据

强化

RM

  • 参考Anthropic[4],先在较糙的数据上预训练RM(StackExchange、Reddit等),再用质量好的数据精调

  • 训练数据的prompt体系做的很全,6600个标签,确保多样性和复杂度

  • 回复的多样性提升可以降低标注难度、提升RM表现

  • 获取句子打分时加了一个pooling层,正常都是直接取最后一个token的表示,直接影射到scalar,这里千问并没说是加的怎样的pooling

  • 训1个epoch

RL

  • critic model warmup 50,百川也是相同的做法

  • RL训练阶段每个query采样两个答案,作者说这样效率会更高(意思是这两个答案都会计算奖励值然后强化?)

  • 用running mean进行奖励归一化

  • value loss clipping,提升RL稳定性

  • actor 采样top-p=0.9,发现可以提升评估效果

  • 用ptx loss来缓解对齐税,用的预训练数据需要比RL数据多很多,但不好调节,系数大了影响对齐,小了又没效果

最终,在300条评估集上,RLHF后的模型在知识、理解、写作、Math、Coding都有提升,有的能力提升还挺大(颜色由深到浅分别是wins、ties、losses):

26e2afb41b4b394ef19df89e3a6da6f6.png

Code模型

  • 为了保证作为助理的能力,选择以文本预训练模型为基座,用代码和文本联合继续训练

  • 提升数据来源多样性很重要

  • 窗口扩到8192

  • 又训了90b的数据,得到CODE-QWEN

Math模型

  • 数学题目一般较短,用1024长度训,提升训练速度

  • 在SFT精调时,mask掉题目中的条件和数字等无意义的词,可以加速收敛(问题来了,本来SFT不就是要mask输入的吗?)

划重点就到这里,欢迎卷友们一起在评论区讨论~

参考资料

[1]

Roformer: Enhanced transformer with rotary position embedding: https://arxiv.org/abs/2104.09864

[2]

YaRN: Efficient context window extension of large language models: https://arxiv.org/abs/2309.00071

[3]

从熵不变性看Attention的Scale操作: https://kexue.fm/archives/8823

[4]

Training a helpful and harmless assistant with reinforcement learning from human feedback: https://arxiv.org/pdf/2204.05862.pdf

bca1bce08a77d90df78eb18a52c39dc7.jpeg


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

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

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

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

「希望GPT4学习一下我国的技术报告」a871b973e79de92ac10d012ee4cc6f19.png

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

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

相关文章

Mybatis 日志(Apache Commons Logging)

之前我们介绍了使用JDK Log打印Mybatis运行时的日志&#xff1b;本篇我们介绍使用Apache Commons Logging打印Mybatis运行时的日志。 如何您对Mybatis中使用JDK Log不太了解&#xff0c;可以参考&#xff1a; Mybatis 日志(JDK Log)https://blog.csdn.net/m1729339749/articl…

上海市小机灵数学比赛回顾和五年级1-15届真题和答案学习资料

从2017年到现在&#xff0c;之前卷得非常厉害的上海市一系列与升学挂钩的竞赛如“小机灵杯、走美杯、希望杯、中环杯”等比赛都成为了竞赛历史的一部分。 尽管教育部门明确规定&#xff0c;学校不得将相关比赛的成绩作为学生评价和选拔的要素&#xff0c;但是许多家长仍按对于…

【STM32基础 CubeMX】从0带你点灯

文章目录 前言一、GPIO的概念二、CubeMX配置GPIO2.1 基础配置2.2 GPIO配置 三、点灯代码讲解3.1 cubemx生成的代码3.2 1个库函数 四、LED闪烁总结 前言 一、GPIO的概念 STM32是一系列微控制器芯片的品牌&#xff0c;它们用于控制各种电子设备。其中的GPIO是通用输入/输出端口的…

Spring IOC(控制反转)与DI(依赖注入)

定义 IOC(Inversion of Control)&#xff0c;即控制反转&#xff1a;对象的创建控制权不再由程序来执行&#xff0c;而是交由给Spring容器处理。简单的说程序不需要进行new操作&#xff0c;对象直接由Spring容器自动创建。 DI(Dependency Injection)&#xff0c;即依赖注入&am…

窗口类介绍

目录 Qwidget QDialog QMessageBox QFileDialog QFontDialog QColorDialog QInputDialog QProgressDialog QMainWindow 菜单栏 工具栏 状态栏 停靠窗口 窗口布局 Qwidget 常用的一些函数包括&#xff1a; 设置窗口的大小&#xff0c;尺寸&#xff0c;得到对应的…

蓝海彤翔亮相2023新疆网络文化节重点项目“新疆动漫节”

9月22日上午&#xff0c;2023新疆网络文化节重点项目“新疆动漫节”&#xff08;以下简称“2023新疆动漫节”&#xff09;在克拉玛依科学技术馆隆重开幕&#xff0c;蓝海彤翔作为国内知名的文化科技产业集团应邀参与此次活动&#xff0c;并在美好新疆e起向未来动漫展映区设置展…

Ubuntu为什么键盘会出现乱字符

今天上午起来只是要简单打一个命令&#xff0c;需要输入一个"双引号&#xff0c;但是总是显示&#xff0c;我一开始以为是中了病毒&#xff0c;把键盘给改了&#xff0c;后来发现虚惊一场&#xff1a;出现这个原因是因为ubuntu的键盘设置有问题。 我把键盘设置为英国英语…

C++简单实现红黑树

目录 一、概念 二、红黑树的性质 三、红黑树的定义 四、红黑树的插入操作 情况一&#xff08;叔叔节点存在且为红色&#xff09;——变色向上调整&#xff1a; 情况二&#xff08;叔叔节点不存在或为黑色&#xff09;——旋转变色&#xff1a; 2.1叔叔节点不存在 2.2叔叔…

在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

T2I-Adapter 是一种高效的即插即用模型&#xff0c;其能对冻结的预训练大型文生图模型提供额外引导。T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来。我们可以根据不同的情况训练各种适配器&#xff0c;实现丰富的控制和编辑效果。 同期的 ControlNet 也有类似的…

Windows Server 2012 R2 安装 .NET Framework 4.6.1

服务器操作系统是 Windows Server 2012 R2 版本&#xff0c;在安装 .NET Framework 4.6.1 过程中出现报错&#xff0c;报错截图如下&#xff1a; 通过上报报错可以发现是缺少对应的 KB2919355 更新&#xff0c;只有安装了此依赖才能在 Windows 8.1 或 Windows Server 2012 R2 …

中秋海报设计技巧大公开

中秋节即将来临&#xff0c;为了帮助大家设计出完美的海报&#xff0c;本文将提供详细的步骤和技巧&#xff0c;让你轻松打造出令人满意的海报作品。 步骤一&#xff1a;注册并登录乔拓云后台&#xff0c;进入海报中心页面。 在制作海报之前&#xff0c;你需要先注册并登录乔拓…

yolov5-6.0使用改进

代码版本V6.0 源码 YOLOv5 v6.0 release 改动速览 推出了新的 P5 和 P6 ‘Nano’ 模型&#xff1a; YOLOV5n和YOLOV5n6。 Nano 将 YOLOv5s 的深度倍数保持为 0.33&#xff0c;但将 YOLOv5 的宽度倍数从 0.50 降低到 0.25&#xff0c;从而将参数从 7.5M 降低到 1.9M&#xff0…

Linux shell 脚本中, $@ 和$# 分别是什么意思

Linux shell 脚本中&#xff0c; 和 和 和# 分别是什么意思&#xff1f; $&#xff1a;表示所有脚本参数的内容 $#:表示返回所有脚本参数的个数。 示例&#xff1a;编写如下shell脚本&#xff0c;保存为test.sh #!/bin/sh echo “number:$#” echo “argume:$” 执行…

李宏毅机器学习第一课(结尾附作业模型详细分析)

机器学习就是让机器找一个函数f&#xff0c;这个函数f是通过计算机找出来的 如果参数少的话&#xff0c;我们可以使用暴搜&#xff0c;但是如果参数特别多的话&#xff0c;我们就要使用Gradient Descent Regression (输出的是一个scalar数值) Classification &#xff08;在…

dart flutter json 转 model 常用库对比 json_serializable json_model JsonToDart

1.对比 我是一个初学者,一直跟着教材用原生的json,最近发现实在太麻烦了.所以搜索了一下,发现真的有很多现成的解决方案. 网页 https://app.quicktype.io/?ldart 这个是测试下来最好用的 有很多选项,可以使用 json_serializable 也可以不使用 json_serializable 这是推荐最…

【模拟实现C语言库函数】atoi的模拟实现

#include <stdio.h> #include <assert.h> #include <string.h> #include <math.h> int my_atoi(const char* str) {assert(str);size_t len strlen(str);size_t j len - 1;// 个位&#xff08;1234中的4&#xff09;int ret str[j--] - 0;// 十位百…

基于PySide6的GUI程序开发全流程(看完就会)

本文详细记录了从零到一开发一个GUI程序的过程&#xff0c;想学PySide6的入门文章不二之选&#xff1b; 1 前言 1.1 开发框架的选择 GUI程序的开发方式太多了&#xff0c;这里肯定就是Python语言了&#xff0c;至于为什么&#xff0c;就不多描述了&#xff1b; 那么基于Pyth…

YOLov5 分割数据集的制作(详细过程+代码)

1.labelme 的使用 每张图片会对应生成一个&#xff1a; 以上已经画好所有的数据集&#xff08;&#xff01;&#xff01;&#xff09; 2.这里介绍一下如果都是没有变化的数据集&#xff0c;标签的位置都一样&#xff0c;如何批量生成这个数据集 我们先将第一个数据集复制2275…

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…

C2. Powering the Hero (hard version)

题目&#xff1a;样例&#xff1a; 输入 5 5 3 3 3 0 0 6 0 3 3 0 0 3 7 1 2 3 0 4 5 0 7 1 2 5 0 4 3 0 5 3 1 0 0 4输出 6 6 8 9 4 思路&#xff1a; 贪心思维题&#xff0c;这道题要求的是一张一张的凑卡牌&#xff0c;凑到的是力量赋值卡就存储好&#xff0c;抽到 0 就是英…