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

学习率调度的艺术:从Warmup到余弦退火,掌握深度学习的训练节奏

引言在深度学习的训练过程中优化器的选择决定了“如何更新”参数而学习率Learning Rate则决定了“更新多大步”。作为整个训练过程中最重要的超参数之一学习率直接决定了模型能否收敛以及收敛的质量。然而使用固定的学习率训练模型往往不是最优选择训练初期我们希望大步快速接近最优解区域训练后期则需要小步微调避免在最小值附近震荡。为了解决这一问题研究者们提出了各种学习率调整策略Learning Rate Scheduling。本文将深入探讨三类核心策略用于稳定训练初期的Warmup预热、实现平滑下降的余弦退火Cosine Annealing以及能够根据训练状态自适应的自适应学习率方法。我们将结合原理、PyTorch代码实现和实际应用场景帮助你掌握这门“控制训练节奏”的艺术。一、基础回顾为什么需要动态调整学习率在讨论具体策略前我们需要建立一个共识梯度下降的过程并非一马平川。损失函数曲面充满了各种局部最优和鞍点。初期参数从随机初始化开始距离最优解很远。此时需要一个较大的学习率让模型能够快速跨越“平坦区域”找到正确的下降方向。中期模型进入一个相对较好的局部区域。此时需要逐步缩小学习率避免因步长过大而“跳过”最优解。后期模型已在最优解附近徘徊。一个非常小的学习率有助于进行精细的微调触及真正的最低点。如果用一个比喻来形容固定学习率就像蒙眼下山每一步的步幅都一样要么在悬崖边失足要么在平地上停滞不前而动态调整的学习率则是一位经验丰富的向导知道何时大步流星何时谨慎探路。二、学习率预热Warmup冷启动的保护机制2.1 现象与问题在训练大规模模型特别是Transformer、BERT等或使用大的Batch Size训练时一个常见的现象是如果一开始就直接使用预设的学习率如1e-3损失值不仅不会下降反而可能瞬间飙升甚至直接发散导致训练失败。2.2 原理剖析为什么需要预热这一现象的根本原因在于训练初期的极端不稳定性。初始梯度的噪声模型刚完成初始化权重是随机的。此时计算出的梯度具有很大的噪声和方差甚至可能指向完全错误的方向。优化器状态的冷启动像Adam这类自适应优化器内部维护了梯度一阶矩和二阶矩的统计量。在训练初期这些统计量是基于极少量样本估计的非常不可靠。如果此时采用较大的学习率优化器可能会根据不可靠的统计量做出过激的更新。损失曲面的陡峭程度最新的研究如NeurIPS 2024论文《Why Warmup the Learning Rate?》表明Warmup的好处在于它允许网络在训练初期被“推向”损失曲面中条件更好more well-conditioned的区域。没有Warmup模型可能一开始就陷入陡峭的、病态的区域导致梯度爆炸有了Warmup模型能够利用小步长逐步“滑入”一个更平滑的盆地从而能够容忍后续更大的学习率 。2.3 核心思想与实现Warmup的核心思想就是“由小到大”。在训练开始的若干个迭代Step或Epoch中让学习率从一个极小值通常是0逐渐增加到预设的初始学习率。最常用的是线性预热Linear Warmup学习率随着训练步数线性增长 。PyTorch代码实现使用LambdaLRpythonimport torch from torch import nn, optim from torch.optim.lr_scheduler import LambdaLR # 假设模型与优化器 model nn.Linear(10, 1) optimizer optim.AdamW(model.parameters(), lr1e-3) # 目标学习率 # 设定预热步数比如1000个step warmup_steps 1000 # 定义lambda函数当step warmup_steps时线性增加之后保持1即保持目标学习率 def lr_lambda(current_step): if current_step warmup_steps: return float(current_step) / float(max(1, warmup_steps)) return 1.0 scheduler LambdaLR(optimizer, lr_lambda) # 训练循环注意warmup通常按step更新 for step in range(total_steps): # ... 前向传播与loss计算 ... loss.backward() optimizer.step() scheduler.step() # 每个step更新学习率 optimizer.zero_grad()除了线性预热还有常数预热在预热期内使用极小常数学习率和指数预热等变体但线性预热因其简单高效而最为普及。2.4 应用场景Transformer系列模型BERT、GPT等几乎成了标配。使用大Batch Size训练例如在ImageNet上训练ResNet当Batch Size增大时线性缩放学习率配合Warmup是标准做法。使用Adam优化器时特别是训练初期给予优化器状态一定的稳定时间 。三、余弦退火Cosine Annealing平滑地逼近最优解3.1 从“跳崖”到“滑翔”在Warmup阶段结束后我们进入了正式的训练周期。传统的方法如阶梯式衰减Step Decay会在预设的里程碑如Epoch 30, 60, 90将学习率乘以一个因子如0.1。这种策略虽然有效但显得“突兀”——学习率曲线像是一段段的台阶每次衰减都意味着一次可能造成震荡的“跳崖”。相比之下余弦退火Cosine Annealing提供了一种更为优雅和连续的解决方案 。3.2 原理与数学形式余弦退火的核心思想是让学习率随着训练次数的增加按照余弦函数的形状从初始值平滑地下降到最小值。其数学表达式如下ηtηmin1/2(ηmax−ηmin)(1cos⁡(tπ/Tmax))ηt第 t 次迭代时的学习率。ηmax​初始学习率通常就是优化器的lr。ηmin​最小学习率参数eta_min默认为0。Tmax半个周期的迭代次数从最大值到最小值所需的步数。通常设置为总的训练步数或Epoch数。从公式可以看出余弦函数在 t0 时为1学习率为最大值在 tTmax​ 时为-1学习率降至最小值 ηmin​。整个下降过程是先慢顶部平缓、中快中间斜率大、后慢底部平缓这种形状恰好符合训练的心理预期初期探索时保持高位中期快速衰减进入精细区域后期稳定微调 。3.3 PyTorch 标准实现pythonfrom torch.optim.lr_scheduler import CosineAnnealingLR # 优化器 optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9) # 余弦退火调度器 # T_max 总epoch数假设按epoch更新 scheduler CosineAnnealingLR( optimizer, T_max100, # 周期长度epoch数 eta_min1e-6 # 最小学习率 ) # 训练循环按epoch更新 for epoch in range(100): train_one_epoch() scheduler.step() # 每个epoch结束后更新 current_lr optimizer.param_groups[0][lr] print(fEpoch {epoch}: LR {current_lr:.6f})⚠️ 陷阱提示CosineAnnealingLR可以按Epoch更新也可以按StepBatch更新。关键在于T_max的设置要与更新频率匹配。如果按Step更新T_max应该等于总Epoch数 × 每个Epoch的Step数。3.4 进阶带热重启的余弦退火SGDRLoshchilov Hutter 在论文《SGDR: Stochastic Gradient Descent with Warm Restarts》中提出了一个有趣的变体余弦退火 热重启。所谓的“热重启”并不是从头开始训练而是周期性地将学习率重置回初始最大值。这种策略的逻辑是当一个周期结束时学习率降至最低模型很可能陷入了当前的局部最优。此时突然将学习率调高重启相当于给模型一个巨大的“动能”使其能够跳出当前的局部最优去探索损失曲面上可能存在的另一个更好的谷底。PyTorch 实现CosineAnnealingWarmRestartspythonfrom torch.optim.lr_scheduler import CosineAnnealingWarmRestarts scheduler CosineAnnealingWarmRestarts( optimizer, T_010, # 第一个周期的长度10个epoch T_mult2, # 每个周期后下一个周期的长度乘以这个因子即周期越来越长 eta_min1e-8 # 最小学习率 ) # 训练循环 for epoch in range(100): train_one_epoch() scheduler.step(epoch) # 注意这个调度器可能需要传入epoch参数来计算周期T_mult2意味着第一个周期是10个epoch第二个周期是20个第三个是40个依此类推。周期拉长是为了在训练后期给予更充分的微调时间。四、自适应学习率调度让数据告诉你何时减速前面的Warmup和余弦退火都属于预设型策略——我们根据时钟训练步数来决定学习率的变化。但有时训练过程并不完全遵循预设的时间表。可能模型在50个epoch时就已收敛或者到了80个epoch还没有任何进展。这时我们需要一种指标驱动型的策略 。4.1 ReduceLROnPlateau响应瓶颈的教练ReduceLROnPlateau是一个非常实用的调度器它像一个耐心的教练时刻盯着监控指标如验证集损失。一旦发现指标“停滞不前”即连续多个Epoch没有改善它就果断地将学习率降低一个数量级 。核心思想与其盲目地在预设时间点减速不如在模型真正遇到瓶颈Plateau时再减速。PyTorch 标准用法pythonfrom torch.optim.lr_scheduler import ReduceLROnPlateau scheduler ReduceLROnPlateau( optimizer, modemin, # 监控指标希望是下降的如loss factor0.1, # 学习率缩放因子新_lr lr * factor patience5, # 容忍度连续5个epoch指标没变好就执行衰减 verboseTrue, # 打印日志 threshold1e-4, # 指标变化的阈值变化小于该值视为“没变好” cooldown2, # 衰减后冷却几个epoch在此期间不监控 min_lr1e-8 # 学习率下限 ) # 训练循环 for epoch in range(100): train_one_epoch() val_loss validate() # 计算验证集损失 scheduler.step(val_loss) # 传入监控指标关键区别优点非常稳健能自动适应不同数据集的收敛速度减少手动调参工作量 。缺点对验证集的噪声敏感依赖于验证频率且由于是“事后”反应等到瓶颈才下降可能浪费了一些训练时间。4.2 自适应优化器中的学习率Adagrad除了外置的调度器某些优化器内部本身就内置了参数级别的自适应学习率机制其中最典型的就是Adagrad。Adagrad的原理它为每个参数维护一个累积梯度平方和。对于频繁更新的参数对应稀疏特征累积平方和较大学习率自动变小对于罕见更新的参数累积平方和较小学习率自动变大 。这种机制在处理稀疏数据如文本分类、推荐系统时非常有效因为它能给低频特征更大的更新步长。然而Adagrad的缺陷也很明显随着训练进行累积平方和单调增长学习率会持续衰减直至变为无穷小导致模型后期失去学习能力 。因此在深度学习中Adam、RMSProp等改进型优化器更为流行它们通过引入衰减因子解决了Adagrad的“学习率消失”问题。五、策略组合与实战指南在实际工程中我们通常不会只使用一种策略而是将它们组合起来取长补短。5.1 黄金组合Warmup Cosine Annealing这是目前最流行的训练配方尤其适用于Vision Transformer (ViT)、Swin Transformer以及各类大规模预训练模型。阶段一Warmup在训练的最初几个Epoch如5个或前10%的Steps学习率从0线性增长到预设初始值如1e-3。这个阶段用于稳定模型和优化器状态。阶段二Cosine Annealing预热结束后学习率按照余弦曲线平滑地从初始值下降到接近0或一个极小值eta_min 。代码示例使用 SequentialLRpythonfrom torch.optim.lr_scheduler import LinearLR, CosineAnnealingLR, SequentialLR optimizer optim.AdamW(model.parameters(), lr1e-3) # 调度器1线性预热持续5个epoch warmup_scheduler LinearLR( optimizer, start_factor0.01, # 初始学习率 0.01 * 1e-3 1e-5 end_factor1.0, # 结束学习率 1.0 * 1e-3 1e-3 total_iters5 # 5个epoch的预热 ) # 调度器2余弦退火持续后续95个epoch cosine_scheduler CosineAnnealingLR( optimizer, T_max95, # 后续95个epoch eta_min1e-7 ) # 合并调度器先执行warmup_scheduler 5个epoch再执行cosine_scheduler scheduler SequentialLR( optimizer, schedulers[warmup_scheduler, cosine_scheduler], milestones[5] # 在第5个epoch后切换 ) for epoch in range(100): train(...) scheduler.step()5.2 调度器选择速查表策略推荐场景理由Warmup Cosine大多数CV和NLP任务尤其是Transformer架构稳定启动 平滑收敛追求极限精度Step / MultiStep数据量小、经典CNNResNet、VGG简单有效复现经典论文ReduceLROnPlateau调参经验不足、任务复杂、指标震荡自动响应瓶颈稳健减少手动干预SGDR (WarmRestarts)需要探索多个局部最优、半监督学习周期性重启跳出局部最优提高泛化能力仅靠优化器自适应稀疏数据如文本、ID类特征Adagrad或其变体AdamW能自动处理特征频率差异5.3 常见陷阱与避坑指南Warmup后学习率断崖如果Warmup结束后直接接上余弦退火但余弦退火的起始点没有对齐可能会导致学习率瞬间下降。使用SequentialLR可以完美解决。eta_min设为零如果eta_min0在训练末期学习率会变为0模型彻底停止更新。通常建议设置一个非常小的正数如1e-6或1e-7保留微调能力 。调度器更新频率混淆CosineAnnealingLR如果按Step更新T_max必须是总Step数如果按Epoch更新T_max才是总Epoch数。务必确认你的训练循环中调用scheduler.step()的频率 。在Adam上使用ReduceLROnPlateau由于Adam自身已有自适应学习率有时外部再叠一层ReduceLROnPlateau效果可能不明显或导致过早停止。通常Adam更适合搭配余弦退火。六、总结与展望学习率调度已经从简单的“阶梯下降”发展为一门精细的控制科学。Warmup解决了训练初期的冷启动问题让我们能够安全地使用更大的学习率和大规模并行训练。余弦退火提供了一种优雅且强大的连续衰减方式其变体SGDR更是通过热重启机制帮助模型逃离局部最优。自适应调度如ReduceLROnPlateau则让学习率调整从“开环控制”走向了“闭环反馈”根据模型的实际表现动态调整。未来随着自动化机器学习AutoML的发展学习率调度可能会更加智能化甚至与优化器参数一同被动态地、自适应地调整。但目前掌握上述策略足以应对绝大部分的深度学习训练挑战。在实际应用中不必执着于寻找“最佳”策略。对于一个新的任务从 Warmup Cosine 组合开始通常是一个既安全又高效的选择。理解每种策略背后的动机和适用场景你就能在模型训练遇到瓶颈时多一把调优的利器。训练的核心不仅仅是让模型学习更是让学习的过程变得更聪明。

