当前位置: 首页 > news >正文

高效训练超越LoRA,北航发布MoRA

什么!LoRA我都没有学懂,又出现了MoRA???

LoRA作为当下最火热的大语言模型参数高效微调技术,正在以前所未有的速度迭代更新。从最初的LoRA到陆续推出的LoRA+、DoRA、AsyLoRA等变体,LoRA家族可谓是人才辈出,百花齐放。而就在这百家争鸣之际,微软的科研团队再次抛出重磅炸弹——MoRA,颠覆性地突破了LoRA的低秩更新瓶颈。

与之前的LoRA变体不同,MoRA别出心裁地采用方阵进行高阶参数更新,在保持参数量不变的前提下,极大地提升了参数更新的自由度。这一革命性的设计理念,不仅为大模型参数高效微调开辟了全新的思路,更在指令微调、数学推理、持续预训练等任务上展现出非凡的潜力。MoRA的横空出世,标志着大模型参数高效微调技术正在进入一个全新的发展阶段。

3.5研究测试:
hujiaoai.cn
4研究测试:
askmanyai.cn
Claude-3研究测试:
hiclaude3.com

稍安勿躁,本文将带您深入解析MoRA的核心原理,揭示其独特的技术优势,并通过与LoRA等变体的全面对比,展现MoRA在各类任务上的优异表现。

论文题目:
MoRA: High-Rank Updating for Parameter-Efficient Fine-Tuning

论文链接:
https://arxiv.org/pdf/2405.12130

LoRA的低秩"魔咒"与破局之机

LoRA之所以备受青睐,关键在于它独特的低秩分解机制。通过引入低秩矩阵对原权重矩阵进行近似,LoRA在极小的参数量下就能实现令人惊喜的微调效果。然而,正是这个让LoRA一炮而红的低秩设计,也成为了制约其进一步发展的"诅咒"。研究表明,过低的秩会严重限制模型学习和记忆新知识的能力,尤其在需要获取大量领域知识的任务上,例如持续预训练等。

为了冲破低秩的桎梏,许多LoRA变体如雨后春笋般涌现。它们或提高秩的上限,或优化训练策略,力图在低秩的框架下寻求突破。然而无论如何变化,它们始终难以摆脱"低秩"的烙印。看来要彻底打破LoRA的瓶颈,还需要一些"高阶"的创新。

MoRA方法详解:高阶更新范式的革新之路

MoRA的核心创新在于采用高阶方阵替代LoRA的低秩矩阵,并引入巧妙的压缩解压算子,实现参数更新的高效和灵活。下面我们来详细解读MoRA的技术细节。

秩的大幅度提升

MoRA的关键在于使用方阵M取代LoRA的低秩矩阵A和B,从而将参数更新的秩从提升到。如上图所示,假设原权重矩阵W的维度为d×k,LoRA的参数量为(d+k)r,则MoRA的方阵M维度为,其中。

这一设计使得MoRA的更新自由度较LoRA实现了质的飞跃。以d=4096, k=4096为例,当r=8时,LoRA的秩至多为8,而MoRA的秩可达256。高阶方阵赋予了MoRA更强大的表达能力和更新灵活性。

为了适应方阵运算,MoRA引入了压缩算子和解压缩算子。它们的作用是调整输入输出的维度,使之与方阵M匹配。具体而言:

  1. : 将输入的维度从k压缩至

  2. : 将中间结果的维度从提升至

在文章中,MoRA设计了多种压缩解压方案,包括:

  1. 截断:直接截取部分维度

  2. 共享:将多个维度合并,共享同一个值

  3. 解耦:将输入reshape为矩阵,然后与M做矩阵乘法

  4. 旋转:在解耦的基础上引入旋转矩阵,增强表达能力

下面以解耦为例,说明压缩解压的具体过程。先将x从 reshape为,其中。经过方阵M变换后,再将结果从还原为。整个过程可以表示为:

旋转方案在此基础上,借鉴RoPE的思想,在压缩时引入旋转矩阵,将不同的与不同的做交互,增强方阵对不同输入的表达能力:

压缩解压算子不仅使高阶方阵运算成为可能,而且能根据具体任务灵活调整。它们是MoRA实现高效参数更新的关键"利器"。

