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

具有离散序列建模的统一多模态大语言模型【AnyGPT】

第1章 Instruction

在人工智能领域、多模态只语言模型的发展正迎来新的篇章。传统的大型语言模型(LLM)在理解和生成人类语言方面展现出了卓越的能力,但这些能力通常局限于 文本处理。然而,现实世界是一个本质上多模态的环境,生物体通过视觉、语言、声音和触觉等多种渠道感知和交换信息。在这样的背景下,一个有前景的目标是增强LLM,使其具备多模态感知能力。

在这里插入图片描述

最近的研究如Emu、SEED-LLaMA日和SpeechGPT已经在使 语言模型具备多模态理解和生成的能力上取得了重要进展。然而,这些模型仅集成了单一的非文本模态,如图像或音频。虽然将文本与一个额外的模态对齐相对简单,但在单一框架内整合多个模态 (N>3)并实现它们之间的双向对齐则是一个更为艰巨的挑战。

为了克服这些挑战,研究者推出了AnyGPT,一个任意到任意的多模态语言模型。
AnyGPT是一种多模态语言模型,通过离散表示统一处理语音、文本、图像和音乐等模态,无需改变LLM架构或训练范式。它依赖数据预处理,便于新模态无缝集成。通过以多模态文本为中心,包含10.8万个多轮对话样本的任意到任意多模态指令数据集。实验表明,AnyGPT在各模态性能与专门模型相当,验证了离散表示的有效性和便利性。

第二章 研究背景

2.1 实验动机

LLM的局限:
近年来,大语言模型(LLMs)在文本理解与生成上取得了巨大成功。但它们通常只能处理纯文本输入输出。

多模态的现实世界:
现实世界本质上是多模态的,生物体通过多种渠道感知和交换信息,包括视觉、语言、声音和触觉。

多模态LLM的局限:
基于 Transformer 的多模态基础模型 ,它可以在多模态语境中无缝生成图像和文本。
SpeechGPT 能够同时处理语音和文本输入,生成语音和文本输出,支持语音识别、语音合成、语音翻译等任务。
SEED-LLaMA 将图像离散化为一维视觉标记的机制,使得图像能够与文本一样,在自回归 Transformer 架构中进行处理。

2.2 挑战

在这里插入图片描述

2.3 解决方法

1.我们提出AnyGPT,一种基于令牌的任意到任意多模态语言模型,可以理解和生成各种模态,包括语音、文本、图像和音乐。

2.一个关键挑战是缺乏多模态交错指令跟随数据。我们开发了一个使用生成模型的管道来构建AnyInstruct-108k,这是一个包含108k个多轮对话的多模态交错元素的数据集。

3.我们证明了离散表示可以有效地在一个语言模型中统一多种模态。

第三章 实验方法

模型架构图

在这里插入图片描述

3.1 基础模型

LLaMa2

结构图:
在这里插入图片描述

模型参数:

Transformer blocks32层
Token Embedding4096
注意力头数32
head dim128
前馈层维度11008
vocab size46000+(原始32,000)
最大上下文长度4096
前馈层激活函数SwiGLU
正则化RMSNorm
位置编码RoPE旋转位置编码(应用于Q,K)
预训练量2 TB token

对比传统LLM:

  1. SwiGLU激活函数
    结合Swish和GLU形成一个带自门控的激活结构更细致控制信息流 + 激活。
  2. RMSNorm正则化
    对比LayerNorm,RMSNorm只用均方根归一化更高效,更稳定。
  3. RoPE旋转位置编码
    将位置信息“旋转”地融合进 attention 中的 Q、K 向量,使得 dot(Q, K) 自带相对位置信息。

对比LLaMa1:

  • 结构上大体一致,使用Adamw优化器。
  • 使用更大更干净的训练集(RefinedWeb、Books、RedPajama)
RMSNorm

和 LayerNorm 不同,RMSNorm 只用均方根(RMS)来归一化,不去中心化。

x: 输入向量(如 [B, T, D] 中的一行)d: 向量维度γ: 可学习的缩放参数(形状为 [d])ϵ: 防止除零的小常数(如 1e-6)

在这里插入图片描述

