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

[特殊字符] 大模型后训练指南:从毛坯引擎到智能助手的进化之路 [特殊字符]️

最近看了MIT 6.S191 2025这个讲座感觉讲的挺好的,然后写了一篇总结,大家感兴趣的话可以直接看视频,链接我放到文章最后。

🎯 讲座核心

这个讲座主要讲的是,当我们有了一个基础的大语言模型(就像刚出厂的毛坯引擎)之后,如何通过"后期训练"把它调教成一个真正有用、能听懂指令、能好好回答问题的智能助手(就像把引擎装到车里,并进行各种调试,让车能开、好开)。


👨‍🏫 讲师介绍 (0:00 - 1:06)

  • 讲师叫 Maximilien (Max),在 Liquid AI 做博士后研究。

  • 他还写了一本叫《LM 工程师手册》的书。

  • 他对开源社区有不少贡献,比如写博客、微调模型、开发模型合并/评估工具等。

  • 这次讲座会覆盖后期训练的 数据准备、训练算法、效果评估,还会聊聊 未来趋势测试时计算扩展


🔍 第一步:什么是后期训练 (Post-training)?(1:06 - 2:51)

🏗️ 前期训练 (Pre-training) 是什么?

  • 想象一下,我们给模型看海量的网上文本(几万亿个词)。

  • 训练目标很简单:根据前面的词,预测下一个词是什么。

  • 这样训练出来的是一个 基础模型 (Base Model)

缺点:这个基础模型只会"接话",但你问它问题,或者让它按指令做事,它可能做得不好,因为它没学过怎么"对话"或"听指令"。

🎯 后期训练 (Post-training) 的目标是什么?

  • 把只会"接话"的基础模型,变成一个有用的 智能助手 (Assistant)

  • 让它能理解并遵循指令,能回答问题。

后期训练主要分两步

  1. 第一阶段:监督微调 (Supervised Fine-Tuning, SFT)

    • 怎么做:我们给模型看很多"指令"和对应的"好答案"的例子。就像教小孩看图说话,告诉他"看到这个图片(指令),要这样说(答案)"。

    • 学到什么:模型学会了按特定格式(后面会讲的"聊天模板")回答问题,知道该怎么回应指令了。

    • 效果:模型现在能听懂指令,也能回答问题了。

  2. 第二阶段:偏好对齐 (Preference Alignment)

    • 为什么需要:SFT 后的模型虽然能回答问题,但答案可能不够好,比如不够安全、不够有用,或者语气不对。

    • 怎么做:我们不只给一个好答案,而是针对一个问题,给模型看两个答案:一个是 "我们喜欢的答案 (Chosen)" ,另一个是 "我们不喜欢的答案 (Rejected)" 。就像告诉小孩:"这样说很好,那样说不好"。

    • 学到什么:模型学会了区分好坏答案,更倾向于生成我们喜欢的、符合人类偏好的回答。


📊 第二步:后期训练需要什么样的数据?(2:51 - 5:24, 8:32 - 11:55)

📈 数据量 vs 质量:

  • 跟前期训练需要海量(万亿级)数据不同,后期训练的数据量 少得多

  • 但后期训练更看重数据的 质量。一点点高质量数据,效果可能比大量低质量数据好。

🎯 不同目标的微调,数据需求不同:

  1. 任务特定型微调 (Task-Specific)

    • 目标:让模型精通某一项特定任务(如总结摘要、拼写检查)。

    • 数据需求:需要的样本量 更少,更容易做。

  2. 领域特定型微调 (Domain-Specific)

    • 目标:让模型在某个专业领域(如医疗、法律、金融)或特定语言上表现更好。

    • 数据需求:数据量 相对较少,但需要包含该领域的 专业知识

  3. 通用型微调 (General Purpose)

    • 目标:打造像 ChatGPT 那样什么都能聊的通用助手。

    • 数据需求:需要 大量 (可能上百万条)多样化 的高质量指令和答案数据。

注意:这些数据量只是粗略估计,具体需要多少还跟模型大小(大模型通常需要更少微调数据)、任务难度、基础模型本身的能力有关。比如,基础模型完全不懂某种语言,光靠微调很难教会它。

🌟 什么是"好"的后期训练数据?(8:32 - 11:55) - 非常重要!

  1. 准确性 (Accuracy):答案是不是对的?是不是切题?(简单问题好判断,复杂问题如代码、数学可能需要自动化测试或解题器来验证)。

  2. 多样性 (Diversity):数据要五花八门,覆盖用户可能问的各种问题和场景。(真实用户对话通常很多样。注意:用太多机器生成的"合成数据"可能导致多样性下降)。

  3. 复杂性 (Complexity):问题要有挑战性,答案要详细、有深度,最好包含推理步骤(比如"一步一步思考")。(讲师举例:简单问埃菲尔铁塔多高 vs 复杂地问多个相关细节)。