相关文章:

学习率调度的艺术:从Warmup到余弦退火,掌握深度学习的训练节奏

引言在深度学习的训练过程中,优化器的选择决定了“如何更新”参数,而学习率(Learning Rate) 则决定了“更新多大步”。作为整个训练过程中最重要的超参数之一,学习率直接决定了模型能否收敛以及收敛的质量。然而&#…...

Java大厂面试实录:谢飞机的搞笑面试之旅

Java大厂面试实录:谢飞机的搞笑面试之旅 前言 今天给大家带来一篇别开生面的面试实录,主角是我们熟悉的"水货程序员"谢飞机,他将面对一位严肃的技术面试官,展开一场充满笑料的技术较量。第一轮:基础篇 面试官…...

TestPilot - 智能测试用例生成工具

一、前言 软件测试活动中,测试用例设计始终是质量保障体系的核心环节之一。然而,在实际项目中,测试用例编写的主要成本往往并不体现在「撰写」动作本身,而体现在需求理解、业务规则提炼、边界条件补全、异常路径覆盖以及历史测试经…...

XMind 2025 免费版安装及使用教程(附安装包)

XMind 2025 免费版安装及使用教程 摘要 本文详细记录了XMind 2025版本的安装、激活及基础使用教程。内容涵盖环境准备、自定义安装路径、激活步骤解析以及核心功能速览,旨在帮助用户构建一个稳定、高效的思维导图工作环境。 目录 XMind 是什么 ✨安装步骤 &…...