优势:

  1. RMSNorm省去了计算均值的步骤,减少了计算量。
  2. RMSNorm的梯度方差更小,有助于缓解梯度爆炸或消失问题,尤其在深层Transformer中。
RoPE

对Q,K 向量应用 RoPE,使其编码位置信息
构建旋转频率(θ)和位置索引
计算旋转角度(频率 × 位置)
计算 sin 和 cos 表
将输入向量按维度拆成偶数维 + 奇数维对
执行二维旋转

在这里插入图片描述

传统方法的缺陷:
绝对位置编码:只能标记每个token的绝对位置,难以直接建模token之间的相对关系(如距离、方向)。
相对位置编码:需要手动设计相对位置偏置,且通常受限于预设的窗口大小(如128),无法处理超长序列。

RoPE的解决方案: 通过旋转操作,将位置信息以角度形式注入查询(Query)和键(Key)向量中。

关键特性: 两个token之间的注意力分数仅依赖于它们的相对位置差(旋转角度的差值),因此天然支持相对位置关系,同时隐含了绝对位置信息。

SwiGLU

假设输入是 x,维度为 [B, T, D]
先通过一个线性层扩展成[B, T, 2*H]
拆分成x1 和 x2,每个维度 [B, T, H]
x1经过Swish 激活函数 [B, T, H]
与x2逐元素相乘 [B, T, H]
最后经过线性层映射回维度 [B, T, D]

在这里插入图片描述

SwiGLU优势:

1.更平滑的梯度:Swish 比 Sigmoid 更平滑,训练更稳定。
2.更强的非线性表达能力:Swish 允许少量负值通过,避免 ReLU 的“死神经元”问题。
3.自适应门控:Swish 的 β 参数可学习,动态调整门控强度。

3.2 Tokenizer

Tokenization

不同模态在编码时,不同参数要求。

在这里插入图片描述

TextTokenizer

SentencePiece-BPE

类型:基于字节(byte-level) 的 BPE
词表大小:32,000
分词方式:子词(subword),不会强制按单词边界切割
支持空格、标点、特殊符号编码(空格会被编码为 ▁)
所有文本输入先被转成 UTF-8 字节序列,再进行 BPE 分词

可处理多种语言,编码效率高,支持任意字符串,无需分词器依赖词典。

试例

Text :“你好,LLaMA 2!”
Split: [‘▁你好’, ‘,’, ‘L’, ‘La’, ‘MA’, ‘▁2’, ‘!’]
Decode: [1132, 984, 28, 419, 297, 4225, 800]

在这里插入图片描述

ImageTokenizer

SEED Tokenizer

词表大小:8192
输入图片固定长度3224224
ViT风格为卷积层,卷积核大小为16*16,步长16,个数为196。
因果 Q-Former类似于多头注意力,预先生成Q[B, 32, 1024],ViT结果作为KV,经过Cross-Attn,输出[B, 32, 1024]进入Causal-Attn生成掩码。
MLP相当于前馈层结构为Linear(1024,4096) → GELU → Linear(4096,1024),提升模型表达能力,让每个token的表示变得更复杂、更抽象。
VQ 编码器 构建Codebook(8192,1024),计算每个token对于Codebook的L2距离,找到距离最近codebook向量作为输出。

Vision Transformer

输入图片固定长度3224224
ViT风格为卷积层,卷积核大小为16*16,步长16,个数为196
卷积层输出[196,16,16,3]展平为[196,768]。
卷积层结果经过线性层输出为[196, 1024]。
先性层输出加上绝对位置编码输出为[196, 1024]。
经过ViT Encoder,24层transformer block,
输出为[196, 1024]。

在这里插入图片描述

Q-Former

ViT输出[B,196, 1024]作为Q-Former输入。
Q-Former会创建一个可学习的查询矩阵q_w[32,1024]
,k_w,v_w冻结,经过qkv线性投影层后输入到交叉注意力,输出为[B,32, 1024]。
输入到因果注意力中,输出为[B,32, 1024]。
MLP相当于前馈层结构为Linear(1024,4096) → GELU → Linear(4096,1024),提升模型表达能力,让每个token的表示变得更复杂、更抽象。
共有6个transformer block。

在这里插入图片描述

VQ量化器

在这里插入图片描述

SpeachTokenizer