⚖️ 第三步:什么时候应该考虑微调模型?(5:24 - 8:32)

🧐 前提:

先试试更简单的方法,比如 上下文学习 (In-context Learning)检索增强生成 (RAG) (就是给模型提供相关资料让它参考着回答)。因为这些方法更容易测试。

🚦 什么时候微调?

如果简单方法效果不够好(比如答案质量、速度、成本不满意),可以考虑微调。以下情况适合微调:

  • 改变语气或格式:不喜欢模型默认的写作风格(比如写邮件的语气),可以通过微调改变。

  • 注入(少量)知识:教模型一些特定领域的知识,比如关于你公司的事实。(注意:微调能增加的知识有限,不能从零开始学一个庞大领域)。

  • 模型蒸馏 (Distill):把一个大模型(如 GPT-4)的能力"压缩"到一个小模型里,以降低成本、提高速度。

  • 提升特定任务的输出质量:对于非常窄的任务(比如画流程图),微调可以让你自己的模型在这个任务上超过通用大模型。

🎯 其他原因:

  • 控制权 (Control):不想把敏感数据通过 API 发给第三方。

  • 定制化 (Customizability):想要完全符合自己需求的模型风格和行为。


📝 第四步:数据的格式与生成方法 (11:55 - 17:45)

📋 数据格式:

  • 指令数据 (SFT):通常包含 指令 (instruction)、输入 (input, 可选)、输出 (output)。有时还有 系统提示 (system prompt) 来设定角色(如"你是一个来自MIT的数学家")。

  • 偏好数据 (Preference Alignment):包含 提示 (prompt)、选择的答案 (chosen answer)、拒绝的答案 (rejected answer)

🔄 数据生成流程 (Data Generation Pipeline):

  1. 种子数据 (Seed Data):可以是任何东西,比如原始文本、已有的问答对、用户问题等。

  2. 生成 (Generation):用 LLM 补全数据。比如:

    • 只有答案文本?让 LLM 生成对应的问题(反向翻译 Back-translation)。

    • 只有问题?让 LLM 生成答案。

    • 甚至让 LLM 生成指令和答案。

  3. 评分与过滤 (Scoring & Filtering)

    • 用规则(启发式方法)或用另一个 LLM 作为"裁判"来给生成的答案打分,筛掉差的。

  4. 清理 (Cleaning)

    • 去重 (Deduplication)。

    • 数据净化 (Decontamination):确保训练数据里没有混入测试集的内容。

    • 关键词过滤 (Filtering):移除不想要的词语。

🎯 具体例子:

  1. 生成"指令遵循 (Instruction Following)"数据

    • 准备一些基础指令和"约束条件"(如"回答必须全小写英文")。

    • 让 LLM 根据"指令+约束"生成答案。

    • 写程序自动检查 答案是否真的遵循了约束(比如检查是不是全小写、是不是英文)。

    • 净化(比如确保不含 IFEval 测试集的内容)、过滤。

  2. 生成"偏好"数据 (类似 UltraFeedback)

    • 准备一些提示 (prompt)。

    • 多个不同的 LLM 对同一个提示生成答案。

    • 用一个 "裁判 LLM" 给这些答案打分。

    • 选得分最高的作为"Chosen",得分最低的作为"Rejected"。

    • 清理数据(去重、移除太短的答案等)。

  3. 案例学习 (OpenHermes/Perfect Blend)

    • 这是一个开源的数据集混合方案,用于通用型微调。

    • 它混合了多种类型的数据:大量数学、代码,加上一些聊天、指令遵循数据。

    • 这给出了一个通用模型微调时,数据类型配比的参考。


💬 第五步:应用聊天模板 (Chat Template) (17:45 - 19:17)

📌 是什么?

在把数据喂给模型训练(尤其是 SFT 阶段)之前,要给数据套上一个固定的 格式/结构

🛠️ 怎么做?

用特殊的标记(比如 [INST], 用户:, 助手: 等)来区分谁在说话(系统、用户、助手)以及对话的开始和结束。

❓ 为什么重要?

  • 让模型学会对话的轮转结构。

  • 这是区分只会"接话"的基础模型和能进行多轮对话的微调模型的关键之一。模型需要学习并遵循这个模板。


⚙️ 第六步:后期训练的算法 (19:17 - 30:00)

🛠️ 推荐的微调库:

  1. TRL (Hugging Face):功能强大,算法更新快,紧跟研究前沿。

  2. Axolotl:用户友好,用 YAML 文件配置训练,方便分享和参考他人设置。可以帮你预处理数据。

  3. Unsloth:非常 适合单 GPU 微调,效率极高,能方便地处理模型量化。