MoRA的实验验证

为了全面评估MoRA的性能,研究者在记忆任务、三大微调场景以及从头训练等多个方面,对MoRA进行了全方位的实验验证。下面我们一起来看看,MoRA究竟有何过人之处。

记忆任务:MoRA展现卓越学习能力

研究者首先设计了UUID配对的任务,以考察MoRA在记忆新知识方面的表现。实验要求模型根据输入的UUID,准确生成与之配对的UUID。这一任务相当于一个问答任务,但模型需要的知识完全来自训练数据,而非自身已有的知识。

实验使用LLaMA-7B作为底座模型,并探索了不同秩下LoRA和MoRA的表现。如下图所示,MoRA展现了压倒性的优势:当秩为256时,MoRA仅需500步就能完全记住1万对UUID,而LoRA却始终难以收敛。这充分证实了高阶更新在记忆任务上的显著优势。

通过对比不同秩的结果,还可以发现LoRA即使在秩较大如256时,其记忆能力也难以望MoRA项背。而MoRA在秩为256时,就已经能媲美全参数微调(Full Fine-Tuning, FFT)的效果了。高阶更新让MoRA在知识学习和记忆上出类拔萃,堪称"学霸"!

三大微调场景:"战绩彪炳"的MoRA

为进一步检验MoRA的全面性,研究者选取了指令微调、数学推理和持续预训练三大典型场景,让MoRA与LoRA和FFT同台竞技。结果下表所示,MoRA的表现令人印象深刻:

  • 在指令微调上,MoRA与LoRA表现相当,且在秩较小如r=8时更胜一筹。

  • 在数学推理上,MoRA在GSM8K数据集上再次力压群雄。

  • 最引人瞩目的是持续预训练,MoRA在生物医学和金融领域远超LoRA。

而当秩提升到256时,MoRA在数学推理上更是逼近了FFT的性能。这些优异的成绩,无不得益于MoRA强大的知识获取和记忆能力。在三大场景的激烈角逐中,MoRA交出了一份闪亮的"成绩单",展现了高阶更新范式的巨大潜力。

从头训练:MoRA的全面成长与突破

作为一种新范式,MoRA还需要经受从零开始训练的考验。研究者以不同规模(250M和1.3B)的Transformer模型为对象,在大规模语料C4上对比了LoRA和MoRA的训练效果。此外,作者还将ReLoRA技术用于LoRA和MoRA,以进一步提升性能。

如下图loss曲线所示所示,无论是在250M还是1.3B的模型规模下,MoRA始终以更低的训练损失和更优的收敛速度领先于LoRA。当与ReLoRA结合后,MoRA(ReMoRA)的优势进一步扩大,取得了最优的性能。这表明MoRA作为一种通用的参数高效训练范式,能够在从头训练中稳定地实现性能提升。高阶更新让MoRA在训练的道路上越走越远,展现出惊人的成长潜力。

通过在记忆任务、三大微调场景和从头训练等多个维度的实验验证,MoRA展现出了全面领先的性能优势。高阶更新不仅让MoRA在知识学习和记忆方面出类拔萃,在各类下游任务的适应上也游刃有余,更在从零开始的训练中展现了惊人的成长潜力。实验结果有力地支撑了MoRA作为一种全新参数高效训练范式的有效性和先进性。

总结与展望

MoRA以高阶方阵为武器,破解了LoRA低秩更新的"紧箍咒",在知识学习、记忆任务、各类微调场景乃至从零训练中大放异彩,开创了大模型参数高效微调的全新范式。但这仅仅是MoRA征程的起点,未来它还将不断进化,与更多前沿技术携手进一步挖掘大模型的潜力。数据增强、提示优化等,都有望成为MoRA的得力助手。在MoRA的带动下,大模型高效训练必将迎来百花齐放的新春,为AI的发展注入源源不断的活力。

相关文章:

高效训练超越LoRA,北航发布MoRA

什么!LoRA我都没有学懂,又出现了MoRA??? LoRA作为当下最火热的大语言模型参数高效微调技术,正在以前所未有的速度迭代更新。从最初的LoRA到陆续推出的LoRA、DoRA、AsyLoRA等变体,LoRA家族可谓是…...