词表大小:1024
码本:(1024,1204)每一层一个码本
原始音频信号经过预处理转成一个连续的帧序列,帧率固定为50Hz。通过编码器得出[500, 1024]的特征向量,与码本计算L2距离,选取距离最小的索引的条目,计算残差(输入-结果索引条目)作为第二层输入,保留最小索引构成离散标记[500,1]。最终拼接八层,输出离散标记矩阵。
第一层捕捉语义,后续层逐步补充细节(韵律、音色等副语言特征)。
该输出模型只负责语义部分所以token序列为[500]

在这里插入图片描述

Encoder

在这里插入图片描述

RVQ

在这里插入图片描述

MusicTokenizer

Encodec

词表大小: 8192
码本:(2048,1024)每一层一个码本
例如音频为32 kHz单声道5秒,使用卷积网络将音频划分为潜在帧,50 Hz,(250, 1024),通过RVQ进行4层残差量化得到离散标记矩阵(250,4),最终展开为因果序列。

试例

原始音频输入(1,160000)
Encodec 编码(250, 1024)
RVQ 量化(250, 4)
展平序列(1000,1)
起止标识token序列

3.3 Detokenizer

Text DeTokenizer

使用LLaMa2 7B模型自身的文本词汇表,解码生成文本。
将 token ID 序列 → 查词表 → 拼接子词 → 还原自然语言文本。

在这里插入图片描述

Image DeTokenizer

模型输出image离散token[1,32]作为输入。
查码本得到latent[32, 1024]。
输入Reverse Q-former。与 Q-former结构类似,同样需要一个可学习的q_w[1,196,1024],通过多个包含交叉和因果注意力与MLP的transformer block,输出[1,196,1024].
经过线性层输出[1,196,768],转置后输入符合生成模型的latent[1,768,196]。
继续进入预训练好的unCLIP Stable Diffusion(unCLIPSD),最后生成高质量图像。

在这里插入图片描述

Speach DeTokenizer

Soundstorm
模型输出为离散token序列[500]。
作为输入进入根据码本预训练好的soundstorm还原Q2~Q8层。
sondstorm为类transform结构包含词嵌入层词向量维度1024,位置编码层,6层transformer block包含6头注意力,归一层,残差链接及前馈层。但仅根据当前输入每一个帧上分别预测各自下一个概率最高的token。
由Q1得到Q2,由Q2得到Q3,最终得到Q8。

在这里插入图片描述

反向RVQ

soundstorm还原Q1~Q8输出为[500,8]。
查询码本,进行残差求和输出为[500,1024]。

上采样

经过多层反卷积[1,160000]最终还原成音频文件。

在这里插入图片描述

Music DeTokenizer

Encodec

模型输出[1000]作为输入。
于SpeachTokenizer类似,不需要补全Q1~Q4层
,输入调整为[250,4],通过查询码本进行残差求和输出[250,1024].
通过上采样,经过多层反卷积还原,原始音乐波形文件。

生成解码策略

文本生成
Beam size 为 5,意味着在生成过程中会同时考虑最优的 5 条路径来保留多样性与准确性。Repetition Penalty 为 1.0,未对重复进行惩罚
图像与语音生成
使用 Top-P Sampling 策略,P 值为 0.7:只从概率分布中累计前 70% 的 token 中采样,控制创造力和质量之间的平衡。
音乐生成
P 值设为 1.0:代表不截断采样分布,允许更自由的生成。
Repetition Penalty 为 1.15:略高于其他模态,用于防止音乐生成中过度重复旋律或节奏,提高音乐的多样性。

在这里插入图片描述

3.4 数据集

多模态统一数据集

挑战:
跨模态对齐数据稀缺(例如“图像-语音”直接配对数据极少)。

解决方案:
以文本为中心(Text-Centric):将文本作为中介桥梁,通过“文本-图像”“文本-语音”等双模态数据,间接实现多模态对齐。

标准化量化:统一按 token数量 统计数据量,便于跨模态比较

数据平衡:对数据量少的模态(如音乐)进行过采样(oversampling),确保每个训练batch中模态均衡。

图像-文本数据

LAION-2B: 来自网络的噪声图像-alt文本对(20亿规模)。
LAION-COCO: LAION-2B的子集(6亿),使用BLIP模型重新生成高质量caption。