🔧 SFT 的技术:

  1. 全参数微调 (Full Fine-tuning)

    • 像预训练一样,训练模型的所有参数。

    • 效果最好,但需要 非常多 的显存 (VRAM) 和计算资源。

  2. 参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT) - LoRA 是最常用的

    • 冻结大部分原模型参数,只训练一小部分新增的"适配器"参数(比如只占总参数的 0.5%)。

    • 大大减少 了计算和显存需求,训练更快。

    • 但仍然需要加载 完整 的基础模型到显存。

  3. QLoRA (Quantized LoRA)

    • 先把基础模型 量化 (Quantize) 成低精度(比如 4-bit),减少模型占用的显存。

    • 然后在量化后的模型上做 LoRA 微调。

    • 显存需求最低,适合硬件资源非常有限的情况。

    • 缺点是训练速度比 LoRA 慢,效果可能比 LoRA 差一点点。

选择建议:如果资源够,优先 LoRA;如果显存实在不够,用 QLoRA;除非你是大公司追求极致性能,否则一般不需要全参数微调。

🔄 偏好对齐的技术:

有很多种(超过 100 种!),但主要了解两种:

  1. PPO (Proximal Policy Optimization)

    • "经典"方法,效果好。

    • 缺点:非常复杂,训练时需要同时加载 3 个模型(原始模型、训练中的模型、打分模型 Reward Model),还需要计算 KL 散度防止模型跑偏太远。计算成本 非常高

  2. DPO (Direct Preference Optimization)

    • 更新、更简单的方法。

    • 只需要加载 2 个模型(或者用 LoRA 的话,可能只需要 1 个基础模型 + 2 套适配器)。

    • 训练更快、更便宜、更容易调参。

    • 理论上效果可能略低于 PPO,但实践中往往足够好,甚至因为更容易调优而效果更佳。

选择建议:强烈推荐 DPO,除非你有 OpenAI 级别的资源和需求。

⚙️ 重要的训练参数:

  1. 学习率 (Learning Rate):控制每次更新参数的幅度,非常重要。讲师给了一些常用值范围。

  2. 批次大小 (Batch Size) / 最大长度 (Max Length):决定一次喂给模型多少数据、每条数据多长。直接影响显存占用。可以通过"梯度累积"技巧使用较小的物理 Batch Size 达到等效的大 Batch Size。

  3. 训练轮数 (Epochs):数据集完整过几遍,通常 3-5 轮。

  4. 优化器 (Optimizer):更新参数的算法,推荐 AdamW。

  5. 注意力机制 (Attention Mechanism):推荐使用 Flash Attention,对处理长序列效率很高。

📊 监控训练过程:

  1. 损失曲线 (Loss Curve):理想是平稳下降。如果出现尖峰(loss spike),可能是学习率太高了。

  2. 验证集损失 (Validation Loss):用一小部分(比如 1-2%)没参与训练的数据来验证。如果训练损失下降,但验证损失上升,说明可能 过拟合 (Overfitting) 了。

  3. 梯度范数 (Gradient Norm):参数更新的幅度。不希望看到太多尖峰或持续升高,可能表示训练不稳定或数据有问题。


🧩 第七步:模型合并 (Model Merging) (30:00 - 40:18)

🔄 是什么?

一个有点"黑科技"但非常有效的技术:把多个 已经训练好的、同结构、同大小 的模型(比如多个 Llama 3 8B 的微调版)的参数,通过某种方式(如加权平均)"融合"起来,得到一个 可能更强 的新模型。

❓ 为什么用?

可以结合不同模型的优点。现在很多公司和开源社区都在用。

✅ 要求:

  • 模型架构必须 相同 (比如都是 Llama 3)。

  • 模型大小必须 相同 (比如都是 8B)。

  • 最好用全精度模型合并,量化模型合并效果会打折扣。

🛠️ 常用技术:

  1. 简单平均 (Simple Average):直接加权平均参数。

  2. SLERP (Spherical Linear Interpolation):在"球面上"插值,通常比线性平均效果好,但一次只能合并 两个 模型。

  3. TIES-Merging (包括 DARE, TIES 等变体):更高级的方法。

    • TIES: 保留那些在所有源模型中最重要的参数。

    • DARE: 在合并前随机丢弃一些参数,增加稀疏性。

    • 符号处理 (Sign Consensus): 解决一个模型的参数是正、另一个是负,直接加起来会抵消的问题。

    • 可以合并 多个 模型,可以设置不同的权重 (weight) 和密度 (density)。选参数有点像"炼金术",需要实验。