【Spring】Spring之依赖注入源码解析(上)

目录 Spring中到底有几种依赖注入的方式? 手动注入 自动注入 XML的autowire自动注入 Autowired注解的自动注入 寻找注入点 桥接方法 注入点进行注入 字段注入 Set方法注入 Spring中到底有几种依赖注入的方式? 首先分两种: 手动注…...

HBase 常用 shell 操作

下面给大家介绍一些HBase 常用 shell 操作,各位看官看好了啦,我要献丑了。 进入 HBase 客户端命令操作界面 $ bin/hbase shell查看帮助命令 > help查看当前数据库中有哪些表 > list创建一张表 创建 user 表,包含 info、data 两个列…...

【区分vue2和vue3下的element UI InputNumber 计数器组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 中,Element UI 提供了 el-input-number 组件作为计数器组件,用于处理数字输入。而在 Vue 3 中,Element Plus 同样提供了类似的组件,但可能有一些属性、事件或方法的细微差异。下面我将分别介绍 Vue 2 的 Element UI 和 V…...

科普健康短视频:成都鼎茂宏升文化传媒公司

科普健康短视频:引领健康知识新潮流 在数字化时代的浪潮中,短视频以其短小精悍、直观易懂的特点,迅速成为大众获取信息的重要渠道。其中,科普健康短视频更是凭借其科学、权威、实用的内容,吸引了大量关注健康的观众。…...

Amis源码构建 sdk版本

建议在linux环境下构建(mac环境下也可以),需要用到sh脚本(amis/build.sh)。 Js sdk打包是基于fis进行编译打包的,具体可见fis-conf.js: amis-master源码下载:https://github.com/baidu/amis g…...

【MySQL数据库】:MySQL复合查询

目录 基本查询回顾 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。 基本查询回顾 【MySQL数据库】:MySQL基本查…...

PS Mac Photoshop 2024 for Mac[破]图像处理软件[解]PS 2024安装教程[版]

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、Anticc简化版安装1.1双击运行软件,安装1.2 解决来源身份不明的开发者问题**此代码为打开:系统偏好设置 – 隐私与安全性,中的【任何来源】,如下图:**1.3 再次运行…...

深入URP之Shader篇16: UNITY_BRANCH和UNITY_FLATTEN