在这里插入图片描述

LAION-Aesthetics: 高审美质量图像-文本对。

JourneyDB: Midjourney生成的合成数据。

在这里插入图片描述

后处理:通过文本质量、图像长宽比、CLIP分数过滤,最终保留 3亿高质量配对。
混合数据:加入 MMC4(多模态交错文档,730万条),使模型适应图文交错输入。

语音-文本数据

ASR数据集:总规模:5.7万小时语音-文本对,覆盖多样说话人、领域和录音环境。

Gigaspeech(在线平台)
Common Voice(众包)
Multilingual LibriSpeech(有声书)

在这里插入图片描述

音乐-文本数据

通过 Spotify API 匹配视频标题与歌曲元数据(标题、描述、歌词等)。
使用 GPT-4 清洗噪声元数据,生成高质量音乐描述文本(减少幻觉)。
关键创新:利用大模型(GPT-4)自动化生成对齐的“音乐-文本”配对,解决人工标注稀缺问题。

在这里插入图片描述

图示说明(Figure 2)

内环:模态类型(图像、文本、语音、音乐)。
中环:数据类型(配对数据、交错文档等)。
外环:具体数据集名称(如LAION-2B、Common Voice)

构建多模态统一数据集

目标
统一多模态训练:让语言模型(LM)处理文本、图像、语音、音乐等不同模态数据。

核心方法
多模态句子构造

非文本数据(如图片、语音)转换为 离散token(如[IMG_123]、[AUDIO_456])。用模板拼接成混合序列,例如:
<文本> + <图像token> + <文本> + <语音token>

数据高效打包

同类型数据拼接:将短样本连成长序列(接近模型最大长度,如2048 token),避免显存浪费。示例:10条短语音 → 1条长序列。

训练细节
自回归学习:模型从左到右预测每个token(无论模态)。
全局损失计算:所有token(文本/图像/语音)的预测错误均参与梯度更新。

优势
高效训练:长序列填满GPU显存,提升计算利用率。
跨模态关联:强制模型学习不同模态的上下文关系(如图像token与描述文本)。

示例
输入序列:
“猫在沙发上[IMG_111][IMG_222]它的叫声是[AUDIO_789]”
模型任务:
看到前半部分,预测后续token(包括图像、语音)

指令调优数据集

AnyInstruct-108k

AnyInstruct 是一个由 108k 多模态指令跟踪数据组成的数据集,以交错的方式集成了多种模态——文本、语音、图像和音乐。首先使用 GPT-4 合成文本多模态对话,然后分别使用 DALL-E 3、MusicGen 和 Azure 文本转语音 API 生成图像、音乐和语音。语音部分包含 39 种不同的音色,语速在一定范围内随机采样。

在这里插入图片描述

第一部分和第二部分的数据涵盖所有模态,总计 10.8 万条高质量多模态对话,包含多种多模态组合。该数据集包含约 20.5 万张图片、50.3 万条语音记录和 11.3 万首音乐曲目。而在data_construction文件夹中可以查看数据构建过程中的中间内容,例如主题、场景、图片和语音的字幕等。speech_conv目录包含语音对话。我们从现有的文本指令数据集中筛选出适合发声的对话,并进行语音合成,共计 108k 条。

在这里插入图片描述

多模态交错指令数据构建
  1. 核心问题
    现有数据缺陷:当前缺乏大规模、多模态(≥3种模态)的对话指令数据集,限制通用多模态模型的发展。人工收集多模态对话数据成本极高(需对齐文本、图像、语音、音乐等)。

  2. 解决方案
    两阶段数据合成法:
    文本阶段:用GPT-4生成含多模态文本描述的对话。
    转换阶段:将文本描述转为真实多模态数据(图像、语音、音乐)

  3. 数据集规模:
    10.8万条高质量多模态对话,覆盖任意模态组合(如“语音问答+图片生成+音乐推荐”)。

  4. 方法创新:
    文本中介化:先通过LLM生成文本描述,再转换为多模态数据,降低人工标注成本。
    全自动流水线:从主题设计到最终多模态数据,无需人工干预。

阶段1:生成含多模态元素的文本对话

主题扩展:
人工设计100个元主题(如“电影配乐讨论”)→ GPT-4扩展为2万具体话题。