📚 案例学习 (Daredevil 模型):

  • 讲师展示了他合并多个模型(包括其他合并过的模型,形成"家族树")得到 Daredevil 的过程。

  • 使用了 TIES 类的合并方法,通过配置文件 (YAML) 指定了不同的模型、权重和密度。

  • 结果:合并后的 Daredevil 在一些评测基准上 超过了 所有原始模型。

🌍 应用场景:特定语言模型增强

  • 假设你训练了一个芬兰语模型,它芬兰语很好,但其他语言(如英语)或通用能力下降了(灾难性遗忘)。

  • 你可以把它和通用的 Llama 3 Instruct 模型 合并

  • 结果:得到一个既懂芬兰语,又保持了通用能力的新模型。模型合并有助于 "叠加" 不同技能。


📊 第八步:模型评估 (Evaluation) - 非常重要但困难 (40:18 - 49:26)

❓ 为什么重要?

后期训练的目标是让模型更好,评估就是衡量"好坏"的尺子。没有好的评估,就可能在优化错误的方向。

❓ 为什么困难?

评估 LLM 没有完美的方法,现有方法各有优劣。

📋 主要评估方法:

  1. 自动化基准测试 (Automated Benchmarks)

    • 例子:MMLU (综合知识选择题), GSM8K (数学应用题), HumanEval (代码生成)。

    • 方法:用固定的数据集提问,用固定的指标(如准确率)打分。

    • 优点:可扩展、成本低、可复现、能评估特定技能。

    • 缺点:与真实用户体验脱节 (用户是聊天,不是做选择题),可能无法评估开放式回答,容易被"污染"(模型可能见过测试题)。

  2. 人工评估 (Human Evaluation)

    • 例子:Chatbot Arena (聊天机器人竞技场)。

    • 方法:让人类用户与两个匿名的模型聊天,然后投票选出哪个更好。

    • 优点:直接反映人类偏好,灵活(可以评估特定方面如毒性、创意),不易污染。

    • 缺点:成本高、速度慢、难扩展,人类也有偏见(比如偏爱更长、更自信的回答,即使是错的)。

  3. LLM 作为裁判 (LLM-as-Judge)

    • 方法:用一个强大的 LLM (或多个 LLM 组成的"评审团") 来代替人类,给模型输出打分或比较优劣。

    • 优点:比人工评估可扩展性强,成本更低,速度更快,与人类偏好相关性较好,能处理复杂任务。

    • 缺点:裁判 LLM 自身也有偏见(类似人类偏见),需要验证裁判的质量(可能还是需要少量人工抽查)。

📌 核心问题:

自动化基准测试的得分 经常与 人类偏好(人工评估或 LLM 裁判结果)不一致! (讲师展示了相关性图表)。

🎯 结论:

不能只依赖一种评估方法。需要 结合使用 多种方法(比如自动化基准 + LLM 裁判 + 少量人工抽查)来更全面地了解模型表现。

🛠️ 创建自己的评估:

  1. 尽早开始(甚至在微调前就设计好评估方案)。

  2. 根据模型在评估中的表现,不断迭代改进评估数据集。

  3. 结合不同类型的评估。

  4. 不仅和自己之前的模型比,也要和其他公开模型比。


🔮 第九步:未来趋势 - 测试时计算扩展 (Test-Time Compute Scaling) (49:26 - 57:12)

🧠 核心思想:

除了通过训练提升模型能力,我们还可以在 用户提问时 (测试时/推理时) 投入更多的计算,来换取更好的答案质量。

🛠️ 主要技术:

  1. 多数投票 (Majority Voting)

    • 对同一个问题,让模型生成 多个 不同的答案(通过调整采样参数,增加随机性)。

    • 选择出现次数最多的那个答案。

    • 简单有效,能减少因随机采样导致的错误。

  2. 最佳选择 (Best-of-N)

    • 生成 N 个答案。

    • 用一个 打分模型 (Reward Model)裁判 LLM 给每个答案打分。

    • 选择得分最高的那个答案。

    • 通常比多数投票效果更好,但需要一个评分机制。

  3. 过程监督奖励模型 (Process-Supervised Reward Models, PRM) / 思维链搜索

    • 更进一步,打分模型不只给最终答案打分,而是给答案生成的 每一步推理过程 打分。

    • 模型可以探索多个推理路径,如果一步走错了,可以回溯,选择评分更高的路径继续。

    • 就像在"思维树"中搜索最佳路径。

    • 更复杂,但潜力更大。

📌 打分模型 (Reward Model) 来源:

可以在偏好对齐阶段训练得到(PPO 中就有),也可以直接用通用 LLM 做裁判,或者专门训练一个用于特定任务(如安全性)的打分模型。

📊 效果:

实验表明,小模型(如 Llama 3.1 3B)通过在测试时生成更多候选答案(增加计算量),可以在某些任务(如数学)上 超过 比它大得多的模型(如 Llama 3.1 70B)。

💡 本质:

推理时的计算成本/延迟 来换取 输出质量的提升


🎯 第十步:总结 (57:12 - 58:31)

后期训练是一个 循环迭代 的过程:

  1. 精心准备数据 (Data Creation) (大约占 1/3 时间)

  2. 训练模型 (Training) (SFT, 偏好对齐, 可能还有模型合并)

  3. 评估效果 (Evaluation) (大约占 1/3 时间)

评估结果会反过来指导你 如何改进数据(哪个方面弱就补充哪方面的数据,提升数据质量、多样性、复杂性、准确性)。通过不断循环,模型会越来越好。


❓ Q&A 中的补充信息 (相关部分)

  • 微调 vs RAG:它们不是互斥的,往往是 结合使用。微调可以教模型特定技能或风格,RAG 提供实时信息。用微调过的模型再配合 RAG,效果通常更好。

  • 多轮对话数据:SFT 和偏好对齐都可以,并且 应该 使用多轮对话数据,因为模型在单轮对话中表现好,不代表在多轮中也好。

  • 模型合并与 Tokenizer:模型合并要求使用 相同 的 Tokenizer(分词器)。在后期训练阶段更换 Tokenizer 会导致性能急剧下降,因为模型需要重新学习词语和内部表示的映射。Tokenizer 的设计通常在预训练之前完成。

  • 测试时计算扩展与不确定性:生成多个答案时的得分分布,或者答案的一致性,可以 用来衡量模型对答案的"确信度",这对于安全或关键应用可能有用。

相关文章:

[特殊字符] 大模型后训练指南:从毛坯引擎到智能助手的进化之路 [特殊字符]️