Flutter 三方库 regexed_validator 的鸿蒙适配指南 - 实现结构化正则表达式校验、在 OpenHarmony 上打造极致严谨的表单输入实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 regexed_validator 的鸿蒙适配指南 - 实现结构化正则表达式校验、在 OpenHarmony 上打造极致严谨的表单输入实战 前言 在鸿蒙(OpenHarmony)应用开发…...

2026见证历史:腾讯、阿里、字节“百虾大战”爆发!哪只“AI小龙虾”才是你的命定打工人?

导语:从“聊天”到“执行”,AI的操作系统时刻来了如果说2023年是Chatbot(聊天机器人)的元年,那么2026年就是Agent(智能体)的爆发年。开源框架OpenClaw(小龙虾)凭借“系统…...

Flutter 三方库 getx_translator 鸿蒙适配指南 - 实现极速响应式翻译、在 OpenHarmony 上打造毫秒级语言切换工作流实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 getx_translator 鸿蒙适配指南 - 实现极速响应式翻译、在 OpenHarmony 上打造毫秒级语言切换工作流实战 前言 在参与构建鸿蒙(OpenHarmony)生态、处…...

UG NX 移除参数

在UG NX中,“移除参数”(也称为“消参”)是一个用于断开模型与其特征历史关联的关键操作。执行后,模型的建模步骤将被清除,变成一个没有参数的“体”。 简单来说,参数化模型像一个记录了所有“施工步骤”的…...