Shader中的if分支 我们在shader中写if语句,例如: if(a>0){//do some cool thing }else{//do other cool thing }实际上,编译器会进行优化,以及处理成多种不同的情况。比如编译器会将if和else展开,分别执行其中的代…...

5.25.1 用于组织病理学图像分类的深度注意力特征学习

提出了一种基于深度学习的组织病理学图像分类新方法。我们的方法建立在标准卷积神经网络 (CNN) 的基础上,并结合了两个独立的注意力模块,以实现更有效的特征学习。 具体而言,注意力模块沿不同维度推断注意力图,这有助于将 CNN 聚焦于关键图像区域,并突出显示判别性特征通…...

uni-app+php 生成微信二维码 分销海报

主要代码如下,可直接复制调试参数: //查询当前用户是否有分销海报public function user_poster(){$this->checkAuth();//查询会员信息$user $this->getUserInfoById($this->user_id);if(!empty($user[distribution_img])){$result[data] $use…...

已解决java.lang.annotation.AnnotationFormatError: 注解格式错误的正确解决方法,亲测有效!!!

已解决java.lang.annotation.AnnotationFormatError: 注解格式错误的正确解决方法,亲测有效!!! 亲测有效 报错问题解决思路 解决方法解决方法1. 检查注解定义2. 验证注解使用位置3. 检查注解参数4. 更新依赖库5. 示例代码 解决思路…...

使用 EBS 和构建数据库服务器并使用应用程序与数据库交互

实验 4:使用 EBS 实验概览 本实验着重介绍 Amazon Elastic Block Store (Amazon EBS),这是一种适用于 Amazon EC2 实例的重要底层存储机制。在本实验中,您将学习如何创建 Amazon EBS 卷、将其附加到实例、向卷应用文件系统,然后进…...

pom文件新增依赖时异常问题定位技巧

今天新增复制两个依赖到项目时,莫名其妙一个爆红artifactId和version,另一个爆红version,但放其他项目却正常,非常莫名其妙。经过一番折腾,终于发现不知道什么时候不小心多写了一个单独的导致的,但是这个异…...

【小白专用24.5.30已验证】Composer安装php框架thinkPHP6的安装教程

一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架,是免费开源的、轻量级的、简单快速且敏捷的php框架。你可以免费使用TP框架,甚至可以将你的项目商用; ThinkPHP8.0 是目前框架正式版的最新版…...

ch4网络层---计算机网络期末复习(持续更新中)

网络层概述 将分组从发送方主机传送到接收方主机 发送方将运输层数据段封装成分组 接收方将分组解封装后将数据段递交给运输层网络层协议存在于每台主机和路由器上 路由器检查所有经过它的IP分组的分组头 注意路由器只有3层(网络层、链路层、物理层) 网络层提供的服务 一…...

数据库(12)——DQL聚合查询

常见的聚合函数 将一列数据作为一个整体,进行纵向计算。 函数功能count统计数量max最大值min最小值avg平均值sum求和 语法 SELECT 聚合函数 (字段列表)FROM 表名; 示例 这是我们的原始表: 求人物总数 select count(id) from in…...

MYSQL四大操作——查!查!查!

目录 简洁版: 详解版: SQL通用语法: 分类: 1. DDL —库 1.1 查询: 1.2 创建: 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表: 2.1.2 查询表结构 : 2.1.…...

Linux静态库与动态库加载

了解库: 关于库相比大家之前肯定使用过,比如C/C里面的标准库,STL里面的各种库,我们在调用STL里的容器时都需要使用库,那么库到底是什么呢? 库的本质就是可执行程序的"半成品" 我们先来回顾一下代…...

Whisper-AT:抗噪语音识别模型(Whisper)实现通用音频事件标记(Audio Tagger)

本文介绍一个统一音频标记(Audio Tagger)和语音识别(ASR)的模型:Whisper-AT,通过冻结Whisper的主干,并在其之上训练一个轻量级的音频标记模型。Whisper-AT在额外计算成本不到1%的情况下&#xf…...

K8s:Pod初识

Pod Pod是k8s处理的最基本单元。容器本身不会直接分配到主机上,封装为Pod对象,是由一个或多个关系紧密的容器构成。她们共享 IPC、Network、和UTS namespace pod的特征 包含多个共享IPC、Network和UTC namespace的容器,可直接通过loaclhos…...

HCIP-Datacom-ARST自选题库__MAC【14道题】

一、单选题 1.缺省情况下,以下哪种安全MAC地址类型在设备重启后表项会丢失? 黑洞MAC地址 Sticky MAC地址 安全动态MAC地址 安全静态MAC地址 2.华为交换机MAC地址表中的动态sticky MAC地址的默认老化时间是多少秒? 300 不会老化 400 500 3.华为交换机MA…...

Go基础编程 - 03 - init函数、main函数、_(下划线)

目录 1. init 函数2. main 函数3. init 函数与 main 函数异同4. _ (下划线)示例 1. init 函数 Go语言中,init 函数用于包(package)的初始化。具有以下特征: 1. init 函数用于程序执行前包的初始化,如初始化变量等。2…...

【TensorFlow深度学习】LeNet-5卷积神经网络实战分析

LeNet-5卷积神经网络实战分析 LeNet-5卷积神经网络实战分析:从经典模型到现代实践LeNet-5的历史背景LeNet-5网络架构实战代码解析实战分析结论 LeNet-5卷积神经网络实战分析:从经典模型到现代实践 在深度学习的历程中,LeNet-5无疑是一座里程…...

错误发生在尝试创建一个基于有限元方法的功能空间时

问题&#xff1a; index cell.index(#直接使用从0开始的索引if0<1ndex<10: #正集流体 subdomains_x[cell,index(] 1 fem1 /usr/bin/python3.8 /home/wy/PycharmProjects/pythonProject2/fem1.pyUnknown ufl object type FiniteElementTraceback (aost recent call last)…...

【八股】Hibernate和JPA:理解它们的关系

在Java开发中&#xff0c;持久化框架是至关重要的工具&#xff0c;它们帮助开发者将Java对象与关系数据库中的数据进行映射和管理。Hibernate和JPA&#xff08;Java Persistence API&#xff09;是两个广泛使用的持久化框架。那么&#xff0c;Hibernate和JPA之间到底是什么关系…...

C++类型参数技术以及常见的类型擦除容器

文章目录 一、类型擦除的作用二、常见的类型擦除容器1.std::any2.std::function3.std::shared_ptr\<void\>和 std::unique_ptr\<void\>4.总结 三、实现一个any参考 类型擦除&#xff08;Type Erasure&#xff09;是一种编程技术&#xff0c;通过它可以在运行时存储…...

SpringBoot如何缓存方法返回值?

Why&#xff1f; 为什么要对方法的返回值进行缓存呢&#xff1f; 简单来说是为了提升后端程序的性能和提高前端程序的访问速度。减小对db和后端应用程序的压力。 一般而言&#xff0c;缓存的内容都是不经常变化的&#xff0c;或者轻微变化对于前端应用程序是可以容忍的。 否…...

C#的web项目ASP.NET

添加实体类和控制器类 using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace WebApplication1.Models {public class Company{public string companyCode { get; set; }public string companyName { get; set; }public string com…...

Spring MVC 源码分析之 DispatcherServlet#getHandlerAdapter 方法

前言&#xff1a; 前面我们分析了 Spring MVC 的工作流程源码&#xff0c;其核心是 DispatcherServlet#doDispatch 方法&#xff0c;我们前面分析了获取 Handler 的方法 DispatcherServlet#getHandler 方法&#xff0c;本篇我们重点分析一下获取当前请求的适配器 HandlerAdapt…...

假设检验学习笔记

1. 假设检验的基本概念 1.1. 原假设&#xff08;零假设&#xff09; 对总体的分布所作的假设用表示&#xff0c;并称为原假设或零假设 在总体分布类型已知的情况下&#xff0c;仅仅涉及总体分布中未知参数的统计假设&#xff0c;称为参数假设 在总体分布类型未知的情况下&#…...

vue3 watch学习

watch的侦听数据源类型 watch的第一个参数为侦听数据源&#xff0c;有4种"数据源"&#xff1a; ref&#xff08;包括计算属性&#xff09; reactive(响应式对象) getter函数 多个数据源组成的数组。 //ref const xref(0)//单个ref watch(x,(newX)>{console.…...

推荐的Pytest插件

推荐的Pytest插件 Pytest的插件生态系统非常丰富&#xff0c;以下是一些特别推荐的Pytest插件&#xff1a; pytest-sugar 这个插件改进了Pytest的默认输出&#xff0c;添加了进度条&#xff0c;并立即显示失败的测试。它不需要额外配置&#xff0c;只需安装即可享受更漂亮、更…...

C语言 | Leetcode C语言题解之第124题二叉树中的最大路径和

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int max; int dfs(struct TreeNode* root){if(!root) return 0;int left dfs(root->left…...

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡&#xff0c;网卡1为NAT模式&#xff0c;网卡2为桥接模式(桥接模式下&#xff0c;使用静态ip&#xff0c;该网卡数据跟实验室主机网络设置相似&#xff0c;除…...

C++面试题其二

19. STL中unordered_map和map的区别 unordered_map 和 map 都是C标准库中的关联容器&#xff0c;但它们在实现和性能方面有显著区别&#xff1a; 底层实现&#xff1a;map 是基于红黑树实现的有序关联容器&#xff0c;而 unordered_map 是基于哈希表实现的无序关联容器。元素…...

系统架构设计师【第9章】: 软件可靠性基础知识 (核心总结)

文章目录 9.1 软件可靠性基本概念9.1.1 软件可靠性定义9.1.2 软件可靠性的定量描述9.1.3 可靠性目标9.1.4 可靠性测试的意义9.1.5 广义的可靠性测试与狭义的可靠性测试 9.2 软件可靠性建模9.2.1 影响软件可靠性的因素9.2.2 软件可靠性的建模方法9.2.3 软件的可靠性模…...

x264 参考帧管理原理:i_poc_type 变量

x264 参考帧管理 x264 是一个开源的 H.264 视频编码软件,它提供了许多高级特性,包括对参考帧的高效管理。参考帧管理是视频编码中的一个重要部分,它涉及到如何存储、更新和使用已经编码的帧以提高编码效率。 x264 参考帧管理的一些关键点总结如下: 参考帧的初始化和重排序:…...

高级Web Lab2

高级Web Lab2 12 1 按照“Lab 2 基础学习文档”文档完成实验步骤 实验截图&#xff1a; 2 添加了Web3D场景选择按钮&#xff0c;可以选择目标课程或者学习房间。...

Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译

文章目录 Tcp协议Tcp协议常见API接口1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. int listen(int socket, int backlog);4. int accept(int socket, struct socka…...

实时数据传输:Django 与 MQTT 的完美结合

文章目录 准备工作创建 Django 项目与应用设置 MQTT 服务器编写 Django 视图编写前端模板发布 MQTT 消息运行 Django 项目 在当今互联网应用中&#xff0c;实时数据传输已经成为许多项目的核心需求。无论是社交媒体平台、在线游戏、金融交易还是物联网设备&#xff0c;都需要及…...

创建Django项目及应用

1 创建Project 1个Project可以对应多个app django-admin startproject myproject 2 创建App python manage.py startapp app01 INSTALLED_APPS [# ...app01,app02,# ... ] 如果要让这个应用在项目中起作用&#xff0c;需要在项目的 settings.py 文件的 INSTALLED_APPS 配置…...

Flutter课程分享 -(系统课程 基础 -> 进阶 -> 实战 仿京东商城)

前言 在移动应用开发的世界中&#xff0c;Flutter 作为一款由 Google 推出的开源 UI 软件开发工具包&#xff0c;正迅速赢得开发者们的青睐。其跨平台、高性能、丰富的组件库以及易于学习的特性&#xff0c;使得 Flutter 成为许多开发者的不二选择。然而&#xff0c;对于初学者…...

IDEA 中导入脚手架后该如何处理?

MySQL数据库创建啥的&#xff0c;没啥要说的&#xff01;自行配置即可&#xff01; 1.pom.xml文件&#xff0c;右键&#xff0c;add Maven Project …………&#xff08;将其添加为Maven&#xff09;【下述截图没有add Maven Project 是因为目前已经是Maven了&#xff01;&…...

thinkphp6 queue队列的maxTries自定义

前景需求&#xff1a;在我们用队列的时候发现maxtries的个数时255次&#xff0c;这个太影响其他队列任务 我目前使用的thinkphp版本是6.1 第一部定义一个新的类 CustomDataBase&#xff08;我用的mysql数据库存放的队列&#xff09; 重写__make 和createPlainPayload方法 …...

【PHP项目实战训练】——laravel框架的实战项目中可以做模板的增删查改功能(2)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…...

Kotlin 对象

文章目录 对象表达式&#xff08;匿名对象&#xff09;对象的声明 对象表达式&#xff08;匿名对象&#xff09; 在 Kotlin 中可以使用object {}声明一个匿名的对象&#xff0c;我们无需声明这个对象的类&#xff1a; fun main() {val any object {fun greet() print("…...

力扣 142题 环形链表Ⅱ 记录

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内…...

乐观锁 or 悲观锁 你怎么选?

你有没有听过这样一句话&#xff1a;悲观者正确&#xff0c;乐观者成功​。那么今天我来分享下什么是乐观锁​和悲观锁。 乐观锁和悲观锁有什么区别&#xff0c;它们什么场景会用 乐观锁 乐观锁基于这样的假设&#xff1a;多个事务在同一时间对同一数据对象进行操作的可能性很…...

《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相

剧情背景 在《庆余年 2》22集中&#xff0c;林相跟大宝交代完为人处世的人生哲理之后&#xff0c;就要跟大宝告别了 在《庆余年 2》23集中&#xff0c;林相在告老还乡的路上与婉儿和大宝告别后 范闲也在与婉儿的对话中知道黑骑调动是绝密&#xff0c;并把最近一次告老还乡梅…...