最近看了MIT 6.S191 2025这个讲座感觉讲的挺好的,然后写了一篇总结,大家感兴趣的话可以直接看视频,链接我放到文章最后。 🎯 讲座核心 这个讲座主要讲的是,当我们有了一个基础的大语言模型(就像刚出厂的毛…...

厚铜pcb生产厂家哪家好?

在为您的项目选择厚铜PCB供应商时,技术实力、生产经验与交付能力是决定产品可靠性的关键。随着新能源汽车、工业电源、5G通信等领域对高电流承载、高效散热的需求激增,厚铜PCB(铜厚3oz以上)的工艺门槛不断提升。本文结合行业头部企…...

【重走C++学习之路】22、C++11语法

目录 一、列表初始化 1.1 {}初始化 1.2 std::initializer_list 二、变量类型推导 2.1 auto 2.2 decltype 三、右值引用和移动语义 3.1 左值与左值引用 3.2 右值与右值引用 3.3 左值引用与右值引用比较 3.4 右值引用使用场景和意义 3.5 move 3.6 完美转发和万能引…...

Spring Security授权管理

授权是Spring Security的核心功能之一,是根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则可正常访问,没有访问的权限时则会被拒绝访问。认证是为了保证用户身份的合法性,而授权则是为了更细粒度地对隐私数据进行划分…...

2025A卷-正整数到Excel编号之间的转换

题目描述 用过 excel 的都知道excel的列编号是这样的: a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac … 分别代表以下编号: 1 2 3 … 26 27 28 29 … 52 53 54 55 … 676 677 678 679 … 702 703 704 705 … 请写个函数&…...

算法设计与分析(期末试卷)

目录 一、频度计算(15 分) 二、项目工期问题(20 分) 三、TSP 问题的贪心算法(15 分) 四、“秤心如意”(15 分) 五、工作指派问题(20 分) 六、计算复杂度…...

springboot(2.6.13)自定义用户授权管理

1.自定义用户访问控制 a.重写configure(HttpSecurity http)方法 在自定义配置类SecurityConfig中重写 Override protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/deta…...

JavaWeb:vueaxios

一、简介 什么是vue? 快速入门 <!-- 3.准备视图元素 --><div id"app"><!-- 6.数据渲染 --><h1>{{ msg }}</h1></div><script type"module">// 1.引入vueimport { createApp, ref } from https://unpkg.com/vu…...

uniapp常用

1.下载文件带进度提示 <template> <view> <button click"startDownload">下载文件</button> <progress :percent"progress" stroke-width"3" /> </view> </template> <…...

etcd 的安装及使用

介绍 Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统&#xff0c;用于配置共享和服务发现等。它使用 Raft 一致性算法来保持集群数据的一致性&#xff0c;且客户端通过长连接 watch 功能&#xff0c;能够及时收到数据变化通知&#xff0c;相较于 Zookeepe…...

uni-app vue3 实现72小时倒计时功能

功能介绍 &#xff0c;数组项有一个下单时间 &#xff0c;比如今天下单在72小时内可以继续支付&#xff0c;超过则默认取消订单 页面按钮处 加上倒计时 <!-- 倒计时 --> <text v-if"item.timeLeft > 0">{{ formatTime(item.remaining) }}</text&g…...

【C语言】初阶算法相关习题(二)

个人主页&#xff1a;夜晚中的人海 文章目录 ⭐一、两数之和&#x1f3e0;二、珠玑妙算&#x1f3a1;三、寻找奇数&#x1f680;四、截取字符串&#x1f389;五、寻找峰值 ⭐一、两数之和 题目描述&#xff1a;两数之和 解题思路&#xff1a; 1.先创建一个动态分配的数组ret&a…...

Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理

Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 目录 Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 一、简单介绍 二、Flutter 和 Android 原生之间的数据…...

STM32的SysTick

SysTick介绍 定义&#xff1a;Systick&#xff0c;即滴答定时器&#xff0c;是内核中的一个特殊定时器&#xff0c;用于提供系统级的定时服务。该定时器是一个24位的递减计数器&#xff0c;具有自动重载值寄存器的功能。当计数器到达自动重载值时&#xff0c;它会自动重新加载…...

【JS事件循环机制event-loop】

目录 0、总结1、Event-Loop 概念2、宏任务-微任务3、事件循环执行机制4、调用栈5、示例 0、总结 Tasks execute in order, and the browser may render between them 【宏任务按序执行&#xff0c;浏览器可以在它们之间进行渲染】Microtasks execute in order, and are execut…...

对比N+1查询和关联聚合查询

通常我们管第一种模式叫 “N1 查询”&#xff0c;第二种叫 “关联聚合查询”。下面从几个角度来比较&#xff0c;帮助你做出选择。 1. 性能与资源消耗 方案SQL 语句数网络往返次数数据库负载Java 处理N1 查询&#xff08;先查项目&#xff0c;再遍历项目查设备状态数&#xff…...

优化 Flutter 应用启动:从冷启动到就绪仅需 2 秒

冷启动序列剖析&#xff1a;冷启动时&#xff0c;Flutter 应用需经历引擎和 Dart VM 初始化、启动 Dart Isolate、渲染第一帧等步骤。Android 和 iOS 系统分别通过启动屏幕和 Storyboard 缓解启动延迟。应用大小、初始化工作、调试模式下的 JIT 编译等因素会影响冷启动时间。优…...

牟乃夏《ArcGIS Engine 地理信息系统开发教程》学习笔记 4-空间分析与高级功能开发

目录 一、核心组件与接口回顾 &#xff08;一&#xff09;空间分析基础架构 &#xff08;二&#xff09;网络分析模块 二、矢量数据空间分析实战 &#xff08;一&#xff09;缓冲区分析 &#xff08;二&#xff09;叠加分析&#xff08;以裁剪为例&#xff09; 三、栅格…...

UE 滚动提示条材质制作

需要两个贴图 先制作条纹屏闪 这里RGB输出连到alpha&#xff0c;0为白色&#xff0c;到1就为黑色了 因为这个图片是RGB输出代表三个图片&#xff0c;看贴图颜色就知道了&#xff0c;然后把这三个相加一下&#xff1b;链接自发光颜色&#xff0c; 这里设置速度变量 通过网盘分…...

金融业数字化转型——深入解读77页2024年中国金融体系指标大全【附全文阅读】

本文主要介绍了金融业通行宝典中国金融体系指标大全的内容,包括央行体系、商业银行体系、非银金融机构与地方金融组织的各项指标。文章详细分析了美联储资产负債表的结构,并概述了美日欧等主要经济体资产负债表状况。 重点内容: 1. 央行体系是金融分析的重点。 2. 美联储资产…...

研究:大模型输出一致性:确定性与随机性的场景化平衡

大模型在相同输入下的输出是否一致,本质上取决于其设计目标、任务性质以及技术实现方式。这一问题需要从技术原理、应用场景、用户需求三个维度进行深度分析: 一、技术实现:确定性与随机性的平衡 模型架构的确定性基础 大模型的核心参数(如权重矩阵)在训练完成后是固定的…...

数据分析1

一、常用数据处理模块Numpy Numpy常用于高性能计算&#xff0c;在机器学习常常作为传递数据的容器。提供了两种基本对象&#xff1a;ndarray、ufunc。 ndarray具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 ufunc提供了对数组快速运算的标准数学函数。 ndar…...

vmare pro安装报错用户在命令行上发出了EULAS_AGREED=1,表示不接受许可协议的错误解决方法

问题现状和原因 用户在命令行上发出了EULAS_AGREED1&#xff0c;表示不接受许可协议的错误。 以上错误主要原因是因为机器安装过了vmare 卸载时没有卸载干净导致的。 解决方法&#xff1a; 1、控制面板-程序和功能-卸载程序。找到vamre卸载掉。 2、打开开始菜单输入注册表 …...

《Linux篇》基础开发工具——vim详细介绍

文章目录 1.软件包管理1.1 什么是软件包1.2 Linux软件生态 2.编辑器vim2.1 vim的正常/命令模式2.2 vim的末行模式2.3 vim的插入模式 3.配置vim 1.软件包管理 我们先来看一下再Linux是那个如何安装软件&#xff1f; 源码安装&#xff1a;软件是存在相互依赖的关系的&#xff0…...

AI图片跳舞生成视频,animate X本地部署。

本期内容打包限时免费下载https://www.kdocs.cn/l/cnQ5lNU5DFZB 对比不同算法&#xff0c;使用同一组图片和舞蹈视频。animate X官网&#xff0c;下载项目解压。按照官方教程下载模型&#xff0c;项目包和命名好的模型包已上传网盘&#xff0c;放到解压目录下即可。 安装好cond…...

Web技术与Apache网站部署

一、Web 基础与 HTTP 协议 1.1 静态网页与动态网页 静态网页 定义&#xff1a;由纯 HTML、CSS、JavaScript 构成&#xff0c;文件扩展名为 .htm 或 .html。内容在服务器生成后固定不变&#xff0c;仅通过客户端脚本&#xff08;如 JS&#xff09;实现视觉动态效果&#xff08…...

第七章:Server/Client Communication

Chapter 7: Server/Client Communication 从工具集成到服务器通信&#xff1a;如何让AI“远程协作”&#xff1f; 在上一章的工具与LLM集成中&#xff0c;我们已经能让AI调用真实世界的工具。但你是否想过&#xff1a;如果多个用户同时请求天气查询&#xff0c;或者需要远程控…...

Linux调试器 - gdb使用指南

目录 一、背景知识 二、开始使用 gdb &#xff08;一&#xff09;查看源代码相关指令 &#xff08;二&#xff09;程序执行控制指令 &#xff08;三&#xff09;断点相关指令 &#xff08;四&#xff09;变量操作相关指令 &#xff08;五&#xff09;其他常用指令 在Li…...

C++面试常青客:LRUCache最近最少使用算法

C面试常青客&#xff1a;LRUCache最近最少使用算法 文章目录 C面试常青客&#xff1a;LRUCache最近最少使用算法1.背景&#x1f3c6;2.原理&#x1f680;2.1基本原理2.2核心特性 3.结构3.1为什么需要 list<pair<int,int>>&#xff08;双向链表&#xff09;&#xf…...

【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的社交摄影约拍平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...

jetson nano上Ubuntu系统调用摄像头bug

今天在做一个比赛的时候&#xff0c;通过调用摄像头做检测并输出目标角度和距离。刚开始用的是 cv::VideoCapture cap; cap.open("/dev/video0");没有任何问题&#xff0c;使用pnp解算得到的角度和距离都是正确的&#xff0c;画面也是小画面。 后面加了一些功能&…...

用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)