场景生成:
提供多模态组合示例(如“用户发送图片+语音提问”),引导GPT-4生成多样化对话场景。

对话合成:
GPT-4基于场景生成多轮对话,用文本描述替代真实模态(如“<图片:一只猫在沙发上>”)。

关键点:
通过示例提示(Few-shot)确保多样性。
纯文本中间格式便于规模化生成。

阶段2:文本到多模态转换

工具与输出:

模态生成工具数据量(108k对话中)
图像DALL-E-320.5万张
语音Azure TTS API50.3万条
音乐MusicGen11.3万首

后处理:
过滤低质量数据(如图像模糊、语音不清晰)。
补充100k纯语音对话(从现有文本数据集+TTS合成)。

3.5 模型训练

第一阶段:多模态统一预训练

目标: 让LLaMA-2(base模型)学会跨模态自回归生成

输入: 混合多模态token序列(文本、图像、语音、音乐拼接成的长序列)。

任务: 纯自回归预测下一个token(无论模态),例如:
输入:“猫的图片是[IMG_123][IMG_456],它的叫声是”
模型应预测后续语音token [AUDIO_789]。

关键设计:
共享嵌入空间:所有模态token映射到同一向量空间。
无监督学习:不使用人工指令,仅学习模态间的统计关联

数据预处理与 Token 化

统一 Token 空间:
所有模态(文本、图像、语音、音乐)均被转换为 离散 token 序列,使用各自模态的专用 tokenizer:

文本:标准 BPE tokenizer(如 GPT-2)。
图像:VQ-VAE tokenizer(如 8192 词表,32 token/图)。
语音:SoundStream RVQ tokenizer(1024 词表,50 token/s)。
音乐:Encodec RVQ tokenizer(2048×4 词表,200 token/s)。

序列拼接:
多模态数据按对话顺序拼接为统一序列,例如:

[文本] + [图像token] + [语音token] + [音乐token] + [文本]

模型架构设计
骨干网络:基于 LLaMA-2 架构的 Transformer 模型

多模态兼容性:
共享输入层:所有模态的 token 映射到同一嵌入空间。
位置编码:添加模态类型标识(如 [IMG]、[AUDIO])以区分来源。

训练任务
自回归预测:
模型从左到右预测 所有模态的 token,无论下一个 token 是文本、图像还是音乐。

示例任务:
输入:“描述这张图:[IMG_123][IMG_456],它的背景音乐是”
目标:预测后续音乐 token [MUSIC_789][MUSIC_012]。

多任务损失:
对所有 token 的预测损失求和,无论模态:(文本、图像、语音、音乐的 token 均参与梯度更新)

在这里插入图片描述

在这里插入图片描述

第二阶段:多模态指令微调

目标: 让模型学会遵循人类指令处理交错模态

输入: 合成的108k条多模态对话数据(含复杂指令如“根据语音生成图片+音乐”)。

任务: 指令响应式生成,例如:
输入:用户语音[AUDIO_111] + 文本“把这段话转成图片”
输出:[IMG_222][IMG_333]。

关键设计:
保留自回归:延续第一阶段的token预测方式。
引入对话结构:学习“用户指令-模型响应”的交互逻辑。

第四章 实验结果

Image

图生文

在这里插入图片描述

文生图

在这里插入图片描述

Speach

音频生文

在这里插入图片描述

文生音频

在这里插入图片描述

Music

在这里插入图片描述

第五章 总结

贡献

AnyGPT 提出了一个统一的架构,允许使用同一个生成模型处理和生成文本、语音、图像等不同模态的内容。这种方式突破了传统多模态模型中各模态需要单独建模或解码器的局限。

AnyGPT 的关键组件之一是将所有模态(语音、图像、视频)转换为类似语言的离散 token,这些 token 可以被通用语言模型处理让所有模态都变成“可预测的 token 序列”。

由于模态间共享 token 表示,AnyGPT 很容易支持新的模态(如视频、动作等),只需提供相应的 tokenizer。框架具有高度模块化和扩展性,适合未来通用 AI 构建。

模型局限

LLMs领域是一个新兴的研究方向。然而,缺乏一个专门的基准来评估模型在多个维度上的能力,以及减少潜在风险,这构成了相当大的挑战。因此,构建一个全面的基准是势在必行的。