智能厨房置物架:AI Agent的食材新鲜度监测

智能厨房置物架:AI Agent的食材新鲜度监测 关键词:智能厨房置物架、AI Agent、食材新鲜度监测、传感器技术、机器学习 摘要:本文围绕智能厨房置物架利用AI Agent进行食材新鲜度监测展开深入探讨。首先介绍了该技术的背景,包括目的、预期读者、文档结构和相关术语。接着阐述…...

贾子哲学体系:思想主权与贾子猜想引领的东方原创跨学科理论创新与实证研究

贾子哲学体系:思想主权与贾子猜想引领的东方原创跨学科理论创新与实证研究摘要: 本文首度系统性构建贾子哲学体系(Kucius Philosophy),以“思想主权”为核心公理,确立AI时代人类主体性。核心创新“贾子猜想…...

Flutter 三方库 lyrics_parser 的鸿蒙适配指南 - 实现毫秒级精度的 LRC 歌词解析、在 OpenHarmony 上打造极致的音乐视听同步体验

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 lyrics_parser 的鸿蒙适配指南 - 实现毫秒级精度的 LRC 歌词解析、在 OpenHarmony 上打造极致的音乐视听同步体验 前言 在鸿蒙(OpenHarmony)生态的…...

3分钟搞懂深度学习AI:实操篇:ResNet

