大模型的scaling laws:Scaling Laws for Neural Language Models
一、TL;DR
- Loss与模型size、数据集大小以及用于训练的计算量呈幂律关系
- 其他架构细节,如网络宽度或深度,在较宽范围内影响极小
- 简单的公式可以描述过拟合与模型/数据集大小的依赖关系,以及训练速度与模型大小的依赖关系
- 作用:固定计算预算的最优分配。更大的模型显著更样本高效
- 记住标红的小节结论就行了,重要的是结论和学习如何做消融实验的思路
二、引言/简单介绍
2.1 为什么要做
实证研究Transformer 架构的语言建模损失对模型架构、模型大小、训练资源以及用于训练过程的数据这些因素的依赖关系
2.2 有什么结论
-
模型性能主要依赖于规模,包括三个因素:模型参数的数量 N、数据集的大小 D 和用于训练的计算量 C。在合理范围内,性能对其他架构超参数(如深度与宽度)的依赖性非常弱
-
平滑的幂律关系:当不被其他两个因素限制时,性能与三个规模因素 N、D、C 呈幂律关系,趋势跨越超过六个数量级(见图1)。
-
过拟合的普遍性:只要我们同时扩大 N 和 D,性能就会可预测地提高,但如果固定其中一个而增加另一个,则进入收益递减的阶段。性能惩罚可预测地取决于比率
,这意味着每当我们增加模型大小8倍时,我们只需要增加大约5倍的数据来避免惩罚。
-
训练的普遍性:训练曲线遵循可预测的幂律,其参数大致与模型大小无关。通过外推训练曲线的早期部分,我们可以大致预测如果训练时间更长会达到的损失。(第5节)
-
迁移性能与测试性能相关:当我们对模型在与训练数据分布不同的文本上进行评估时,结果与训练验证集上的结果强相关,损失上有一个大致恒定的偏移量——换句话说,迁移到不同的分布会带来一个恒定的惩罚,但除此之外,性能大致与训练集上的表现一致。(第3.2.2节)
-
样本效率:大模型比小模型更样本高效,以更少的优化步骤(见图2)和更少的数据点(见图4)达到相同水平的性能。
-
-
收敛效率低:在固定计算预算 C 的情况下,但不对模型大小 N 或可用数据 D 进行其他限制时,我们通过训练非常大的模型并显著早于收敛时停止训练来获得最佳性能(见图3)。因此,最大计算效率的训练会比基于将小模型训练到收敛的预期更样本高效,数据需求随着训练计算量 C 的增加而非常缓慢地增长,D∼C0.27。(第6节)
-
最佳批量大小:训练这些模型的理想批量大小大致是损失的幂,通过测量梯度噪声规模 [MKAT18] 来确定;对于我们能够训练的最大模型,在收敛时大约为100万到200万标记。(第5.1节)
综合来看,这些结果表明,当我们适当地扩大模型大小、数据和计算量时,语言建模性能会平稳且可预测地提高。我们预计,更大的语言模型将比当前模型表现更好且更样本高效。
2.3 scaling law 总结
当性能仅受非嵌入参数数量 N 、数据集大小 D 或最大分配计算预算 Cmin 限制时,可以使用幂律定律来预测基于Transformer的自回归语言模型的测试损失值(图1)::
-
对于参数数量有限的模型,在足够大的数据集上训练到收敛:
-
对于在有限数据集上训练的大模型,采用早期停止:
-
当训练的计算量有限,数据集足够大,模型大小合适,批量大小足够小(充分利用计算量)时:
这些关系在 Cmin 的八个数量级、N 的六个数量级和 D 的两个数量级以上都成立。它们对模型形状和其他 Transformer 超参数(深度、宽度、自注意力头的数量)的依赖性非常弱
决定数据并行的速度/效率权衡的关键批量大小也大致遵循 L 的幂律:
方程(1.1)和(1.2)一起表明,当我们增加模型大小时,我们应该根据 D∝NαN/αD∼N0.74 次线性地增加数据集大小。实际上,我们发现有一个结合了(1.1)和(1.2)的单一方程,它同时依赖于 N 和 D,并决定了过拟合的程度:
拟合结果如图4左侧所示。我们推测这种函数形式也可能参数化其他生成式建模任务的训练对数似然。
当在无限数据限制下,以有限的参数更新步数 S 训练给定模型时,在初始瞬态期之后,学习曲线可以准确地拟合为(见图4右侧):
其中 Sc≈2.1×103,αS≈0.76,Smin(S) 是使用方程(5.4)估计的最小可能的优化步数(参数更新)。
在固定计算预算 C 的情况下,但没有其他限制时,方程(1.6)导致预测最优模型大小 N、最优批量大小 B、最优步数 S 和数据集大小 D 应该按以下方式增长:
以下内容与经验上最优的结果最为接近:。
随着计算预算 C 的增加,主要应将其用于更大规模的模型,而无需显著增加训练时间或数据集规模(见图 3)。这也意味着,随着模型规模的增大,它们变得越来越样本高效。在实践中,由于硬件限制,研究人员通常会训练比最大计算效率低的小型模型更长时间。最优性能取决于总计算量的幂律(见方程(1.3))
2.4 符号说明
我们使用以下符号:
• L —— 交叉熵损失,单位为纳特(nats)。通常它是对上下文中的标记进行平均计算的,但在某些情况下,我们会报告上下文中特定标记的损失。
• N —— 模型参数的数量,不包括所有词汇表和位置嵌入。
• C≈6NBS —— 总非嵌入训练计算量的估计值,其中 B 是批量大小,S 是训练步数(即参数更新次数)。我们用 PF-days(千万亿次浮点运算天数)来表示数值,其中 1 PF-day = 1015×24×3600=8.64×1019 次浮点运算。
• D —— 数据集大小,以标记数量为单位。
• Bcrit —— 临界批量大小 [MKAT18],定义和讨论见第 5.1 节。在临界批量大小下进行训练,大致可以在时间和计算效率之间达到最优平衡。
• Cmin —— 达到给定损失值所需的最小非嵌入计算量的估计值。如果模型在远小于临界批量大小的批量下进行训练,就会使用这种训练计算量。
• Smin —— 达到给定损失值所需的最小训练步数的估计值。如果模型在远大于临界批量大小的批量下进行训练,也会使用这种训练步数。
• αX —— 损失按幂律缩放的指数,表示为 L(X)∝1/XαX,其中 X 可以是 N、D、C、S、B 或 Cmin。
三、方法和细节
这一大节主要是定义transformer的理论计算量,训练过程和数据集简介,用来做消融实验(没兴趣略过不看就好)
使用数据集和token方法: WebText2,WebText [RWC+19] 数据集的扩展版本,使用字节对编码 [SHB15] 进行标记化,词汇表大小为 nvocab=50257
性能指标:1024 个token的上下文中平均计算的自回归对数似然(即交叉熵损失)
模型:解码器 [LSP+18, RNSS18] Transformer [VSP+17] 模型,额外也训练了 LSTM 模型和通用 Transformer [DGV+18] 用于比较。
3.1 Transformer 的参数和计算量缩放
我们使用超参数 nlayer(层数)、dmodel(残差流的维度)、dff(中间前馈层的维度)、dattn(注意力输出的维度)和 nheads(每层的注意力头数)来参数化 Transformer 架构。我们在输入上下文中包含 nctx 个标记,除非另有说明,否则 nctx=1024。
我们用 N 来表示模型大小,定义为非嵌入参数的数量:
其中我们排除了偏差和其他次要项。我们的模型在嵌入矩阵中有 nvocab*dmodel 个参数,并且使用 nctx*dmodel 个参数用于position embedding,但在讨论“模型大小”N 时我们不包括这些参数;我们会发现这会产生更清晰的缩放定律。
计算 Transformer 的前向传播大致涉及:
次加法-乘法运算,其中的 2 来自于矩阵乘法中使用的乘积累加操作。更详细的逐操作参数和计算量统计包含在表 1 中。对于 dmodel>nctx/12 的上下文和模型,每个标记的上下文依赖计算成本是总计算量的一个相对较小的部分。由于我们主要研究的是 dmodel≫nctx/12 的模型,因此我们在训练计算量估计中不包括上下文依赖项。考虑到反向传播(大约是前向传播的两倍计算量),我们定义估计的非嵌入计算量为每个训练标记大约 C≈6N 次浮点运算。
3.2 训练过程
使用 Adam 优化器 以固定的 2.5×105 步训练模型,每步的批量大小为 512 个 1024 个token的序列。由于内存限制,我们最大的模型(参数超过 10 亿)是使用 Adafactor [SS18] 训练的。我们尝试了各种学习率和学习率计划,如附录 D.6 所述。我们发现收敛时的结果在很大程度上与学习率计划无关。除非另有说明,我们数据中包含的所有训练运行都使用了学习率计划,即先进行 3000 步的线性热身,然后进行余弦衰减至零。
3.3 数据集
我们在 [RWC+19] 中描述的 WebText 数据集的扩展版本上训练我们的模型。原始的 WebText 数据集是 2017 年 12 月之前 Reddit 外部链接的网络抓取数据,这些链接至少获得了 3 个赞。在第二个版本 WebText2 中,我们添加了 2018 年 1 月至 10 月期间的 Reddit 外部链接,这些链接也至少获得了 3 个赞。赞的阈值作为人们是否认为链接有趣或有用的启发式标准。我们使用 Newspaper3k Python 库提取了新链接的文本。总共,该数据集包含 2030 万篇文档,包含 96 GB 的文本和 16.2 亿个单词(按 wc 定义)。然后我们应用 [RWC+19] 中描述的可逆分词器,得到 22.9 亿个标记。我们保留其中 6.6 亿个标记作为测试集,我们还在类似准备的书籍语料库 [ZKZ+15]、Common Crawl [Fou]、英文维基百科和一系列公开可用的网络书籍样本上进行测试。
四、实证结果与基本幂律
这一节主要讲实验结果,需要重点关注
为了描述语言模型的扩展特性,我们训练了各种各样的模型,改变了多个因素,包括:
-
模型大小(从 768 个non-embedding parameters 到 15 亿个non-embedding parameters)
-
数据集大小(从 2200 万个token到 230 亿个token)
-
形状(包括深度、宽度、注意力头数和前馈层维度)
-
上下文长度(大多数情况下为 1024,但我们也在较短的上下文中进行了实验)
-
批量大小(大多数情况下为 219,但我们也会改变它以测量临界批量大小)
在本节中,我们将展示数据以及基于实证的拟合结果,将理论分析推迟到后续章节。
4.1 Transformer 的形状和超参数的独立性
小节结论:当保持总non-embedding parameters N 不变时,Transformer 的性能对形状参数 nlayer、nheads 和 dff 的依赖性非常弱。
验证方法:在保持固定大小的同时改变单个超参数。
- 对于 nheads 的情况,当改变 nlayer 时,我们同时改变 dmodel,同时保持 N≈12nlayerdmodel2 不变。
- 为了在固定模型大小的情况下改变 dff,我们也会同时改变 dmodel 参数,这是由表 1 中的参数计数所要求的。如果更深的 Transformer 有效地表现得像较浅模型的集成,那么 nlayer 的独立性就会随之而来,这已经为 ResNets [VWB16] 提出过。结果如图 5 所示。
下图结论:当保持总非嵌入参数数量 N 不变时,性能对模型形状的依赖性非常小。在广泛的形状范围内,损失仅变化几个百分点。
4.2 非嵌入参数数量 N 与性能
小节结论:当包括嵌入参数时,性能似乎除了参数数量外还强烈依赖于层数
在图 6 中,我们展示了从形状为 (nlayer,dmodel)=(2,128) 的小型模型到拥有数十亿参数的模型(形状从 (6,4288) 到 (207,768))的广泛模型的性能。在这里,我们在完整的 WebText2 数据集上训练到接近收敛,并观察到没有过拟合(除了可能对于非常大的模型)。
左边:当我们包括嵌入参数时,性能似乎除了依赖于参数数量外,还强烈依赖于层数。
右边:当我们排除嵌入参数时,不同深度的模型的性能汇聚到一条趋势线上。只有少于2层的模型或具有极端深度与宽度比例的模型才会显著偏离该趋势。
如图 1 所示,我们发现随着非嵌入参数数量 N 的增加,性能呈现出稳定的趋势,可以拟合到方程(1.5)的第一项,因此有:
为了观察这些趋势,研究性能作为 N 的函数至关重要;如果我们使用总参数数量(包括嵌入参数),趋势会变得不那么明显(见图 6)。这表明嵌入矩阵可以变得更小而不会影响性能,正如最近的研究 [LCG+19] 所看到的那样。
尽管这些模型是在 WebText2 数据集上训练的,但它们在各种其他数据集上的测试损失也是 N 的幂律,且幂几乎相同,如图 8 所示。
4.2.1 与 LSTM 和通用 Transformer 的比较
小节结论:Tansformer的性能在训练早期和LSTM性能相当,后期出现明显差异
在图 7 中,我们比较了 LSTM 和 Transformer 的性能,作为非嵌入参数数量 N 的函数。LSTM 使用相同的数据集和上下文长度进行训练。从这些图表中,我们看到 LSTM 在上下文中早期出现的标记上的表现与 Transformer 相当,但对于后期的标记则无法与 Transformer 的性能相匹配。我们在附录 D.5 中展示了性能与上下文位置之间的幂律关系,其中对于较大的模型,越来越大的幂表明了快速识别模式的能力有所提高。
我们还在附录中的图 17 中比较了标准 Transformer 与循环 Transformer [DGV+18] 的性能。这些模型重用了参数,因此作为 N 的函数,它们的表现略好一些,但代价是每个参数的额外计算量。
4.2.2 在数据分布之间的泛化能力
我们还在一组额外的文本数据分布上测试了我们的模型。这些数据集上的测试损失作为模型大小的函数如图 8 所示;在所有情况下,模型仅在 WebText2 数据集上进行了训练。我们看到,这些其他数据分布上的损失随着模型大小的增加而平稳改善,与 WebText2 上的改善直接平行。我们发现泛化能力几乎完全取决于分布内的验证损失,而不依赖于训练的持续时间或是否接近收敛。我们也没有观察到对模型深度的依赖(见附录 D.8)。
4.3 数据集大小和计算量与性能
小节结论:测试损失作为数据集大小 D(以标记为单位)和训练计算量 C 的趋势如图1所示
对于 D 的趋势,我们训练了一个 (nlayer,nembd)=(36,1280) 的模型,在 WebText2 数据集的固定子集上进行训练。一旦测试损失停止下降,我们就停止训练。我们看到,得到的测试损失可以用简单的幂律来拟合:
训练期间使用的总非嵌入计算量可以估计为,其中 B 是批量大小,S 是参数更新的次数,6 这个因子考虑了前向和反向传播。因此,对于给定的 C 值,我们可以扫描具有不同 N 的所有模型,以找到在步骤
上表现最佳的模型。
结果如图 1 左侧图表中的粗黑线所示。它可以拟合为:
该图表还包括各个学习曲线的图像,以澄清单个模型何时处于最优状态。我们将在后面更仔细地研究计算量的最优分配。数据强烈表明,样本效率随着模型大小的增加而提高,我们还在附录中的图 19 中直接说明了这一点。
五、探索无限数据的极限和过拟合现象
核心结论:
- 对于较大的D,性能是N的直线幂律。对于较小的固定D,随着N的增加,性能停止提高,模型开始过拟合。
- 过度拟合的程度主要取决于方程(4.3)
六、模型大小和训练时间的缩放定律
核心结论:
- 当保持总计算量或训练步骤数不变时,性能遵循方程式(5.6)。每个计算预算值都有一个相关的最佳模型大小,可以最大化性能。
- 在小S值下,模型出现中等拟合现象,因为学习曲线的幂律方程在训练早期就会崩溃。
6.1 如何寻找最佳的模型大小
结论:
- 定一个固定的计算预算,一个特定的模型大小是最优的
- 大于计算效率大小的模型需要更少的训练步
相关文章:
大模型的scaling laws:Scaling Laws for Neural Language Models
一、TL;DR Loss与模型size、数据集大小以及用于训练的计算量呈幂律关系其他架构细节,如网络宽度或深度,在较宽范围内影响极小简单的公式可以描述过拟合与模型/数据集大小的依赖关系,以及训练速度与模型大小的依赖关系作用&#x…...
【Docker】使用 jq 管理镜像源
国内访问 Docker Hub 速度较慢,通过配置国内镜像加速器,可显著加快拉取镜像速度。使用 jq 操作 /etc/docker/daemon.json 的 registry-mirrors 字段,可避免手动编辑带来的格式错误,并在添加、替换、删除等场景下保持高效与安全。 …...
青年座谈会的读书汇报
今天,单位组织了一个五四青年座谈会,我们室由于大家都在出差忙之类的,我必须要参加,还要我做一个汇报,我一新来的还没深入到研发工作中,于是决定写了一篇简单的读书笔记,再用deepseek润色一下&a…...
leetcode刷题日记——两数相加
[ 题目描述 ]: [ 思路 ]: 通过两个循环将 l1, l2存储的数字读出,然后求和,再将结果存储链表中由此发了一个问题,结果溢出,如果使用更大的 long 类型,后续不出所料,仍然超出所以只能…...
使用腾讯地图检索地点
最近需求又多了,现在需要使用腾讯地图检索功能,需要经纬度返给商户后端 效果图: 把地图写成组件 现在components创建map/Getpoint.vue 代码如下 <template><div class"getpoint-container"><div><div id&…...
VINS-FUSION:跑通手机录制数据
文章目录 📚简介🚀手机录制数据🚀跑通数据🔧启动rviz🔧启动配置🔧播放rosbag🎯跑通结果 📚简介 利用智能手机的 摄像头IMU 采集数据,并在 VINS-Fusion(视觉惯…...
iView Table 组件跨页选择功能实现文档
iView Table 组件跨页选择功能实现文档 功能概述 实现基于 iView Table 组件的多选功能,支持以下特性: ✅ 跨页数据持久化选择✅ 当前页全选/取消全选✅ 自动同步选中状态显示✅ 分页切换状态保持✅ 高性能大数据量支持 实现方案 技术栈 iView UI 4…...
Spark知识总结
宽窄依赖:父RDD的分区只对应下面子RDD的一个分区,为窄依赖。其余为宽依赖 维度窄依赖宽依赖数据传输无shuffle,本地处理14需shuffle,跨节点传输14并行度高(允许流水线并行)57低(需等…...
window 图形显示驱动-在 WDDM 1.2 中提供无缝状态转换(下)
在不禁用驱动程序的情况下转换到操作系统 有时操作系统遇到不可恢复的错误,必须发出系统 bug 检查。 发生这种情况时,在某些情况下,操作系统必须控制显示器,但无法停止 WDDM 驱动程序。 需要 WDDM 1.2 及更高版本的驱动程序来实现…...
WPF之Label控件详解
文章目录 1. 引言2. Label控件基础2.1 类继承结构2.2 Label类定义 3. Label控件的核心属性3.1 Content属性3.2 Target属性3.3 其他常用属性 4. 标签样式与模板自定义4.1 简单样式设置4.2 使用Style对象4.3 触发器使用4.4 使用ControlTemplate完全自定义 5. Label与表单控件交互…...
STM32 HAL库实现USB虚拟串口
1. 引言 在嵌入式系统开发中,USB 虚拟串口是一种非常实用的功能。它允许 STM32 微控制器通过 USB 接口与计算机进行通信,就像使用传统的串口一样。这种方式不仅简化了硬件设计,还提高了通信的灵活性和稳定性。STM32F407 系列微控制器具有强大…...
第二阶段:基础加强阶段总体介绍
Java语法的学习笔记 下面放复习的文档链接,如果有需要可以前往下载获取,这个仓库还有关于mysql、hadoop、python等的复习部分,并且每个文档有着对应的代码部分。文章作为复习使用,更多代码内容见链接如下: https://gitee.com/zha…...
Callable Future 实现多线程按照顺序上传文件
/** * 异步上传 BiopsyFlow 中的所有视频和音频文件到暂存服务器 */ private List<String> uploadBiopsyFlowFiles(BiopsyFlow biopsyFlow, SyncFile SyncFile) { List<String> fileBase64List syncFile.getFileBase64List(); if (CollectionUtils.is…...
leetcode283-移动零
leetcode 283 思路 本题是通过把数组中所有不为0的数字前置,实现把所有的0后置的效果 双指针法 slow 充当指针,记录当前零应该被移到的位置。而 i 用来遍历整个数组,检查每个元素。如果当前元素不为零,就将其与 slow 位置上的…...
【dify+docker安装教程】
目录 一、dify安装包下载 二、运行环境配置 1、下载docker 2、安装 2.1 新建文件夹 2.2 安装 2.3 命令安装 3.下载完成后需要重启电脑,注意保存文档!!注意保存!!注意!!(血的教…...
GPU虚拟化实现(五)
GPU虚拟化实现(五) 章节回顾初步介绍详细介绍核心数据结构核心功能和运作机制初始化显存分配显存释放显存溢出检查显存类型检查查看分配信息代码执行流程假设例子总结章节回顾 在上一章,简单介绍了项目拦截cuda函数的流程,其本质上与拦截nvml函数的流程是一致的,都是首先…...
C++——入门基础
文章目录 一、前言二、C的发展历史2.1 C的诞生2.2 C的重要性 三、C的应用3.1第一个C程序3.2 C版3.2 C版3.3 C版与C版的区分 3.2 namespace关键字3.2.1 namespace的意义3.2.2C中域的分类3.2.3 namespace的定义3.2.4 namespace的实质3.2.5 namespace的嵌套 3.3 作用域运算符 &…...
AT2401C与RFX2401C问题处理资料
1、AT2401C 可以 PIN 对 PIN 替代 RFX2401C 吗? 答:AT2401C 可以 PIN 对 PIN 替换 RFX2401C;同时 CB2401 也可以 PIN 对 PIN 替换 RFX2401C;我们主要推 AT2401C 这款芯片,如果客户产 品需要过认证或者应用于音频产品建…...
微信小程序连续多个特殊字符自动换行解决方法
效果图 .wxml <view class"container"><text>没转换{{text}}</text><view style"height: 60rpx;" /><text>转换后{{convert}}</text> </view>.js Page({data: {text:!!!&am…...
【Linux实践系列】:进程间通信:万字详解命名管道实现通信
🔥 本文专栏:Linux Linux实践项目 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 与其等待完美的风,不如学会在逆风中调整帆的角度——所有伟大航程都始于此刻出发的勇气 ★★★ 本文前置知…...
【TS入门笔记4---装饰器】
TS入门笔记4 TypeScript---装饰器一、装饰器基础1. 定义与作用:装饰器是一种特殊类型的声明,它可以被附加到类声明、方法、访问符、属性或参数上,用来修改类的行为。在 TypeScript 里,装饰器本质上是一个函数,它接收不…...
大学之大:韩国科学技术研究院2025.4.28
韩国科学技术研究院(KAIST)作为韩国理工科教育与科研的旗舰机构,其发展历程深刻反映了韩国从工业化到科技强国的转型轨迹。以下从历史沿革、学科优势、教学特色、科研创新、教育规模、资源投入及未来战略等维度展开全面分析: 一、…...
【QT】QT控制硬件
QT控制硬件 1.上位机程序开发2.具体例子控制led灯3. linux中的函数跟QT类里面的函数同名,发生冲突4.示例代码 1.上位机程序开发 QT做一个上位机程序,控制底层的硬件设备(下位机) 总结: 在构造函数里面去初始化,打开硬件驱动在析…...
Spring的BeanFactory和FactoryBean的区别
BeanFactory和FactoryBean在Spring框架中扮演着不同的角色,具有不同的功能和用途。 定义与角色 BeanFactory:BeanFactory是Spring IoC容器的核心接口,用于管理和维护Bean的定义、创建和生命周期。它是Spring IoC容器的基础&…...
【JavaScript】if语句
JS中的程序是从上到下一行一行执行的。 通过流程控制语句可以控制程序执行流程,使程序可以根据一定的条件来选择执行语句。 语句的分类: 1、条件判断语句 2、条件分支语句 3、循环语句 条件判断语句:使用条件判断语句可以在执行某个语句之前进…...
PostgreSQL oracle_fdw 扩展解析
PostgreSQL oracle_fdw 扩展解析 oracle_fdw 是 PostgreSQL 的一个外部数据包装器(Foreign Data Wrapper)扩展,允许 PostgreSQL 直接连接和操作 Oracle 数据库。以下是全面详细的使用指南: 一、安装与配置 1. 前置要求 Oracle 客户端库:必…...
从信息传输到智能互动,融云的全球智能通信云服务进化
4 月 24 日-25 日,GTC2025 全球流量大会在深圳福田会展中心举办,融云携全球智能通信云解决方案亮相。 在大会首日的开幕式峰会上,融云高级研发总监李宏博受邀分享《从信息传输到智能互动,融云的全球智能通信云服务进化》。 作为连…...
关于https请求丢字符串导致收到报文解密失败问题
加密方法:AES两次URLEncoder 问题现象:服务端收到的报文中少了类似%25这样的字符,导致解密失败 问题分析:用RequestBody接受 也有可能是springboot自动做了一次解码URLDecoder,自己只需要解码一次就好了...
Rust 学习笔记:修复所有权常见错误
Rust 学习笔记:修复所有权常见错误 Rust 学习笔记:修复所有权常见错误错误一:返回栈上的引用错误二:没有足够的权限错误三:别名和可变性错误四:从集合中拷贝一个元素(转移所有权)错误…...
Unity3D引擎框架及用户接口调用方式相关分析及汇总
分析目的 目前外网3D手游绝大部基于Unity3D引擎进行开发,Unity3D引擎属于商业引擎,引擎整理框架的运行机制较为神秘,本文介绍Unity引擎框架、对象组织方式、用户接口与引擎交互方式等原理,通过本文的分析和介绍可了解Unity3D框架中大致执行原理。 实现原理 Unity引擎作为…...
喷泉码在物联网场景下的案例分析
在物联网复杂场景下,无线传感器网络作为信息感知前端,面临能量受限、信道不稳定、多跳传输可靠性差等难题,严重制约物联网系统运行效能。传统基于反馈重传的通信机制在无线传感器网络中难以为继。其 ACK 确认操作频繁,大幅增加能耗,且在动态网络拓扑中,反馈易丢失,致使数…...
OpenCV 图形API(69)图像与通道拼接函数------将一个 GMat 类型的对象转换为另一个具有不同深度GMat对象函数convertTo()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将一个矩阵转换为另一种数据深度,并可选择进行缩放。 该方法将源像素值转换为目标数据深度。最终应用 saturate_cast<> 以避免…...
考研系列-计算机组成原理第七章、输入/输出系统
一、I/O接口 1.I/O接口概念 现在的I/O接口有些集成在南桥芯片上...
使用vue3 脚手架创建项目
1.创建项目 并 运行 1.1 创建项目 vue create abcd 1.2 运行 创建好项目后,命令行会提示你运行项目 npm run serve 2.介绍各个目录 node_modules : 项目依赖包,其中包括很多基础依赖,自己也可以根据需要安装其他依赖 assets文件夹&a…...
云服务器被黑客攻击应急响应与加固指南(上)
一、入侵检测与应急处理 1. 异常行为检测 # 查看异常登录记录 sudo lastb | awk {print $3} | sort | uniq -c | sort -nr sudo grep "Failed password" /var/log/auth.log | awk {print $11} | sort | uniq -c# 检查可疑进程 ps auxf | grep -E (curl|wget|bash|s…...
联合体union的特殊之处
一个联合体union的长度等于其内部长度最大的成员的长度。 union的所有成员共享同一块内存空间,可以利用这个特性读取数据的字节存储方式。 #include <stdio.h>int check_endian() {union {short s; // 2 字节(short)char c[2]…...
Spring系列五:手动实现Spring底层机制 第三部分
💗实现任务阶段5 🍚bean后置处理器实现 bean后置处理器实现 思路:先完成原生Spring 使用Bean后置处理器的案例, 然后实现自己的bean后置处理器 bean的生命周期~传送门 在idea中 shortcuts: shiftshift , 输入 InitializingBean, 搜索. 在zzw-spring…...
AGV、AMR机器人控制器x86/RK3588/NV各有什么优劣势?
以下是关于AGV/AMR机器人控制器解决方案中x86、RK(瑞芯微)、NV(英伟达)平台优劣势的综合分析: 一、核心性能对比 平台优势局限性适用场景x861. 多核高频CPU支持复杂算法运算,适合大规模路径规划及多机…...
[ACTF2020 新生赛]Include [ACTF2020 新生赛]Exec
[ACTF2020 新生赛]Include 因为前端过滤的太多了 所以直接使用 日志包含 搞 包含这个 /var/log/nginx/access.log [ACTF2020 新生赛]Include蚁剑连接 翻看 flag{1ce7a81e-0339-44ef-a398-a7784d3efe37} [ACTF2020 新生赛]Exec [ACTF2020 新生赛]Exec 127.0.0.1 |echo <?…...
23种设计模式 -- 工厂模式
Java 工厂模式示例代码 下面我将展示三种常见的工厂模式实现:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式 java // 产品接口 interface Shape {void draw(); }// 具体产品类 class Circle implements Shape {Overridepublic void draw() {System…...
【25软考网工】第四章(2)WLAN通信技术、WLAN频谱与信道
目录 一、WLAN通信技术 1. 扩展频谱通信 1)扩频通信种类 2)技术关系 2. 应用案例 1)例题:扩频通信概念判定 2)例题:跳频扩频技术描述 3)例题:扩频通信技术标准 3.知识小结 二、WLAN频谱与信道 1. WLAN网络分…...
MetaEditor - 自动交易和技术指标编辑器
功能特点 代码编辑功能:支持多种编程语言,如 MQL4 和 MQL5,方便交易者根据自己的需求编写自动交易策略和技术指标。它提供了代码高亮、自动缩进、语法检查等功能,有助于提高代码编写的效率和准确性。调试与测试工具:配…...
关于华为云OneAccess登录认证过程介绍
这里主要介绍的是OAuth2认证的一个流程,分享一下实际开发过程中的实现逻辑 1、后端先根据接口文档的细节内容,然后拼接好url并且以String的类型返回给前端 2、此时前端会访问本连接,然后就会跳转到第三方页面,用户进行登录后&am…...
Spring - 简单实现一个 Spring 应用
一、为什么需要学习Spring框架? 1.企业级开发标配 超过60%的Java项目都使用Spring生态(数据来源:JetBrains开发者报告)。 2.简化复杂问题 通过IoC和DI,告别new关键字满天飞的代码。 3.职业竞争力 几乎所有Java岗…...
数据展示功能界面设计与实现及终端控制界面思路(17)
文章目录 一、本章说明二、传感数据展示功能实现2.1 实现目标2.2 具体实现2.2.1 需要在.pro 文件添加2.2.2 mainwindow.h 头文件2.2.3 mainwindow.cpp 文件2.2.4 实现界面展示三、项目源码文件四、终端节点控制五、Qt打包EXE一、本章说明 注:本节为【基于STM的环境监测系统(…...
opendds编译开发(c#封装)
opendds是对DDS协议的开源实现,具体可以查阅官网。 我使用的是源码编译开发,博文只针对windows平台。 环境准备 环境安装 1.visual studio 2022,我是企业版,安装需要选择c 2.Per下载安装,下载链接:https://strawberryperl.com…...
电子监管码预检剔除装置提示盒尺寸过短
问题:电子监管码预检剔除装置提示盒尺寸过短 现象:自动线监控程序报警提示“盒尺寸过短”。 原因:分盒设备拨盒的力度和距离、盒子在传送带的角度或传送带速度有所变化都会导致自动线出现“盒尺寸过短” 解决方法:根据传送带的速…...
【C++11特性】Lambda表达式(匿名函数)
一、函数对象 在C中,我们把所有能当作函数使用的对象当作函数对象。 一般来说,如果我们列出一个对象,而它的后面又跟有由花括号包裹的参数列表,就像fun(arg1, arg2, …),这个对象就被称为函数对象。函数对象大致可分为…...
【北京】昌平区某附小v3700存储双控故障维修案例
2025年4月22日,接到一位通过网络找到我们的北京老师求助,反馈该学校一台V3700存储的磁盘分区无法正常读取了,老师在机房检查时发现存储后面2个控制器均亮警告灯。急需修复该设备读取里面资料用于周末运动会所需。于是在网上找到我们协助进行排…...
汤晓鸥:计算机视觉的开拓者与AI产业化的先行者
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 汤晓鸥:计算机视觉的开拓者与AI产业化的先行者 一、学术与创业之路 1. 从…...