LLMs与单模态训练相比,观察到更高的损失,这阻碍了每个模态的最佳性能。提高多模态融合的潜在策略可能包括调整大语言模型和分词器,或采用专家混合(MOE)架构,以更好地管理多样化数据并优化性能。

在使用离散表示的多模态大语言模型中,分词器的质量决定了模型的理解能力和生成潜力的上限。提升分词器可以从多个角度入手,包括采用更优的代码本训练方法、开发更加连贯的多模态表示,以及在不同模态间应用信息解耦。

多模态内容,如图像和音频,通常跨越广泛的序列。例如,AnyGPT将音乐建模限制在5秒内,这大大限制了其音频输出的实际用途。此外,对于任意到任意的多模态对话,较长的上下文可以支持更多的对话交流,从而丰富互动的深度和复杂性。

相关文章:

具有离散序列建模的统一多模态大语言模型【AnyGPT】

第1章 Instruction 在人工智能领域、多模态只语言模型的发展正迎来新的篇章。传统的大型语言模型(LLM)在理解和生成人类语言方面展现出了卓越的能力&#xff0c;但这些能力通常局限于 文本处理。然而&#xff0c;现实世界是一个本质上多模态的环境&#xff0c;生物体通过视觉、…...

PHP HTTP 完全指南

PHP HTTP 完全指南 引言 PHP 作为一种流行的服务器端脚本语言,广泛应用于各种Web开发项目中。HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一,用于在Web服务器和客户端之间传输数据。本文将详细介绍 PHP 在 HTTP 通信中的应用,帮助开发者更好地理解和利用 P…...

物流项目第九期(MongoDB的应用之作业范围)

本项目专栏&#xff1a; 物流项目_Auc23的博客-CSDN博客 建议先看这期&#xff1a; MongoDB入门之Java的使用-CSDN博客 需求分析 在项目中&#xff0c;会有两个作业范围&#xff0c;分别是机构作业范围和快递员作业范围&#xff0c;这两个作业范围的逻辑是一致的&#xf…...

系统思考:经营决策沙盘

今年是我为黄浦区某国有油漆涂料企业提供经营决策沙盘培训的第二年。在这段时间里&#xff0c;我越来越感受到&#xff0c;企业的最大成本往往不在生产环节&#xff0c;而是在决策错误上所带来的长远影响。尤其是在如今这个复杂多变的环境下&#xff0c;企业面临的挑战愈发严峻…...

[网页五子棋][对战模块]实现游戏房间页面,服务器开发(创建落子请求/响应对象)

实现游戏房间页面 创建 css/game_room.css #screen 用于显示当前的状态&#xff0c;例如“等待玩家连接中…”&#xff0c;“轮到你落子”&#xff0c;“轮到对方落子”等 #screen { width: 450px; height: 50px; margin-top: 10px; color: #8f4e19; font-size: 28px; …...

数据结构-代码总结

下面代码自己上完课写着玩的,除了克鲁斯卡尔那里完全ai&#xff0c;其他基本上都是自己写的&#xff0c;具体请参考书本,同时也欢迎各位大佬来纠错 线性表 //线性表--顺序存储结构 #include<iostream> using namespace std; template<typename T> …...

快速掌握 GO 之 RabbitMQ

更多个人笔记见&#xff1a; github个人笔记仓库 gitee 个人笔记仓库 个人学习&#xff0c;学习过程中还会不断补充&#xff5e; &#xff08;后续会更新在github和 gitee上&#xff09; 文章目录 作用经典例子生产者&#xff08;发送端&#xff09;消费者&#xff08;接收端&a…...

SQL Server 事务详解:概念、特性、隔离级别与实践

一、事务的基本概念 事务&#xff08;Transaction&#xff09;是数据库操作的基本单位&#xff0c;它是由一组SQL语句组成的逻辑工作单元。事务具有以下关键特性&#xff0c;通常被称为ACID特性&#xff1a; ​​原子性&#xff08;Atomicity&#xff09;​​&#xff1a;事务…...

MAC软件游戏打开提示已损坏