github仓库及代码(额外补充,持续更新): yiyu0716/3mins-dl: 专为零基础小白打造的深度学习极简指南。这里没有令人头疼的公式,只有通俗易懂的知识拆解。每天只需 3 分钟,带你利用碎片时间轻松看懂 AI 核心概…...

Flutter 三方库 laravel_exception 鸿蒙适配指南 - 实现工业级跨端错误对账与异常监控防线

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 laravel_exception 鸿蒙适配指南 - 实现工业级跨端错误对账与异常监控防线 前言 在参与构建鸿蒙(OpenHarmony)生态下的中大型企业级应用时&#xf…...

AI 辅助编程阶段化开发 SOP

AI 辅助编程阶段化开发 SOP1. 提出需求(明确需求)2. 整理需求文档3. 检查需求文档4. 架构设计5. 核实全局架构文档6. 拆分需求7. 阶段性方案8. 输出阶段性开发文档9. 分阶段独立开发以及任务拆分10. 阶段性评审11. 系统集成与联调📌 附录&…...

攻防世界 misc题心仪的公司

1.工具:Wireshark2.解题:我们打开附件,看到了一个webshell.pcapng文件,我们知道这是流量分析题,我们可以用Wireshark打开,我们先尝试搜索一下flag,方法:①按CTRLF,出现如…...

VMware安装RedHat Linux9全攻略

一、安装VMware Workstation Pro 17 1、从网盘下载VMware Workstation Pro 17: https://pan.baidu.com/s/1yKzk3c7k_EfRe0EabRFd1g?pwdRHCE 2、进入安装引导程序: 单击图中安装引导程序的下一步 同意用户许可协议,再单机下一步 更改安装位…...

必看!AI拓客软件源头厂家哪家强?

在当前数字化营销的时代,AI拓客软件成为了企业获取客户的重要工具。本文将对市场上几款主流的AI拓客软件进行深度测评,帮助您选择最适合的产品。一、测评背景与目的随着市场竞争的加剧,企业对于高效、低成本的获客方式的需求日益增加。AI拓客…...

Flutter 三方库 hotp 的鸿蒙适配指南 - 实现 RFC 4226 标准双因素认证、在 OpenHarmony 上打造极致安全的动态令牌实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 hotp 的鸿蒙适配指南 - 实现 RFC 4226 标准双因素认证、在 OpenHarmony 上打造极致安全的动态令牌实战 前言 在鸿蒙(OpenHarmony)生态的金融管理、…...

常用开源免费的串口录波 / 串口虚拟示波器软件