这个项目将使用 PyTorch 实现图像风格迁移&#xff08;Neural Style Transfer&#xff09;&#xff0c;让一张图片看起来具有另一张图片的“艺术风格”。 &#x1f527; 开发环境建议 Python 3.8 PyTorch&#xff08;pip install torch torchvision&#xff09; PIL&#x…...

一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 在医学成像领域&#xff0c;深度学习的出现&#xff0c;尤其是卷积神经网络 &#xff08;CNN&#xff09; 的应用&#xff0c;彻底改变了医学影像的分析和解释。然而&#xff0c;深度学习方法通常依…...

OpenCV 图形API(68)图像与通道拼接函数------垂直拼接两个图像/矩阵的函数concatVert()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对给定的矩阵执行垂直拼接。该函数将两个 GMat 矩阵&#xff08;列数相同&#xff09;垂直连接&#xff1a; GMat A { 1, 7,2, 8,3, 9 }; GMat…...

重测序关系矩阵构建方式汇总

样本间亲缘关系矩阵&#xff08;kinship matrix&#xff09;和同源性矩阵&#xff08;IBS matrix&#xff09;构建的方式 1. 可以使用plink的–make-rel计算个体之间的亲缘关系&#xff08;强调个体之间的遗传相似性&#xff09; /opt/software/plink --bfile vcf_bfile--mak…...

OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 制作输入图像的一个副本。请注意&#xff0c;这个副本可能不是实际存在的&#xff08;没有实际复制数据&#xff09;。使用此函数来维护图的契约…...

30天通过软考高项-第六天

