LLM - 大模型 ScallingLaws 的迁移学习与混合训练(PLM) 教程(3)

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/145212097

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律,揭示在大模型中,随着模型参数数量、数据集大小和计算资源的增加,模型性能的变化模式,指导更高效地分配资源,优化模型训练过程,实现更好的性能。这些规律不仅有助于预测不同规模模型的表现,还能为模型设计和训练提供理论依据,是推动大模型发展和应用的重要理论基础。

在 PLM 的迁移学习中,预训练 CLM 迁移至 MLM,通过 迁移缩放法则(Transfer Scaling Laws),合理的分配训练资源,以达到性能最优。同时验证,混合训练(Mixing Training) CLM 与 MLM,不如从零开始训练。

系列文章:

  1. 大模型 ScallingLaws 的 C=6ND 公式推导
  2. 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数
  3. 大模型 ScallingLaws 的迁移学习与混合训练

1. 从零开始与迁移学习

迁移缩放法则(Transfer Scaling Laws):预训练 MLM,迁移至 CLM,随着模型规模增大,收益递减;预训练 CLM,迁移至 MLM,随着模型规模增大,收益增加。不同 FLOPs 下 CLM 和 MLM 的损失(Loss)曲线,表明迁移策略的 有效前沿(Efficiency Frontiers),或 帕累托前沿(Pareto Frontier) 。如图:

Transfer

同时训练多个目标时,可能存促进或干扰,即 协同效应 问题,训练顺序也是关键因素,先训练 CLM 再训练 MLM,效果影响较大,反之,效果影响较小。

从零开始训练(Training from Scratch) L ( C s ) L(C_{s}) L(Cs)迁移学习(Transfer Learning) L ( C t ) L(C_{t}) L(Ct) 的 Loss 与 C 的法则:

L ( C s ) = a s × C s α s , L ( C t ) = a t × C t α t L(C_{s}) = a_{s} \times C_{s}^{\alpha_{s}},L(C_{t})=a_{t} \times C_{t}^{\alpha_{t}} L(Cs)=as×CsαsL(Ct)=at×Ctαt

计算量与 Loss 的相关参数:

Loss

例如,以 CLM 的计算量 1 × 1 0 21 1 \times 10^{21} 1×1021 为例,从头开始训练(CLM)的 Loss 与 迁移学习(MLM to CLM)的 Loss,即:

L ( C s ) = 8.251 × ( 1 × 1 0 21 ) − 0.027 = 2.2362 L ( C t ) = 7.191 × ( 1 × 1 0 21 ) − 0.024 = 2.2531 L ( C s ) = 8.251 × ( 3 × 1 0 19 ) − 0.027 = 2.4582 L ( C t ) = 7.191 × ( 3 × 1 0 19 ) − 0.024 = 2.4507 L(C_s) = 8.251 \times (1 \times 10^{21})^{-0.027} = 2.2362 \\ L(C_t) = 7.191 \times (1 \times 10^{21})^{-0.024} = 2.2531 \\ L(C_s) = 8.251 \times (3 \times 10^{19})^{-0.027} = 2.4582 \\ L(C_t) = 7.191 \times (3 \times 10^{19})^{-0.024} = 2.4507 L(Cs)=8.251×(1×1021)0.027=2.2362L(Ct)=7.191×(1×1021)0.024=2.2531L(Cs)=8.251×(3×1019)0.027=2.4582L(Ct)=7.191×(3×1019)0.024=2.4507

例如,以 MLM 的计算量 1 × 1 0 21 1 \times 10^{21} 1×1021 为例,从头开始训练(MLM)的 Loss 与 迁移学习(CLM to MLM)的 Loss,即:

L ( C s ) = 10.125 × ( 1 × 1 0 21 ) − 0.034 = 1.9561 L ( C t ) = 11.133 × ( 1 × 1 0 21 ) − 0.038 = 1.7726 L(C_s) = 10.125 \times (1 \times 10^{21})^{-0.034} = 1.9561 \\ L(C_t) = 11.133 \times (1 \times 10^{21})^{-0.038} = 1.7726 L(Cs)=10.125×(1×1021)0.034=1.9561L(Ct)=11.133×(1×1021)0.038=1.7726

因此,推导出 MLM 从零开始训练 C s C_{s} Cs 与 从 CLM 迁移学习 C t C_{t} Ct 的达到最优 Loss 所需计算量的比例:

C t ∝ C s α s α t = C s − 0.034 − 0.038 = C s 0.894 C_{t} \propto C_{s}^{\frac{\alpha_{s}}{\alpha_{t}}} = C_{s}^{\frac{-0.034}{-0.038}} = C_{s}^{0.894} \\ CtCsαtαs=Cs0.0380.034=Cs0.894

因此,最优的迁移学习策略:先使用 CLM 预训练,然后再训练 MLM。同时,CLM 与 MLM 的 混合训练(Mixing Training) 或改变训练顺序(即先 MLM 后 CLM),都没有带来显著的益处。推测原因是, MLM 仅专注于恢复 被损坏(Mask) 的标记,不具有因果性,如果 MLM 以从左到右的方式,根据上文预测序列中间的片段,才可能加快训练速度。

关于 CLM 与 MLM 的 混合训练(Mixing Training) 目标的验证 Loss,在全部模型规模中,从零开始训练都比混合训练的验证损失更低,表明,混合训练不如针对每个单独目标的专门训练有效。参考:

Mix

2. CLM 迁移至 MLM 的 Tokens 比例

左侧:为 CLM 预训练分配的 % 计算量的有效困惑度,即,% 计算资源表示在 CLM 预训练,剩余计算资源在 MLM 微调。最优的 CLM 预训练 % 计算资源范围为 [ 10 , 20 ] [10,20] [10,20],拟合的 D t D t + D f \frac{D_{t}}{D_{t}+D_{f}} Dt+DfDt 在最优损失范围内下降。

右侧:从零开始训练的模型(红色)从预训练 CLM 微调的模型(绿色) 的验证 困惑度(PPL) 比较,表明从 CLM 微调在更少 Tokens 数量下,降低困惑度。

Transfer

以模型规模 N = 85 M N=85M N=85M 为例,通过之前的公式,合理计算模型的计算量 C = 3 × 1 0 19 C=3 \times 10^{19} C=3×1019,即:

C C L M ( N ) = ( N 1.26 ∗ 1 0 − 3 ) 1 0.578 C C L M ( 85 × 102 4 2 ) = ( 85 × 102 4 2 1.26 × 1 0 − 3 ) 1 0.578 = 0.6 × 1 0 19 C M L M ( N ) = ( N 6.19 × 1 0 − 8 ) 1 0.776 C M L M ( 85 × 102 4 2 ) = ( 85 × 102 4 2 6.19 × 1 0 − 8 ) 1 0.776 = 3.4 × 1 0 19 \begin{align} C_{CLM}(N) &= (\frac{N}{1.26*10^{-3}})^\frac{1}{0.578} \\ C_{CLM}(85 \times 1024^{2}) &= (\frac{85 \times 1024^{2}}{1.26 \times 10^{-3}})^{\frac{1}{0.578}} \\ &= 0.6 \times 10^{19} \\ C_{MLM}(N) &= (\frac{N}{6.19 \times 10^{-8}})^{\frac{1}{0.776}} \\ C_{MLM}(85 \times 1024^{2}) &= (\frac{85 \times 1024^{2}}{6.19 \times 10^{-8}})^{\frac{1}{0.776}} \\ &= 3.4 \times 10^{19} \end{align} CCLM(N)CCLM(85×10242)CMLM(N)CMLM(85×10242)=(1.26103N)0.5781=(1.26×10385×10242)0.5781=0.6×1019=(6.19×108N)0.7761=(6.19×10885×10242)0.7761=3.4×1019

合理数据量 D = 63.58 × 1 0 9 D=63.58 \times 10^{9} D=63.58×109 是:

D = C 6 N = 3.4 × 1 0 19 6 × 85 × 102 4 2 = 63.58 × 1 0 9 = 60 B \begin{align} D = \frac{C}{6N} = \frac{3.4 \times 10^{19}}{6 \times 85 \times 1024^{2}} = 63.58 \times 10^{9} = 60B \end{align} D=6NC=6×85×102423.4×1019=63.58×109=60B

其中, D t D_{t} Dt 表示 CLM 预训练的 Tokens 数量, D f D_{f} Df 表示 MLM 微调的 Tokens 数量,全部数据量即 D t + D f D_{t}+D_{f} Dt+Df

有效转移标记(Effectively Transferred Tokens, ETT) D t D_{t} Dt 是模型规模相同,在 MLM 上从零开始训练,以达到与在 CLM 上预训练的模型,相同损失所需的额外数据。如果预训练的 CLM 模型中的标记数量超过 D t D_{t} Dt ,那么 CLM 预训练的计算就是多余的。如果能提前知道 D t D_{t} Dt ,可以指导 CLM 预训练的标记分配。