FX5U RS2串口发送接收指令使用注意事项 https://rxxw-control.blog.csdn.net/article/details/121553172?spm=1011.2415.3001.5331https://rxxw-control.blog.csdn.net/article/details/121553172?spm=1011.2415.3001.5331虚拟串口软件使用介绍...

MCP:AI 世界的“USB-C”接口——深度解析模型上下文协议

MCP:AI 世界的“USB-C”接口——深度解析模型上下文协议 导读:在 2024 年之前,让 AI 连接你的本地文件、数据库或企业内部系统,就像给每台设备定制专用充电器一样繁琐。Anthropic 推出的 MCP (Model Context Protocol) 彻底改变了…...

Flutter 三方库 shelf_router_discovery 鸿蒙适配指南 - 实现服务端路由自动注册、在 OpenHarmony 上打造极致解耦的云端治理实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 shelf_router_discovery 鸿蒙适配指南 - 实现服务端路由自动注册、在 OpenHarmony 上打造极致解耦的云端治理实战 前言 在鸿蒙(OpenHarmony)生态的…...

江苏哪里有三防布厂家?跑断腿摸出的实体大厂

开春这阵子,各大工程供应链的交流群里简直炸开了锅。做重工机械设备改造的、接了大型造船厂外包单子的、还有搞煤矿设备换新升级的,全都在满世界地到处寻价备料。我在好几个几百人的大群里潜水,每天至少能看到几十个人在重复问同一句话&#…...

太猛了!用 OpenClaw-RL,AI 边聊天边自我进化,「白嫖」用户交互数据训出更强模型?

研究背景 每一个已经上线的 AI Agent,其实每天都在"丢弃金矿"。每次 Agent 执行完一个动作 ,环境就会给它一个下一状态信号 ——可能是用户的回复、工具的执行结果、GUI 界面的变化,或者是测试的通过与否。现有的系统把这些信号仅…...

Flutter 三方库 sample_downloader 鸿蒙适配指南 - 实现海量样本数据自动化并行采集、在 OpenHarmony 上打造高效下载调度防御线实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 sample_downloader 鸿蒙适配指南 - 实现海量样本数据自动化并行采集、在 OpenHarmony 上打造高效下载调度防御线实战 前言 在参与构建鸿蒙(OpenHarmony&#x…...

从PDF到RAG知识库

打造可配置、可扩展的自动化预处理流水线:从PDF到RAG知识库在构建RAG(检索增强生成)系统的过程中,文档预处理是决定检索质量的基础环节。然而,面对多源异构文档(如PDF、图片、扫描件)&#xff0…...

Go 微服务架构下的 API 网关实践——Kong 深度解析与实战

Go 微服务架构下,Kong 作为高性能 API 网关,凭借其插件化架构和多协议支持,能够帮助团队解决微服务治理中的复杂问题。本文将从架构原理、核心实践到生产优化,结合 Go 语言生态,深入解析 Kong 的落地应用。 01. Kong网关:Go微服务架构的统一入口 1.1 微服务架构下的网关…...

第二章 第一性原理:底层结构——公理、推导与边界

第二章 第一性原理:底层结构——公理、推导与边界 一、开篇:为什么你的"第一性原理"总是失效? 很多人听完马斯克的故事,热血沸腾地宣称自己也要用第一性原理思考。结果却是: 拆解问题很彻底,推导过程很严密,最终结论却与现实严重脱节。要么执行不下去,要么…...

LangChain框架入门:概念介绍及环境配置

一、langchain框架及相关概念 1、大语言模型 LLM(大语言模型)的本质,是基于 Transformer 架构中的解码器部分构建的生成式模型,核心逻辑很简单 —— 根据上文输入的 token 序列,预测下一个最可能的 token&#xff0c…...

深入了解JVM

堆的内存划分堆分为新生代和老年代,新生代占三分之一,老年代占三分之二 新生代又分成Eden和两个Survivor两个区,比例为8:1:1 新对象优先在Eden区分配,满了就会触发Minor GC,存活的放到幸存区&am…...

每日算法练习:LeetCode 169. 多数元素 ✅

大家好,我是你们的算法小伙伴。今天我们来练习一道经典的数组问题 ——LeetCode 169. 多数元素,它的最优解法「摩尔投票法」非常巧妙,是面试中的高频考点。题目描述给定一个大小为 n 的数组 nums,返回其中的多数元素。多数元素是指…...