30天通过软考高项-第六天 任务&#xff1a;项目质量管理 思维导图阅读 知识点集锦阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 听一遍喜马拉雅关于范围的内容 质量管理 -背 1. 过程定义 龟管控 要求标准规划定&#xff0c;计划转化看过程&#xf…...

JUC中各种锁机制的应用和原理及死锁问题定位

JUC中各种锁机制的应用和原理及死锁问题定位 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于JUC&#xff08;Java Util Concurrency&#xff09;中的各种锁机制及其应用和原理的问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&…...

区块链vs实体经济:一场金融、医疗、政务与物流的“效率革命”

区块链技术作为一种去中心化、不可篡改的分布式账本技术&#xff0c;正在重塑多个行业的运行模式。从金融交易的透明化到医疗数据的安全共享&#xff0c;从政务服务的效率提升到物流供应链的全程可追溯&#xff0c;区块链的跨行业应用展现出巨大的潜力与价值。以下是其在金融、…...

FTP-网络文件服务器

部署思路 单纯上传下载ftp系统集成间的共享 samba网络存储服务器 NFS 网络文件服务器&#xff1a;通过网络共享文件或文件夹&#xff0c;实现数据共享 NAS &#xff08; network append storage):共享的是文件夹 FTP&#xff1a;文件服务器samba&#xff1a;不同系统间的文件…...

嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)

文章目录 前言一、uC/OS简介二、工程移植2.1 下载ucos源码2.2 创建空白工程2.3 拷贝ucosiii源码文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分组及路径2.4 代码首次编译2.5 源码修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…...

10.Excel:快速定位目标值

一 批量删除 1.如何使用 快捷键 CTRLG 补充&#xff1a;直接选择定位条件。 2.作用 1.批量删除工作表中的图片 补充&#xff1a;无法通过框选的方式选中这些图片进行删除。 这样只框选了表格&#xff0c;无法框选图片。因为图片在excel中被认为是一个对象&#xff0c;对象无法通…...

状态模式 (State Pattern)

状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。该模式将状态封装成独立的类,并将请求委托给当前的状态对象,当对象的内部状态发生变化时,其行为也会随之改变。 一、基础部分 1. 意图 允许一个…...

【Java面试题04】MySQL 篇

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、MySQL 篇&#xff1a;☀️☀️☀️1、MySQL 是如何实现事务的? 后序还在更新中~~~三、总结&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 你每一…...

同时安装多个版本的golang

https://golang.google.cn/dl/ go install golang.org/dl/go1.20latest 这样就会将 go1.20.exe 下载到 GOPATH/bin&#xff0c;但是此时并没有 go1.20 的源码包&#xff0c;也就不能正常执行 build/run 等指令。 然后执行 go1.20 download下载源码包 > go1.20 download …...

【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断

在企业级 Java Web 应用的运行过程中&#xff0c;Apache Tomcat 作为广泛使用的 Servlet 容器和 Web 服务器&#xff0c;其性能表现直接影响用户体验和业务稳定性。本篇文章将深入探讨 Tomcat 性能优化的实用技巧&#xff0c;以及如何通过有效的监控诊断手段&#xff0c;及时发…...

stm32week13

stm32学习 九.stm32与HAL库 4.时钟树 stm32f103所拥有的时钟源&#xff1a; 外部时钟的稳定性比内部的高&#xff0c;但是成本高&#xff0c;需要在外部额外接 关于上述时钟树的简图&#xff1a; 右下四个是HAL库中的初始化函数 F4的时钟树简图&#xff1a; F7的时钟树简图…...

深入探究C++ 中的stack、queue和deque

目录 一、stack&#xff08;栈&#xff09; 二、queue&#xff08;队列&#xff09; 三、deque&#xff08;双向队列&#xff09; 四、容器适配器总结 在C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;stack、queue和priority_queue是非常实用的容器适配器&…...

第十二节:性能优化高频题-shallowRef/shallowReactive使用场景

适用场景&#xff1a;大型对象/列表仅需第一层响应式变化&#xff08;如JSON配置数据&#xff09; Vue3 浅层响应式 API&#xff08;shallowRef/shallowReactive&#xff09;使用场景深度解析 一、核心使用场景与性能优化原理 大型 JSON 配置数据管理 • 场景特征&#xff1a;…...

openGauss DB4AI与scikit-learn模块对比探究

openGauss当前版本支持了原生DB4AI能力&#xff0c;引入原生AI算子&#xff0c;简化操作流程&#xff0c;充分利用数据库优化器、执行器的优化与执行能力&#xff0c;获得高性能的数据库内模型训练能力。 本文介绍了笔者采用鸢尾花数据集&#xff0c;对openGauss DB4AI功能进行…...