Jasper and Stella: distillation of SOTA embedding models
摘要
Dense检索是许多深度学习应用系统中(例如常见问题 (FAQ) 和检索增强生成 (RAG))关键组成部分。在此过程中,Embedding模型将原始文本转换为向量。然而,目前在文本Embedding基准测试中表现出色的Embedding模型,如海量文本嵌入基准测试 (MTEB),通常具有许多参数和高向量维度。这给它们在实际场景中的应用带来了挑战。为了解决这个问题,我们提出了一种新的多阶段蒸馏框架,使较小的学生嵌入模型能够通过三个精心设计的损失来提取多个较大的教师嵌入模型。同时,我们利用俄罗斯套娃表示学习 (MRL) 来有效地降低学生嵌入模型的向量维数。我们名为 Jasper 的学生模型拥有 20 亿个参数,基于 Stella 嵌入模型构建,在 MTEB 排行榜上排名第三(截至 2024 年 12 月 24 日),在 56 个数据集中取得了 71.54 的平均分。我们已经在 Hugging Face Hub 上发布了模型和数据 ,同时公布了训练代码。
https://huggingface.co/NovaSearch/jasper_en_vision_language_v1
https://huggingface.co/datasets/infgrad/jasper_text_distill_dataset
https://github.com/NovaSearch-Team/RAG-Retrieval
论文贡献
1、我们提出了一种新的多阶段蒸馏框架,它使较小的学生嵌入模型能够通过三个精心设计的损失函数有效地从多个较大的教师嵌入模型中提炼知识。
2、我们的 2B Jasper 模型在 MTEB 排行榜上获得了第 3 名(截至 2024 年 12 月 24 日),效果与其他排名靠前的 7B 嵌入模型相当,并且明显优于其他参数小于 2B 的模型。
模型结构
我们的学生模型架构遵循将语言模型与视觉编码器相结合的简单标准设计。如下图所示,它由四个组件组成:
1、一种基于编码器的语言模型,通过均值池化生成文本Embedding。
2、一个视觉编码器,可将图像独立映射到视觉Token Embedding中。
3、一个池化程序,它将视觉Token Embedding映射到与语言模型的输入文本Embedding相同的维度,同时减少视觉Token序列的长度。
4、多个全连接 (FC) 层,用于将嵌入投影到最终输出的特定维度。
阶段 1&2: 基于多教师的蒸馏
具体来说,我们采用 NV-Embed-v25 和 stella_en_1.5B_v56 作为教师模型,它们的向量维度分别为 4096 和 8192。映射过程完成后,学生模型的向量维度被调整为 12288,等于两个教师模型的组合向量维度 (4096 + 8192)。
前两个阶段的目标是通过将其输出向量与相应的教师向量对齐,使学生模型能够有效地从多个教师模型中学习文本表示。为了实现这一目标,我们精心设计了三个损失函数,从具体的角度发展到更广泛的角度。第一个损失函数是余弦损失,其公式如下:
Lcosine 值通常不会收敛到零,这表明学生和教师之间存在持续的角度差异。同时,从单个文本得出的逐点信号具有有限的优化方向,这很容易导致训练数据过拟合。为了补充 Lcosine 的局限性,我们引入了第二个损失函数,它从文本对的角度模拟了学生和教师模型之间的语义匹配差异。这个损失函数确保了学生模型和教师模型之间相似性的相对一致的判断,而不强制学生模型和教师模型之间的绝对拟合。
为了进一步利用相对比较信号,受 CoSENT loss 的启发,我们提出了第三个损失函数,相对相似性蒸馏损失。
对于每批文本数据,我们采用教师模型为所有文本对自动生成软标签,从而识别潜在的正负样本。随后,对学生模型进行训练,以确保正对之间的相似性超过负对之间的相似性,margin超参数控制这种差异的程度。
最终损失 L 是上述三个损失函数的加权和。其中 λ1、λ2 和 λ3 是超参数。蒸馏向量的最大优点是我们不需要任何监督数据。值得注意的是,阶段 1 和阶段 2 之间的主要区别在于训练的参数。在第 1 阶段,仅训练全连接层 (FC1),而在第 2 阶段,全连接层 (FC1) 和学生模型的最后三个编码器层都接受训练。
sx:学生模型生成的文本 x 的规范化向量表示。
tx:同一文本 x 的向量表示形式,首先规范化,然后连接,然后再次规范化,由多个教师模型生成。
SX :学生模型生成的一批文本 X 的归一化向量表示矩阵。
TX : 同一批文本 X 的相应向量表示矩阵,首先标准化,然后连接,随后再次标准化,由多个教师模型生成。
阶段 3:降维
受 MRL (Kusupati et al., 2024) 的启发,我们引入了三个额外的独立全连接层(FC2、FC3 和 FC4)来生成低维向量,每个向量都实现了不同程度的降维。例如,通过将全连接层 FC3 与 (15368, 512) 合并,我们获得了更易于管理的 512 维向量空间。
对于三个 FC 层,由于简化向量的维度与串联教师向量的维度不一致,因此省略了 Lcosine,只使用 Lsim 和 Lresim。为了确保从 FC1 层生成的向量(即 12288 维向量)的准确性,它们将继续使用所有三个损失函数进行训练。在此阶段,将训练 student 模型的所有参数。
第 4 阶段:训练多模态能力
在第 4 阶段,我们利用图像-描述对作为训练数据集,专注于训练视觉编码器,同时保持其他组件冻结。训练过程基于自蒸馏,其中描述的向量表示充当教师向量,图像的向量表示充当学生向量。前面阶段引入的所有全连接层都用于生成多对学生和教师向量。对于每对,我们计算 3 次亏损,然后将其平均以获得最终的亏损。
需要注意的是,此阶段仅实现了文本和图像模态之间的初步对齐,留下了很大的改进空间。在未来的工作中,我们的目标是进一步探索和完善模态对齐过程。
实验
具体设置
我们名为 Jasper 的模型是从 stella_en_1.5B_v5 和 google/siglip-so400mpatch14-384 初始化的(Zhai et al., 2023;Alabdulmohsin et al., 2024)。stella_en_1.5B_v5 和 NV-Embed-v2 是我们的教师模型。我们的 Jasper 模型中的参数总数为 1.9B(stella 1.5B 参数和 siglip 400M 参数)。对于超参数,我们设置 λ1 = 10,λ2 = 200,λ3 = 20,margin = 0.015。
在所有四个阶段中,模型都使用 8 × RTX A6000 GPU 进行训练,最大输入长度为 512 个Token、混合精度训练 (BF16)、DeepSpeed ZERO-stage-2 和 AdamW 优化器。在第 1 阶段(蒸馏训练)期间,批量大小设置为 128,学习率为每步 1e-4,并选择第 4000 步的模型检查点作为最终模型。在第 2 阶段(也是蒸馏训练)的情况下,批量大小保持为 128,学习率下降到每步 8e-5,最终模型是第 7000 步的检查点。对于第 3 阶段(降维训练),batch size 再次为 128,学习率调整为每步 7e5,第 2200 步的检查点作为最终模型。最后,在第 4 阶段(多模态训练)中,批量大小减少到 90,学习率恢复到每步 1e-4,最终模型从第 3500 步的检查点中选择。
数据集
在第 1 阶段、第 2 阶段和第 3 阶段,我们使用 fineweb-edu (Lozhkov et al., 2024) 作为我们的主要文本训练数据集,它占全文数据的 80%。其余 20% 的文本数据来自 sentence-transformers/embedding-trainingdata9。我们选择 sentencetransformers/embedding-training-data 的原因是 fineweb-edu 的大部分数据由段落组成。但是,除了段落之外,我们还需要问题来增强训练数据的多样性。文本训练数据总量为 800 万。
对于数据集中的文档,我们执行以下作:
1. 我们随机选择 30% 的文档,将它们分成短文本,每个文本由 1 到 10 个句子组成。
2. 我们随机选择 0.08% 的文本并随机排列其中的单词。
在第 4 阶段,我们使用 BAAI/Infinity-MM 的图片-标题数据(Gu et al., 2024)作为我们的视觉训练数据。
结果
我们在完整的 MTEB 基准上评估了所提出的 Jasper 和 Stella 模型,其中包括 15 个检索数据集、4 个重新排序数据集、12 个分类数据集、11 个聚类数据集、3 个对分类数据集、10 个语义文本相似性数据集和 1 个摘要数据集。
讨论
指令稳健性
基于指令的Embedding模型要求在文本编码期间将指令添加到查询或段落中。目前,许多最先进的文本Embedding模型使用指令来提示模型并获得更好的Embedding。与大型语言模型的使用类似 (Zhao et al., 2024b),不同的任务需要不同的指令,这既合乎逻辑又直观。因此,理解指令的能力对于这些文本Embedding模型至关重要。Jasper 也是一种基于指令的Embedding模型。为了证明不同提示对 Jasper 模型的影响,我们进行了一个简单的实验。具体来说,我们使用 GPT-4o 生成的类似指令在一些简短的评估任务中评估了 Jasper。表 2 列出了所有原始和修改后的指令。根据表 3 所示的结果,我们得出结论,我们的 Jasper 模型对指令是鲁棒的,可以准确地理解不同的指令。
Vision Encoding 的可能改进
由于时间和资源限制,我们只能为 Jasper 模型配备基本的图像编码功能。最初,第 4 阶段被设想为基本的视觉语言对齐训练阶段,潜在的第 5 阶段涉及使用视觉问答 (VQA) 数据集的对比学习。此外,我们在第 4 阶段观察到损失函数的振荡行为。总体而言,多模式培训还有相当大的改进空间。
结论
在本文中,我们介绍了 Jasper 模型的基于蒸馏的训练程序。我们设计了三个损失函数,从不同的角度将多个大型教师Embedding模型提炼到一个学生Embedding模型中。随后,我们利用基于 MRL 的训练方法来降低学生模型的向量维数。MTEB 上的实验结果表明,我们的 Jasper 模型在 2B 参数尺度上实现了最先进的性能,并显示出与其他具有 7B 参数的顶级Embedding模型相当的结果。未来的工作将进一步探索多种模式之间的一致性。
[2412.19048] Jasper and Stella: distillation of SOTA embedding models
相关文章:
Jasper and Stella: distillation of SOTA embedding models
摘要 Dense检索是许多深度学习应用系统中(例如常见问题 (FAQ) 和检索增强生成 (RAG))关键组成部分。在此过程中,Embedding模型将原始文本转换为向量。然而,目前在文本Embedding基准…...
程序的本质—API接口
API 是什么 官方定义:API 英文全称 Application Programming Interface,翻译过来为程序之间的接口。也是程序与外部世界的桥梁,实现了服务拆分与解藕的核心机制 大白话:按照规则提供输入,它帮你得到对应的输出 API可…...
Python函数完全指南:从零基础到灵活运用
Python函数是组织代码、实现代码复用的基本单元,也是Python编程中最重要的概念之一。本文将全面介绍Python函数的知识体系,帮助初学者系统掌握函数的使用方法。 一、函数基础概念 1. 什么是函数? 函数是一段可重复使用的代码块,…...
第十章.XML
文章目录 1.XMl简介2.解析XML技术2.1DOM解析XML 2.2DOM4j3.json 1.XMl简介 EXtensible Markup Language ,可扩充标记语言 特点: XML与操作系统,编程语言的开发平台无关实现不同系统之间的数据交换 作用: 数据交互配置应用程序和网站 XML标签 xml文档由一系列标签元素组成<…...
5个情感丰富GPT-4o图像提示词(不是吉卜力风格)
一场新的创意运动正在迅速兴起——人们不仅使用ChatGPT进行写作,还用它来构思富有想象力、情感丰富的视觉概念。 这一趋势正在改变我们讲故事、建立品牌和探索创意的方式。从异想天开的海报世界到基于物品的故事叙述,各行业的创作者正在将ChatGPT与视觉生成工具结合使用,赋…...
华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
《七年一剑》速读笔记
文章目录 书籍信息概览知己知彼市场的本质认识自我了解他人人剑合一 技术分析精要K线分型均线节奏形态画线成交量周期级别指标之王——MACD波动理论 管窥基本面A股周期论实战角度看财报 构建交易系统打开交易之门交易基础之买卖依据风险控制与仓位管理系统评估及情绪管理 实战秘…...
VMware-centOS7安装redis分布式集群
1.部署redis包 1.1 在usr/local文件夹里创建文件夹 mkdir software 1.2 进入文件夹 cd /usr/local/software/ 下载redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解压 tar zxvf redis-6.2.6.tar.gz重命名文件夹 mv redis-6.2.6 redis安装gcc编译器 yum i…...
Kubernetes(k8s)学习笔记(六)--KubeSphere前置环境安装
1、安装 helm(master 节点执行) Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos 中使用的 yum 或者 Python 中的 pip 一样,能快速查找、下载和安装软件包。Helm由客户端组件 helm 和服务端组件 Tiller 组…...
黑马点评day01(基于Redis)
1.7 Redis代替session的业务流程 1.7.1、设计key的结构 首先我们要思考一下利用redis来存储数据,那么到底使用哪种结构呢?由于存入的数据比较简单,我们可以考虑使用String,或者是使用哈希,如下图,如果使用…...
14.Excel:排序和筛选
一 位置 两个位置。 二 排序:如何使用 1.常规使用 补充:不弹出排序提醒排序。 选中要排序列中的任意一个单元格,然后排序。 2.根据要求进行排序 1.根据姓名笔画进行降序排序 要勾选上数据包含标题,默认是勾选了。 2.根据运营部、…...
力扣-字符串-468 检查ip
思路 考察字符串的使用,还有对所有边界条件的检查 spilt(“\.”),toCharArray,Integer.parseInt() 代码 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…...
C++名称空间
名称空间 名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中。因此,在默认情况下,在名称空间中声明的名称的链接性为外部的(除非它引用了常量) 名称空间是开放的,你可以在…...
Redis 过期与淘汰机制全解析
概述 Redis 作为一种高性能的内存数据库,提供了数据过期和淘汰策略以管理存储的数据。本文将详细探讨 Redis 中数据失效的基本原理、实现方式,并结合源码进行分析,帮助读者更深入地理解和优化 Redis 的使用。 数据过期机制 过期键的存储方…...
PMP-第四章 项目整合管理(一)
项目整合管理 项目整合管理包括对项目管理过程组内的各种过程和项目管理活动而进行识别、定义、组合、统一与协调的各种过程和活动项目整合管理必须由项目经理负责。其他知识领域可以由相关领域专家管理,但整合的责任不能被授权或转移项目与项目管理本质上具有整合…...
VSCode搭建STM32开发调试环境
闲言碎语: 好久没更,在忙着科研→校招→写毕业论文。 临近毕业,总结自己的大学生活:C\C、Java、Python、深度学习,学的乱七八糟。 秋招找了个嵌入式工作(涉及AI应用),大致确定了以后…...
【数据结构】稀疏矩阵的快速转置
稀疏矩阵的快速转置 如图给出一个稀疏矩阵,要求表示出它的转置矩阵 由这个矩阵我们能轻松得到它的三元组顺序表 6行(x坐标)7列(y坐标)8个元素121213931-3361443245218611564-7 接下来我们同样把转置后的矩阵的三元组…...
【Godot】使用 Shader 实现可调节的精确切角效果
今天我们要实现的是一个四角精确切割Shader,可以在UI元素或Sprite的四个角分别切割出不同大小的三角形区域。 文章目录 什么是Godot Shader?数学原理详解左上角切割右上角切割右下角切割左下角切割四角切割Shader完整代码使用方法在Godot编辑器中设置通过代码控制进阶技巧1. …...
在CentOS环境中安装MySQL数据库保姆级教程
一.确认当前系统版本 1.1登录系统,切换至root账户 如图所示: 1.2:在终端中执行如下命令查看系统版本 cat /etc/redhat-release 二.添加 MySQL Yum 源 2.1访问MySQL开发者专区 https://dev.mysql.com/downloads/repo/yum/ TIPS: 1.发布包命…...
分布式系统中的 ActiveMQ:异步解耦与流量削峰(二)
四、流量削峰 (一)流量削峰原理深入解析 在当今互联网应用中,高并发场景屡见不鲜 。例如,电商平台的促销活动、在线票务系统的抢票时刻以及社交平台的热点事件爆发期等,都会在短时间内迎来大量用户请求。这些瞬间涌入…...
JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern)
JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern) 介绍理解实现工厂接口工厂实现类应用类应用类实现测试改造工厂类 应用 介绍 抽象工厂模式在工厂模式的基础上,适配的对象变为一组相关的对象,…...
STM32的定时器
定时器的介绍 介绍:STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。 *几种定时器(STM32F103系列)࿱…...
ubuntu-PyQt5安装+PyCharm配置QtDesigner + QtUIC
个人环境 ubuntu22.04 pycharm 2024.3 python 3.10 1)先使用apt命令在线安装 1)sudo apt install pyqt5* 2)sudo apt install qttools5-dev-tools2)Pycharm配置Pycharm External Tool 在设置—工具——外部工具中 配置QtDesigner Name :QtDesigne…...
测试基础笔记第十九天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、接口的概念二、接口的类型三、接口测试1.概念2.原理:3.特点:4.实现方式:5.什么是自动化接口测试? 二、HTTP协议1.HTTP协议简介2.URL格式…...
Ubuntu 系统上广受好评的浏览器推荐
日常使用与开发者首选 Firefox 特点:开源、隐私保护强大,支持丰富扩展(如开发者工具、广告拦截),默认预装且跨平台兼容368。 适用场景:日常浏览、开发者调试(支持实时 CSS/JS 编辑)、…...
第 13 届蓝桥杯 C++ 青少组省赛中 / 高级组真题解析
一、选择题 第 1 题 题目:下列关于类中声明的变量描述正确的是 ( )。 选项: A. 只属于该类 B. 属于全局变量 C. 任何情况下都可被该类所有实例共享 D. 属于该类,某些情况下也可被该类不同实例所共享 答案:D 解析&…...
Win10下安装Linux-Ubuntu24.04双系统
0 引言 Ubuntu 24.04 LTS(代号“Noble Numbat”)是 Canonical 于 2024 年 4 月 25 日发布的第 10 个长期支持版本,专注于性能优化、企业安全和开发者体验提升 Windows 10 是微软于 2015 年 7 月发布的跨平台操作系统,融合了传统桌…...
express 怎么搭建 WebSocket 服务器
一:使用 express-ws var express require(express); var app express(); var expressWs require(express-ws)(app);app.use(function (req, res, next) {console.log(middleware);req.testing testing;return next(); });app.get(/, function(req, res, next){…...
模型部署——cuda编程入门
CUDA中的线程与线程束 kernel是在device上线程中并行执行的函数,核函数用__global__符号声明,在调用时需要用<<<grid_size, block_size>>>来指定kernel要执行的线程数量。在CUDA中,每一个线程都要执行核函数,并…...
llfc项目TCP服务器笔记
ChatServer 一个TCP服务器必然会有连接的接收,维持,收发数据等逻辑。那我们就要基于asio完成这个服务的搭建。主服务是这个样子的 #include "LogicSystem.h"#include <csignal>#include <thread>#include <mutex>#include "AsioIOServiceP…...
NPP库中libnppi模块介绍
1. libnppi 模块简介 libnppi 是 NPP 库中专门用于 图像处理 的模块,提供高度优化的 GPU 加速函数,支持: 图像滤波(卷积、形态学操作) 几何变换(旋转、缩放、透视变换) 颜色空间转换…...
从头训练小模型: 3 传统RLHF与DPO的区别
这个步骤我其实是忽略了。如果我的目标是建立一个安全领域的模型,我个人理解这步骤并不太必要。关于人类偏好对齐:在前面的训练步骤中,模型已经具备了基本的对话能力。 此时模型还不知道什么是好的回答,什么是不好的回答。我们希…...
Python-Django系列—视图
一、通用显示视图 以下两个基于类的通用视图旨在显示数据。在许多项目中,它们通常是最常用的视图。 1、DetailView class django.views.generic.detail.DetailView 当该视图执行时,self.object 将包含该视图正在操作的对象。 祖先(MRO&a…...
el-input Vue 3 focus聚焦
https://andi.cn/page/622173.html...
动态规划(5)路径问题--剑指offer -珠宝的最大值
题目: 现有一个记作二维矩阵 frame 的珠宝架,其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为: 只能从架子的左上角开始拿珠宝每次可以移动到右侧或下侧的相邻位置到达珠宝架子的右下角时,停止拿取 注意࿱…...
ZArchiver正版:高效文件管理,完美解压体验
在使用安卓设备的过程中,文件管理和压缩文件的处理是许多用户常见的需求。无论是解压下载的文件、管理手机存储中的文件,还是进行日常的文件操作,一款功能强大且操作简便的文件管理工具都能极大地提升用户体验。今天,我们要介绍的…...
Netlink在SONiC中的应用
Netlink在SONiC中的应用 Netlink介绍 Netlink 是 Linux 内核态程序与用户空间程序之间进行通信的机制之一,原本是用于传递网络协议栈中的各种控制消息。它采用和套接字(socket)编程接口相同的形式,常用于配置内核网络子系统&…...
ReentrantLock实现公平锁和非公平锁
在 Java 里,公平锁和非公平锁是多线程编程中用于同步的两种锁机制,它们的主要差异在于获取锁的顺序规则。下面是对二者的详细介绍: 公平锁 公平锁遵循 “先来先服务” 原则,也就是线程获取锁的顺序和请求锁的顺序一致。先请求锁…...
【C++】 —— 笔试刷题day_25
一、笨小猴 题目解析 这道题,给定一个字符str,让我们找到这个字符串中出现次数最多字母的出现次数maxn和出现次数最少字母的出现次数minn; 然后判断maxn - minn是否是一个质数,如果是就输出Lucky Word和maxn - minn;如…...
terraform resource创建了5台阿里云ecs,如要使用terraform删除其中一台主机,如何删除?
在 Terraform 中删除阿里云 5 台 ECS 实例中的某一台,具体操作取决于你创建资源时使用的 多实例管理方式(count 或 for_each)。以下是详细解决方案: 方法一:使用 for_each(推荐) 如果创建时使…...
Office 三大组件Excel、Word、Access 里 VBA 区别对比
以下是Excel、Word和Access在VBA中的主要区别对比及详细说明: 核心对象模型 Excel Workbook(工作簿)→ Worksheet(工作表)→ Range(单元格区域) 核心围绕单元格数据处理,如 Cells(1,1).Value = "数据" Word Document(文档)→ Range(文本范围)→ Paragrap…...
Linux 进程基础(二):操作系统
目录 一、什么是操作系统:用户和电脑之间的「翻译官」🌐 OS 的层状结构🧩 案例解析:双击鼠标的「跨层之旅」 二、操作系统的必要性探究:缺乏操作系统的环境面临的挑战剖析🔑 OS 的「管理者」属性࿱…...
Java高并发处理核心技术详解:从理论到实战
高并发处理能力是衡量系统性能的重要指标。Java作为企业级开发的主力语言,提供了丰富的并发编程工具和框架。 一、Java并发基础 1.1 Java内存模型(JMM) 主内存与工作内存:每个线程拥有独立的工作内存,通过JMM协议与主…...
单细胞测序数据分析试验设计赏析(二)
单细胞测序数据分析试验设计赏析(二) 这次的单细胞测序数据分析的试验设计是单细胞测序分析机器学习(with SHAP分析),也是常见的试验设计之一,重点是可以用于筛选鉴定基因调控网络,也可以是构建…...
Docker 服务搭建
💢欢迎来到张翊尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Docker 服务搭建在 Ubuntu 上安装 Docker更新软件…...
4电池_基于开关电容的均衡
基于开关电容的均衡系统(Switched-Capacitor Equalization System) 开关电容均衡(Switched-Capacitor Equalization, SCE)是一种广泛应用于 电池组(如锂电池、超级电容组) 的主动均衡技术,通过电…...
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2 前言一、缺相与相线错接解析二、电源电压波动三、电机感量及磁链变化四、负载突变及堵转五、换相时机不当及换相错误参考链接 前言 本系列文章分享如何使用Matlab的Simulink功能来…...
如何从GitHub上调研优秀的开源项目,并魔改应用于工作中?
在 Go 语言学习中,我们经常会去学习一些优秀的开源项目。但是学完之后,发现很快就忘记了或者学习效果并不好。学习一个开源项目最好的方式就是围绕这个开源项目进行实战。例如,直接魔改这个开源项目并应用于工作中。本文来介绍下如何调用&…...
【Java学习笔记】构造器
构造器(constructor)(又名构造方法) 作用:可以在创建对象时就初始化属性,注意不是创建 基本结构 [修饰符] 方法名(形参列表){方法体; }代码示例 public class 构造器 {public static void m…...
Redis 数据类型详解(一):String 类型全解析
文章目录 前言一、什么是 Redis 的 String 类型?二、常用命令1.SET2.GET3.MSET4.MGET5.INCR6.INCRBY7.INCRBYFLOAT8.SETNX9.SETEX 三、注意事项总结 前言 提示:这里可以添加本文要记录的大概内容: 在学习 Redis 的过程中,最基础也…...