打开「终端.app」&#xff0c;输入以下命令并回车&#xff0c;输入开机密码回车 sudo spctl --master-disable 按照上述步骤操作完成后&#xff0c;打开「系统偏好设置」-「安全与隐私」-「通用」&#xff0c;确保已经修改为「任何来源」。 打开「终端.app」&#xff0c;输入…...

React基础教程(13):路由的使用

文章目录 1、什么是路由?2、路由安装3、路由使用(1)路由方法导入和使用(2)定义路由以及重定向(3)嵌套路由(4)路由跳转方式(5)动态路由动态路由写法一动态路由写法二4、实现效果5、完整代码下载1、什么是路由? 路由是根据不同的url地址展示不同的内容或页面。 一个…...

力扣刷题(第四十三天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 解题思路 1. 逐位检查法&#xff1a;通过右移操作逐位检查每一位是否为1&#xff0c;统计计数 2. 位运算优化法&#xff1a;利用 n & (n-1) 操作消除最低位的1&#xff0c;减少循环次数 3. 内置函数法&…...

Centos环境下安装/重装MySQL完整教程

目录 一、卸载残留的MySQL环境&#xff1a; 二、安装MySQL&#xff1a; 1、下载MySQL官方的yum源&#xff1a; 2、更新系统yum源&#xff1a; 3、确保系统中有了对应的MySQL安装包&#xff1a; 4、安装MySQL服务&#xff1a; 5、密钥问题安装失败解决方法&#xff1a; …...

【Linux】环境变量完全解析

9.环境变量 文章目录 9.环境变量一、命令行参数二、获取环境变量程序中获取环境变量1. 使用命令行参数2. 使用系统调用函数getenv("字符串");3. 使用系统提供的全局变量environ 命令行中查询环境变量 三、常见环境变量1. HOME2. OLDPWD3. PATH4. SHELL 四、环境变量与…...

【Java】mybatis-plus乐观锁-基本使用

乐观锁&#xff08;Optimistic Locking&#xff09;是解决并发问题的重要机制。它通过在数据更新时验证数据版本来确保数据的一致性&#xff0c;从而避免并发冲突。与悲观锁不同&#xff0c;乐观锁并不依赖数据库的锁机制&#xff0c;而是通过检查数据的版本或标志字段来判断数…...

力扣每日一题——找到离给定两个节点最近的节点

目录 题目链接&#xff1a;2359. 找到离给定两个节点最近的节点 - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;双指针路径交汇法​ 基本思路 关键步骤 为什么这样可行呢我请问了&#xff1f; 举个例子 特殊情况 Java写法&#xff1a; C写法&a…...

机器学习与深度学习03-逻辑回归01

目录 上集回顾1. 逻辑回归与线性回归的区别2.逻辑回归的常见目标函数3.逻辑回归如何分类4.Sigmoid函数详解5.逻辑回归模型的参数 上集回顾 上一节文章地址&#xff1a;链接 1. 逻辑回归与线性回归的区别 应用领域 线性回归通常⽤于解决回归问题&#xff0c;其中⽬标是预测⼀…...

卷积神经网络(CNN)入门学习笔记

什么是 CNN&#xff1f; CNN&#xff0c;全称 卷积神经网络&#xff08;Convolutional Neural Network&#xff09;&#xff0c;是一种专门用来处理图片、语音、文本等结构化数据的神经网络。 它模仿人眼识别图像的方式&#xff1a; 从局部到整体&#xff0c;一步步提取特征&a…...

【优笔】基于STM32的多模态智能门禁系统

代码功能详细描述 该代码实现了一个基于STM32的多模态智能门禁系统,整合密码、指纹、人脸识别(预留)三种验证方式,并提供完善的管理功能。系统架构如下图所示: #mermaid-svg-Uufpcoeo5Lega096 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size…...

Metasploit工具使用详解(上)丨小白WEB安全入门笔记

Metasploit工具使用详解(上)丨小白WEB安全入门笔记 一、课程定位与工具概述 课程性质&#xff1a; 小白WEB安全入门课程聚焦基础操作&#xff0c;非深度专题&#xff08;Metasploit专题可讲数十节课&#xff09;目标&#xff1a;掌握基本概念和简单漏洞利用 Metasploit核心定…...

Femap许可证与网络安全策略

随着科技的快速发展&#xff0c;网络安全问题已成为各行各业关注的焦点。在电磁仿真领域&#xff0c;Femap作为一款领先的软件&#xff0c;其许可证的安全性和网络策略的重要性不言而喻。本文将探讨Femap许可证与网络安全策略的关系&#xff0c;确保您的电磁仿真工作能够在一个…...

VLAN的作用和原理

1. 为什么要有vlan&#xff1f; 分割广播域&#xff0c;避免广播风暴&#xff0c;造成网络资源的浪费 可以灵活的组网&#xff0c;便于管理&#xff0c;同时还有安全加固的功能 2. vlan是怎么实现的&#xff1f;端口的原理&#xff1f; 设置VLAN后&#xff0c;流量之间的转…...

深入探讨集合与数组转换方法

目录 1、Arrays.asList() 1.1、方法作用 1.2、内部实现 1.3、修改元素的影响 1.4、注意事项 2、list.toArray() 2.1、方法作用 2.2、内部实现 2.3、修改元素的影响 2.4、特殊情况 1、对象引用 2、数组copy 3、对比总结 4、常见误区与解决方案 5、实际应用建议…...

让大模型看得见自己的推理 — KnowTrace结构化知识追踪

让大模型“看得见”自己的推理 —— KnowTrace 结构化知识追踪式 RAG 全解析 一句话概括:把检索-推理“改造”成 动态知识图构建任务,再让 LLM 只关注这张不断精炼的小图 —— 这就是显式知识追踪的核心价值。 1. 背景:为什么 RAG 仍难以搞定多跳推理? 长上下文负担 传统 I…...

【HarmonyOS 5应用架构详解】深入理解应用程序包与多Module设计机制

⭐本期内容&#xff1a;【HarmonyOS 5应用架构详解】深入理解应用程序包与多Module设计机制 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS&#xff1a;探索未来智能生态新纪元 文章目录 前言应用与应用程序包应用程序的基本概念应用程序包的类型标识机制应用安装流程 应用的…...

【Oracle】DCL语言

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. DCL概述1.1 什么是DCL&#xff1f;1.2 DCL的核心功能 2. 用户管理2.1 创建用户2.2 修改用户2.3 删除用户2.4 用户信息查询 3. 权限管理3.1 系统权限3.1.1 授予系统权限3.1.2 撤销系统权限 3.2 对象权限3.2.1…...

MySQL强化关键_017_索引

目 录 一、概述 二、索引 1.主键索引 2.唯一索引 3.查看索引 4.添加索引 &#xff08;1&#xff09;建表时添加 &#xff08;2&#xff09;建表后添加 5.删除索引 三、树 1.二叉树 2.红黑树 3.B树 4.B树 &#xff08;1&#xff09;为什么 MySQL 选择B树作为索引…...

stm32——SPI协议

stm32——SPI协议 STM32的SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;协议是一种高速、全双工、同步的串行通信协议&#xff0c;广泛评估微控制器与各种外设&#xff08;如传感器、器件、显示器、模块等&#xff09;之间的数据传输。STM3…...

Linux 下如何查看进程的资源限制信息?

简介 Linux 上的 cat /proc/$pid/limits 命令提供有关特定进程的资源限制的信息&#xff0c;其中 $pid 是相关进程的进程 ID &#xff08;pid&#xff09;。该文件是 /proc 文件系统的一部分&#xff0c;该文件系统是一个虚拟文件系统&#xff0c;提供有关进程和系统资源的信息…...

【备忘】php命令行异步执行超长时间任务

环境说明&#xff1a; 操作系统&#xff1a;windows10 IDE&#xff1a;phpstorm 开发语言&#xff1a;php7.4 框架&#xff1a;thinkphp5.1 测试环境&#xff1a;linuxwindows均测试通过。 初级方法&#xff1a; function longRunningTask() {$root_path Tools::get_ro…...

对于ARM开发各种手册的分类

手册名称全称主要内容适用范围是不是讲SysTick&#xff1f;Cortex-M3 Technical Reference Manual (TRM)Cortex-M3 Technical Reference Manual描述 Cortex-M3内核架构&#xff0c;如寄存器模型、总线接口、指令集、异常模型只适合 Cortex-M3 内核&#xff0c;不含外设❌ 没有C…...