迁移缩放法则(Transfer Scaling Laws),以模型规模 N = 85 M N=85M N=85M ,微调数据 D f = 48 B D_{f}=48B Df=48B 为例,计算预训练 D t = 8.57 B D_{t}=8.57B Dt=8.57B占比约 14.28%,属于 [10, 20] 之间,符合法则:

D t = k × 1 D f α × 1 N β = 3.65 × 1 0 5 × 1 D f − 0.137 × 1 N − 0.369 D t = 3.65 × 1 0 5 × 1 ( 48 × 102 4 3 ) − 0.137 × 1 ( 85 × 102 4 2 ) − 0.369 = 9.2 × 1 0 9 ≈ 8.57 B < 12 B \begin{align} D_{t} &= k \times \frac{1}{D_{f}^{\alpha}} \times \frac{1}{N^{\beta}} \\ &= 3.65 \times 10^5 \times \frac{1}{D_{f}^{-0.137}} \times \frac{1}{N^{-0.369}} \\ D_{t} &= 3.65 \times 10^5 \times \frac{1}{(48 \times 1024^3)^{-0.137}} \times \frac{1}{(85 \times 1024^2)^{-0.369}} \\ &= 9.2 \times 10^9 \approx 8.57B < 12B \end{align} DtDt=k×Dfα1×Nβ1=3.65×105×Df0.1371×N0.3691=3.65×105×(48×10243)0.1371×(85×10242)0.3691=9.2×1098.57B<12B

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

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

相关文章

深入浅出 Go语言并发安全字典 sync.Map:原理、使用与优化

深入浅出 Go语言并发安全字典 sync.Map:原理、使用与优化 背景介绍 Go语言作为一种高效的并发编程语言,其标准库中提供了丰富的并发工具,如sync.WaitGroup、sync.Mutex等。然而,在实际开发中,我们经常需要在多个goroutine之间共享数据,这就涉及到并发安全的问题。传统的…

解决leetcode第3418题机器人可以获得的最大金币数

3418.机器人可以获得的最大金币数 难度&#xff1a;中等 问题描述&#xff1a; 给你一个mxn的网格。一个机器人从网格的左上角(0,0)出发&#xff0c;目标是到达网格的右下角(m-1,n-1)。在任意时刻&#xff0c;机器人只能向右或向下移动。 网格中的每个单元格包含一个值coin…

蓝桥杯 Python 组知识点容斥原理

容斥原理 这张图初中或者高中数学课应该画过 也就是通过这个简单的例子引出容斥原理的公式 这张图的面积&#xff1a;s1 s3 s7 - 2 * s2 - 2 * s4 - 2 * s6 3 * s5 通过此引导出容斥原理公式 那么下面来一起看看题目 题目描述 给定 n,m 请求出所有 n 位十进制整数中有多…

GitLab:添加SSH密钥之前,您不能通过SSH来拉取或推送项目代码

1、查看服务器是否配置过 [rootkingbal-ecs-7612 ~]# cd .ssh/ [rootkingbal-ecs-7612 .ssh]# ls authorized_keys id_ed25519 id_ed25519.pub id_rsa id_rsa.pub2、创建密钥 $ ssh-keygen -t rsa -C kingbalkingbal.com # -C 后写你的邮箱 一路回车 3、复制密钥 [rootk…

Rust:指针 `*T` 和引用 `T`的区别

在 Rust 编程语言中&#xff0c;*T 和 &T 是两种不同类型的指针&#xff0c;它们各自代表了不同的内存访问方式和所有权模型。 *T&#xff08;原始指针或裸指针&#xff09;&#xff1a; *T 是一个原始指针&#xff08;也称为裸指针或裸引用&#xff09;&#xff0c;它可以…

day10_Structured Steaming

文章目录 Structured Steaming一、结构化流介绍&#xff08;了解&#xff09;1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型&#xff08;掌握&#xff09;1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…

华为OD机试E卷 ---最大值

一、题目描述 给定一组整数(非负)&#xff0c;重排顺序后输出一个最大的整数。 二、示例1 用例1 输入 10 9输出 910说明:输出结果可能非常大&#xff0c;所以你需要返回一个 字符串只而不是整数。 三、输入描述 数字组合 四、输出描述 最大的整数 五、解题思路 字符…

Elasticsearch容器启动报错:AccessDeniedException[/usr/share/elasticsearch/data/nodes];

AccessDeniedException 表明 Elasticsearch 容器无法访问或写入数据目录 /usr/share/elasticsearch/data/nodes。这是一个权限问题。 问题原因&#xff1a; 1、宿主机目录权限不足&#xff1a;映射到容器的数据目录 /data/es/data 在宿主机上可能没有足够的权限供容器访问。 …

设计模式-结构型-装饰器模式

装饰器模式&#xff08;Decorator Pattern&#xff09;是结构型设计模式中的一种&#xff0c;它允许你通过将对象封装在一个新的对象中&#xff0c;来动态地添加新的功能&#xff0c;而无需改变原对象的结构。装饰器模式的核心思想是“将功能附加到对象上”&#xff0c;它是一种…

第8篇:从入门到精通:掌握Python异常处理

第8篇&#xff1a;异常处理 内容简介 本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型&#xff0c;掌握使用try-except块处理异常的方法&#xff0c;了解finally语句的作用&#xff0c;以及如何抛出和定义自定义异常。通过丰富的代码示例&#xff0…

Ubuntu20.4和docker终端指令、安装Go环境、安装搜狗输入法、安装WPS2019:保姆级图文详解

目录 前言1、docker、node、curl版本查看终端命令1.1、查看docker版本1.2、查看node.js版本1.3、查看curl版本1.4、Ubuntu安装curl1.5、Ubuntu终端保存命令 2、安装docker-compose、Go语言2.1、安装docker-compose2.2、go语言安装步骤2.3、git版本查看 3、Ubuntu20.4安装搜狗输…

【PHP】双方接口通信校验服务

请求方 使用 ApiAuthService::buildUrl($domain, [terminal > 1, ts > time()]); //http://域名/adminapi/login/platformLogin?signF7FE8A150DEC18BE8A71C5059742C81A&terminal1&ts1736904841接收方 $getParams $this->request->get();$validate ApiA…

【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)

单例模式 作用&#xff1a;单例模式的核心是保证一个类只有一个实例&#xff0c;并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全&#xff0c;调用效率高 &#xff0c;但是不能延迟加载懒汉式线程安全&#xff0c;调用效率不高&#xff0c;能延迟加载双重检…

无公网IP 实现外网访问本地 Docker 部署 Navidrome

Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用&#xff0c;它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…

从零开始,掌握Django Web开发

1. Django简介 Django是一个强大的Python Web框架,它使开发人员能够快速构建安全、可扩展的Web应用程序。让我们深入了解Django的特性和优势。 1.1 什么是Django? Django是一个高级Python Web框架,于2005年首次发布。它由新闻网站的开发人员创建,旨在处理快节奏的新闻编辑室…

解决conda create速度过慢的问题

问题 构建了docker容器 想在容器中创建conda环境&#xff0c;但是conda create的时候速度一直很慢 解决办法 宿主机安装的是anaconda 能正常conda create,容器里安装的是miniforge conda create的时候速度一直很慢&#xff0c;因为容器和宿主机共享网络了&#xff0c;宿主机…

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求&#xff0c;比如&#xff1a;增加一个新字段。 如果使用如下语句新增列&#xff0c;可以成功添加列col1。但如果数据表tb已经有旧的分区&#xff08;例如&#xff1a;dt20190101&#xff09;&#xff0c;则该旧分区中的col1将为…

【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作

最近在弄selenium的爬取的过程中&#xff0c;我发现一些网站上的表格&#xff0c;是需要手动拉到底部才能加载完成的。 如果没有拉到底部&#xff0c;那么在获取网页表格的时候&#xff0c;表格就会只有显示的一部分&#xff0c;页面就不完整。 所以我就整理了一些模拟滚动鼠…

openharmony电源管理子系统

电源管理子系统 简介目录使用说明相关仓 简介 电源管理子系统提供如下功能&#xff1a; 重启服务&#xff1a;系统重启和下电。系统电源管理服务&#xff1a;系统电源状态管理和休眠运行锁管理。显示相关的能耗调节&#xff1a;包括根据环境光调节背光亮度&#xff0c;和根…

esg信息披露是什么,有什么意义

ESG信息披露是指企业将其在运营中涉及的环境&#xff08;Environment&#xff09;、社会&#xff08;Social&#xff09;及治理&#xff08;Governance&#xff09;因素&#xff0c;向投资者、消费者等利益相关者公开揭示的过程。以下是对ESG信息披露及其意义的详细解释&#x…