AI大模型教程
一起来学习

AIGC时代算法工程师的面试秘籍(第三十三式2025.3.17-2025.4.6) |【三年面试五年模拟】

文章目录 隐藏
正文开始

AIGC时代算法工程师的面试秘籍(第三十三式2025.3.17-2025.4.6) |【三年面试五年模拟】

初爱 ,杨宗纬

近期文章回顾(更多热门文章请关注公众号与知乎Rocky Ding哦)

写在前面

【三年面试五年模拟】旨在挖掘&沉淀AI算法工程师在实习/校招/社招时所需的干货知识点与面试方法,力求让读者在获得心仪offer的同时,持续增强技术基本面。

Rocky最新撰写10万字Stable Diffusion 3和FLUX.1系列模型的深入浅出全维度解析文章:https://zhuanlan.zhihu.com/p/684068402

更多干货资源,大家可在文末查阅~


大家好,我是Rocky。

又到了定期学习《三年面试五年模拟》文章的时候了!本周期我们持续更新了丰富的AIGC面试高频问答,依旧干货满满!诚意满满!

Rocky创办的《三年面试五年模拟》项目在持续帮助很多读者获得了心仪的AIGC科技公司和互联网大厂的算法岗offer,收到了大家非常多的好评,Rocky觉得很开心也很有意义!

现在时间来到2025年,随着DeepSeek的横空出世,AIGC时代的科技浪潮破纪录达到了新高峰,AI行业对AIGC技术人才的需求也日益旺盛

为了帮助大家在2025年的实习、秋招、春招以及社招求职时更加从容和有所依靠,Rocky将《三年面试五年模拟》项目进行重大战略架构升级,并承诺《三年面试五年模拟》项目将陪伴大家和码二代们的整个职业生涯,为大家在AI行业中的求职招聘保驾护航!详细内容大家可以阅读:

2025年,AIGC算法岗面试必备干货资源发布!

Rocky已经将《三年面试五年模拟》项目的完整版构建在Github上:https://github.com/WeThinkIn/Interview-for-Algorithm-Engineer/tree/main,本周期更新的AIGC面试高频问答已经全部同步更新到项目中了,欢迎大家star!

本文是《三年面试五年模拟》项目的第三十三式,考虑到易读性与文章篇幅,Rocky本次只从Github完整版项目中摘选了2025年3月17号-2025年4月6号更新的部分高频&干货面试知识点,并配以相应的参考答案(精简版),供大家学习探讨。点赞本文,并star咱们的Github项目,你就收获了半个offer!再转发本文,你就收获了0.75个offer!

So,enjoy(与本文的BGM一起食用更佳哦):

正文开始

目录先行

AI行业招聘信息汇总

  1. 转转集团2025校招开启:https://zhuanzhuan.zhiye.com/campus/jobs

  2. 地平线2025年春季实习招聘开启:https://horizon-campus.hotjob.cn/

  3. 小米集团2025年春招&转正实习开启:https://hr.xiaomi.com/campus

  4. 联想2025春季校园招聘开启:https://talent.lenovo.com.cn/position?projectType=1

  5. 搜狐畅游25届春招补招及26届暑期实习开启:https://campus.changyou.com/

  6. 完美世界25春招&26实习热招中:https://jobs.games.wanmei.com/school_qa.html

  7. 龙湖2025年仕官生&仕习生春招开启:https://2024.yingjiesheng.com/longfor/PC/sgs.html

  8. 腾讯光子工作室招实习开启:https://guangzi.qq.com/web20220530/join.html

  9. 工银科技2025年度春季校园招聘开启:https://job.icbc.com.cn/pc/index.html#/main/school/home/post

  10. 钉钉2025年春季实习生招聘开启:https://talent.dingtalk.com/campus/home?lang=zh

  11. 360集团2025春季校招补录开启:https://360campus.zhiye.com/jobs

AI绘画基础:

  1. Flow Matching和DDPM之间有什么区别?

  2. 什么是人脸关键点识别任务?

AI视频基础:

  1. Wan2.1视频大模型的Text Encoder模型架构是什么样的?

  2. 介绍一下AI视频领域的视频帧数、视频帧率、视频分辨率、视频码率的概念

深度学习基础:

  1. 全连接层有哪些主流变体?

  2. 稠密网络和稀疏网络有什么异同?

机器学习基础:

  1. 介绍一下机器学习中的Dice Loss损失函数

  2. 什么是机器学习中的AUC和ROC的概念?

Python编程基础:

  1. Python中处理GLB文件的操作大全

  2. Python中处理OBJ文件的操作大全

模型部署基础:

  1. 什么是Zigzag(锯齿形或之字形)顺序模式?

  2. 介绍一下NVLink的概念

计算机基础:

  1. 什么是RAM?

  2. 计算机的内存和RAM是一个概念吗?详细介绍内存各种类型的作用

开放性问题:

  1. 在AIGC时代,如何随着时代发展持续沉淀AIGC核心价值?

  2. 在AIGC时代,算法工程师如何跟随着时代发展持续沉淀AIGC跨周期的核心价值?

AI行业招聘信息汇总

AI绘画基础

【一】Flow Matching和DDPM之间有什么区别?

Flow Matching和去噪扩散概率模型(DDPM)都是生成模型,但它们在理论基础、训练目标和生成过程上都有显著区别。

核心区别
DDPM通过随机扩散和去噪过程生成数据,强调概率建模;Flow Matching通过确定性ODE路径直接匹配目标分布,追求高效的最优传输。前者生成质量高但速度慢,后者在速度上更具优势,同时理论更简洁。

1. 理论基础

  • DDPM

    • 基于扩散过程,属于概率模型,通过马尔可夫链的前向(加噪)和反向(去噪)过程建模。

    • 前向过程逐步添加高斯噪声,将数据转化为纯噪声;反向过程通过神经网络学习逐步去噪。

    • 数学上对应 随机微分方程(SDE) 的离散化。

  • Flow Matching

    • 基于 连续归一化流(CNF) 或 最优传输(Optimal Transport, OT) ,通过常微分方程(ODE)定义确定性路径。

    • 目标是从噪声分布到数据分布构建一条平滑的概率路径,通常通过匹配向量场实现。

    • 数学上对应 确定性ODE ,强调路径的直线性或最优性。

2. 过程类型

  • DDPM

    • 随机过程:每一步添加或去除的噪声是随机的高斯噪声。

    • 前向和反向过程均为马尔可夫链,依赖多步迭代。

  • Flow Matching

    • 确定性过程:生成路径由ODE定义,通常为确定性映射(如Rectified Flow)。

    • 可能通过最优传输直接规划最小能量路径,减少随机性。

3. 训练目标

  • DDPM

    • 优化变分下界(ELBO),简化为预测每一步的噪声(均方误差损失)。

    • 需要模拟所有时间步的噪声扰动,训练复杂但稳定。

  • Flow Matching

    • 直接匹配条件概率路径向量场(如条件流匹配,CFM)。

    • 损失函数设计为最小化预测路径与目标路径的差异(如Wasserstein距离),训练更高效。

4. 采样过程

  • DDPM

    • 多步迭代采样:通常需要几十到几百步去噪,速度较慢。

    • 依赖设计的噪声调度(Noise Schedule)控制加噪/去噪速度。

  • Flow Matching

    • 高效采样:通过ODE求解器可加速,甚至实现少步或一步生成(如Rectified Flow的直线路径)。

    • 路径设计更灵活(如直线化路径减少采样步数)。

5. 数学形式对比

  • DDPM

    • 前向过程: 

    • 反向过程: 

  • Flow Matching

    • 生成路径:  ,其中  是学习的向量场。

    • 目标是最小化  ,  为目标路径的瞬时速度。

6. 优缺点对比

  • DDPM

    • 优点:生成质量高,训练稳定。

    • 缺点:采样速度慢,依赖大量时间步。

  • Flow Matching

    • 优点:采样速度快,路径设计灵活(可直线化),理论更简洁。

    • 缺点:可能需要复杂ODE求解器,训练技巧要求高。

7. 典型应用

  • DDPM:图像生成(如Stable Diffusion)、音频合成。

  • Flow Matching:快速图像生成(如Rectified Flow)、3D形状生成、基于最优传输的任务。

8. 总结

维度

DDPM

Flow Matching

理论基础

随机扩散(SDE)

确定性流(ODE/OT)

训练目标

变分下界(预测噪声)

条件流匹配(匹配向量场)

采样速度

慢(多步迭代)

快(少步或一步)

路径性质

随机噪声扰动

确定性最优路径

数学复杂度

中等(马尔可夫链)

高(ODE求解/最优传输)

【二】什么是人脸关键点识别任务?

1. 任务定义与核心目标

人脸关键点识别(Facial Landmark Detection)旨在定位人脸上的显著特征点(如眼睛、鼻子、嘴巴、眉毛轮廓等)。通常使用68点或106点模型(如下图所示),核心挑战在于应对光照变化、遮挡、姿态变化等复杂场景。

人脸关键点示例

人脸关键点识别是AI领域的基石任务,从美颜相机到自动驾驶安全系统,其价值在于将“人脸数字化”,为高层语义理解提供结构化数据支撑。未来随着AIGC与具身智能的发展,其作用将更加关键。

2. 技术方法演进

  • 传统方法:依赖统计模型(如ASM、AAM),通过形状模板迭代拟合人脸。

  • 深度学习方法

    • 回归法:CNN直接预测关键点坐标(如MobileNetV2 + 全连接层)。

    • Heatmap法:生成每个关键点的概率热图(如Hourglass网络),精度更高但计算量大。

    • 多任务学习:结合人脸检测、关键点对齐(如MTCNN),提升效率。

3. 实际案例:美颜相机中的“大眼瘦脸”

  • 原理:通过检测眼睛、下巴等关键点,利用图像变形算法(如TPS变换)调整关键点位置,实现放大眼睛或缩小脸型。

  • 技术细节

    1. 检测到双眼关键点后,计算瞳孔中心坐标;

    2. 以瞳孔为中心进行径向缩放,实现“大眼”;

    3. 移动下巴关键点后,通过插值算法平滑皮肤纹理。

4. 三大领域应用场景

AIGC(生成式AI)
  • 虚拟数字人生成:通过关键点驱动3D人脸模型表情(如MetaHuman)。

    • 案例:虚拟主播直播时,通过摄像头捕捉真实人脸关键点,实时映射到虚拟形象上。

  • Deepfake换脸:对齐源人脸与目标人脸关键点,实现无缝融合。

传统深度学习
  • 人脸识别预处理:关键点对齐后消除姿态差异,提升识别准确率(如FaceNet)。

  • 微表情分析:通过眉毛、嘴角的细微关键点位移判断情绪(如抑郁检测)。

自动驾驶
  • 驾驶员状态监控

    1. 疲劳检测:计算眼睛闭合时间(PERCLOS指标);

    2. 分心检测:头部姿态估计(通过鼻尖、下巴关键点);

    3. 危险行为识别:检测手部是否遮挡面部(如打电话)。

  • 案例:特斯拉DMS系统实时分析驾驶员眼部关键点,触发警报。

AI视频基础

【一】Wan2.1视频大模型的Text Encoder模型架构是什么样的?

Wan2.1的Text Encoder架构使用了umT5来编码输入文本。通过大量实验,Wan2.1官方发现 umT5 在Wan2.1的框架中具有多个优势:

  1. 它拥有强大的多语言编码能力,能够有效理解中文和英文,以及输入的视觉文本。

  2. 在相同条件下,Wan2.1发现 umT5 在组合性能上优于其他单向注意力机制的 LLM

  3. 它展现出卓越的收敛性,umT5 在相同参数规模下能够更快收敛。

基于这些发现,Wan2.1最终选择 umT5 作为文本编码器。

【二】介绍一下AI视频领域的视频帧数、视频帧率、视频分辨率、视频码率的概念

1. 视频帧数、视频帧率、视频分辨率、视频码率的基础定义与关联关系

概念 定义 数学表达/单位 相互影响
视频帧数

视频总包含的静止画面(帧)数量

N(无单位)

总时长=帧数÷FPS

视频帧率(FPS)

每秒显示的帧数(Frames Per Second),决定流畅度

FPS(帧/秒)

FPS越高代表视频流畅度越好,数据量=分辨率×FPS×时长

视频分辨率

单帧图像的像素尺寸(宽×高),决定清晰度

如1920×1080(像素)

分辨率↑ → 存储需求↑,计算复杂度↑

视频码率

单位时间的数据量(与前三者强相关)

Mbps(兆比特/秒)

码率≈分辨率×FPS×压缩率

核心公式
视频数据量 ≈ 分辨率 × 色彩深度 × FPS × 时长 × (1 – 压缩率)

2. 实际案例:短视频平台自适应码率技术

  • 问题:用户网络带宽波动时,如何避免卡顿?

  • 解决方案

    1. 动态调整分辨率:4G环境使用720p,弱网切换480p;

    2. 降低FPS:从30FPS降至15FPS减少数据量;

    3. 关键帧优先:保持关键动作帧(如舞蹈转身)的高质量,过渡帧压缩更狠。

3. 三大领域应用场景

AIGC(生成式AI)
  • 视频生成控制

    • 帧率与运动连贯:生成舞蹈视频时,FPS

    • 分辨率与细节:4K分辨率需更大的Diffusion模型(如Sora的Patches技术)。

  • 案例Runway ML生成视频时,用户可指定“1080p@30FPS”参数平衡质量与成本。

传统深度学习
  • 动作识别优化

    • FPS选择:UCF101数据集处理时,采样15FPS(保留动作特征,减少冗余帧);

    • 分辨率裁剪:将原帧从224×224下采样至112×112,使3D CNN(如I3D)速度提升3倍。

  • 案例OpenAI的CLIP在视频理解中,对高分辨率帧提取关键语义特征。

自动驾驶
  • 多摄像头协同

    • 分辨率与检测精度:1920×1080分辨率下,YOLOv8可识别50m外行人,720p仅30m;

    • FPS与实时性:30FPS时感知延迟33ms,满足L4级自动驾驶需求(延迟

  • 案例:特斯拉HW4.0系统以1280×960@36FPS处理8路摄像头,每秒处理超2亿像素。

深度学习基础

【一】全连接层有哪些主流变体?

全连接层(Fully Connected Layer,FC)是神经网络的核心组件之一,其每个输入节点与输出节点均相连,擅长捕捉全局特征。然而,传统全连接层存在参数过多、计算量大、易过拟合等问题,因此衍生出多种变体以适配不同任务需求。以下是主要变体及其应用场景:

1. 稀疏全连接层(Sparse FC)

  • 原理:通过剪枝或稀疏约束(如L1正则化)减少有效连接数,仅保留关键权重。

  • 案例

    • 图像分类:在ResNet中,对最后一层全连接进行剪枝,参数减少30%,精度损失

  • 应用领域

    • 传统深度学习:压缩模型大小,提升部署效率(如移动端图像分类)。

    • 自动驾驶:轻量化多任务感知模型(如车道线检测+目标检测)。

2. 动态全连接层(Dynamic FC)

  • 原理:根据输入动态调整权重,例如通过门控机制或条件计算。

  • 案例

    • 多语言翻译:动态调整不同语言对的翻译权重,提升小语种性能(如Meta的M2M-100模型)。

  • 应用领域

    • AIGC:生成多样化风格内容(如根据文本提示动态调整生成网络参数)。

    • 自动驾驶:动态融合多传感器数据(如雨天增强激光雷达权重)。

3. 分组全连接层(Grouped FC)

  • 原理:将输入/输出节点分组,组内全连接,组间隔离,减少参数量(类似分组卷积)。

  • 案例

    • 推荐系统:用户兴趣分组(如性别、年龄),每组独立建模(如阿里的Deep Interest Network)。

  • 应用领域

    • 传统深度学习:处理高维稀疏数据(如广告点击率预测)。

    • AIGC:多模态生成(如文本、图像分组处理后再融合)。

4. 低秩分解全连接层(Low-Rank FC)

  • 原理:将权重矩阵分解为两个低秩矩阵(如  ),减少参数量。

  • 案例

    • 语音识别:在RNN-T模型中,低秩分解全连接层参数减少50%,推理速度提升20%。

  • 应用领域

    • AIGC:轻量化生成模型(如手机端Stable Diffusion)。

    • 自动驾驶:实时语义分割模型压缩。

5. 注意力增强全连接层(Attention-Augmented FC)

  • 原理:引入注意力机制,动态加权输入特征。

  • 案例

    • 机器翻译:在Transformer解码器中,全连接层结合自注意力,提升长距离依赖建模(如Google的T5模型)。

  • 应用领域

    • AIGC:生成连贯长文本(如小说续写)。

    • 自动驾驶:时序行为预测(如行人轨迹预测)。

6. 二值化全连接层(Binary FC)

  • 原理:权重或激活值二值化(+1/-1),减少计算资源。

  • 案例

    • 边缘设备图像分类:二值化ResNet-18在CIFAR-10上精度保持85%,功耗降低70%。

  • 应用领域

    • 自动驾驶:低功耗车载芯片实时推理。

    • 传统深度学习:物联网设备端模型部署。

7. 残差全连接层(Residual FC)

  • 原理:引入残差连接(  ),缓解梯度消失。

  • 案例

    • 图像超分辨率:残差全连接层堆叠,提升高频细节恢复能力(如ESRGAN)。

  • 应用领域

    • AIGC:高分辨率图像生成(如4K人脸合成)。

    • 自动驾驶:高精度地图重建。

8. 门控全连接层(Gated FC)

  • 原理:通过门控机制(如Sigmoid)控制信息流动。

  • 案例

    • 语音合成:门控全连接层调节音素与韵律特征(如WaveNet)。

  • 应用领域

    • AIGC:多风格语音生成(如情感化TTS)。

    • 自动驾驶:多模态信号融合(如语音指令+视觉导航)。

总结

全连接层的变体通过参数优化、动态计算、结构创新等方式,解决了传统FC层的局限性,广泛应用于以下场景:

  • AIGC:动态生成、轻量化部署;

  • 传统深度学习:模型压缩、多任务学习;

  • 自动驾驶:实时推理、多模态融合。

【二】稠密网络和稀疏网络有什么异同?

1. 核心概念与异同

对比维度 稠密网络(Dense Network) 稀疏网络(Sparse Network)
连接方式

神经元之间全连接(每个输入节点连接所有输出节点)

部分神经元连接(通过剪枝、稀疏约束或动态路由实现)

参数数量

参数量大(  )

参数量小(可减少50%-90%)

计算效率

计算开销大,适合高性能设备(如GPU)

计算效率高,适合边缘设备(如手机、车载芯片)

表达能力

强,能捕捉复杂非线性关系

弱,但对特定任务(如稀疏特征提取)可能更高效

典型应用场景

高精度模型(如ResNet、Transformer)

轻量化部署、实时推理(如MoE模型、剪枝模型)

相同点

  • 均为神经网络结构,用于特征提取与模式识别;

  • 可通过反向传播优化参数;

  • 可结合非线性激活函数增强表达能力。

2. 通俗案例:图像分类任务

场景:训练一个猫狗分类模型,部署至手机端。

  • 稠密网络方案

    • 使用ResNet-50的全连接层(120万个参数),精度98%,但模型大小200MB,手机推理延迟200ms。

  • 稀疏网络方案

    • 对ResNet-50进行剪枝,移除50%冗余连接,精度降至97%,模型大小压缩至50MB,推理延迟降至50ms。
      结论:稠密网络精度高但资源消耗大,稀疏网络牺牲少量精度换取高效部署。

3. 三大领域应用

AIGC(生成式AI内容)
  • 稠密网络

    • 应用:高质量内容生成(如Stable Diffusion的U-Net主干网络)。

    • 案例:生成4K分辨率图像时,稠密网络捕捉细节纹理,确保输出逼真。

  • 稀疏网络

    • 应用:轻量化生成(如手机端实时风格迁移)。

    • 案例:MoE(混合专家)模型动态激活部分专家生成文本,减少70%计算量。

传统深度学习
  • 稠密网络

    • 应用:大规模预训练模型(如BERT的Transformer层)。

    • 案例:BERT通过全连接层建模词间复杂关系,支持语义理解任务。

  • 稀疏网络

    • 应用:模型压缩与加速(如剪枝后的MobileNet)。

    • 案例:剪枝后的VGG-16在ImageNet上保持90%精度,参数量减少60%。

自动驾驶
  • 稠密网络

    • 应用:高精度感知模型(如激光雷达点云分割)。

    • 案例:稠密网络融合多传感器数据,精确检测夜间行人(漏检率

  • 稀疏网络

    • 应用:实时决策与低功耗推理(如车载芯片路径规划)。

    • 案例:稀疏化YOLOv5在Jetson AGX上实现30FPS实时检测,功耗降低40%。

4. 总结

  • 核心差异:稠密网络以参数冗余换取高精度,稀疏网络以效率优先牺牲部分性能。

  • 选型原则

    • 需高精度且资源充足(如云端训练):选稠密网络;

    • 需实时性且资源受限(如边缘端部署):选稀疏网络。

  • 技术趋势

    • 稀疏化技术(如动态路由、结构化剪枝)成为模型轻量化核心;

    • 稠密-稀疏混合架构(如MoE)平衡性能与效率,成为AIGC与自动驾驶的新方向。

面试一句话回答
稠密网络全连接、参数量大但精度高,适合复杂任务;稀疏网络部分连接、高效轻量,适配边缘部署。两者在生成、分类、感知任务中互补,共同推动AI落地。

机器学习基础

【一】介绍一下机器学习中的Dice Loss损失函数

1. Dice Los定义与公式

Dice Loss源于Dice系数(Dice Coefficient),最初用于衡量两个集合的相似性,广泛应用于图像分割任务。其核心思想是通过计算预测结果与真实标签的重叠度来优化模型。

公式推导

  • Dice系数

    其中,  为真实标签,  为预测值(通常经过Sigmoid或Softmax处理为概率值)。

  • Dice Loss

    加入平滑项  (如1e-5)避免分母为零。

核心特点

  • 关注重叠区域:直接优化预测与真实标签的交集,适合类别不平衡问题(如小目标分割)。

  • 对假阴性敏感:漏检(False Negative)会显著增加损失,适合医学等对漏检容忍度低的场景。

2. 通俗案例:医学图像分割

场景:在肺部CT图像中分割肿瘤区域。

  • 真实标签:医生标注的肿瘤区域(二值掩码,1表示肿瘤,0表示背景)。

  • 模型预测:模型输出的概率图(经过Sigmoid激活)。

Dice Loss作用

  • 若模型预测的肿瘤区域与医生标注完全重合,Dice系数为1,损失为0。

  • 若预测区域仅有50%重叠,Dice系数为  ,损失为0.5。

  • 模型通过最小化Dice Loss,逐步提升预测与真实标签的重叠度。

3. 三大领域应用实例

AIGC(AI生成内容)

应用场景:生成带精确结构的图像(如人脸、服装设计)。
案例:生成二次元角色时,要求五官位置与参考图对齐。

  • 方法:将生成图像的掩码(如眼睛、嘴巴区域)与参考掩码计算Dice Loss,约束生成结构与目标一致。
    优势:避免生成结果的结构偏差(如眼睛错位),提升生成可控性。

传统深度学习

应用场景:医学图像分割(如肿瘤、器官分割)。
案例:U-Net模型分割视网膜血管。

  • 挑战:血管区域占比小(

  • 方案:使用Dice Loss,直接优化血管区域的重叠度,提升小目标分割精度。
    效果:在ISIC皮肤病分割等任务中,Dice Loss比交叉熵的IoU提升约10%。

自动驾驶

应用场景:道路场景理解(如车辆、行人分割)。
案例:实时分割道路上的行人。

  • 需求:高精度分割小目标(行人),避免漏检导致安全事故。

  • 方案:在Mask R-CNN等模型中结合Dice Loss,优化行人的分割边界。
    优势:减少漏检率,提升自动驾驶系统的安全性。

4. 总结与扩展

  • 优势:Dice Loss在类别不平衡、小目标分割场景中表现优异,是图像分割任务的“黄金标准”之一。

  • 扩展变体

    • Tversky Loss:调整假阴性/假阳性的权重,适用于对漏检更敏感的任务。

    • Focal Dice Loss:结合Focal Loss,进一步解决难样本学习问题。

  • 局限:对预测概率的绝对值不敏感,需结合交叉熵损失使用(如Dice + BCE联合损失)。

一句话总结:Dice Loss通过最大化预测与真实标签的重叠度,成为图像分割任务的利器,尤其擅长解决小目标、类别不平衡问题,在传统深度学习、AIGC、自动驾驶中均有落地应用。

【二】什么是机器学习中的AUC和ROC的概念?

1. 基本概念

  • ROC曲线(Receiver Operating Characteristic Curve)
    用于评估二分类模型在不同分类阈值下的性能,横轴为假正率(FPR),纵轴为真正率(TPR)

    • TPR(召回率): 

    • FPR: 

  • AUC(Area Under Curve)
    ROC曲线下的面积,值域为[0, 1],表示模型整体分类能力:

    • AUC=1:完美分类器;

    • AUC=0.5:随机猜测;

    • AUC>0.8:模型性能较好。

一句话总结:AUC是衡量分类模型区分能力的核心指标,ROC曲线是其可视化工具,广泛应用于需平衡敏感度与误判率的场景。

2. ROC曲线绘制步骤

  1. 准备数据:模型对样本的预测概率(如逻辑回归输出的概率值)。

  2. 排序样本:按预测概率从高到低排序。

  3. 遍历阈值:从1到0逐步调整阈值,计算每个阈值下的TPR和FPR。

  4. 绘制曲线:将各阈值对应的(FPR, TPR)点连接成ROC曲线。

示例
若样本预测概率为[0.9, 0.8, 0.7, 0.6],真实标签为[1, 1, 0, 0],则:

  • 阈值=0.9时,预测标签为[1, 0, 0, 0] → TPR=0.5, FPR=0.0;

  • 阈值=0.7时,预测标签为[1, 1, 1, 0] → TPR=1.0, FPR=0.5;

  • 连接所有点即可绘制ROC曲线。

3. AUC的物理意义

  • AUC值反映模型将正样本排在负样本前面的能力。

  • AUC=0.8表示:随机选一个正样本和一个负样本,模型对正样本的预测概率高于负样本的概率为80%。

4. 手撕AUC计算代码(Python)

import numpy as np

def compute_auc(y_true, y_score):
    # 按预测概率降序排序
    sorted_indices = np.argsort(y_score)[::-1]
    y_true_sorted = y_true[sorted_indices]
    y_score_sorted = y_score[sorted_indices]
    
    # 初始化变量
    num_pos = np.sum(y_true == 1)
    num_neg = len(y_true) - num_pos
    tpr = 0
    fpr = 0
    prev_score = None
    area = 0
    
    # 遍历样本,计算TPR和FPR的变化
    for i in range(len(y_true_sorted)):
        if y_score_sorted[i] != prev_score:
            area += (tpr / num_pos) * (fpr / num_neg)  # 梯形面积累加
            prev_score = y_score_sorted[i]
        if y_true_sorted[i] == 1:
            tpr += 1
        else:
            fpr += 1
    area += (tpr / num_pos) * (fpr / num_neg)  # 最后一个点
    return1 - area  # 根据排序方向调整

# 示例数据
y_true = np.array([1, 1, 0, 0])
y_score = np.array([0.9, 0.8, 0.7, 0.6])
print("AUC:", compute_auc(y_true, y_score))  # 输出:0.75

5. 通俗案例:垃圾邮件分类

  • 场景:模型预测邮件是否为垃圾邮件(1=垃圾,0=正常)。

  • ROC曲线绘制

    • 阈值=0.9时,模型只标记高概率邮件为垃圾,漏检多(TPR低),但误判少(FPR低);

    • 阈值=0.5时,TPR和FPR均升高;

    • 阈值=0.1时,几乎所有邮件被标记为垃圾,TPR高但FPR也高。

  • AUC=0.85:模型区分垃圾邮件的能力较强。

6. 三大领域应用

AIGC

应用场景:检测生成内容是否真实(如Deepfake识别)。

  • ROC作用:评估模型区分真实图片与生成图片的能力。

  • AUC意义:AUC越高,模型越能准确识别生成内容,防止虚假信息传播。

传统深度学习

应用场景:医学影像分类(如肺炎X光片诊断)。

  • ROC作用:平衡敏感度(TPR)与误诊率(FPR)。

  • AUC意义:AUC>0.9表示模型在疾病筛查中可靠性高。

自动驾驶

应用场景:行人检测系统。

  • ROC作用:调整检测阈值以平衡漏检(TPR低)与误报(FPR高)。

  • AUC意义:AUC越高,系统在复杂场景下(如夜间、遮挡)的鲁棒性越强。

7. 总结

  • ROC曲线:可视化模型在不同阈值下的权衡(TPR vs FPR)。

  • AUC:量化模型整体分类性能,适合类别不平衡问题。

  • 核心价值:在AIGC、传统深度学习、自动驾驶等领域中,AUC是评估模型可靠性的“黄金标准”。

Python编程基础

【一】Python中处理GLB文件的操作大全

以下是Rocky总结的Python中处理 GLB 文件的完整操作指南,涵盖 读取、写入、编辑、转换、可视化 等核心功能,结合常用库(如 trimeshpygltfpyrender)并提供代码示例。

一、GLB 文件基础

GLB 文件 是 glTF 格式的二进制封装版本,包含 3D 模型的网格、材质、纹理、动画等数据。其结构包括:

  • JSON 头:描述场景结构、材质、动画等元数据

  • 二进制缓冲区:存储顶点、索引、纹理等二进制数据

二、环境准备

安装所需库:

pip install trimesh pygltf pyrender numpy pillow

三、核心操作详解

1. 读取 GLB 文件
import trimesh

# 加载 GLB 文件
scene = trimesh.load("model.glb")

# 提取网格数据
for name, mesh in scene.geometry.items():
    print(f"Mesh: {name}")
    print(f"Vertices: {mesh.vertices.shape}")  # 顶点坐标 (N, 3)
    print(f"Faces: {mesh.faces.shape}")        # 面索引 (M, 3)
    print(f"UVs: {mesh.visual.uv}")           # 纹理坐标 (N, 2)
2. 写入 GLB 文件
# 创建新网格
box = trimesh.creation.box(extents=[1, 1, 1])

# 导出为 GLB
box.export("new_model.glb", file_type="glb")
3. 编辑 GLB 内容
修改几何体
# 平移所有顶点
mesh.vertices += [0.5, 0, 0]  # X 方向平移0.5

# 缩放模型
mesh.apply_scale(0.5)  # 缩小到50%
修改材质
from PIL import Image

# 替换纹理
new_texture = Image.open("new_texture.png")
mesh.visual.material.baseColorTexture = new_texture

# 修改颜色(RGBA)
mesh.visual.material.baseColorFactor = [1.0, 0.0, 0.0, 1.0]  # 红色
添加动画
import numpy as np
from pygltf import GLTF2

# 加载 GLB 并添加旋转动画
gltf = GLTF2().load("model.glb")

# 创建旋转动画数据
animation = gltf.create_animation()
channel = animation.create_channel(
    target_node=0,  # 目标节点索引
    sampler=animation.create_sampler(
        input=[0, 1, 2],  # 时间关键帧
        output=np.array([[0, 0, 0, 1], [0, 0, np.pi/2, 1], [0, 0, np.pi, 1]])  # 四元数旋转
    )
)

gltf.save("animated_model.glb")
4. 格式转换
GLB → OBJ
scene = trimesh.load("model.glb")
scene.export("model.obj")
5. 可视化渲染
使用 PyRender
import pyrender

# 创建渲染场景
scene = pyrender.Scene()
for name, mesh in scene.geometry.items():
    scene.add(pyrender.Mesh.from_trimesh(mesh))

# 启动交互式查看器
pyrender.Viewer(scene, use_raymond_lighting=True)
使用 Matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.plot_trisurf(
    mesh.vertices[:,0], 
    mesh.vertices[:,1], 
    mesh.vertices[:,2],
    triangles=mesh.faces
)
plt.show()
6. 优化 GLB 文件
from pygltf import GLTF2

gltf = GLTF2().load("model.glb")

# 压缩纹理
for texture in gltf.textures:
    texture.source.compression = "WEBP"# 转换为WebP格式

# 简化网格
for mesh in gltf.meshes:
    for primitive in mesh.primitives:
        primitive.attributes.POSITION.quantization = "FLOAT"# 降低精度

gltf.save("optimized_model.glb")

【二】Python中处理OBJ文件的操作大全

下面是Rocky总结的Python处理OBJ文件的完整操作指南,涵盖 读取、编辑、转换、可视化、优化 等核心功能。

一、OBJ 文件基础

OBJ 文件 是 Wavefront 3D 模型格式,包含以下主要元素:

  • 顶点数据v(顶点坐标)、vt(纹理坐标)、vn(法线)

  • 面定义f(面索引,支持顶点/纹理/法线组合)

  • 材质引用mtllib(材质库文件)、usemtl(使用材质)

二、环境准备

安装所需库:

pip install trimesh numpy pywavefront matplotlib pyrender

三、核心操作详解

1. 读取 OBJ 文件
使用 trimesh(推荐)
import trimesh

# 加载 OBJ 文件(自动处理关联的 MTL 材质文件)
mesh = trimesh.load("model.obj", force="mesh")

# 提取基本信息
print(f"顶点数: {mesh.vertices.shape}")  # (N, 3)
print(f"面数: {mesh.faces.shape}")       # (M, 3)
print(f"纹理坐标: {mesh.visual.uv}")    # (N, 2)
print(f"材质信息: {mesh.visual.material}")
使用 pywavefront
from pywavefront import Wavefront

obj = Wavefront("model.obj", collect_faces=True)
for name, material in obj.materials.items():
    print(f"材质名称: {name}")
    print(f"贴图路径: {material.texture}")
    print(f"顶点数据: {material.vertices}")
2. 编辑 OBJ 内容
修改几何体
# 平移所有顶点
mesh.vertices += [0.5, 0, 0]  # X 方向平移0.5

# 缩放模型
mesh.apply_scale(0.5)  # 缩小到50%

# 旋转模型
mesh.apply_transform(trimesh.transformations.rotation_matrix(np.pi/2, [0, 1, 0]))
修改材质
from PIL import Image

# 替换纹理
new_texture = Image.open("new_texture.jpg")
mesh.visual.material.image = new_texture

# 修改颜色(RGB)
mesh.visual.material.diffuse = [0.8, 0.2, 0.2, 1.0]  # 红色
合并多个模型
mesh1 = trimesh.load("model1.obj")
mesh2 = trimesh.load("model2.obj")
combined = trimesh.util.concatenate([mesh1, mesh2])
combined.export("combined.obj")
3. 导出 OBJ 文件
# 创建新网格(立方体)
box = trimesh.creation.box(extents=[1, 1, 1])

# 导出 OBJ(包含材质)
box.export(
    "new_model.obj",
    file_type="obj",
    include_texture=True,
    mtl_name="material.mtl"
)
4. 格式转换
OBJ → GLB
mesh = trimesh.load("model.obj")
mesh.export("model.glb", file_type="glb")
5. 可视化渲染
使用 PyRender(3D 交互)
import pyrender

# 创建渲染场景
scene = pyrender.Scene()
scene.add(pyrender.Mesh.from_trimesh(mesh))

# 启动交互式查看器
pyrender.Viewer(scene, use_raymond_lighting=True)
使用 Matplotlib(2D 投影)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.plot_trisurf(
    mesh.vertices[:,0], 
    mesh.vertices[:,1], 
    mesh.vertices[:,2],
    triangles=mesh.faces
)
plt.show()

模型部署基础

【一】什么是Zigzag(锯齿形或之字形)顺序模式?

Zigzag 顺序模式是一种通过交替或来回移动的路径来优化数据访问或处理顺序的策略。其核心目标是减少数据跳跃性访问,从而提升缓存利用率、降低数据传输开销,或避免重复操作。通俗来说,它类似于“蛇形走位”,在处理多个数据块时,通过交替方向遍历,最大化利用相邻数据,减少冗余操作。

通俗易懂的实际案例
案例:图书馆书架整理

假设我们负责整理图书馆的 10 排书架,每排有 20 本书。

  • 常规顺序:从第 1 排左到右整理,再到第 2 排左到右,依此类推。

  • Zigzag 顺序:第 1 排左到右,第 2 排右到左,第 3 排左到右……

  • 优势

    • 减少来回走动的距离(类似减少内存/显存数据切换);

    • 整理相邻书架时,工具(如扫码器)可重复使用(类似缓存命中率提升)。

Zigzag 在三大领域中的应用

1. AIGC(生成式人工智能)

应用场景:生成高分辨率图像(如 Stable Diffusion 生成 8K 图像)。
具体作用

  • 分块处理:将大图像分割为多个小块(Tile),按 Zigzag 顺序处理(如从左到右,再从右到左)。

  • 优势

    • 减少显存占用:处理完一个块后,相邻块的显存区域可能已被缓存,减少数据重新加载。

    • 无缝生成:避免块间边界因处理顺序不同导致的色彩或纹理不连续。
      案例
      在 Tiled VAE 中,Zigzag 顺序处理图像块,确保 GroupNorm 参数在块间统一计算,生成无缝的高分辨率图像。

2. 传统深度学习

应用场景:训练数据分批加载与处理。
具体作用

  • 数据增强顺序:对训练数据按 Zigzag 顺序进行增强(如先水平翻转,再垂直翻转交替执行)。

  • 优势

    • 增强多样性:防止模型因固定顺序学习到增强模式的偏差。

    • 缓存优化:按 Zigzag 顺序访问硬盘中的数据块,减少磁头移动(HDD)或 NAND 读取延迟(SSD)。
      案例
      在 ImageNet 数据集训练中,按 Zigzag 顺序从不同硬盘分区加载数据,提升 IO 吞吐率 10%~20%。

3. 自动驾驶

应用场景:激光雷达点云数据处理与目标检测。
具体作用

  • 点云分块处理:将激光雷达扫描的 3D 点云按 Zigzag 顺序分块处理(如水平方向交替扫描)。

  • 优势

    • 实时性提升:相邻区域的目标(如车辆、行人)可能在连续块中被检测,减少模型重复计算。

    • 传感器融合:Zigzag 顺序对齐摄像头帧与激光雷达扫描序列,降低时间同步误差。
      案例
      特斯拉 Autopilot 在处理激光雷达数据时,按 Zigzag 顺序分块检测,确保相邻帧的目标跟踪连续性,减少漏检率。

技术实现原理

Zigzag 的核心思想
  • 空间局部性优化:通过交替方向访问相邻数据块,利用硬件缓存(如 CPU L1 Cache、GPU 共享内存)预取相邻数据。

  • 减少空洞访问:避免跳跃式访问导致缓存频繁失效(Cache Miss)。

数学表示

对于二维矩阵  ,Zigzag 遍历顺序可表示为:

顺序若为偶数行若为奇数行

面试点睛
回答时需结合具体技术场景(如 Tiled VAE、激光雷达分块),强调 Zigzag 如何解决显存/内存瓶颈,并量化其收益(如速度提升 20%)。

【二】介绍一下NVLink的概念

一、NVLink的核心知识

NVLink 是英伟达(NVIDIA)设计的一种高速GPU互连技术,旨在解决传统PCIe总线在带宽和延迟上的瓶颈,提升多GPU系统(或多GPU与CPU之间)的通信效率。其核心特点包括:

  1. 高带宽

    • PCIe 4.0 x16带宽为 32 GB/s(双向)。

    • NVLink 3.0单链路带宽为 50 GB/s(单向),多链路叠加后可达 600 GB/s(如NVIDIA A100支持12条链路)。

    • NVLink的带宽远超PCIe。例如:

    • 带宽优势在多GPU并行计算中尤为关键。

  2. 低延迟

    • NVLink采用点对点直连架构,减少数据中转层级,通信延迟比PCIe低 5-10倍

  3. 灵活拓扑

    • 支持多种连接方式(如GPU-GPU、GPU-CPU),并可通过NVSwitch芯片构建大规模GPU集群(如NVIDIA DGX系统)。

  4. 内存一致性

    • 支持统一虚拟内存(UVA),允许GPU直接访问其他GPU或CPU的内存,简化编程模型。

二、通俗易懂的实际案例

案例:多GPU训练大型语言模型(如GPT-4
假设使用4块NVIDIA A100 GPU训练GPT-4模型:

  • 传统PCIe架构:GPU之间通过PCIe交换数据,带宽受限,导致参数同步耗时较长(如每轮训练需10秒)。

  • NVLink架构:GPU通过NVLink直连,带宽提升数倍,参数同步时间缩短至2秒。

  • 效果:训练速度提升约30%,显著降低训练成本。

三、在三大领域中的应用

1. AIGC(AI生成内容)
  • 应用场景

    • 多模态生成模型:如Stable Diffusion、DALL·E等,需在多个GPU间快速传输图像和文本数据。

    • 实时交互生成:例如AI实时生成高清视频时,NVLink确保帧间数据高效同步。

  • 优势:减少生成延迟,支持更高分辨率和复杂度的内容生成。

2. 传统深度学习
  • 应用场景

    • 分布式训练:在数据并行中,NVLink加速梯度同步(如ResNet、Transformer)。

    • 模型并行:超大模型(如GPT-3)拆分到多GPU时,NVLink降低层间通信开销。

  • 优势:提升训练吞吐量,支持更大Batch Size和更复杂模型。

3. 自动驾驶
  • 应用场景

    • 多传感器融合:激光雷达、摄像头数据需实时融合,NVLink加速GPU间的传感器数据处理。

    • 端到端决策模型:如NVIDIA Drive AGX平台,通过NVLink连接多个GPU,实现低延迟的路径规划和障碍物检测。

  • 优势:满足自动驾驶对实时性和安全性的严苛要求。

计算机基础

Rocky从工业界、学术界、竞赛界以及应用界角度出发,总结归纳AI行业所需的计算机基础干货知识。这些干货知识不仅能在面试中帮助我们,还能让我们在AI行业中提高工作效率

【一】什么是RAM?

什么是 RAM?

RAM(Random Access Memory,随机存取存储器)是计算机中的一种临时存储设备,用于快速存取当前正在运行的程序和数据。它的核心特点是高速读写易失性(断电后数据丢失)。RAM 可以类比为人的“短期记忆”,能够快速处理当前任务,但无法长期保存信息。

通俗易懂的实际案例

假设你正在同时使用浏览器、Word 文档和 Photoshop。此时:

  • RAM 的作用:临时存储这些软件的运行数据(如浏览器标签内容、未保存的文档、正在编辑的图片),确保快速切换和流畅操作。

  • RAM 不足的后果:如果 RAM 容量不够,电脑会变得卡顿,甚至提示“内存不足”,因为无法同时处理所有任务。

RAM 在三大领域中的应用

1. AIGC(生成式人工智能)

应用场景:生成高分辨率图像、视频或长文本(如 Stable Diffusion、MidJourney、GPT-4)。
RAM 的作用

  • 模型加载:生成式模型(如 Stable Diffusion)的参数(几十 GB)需加载到 RAM 中才能运行。

  • 数据处理:生成 4K 图像时,中间特征图(如 8K 分辨率张量)需在 RAM 中缓存。

  • 多任务处理:同时运行多个生成任务(如批量生成图像)时,RAM 需存储多个中间状态。

2. 传统深度学习

应用场景:训练卷积神经网络(CNN)、自然语言处理模型(如 ResNet、BERT)。
RAM 的作用

  • 数据预处理:大规模数据集(如 ImageNet)需加载到 RAM 中进行归一化、增强等操作。

  • 训练加速:训练时,数据批次(Batch)从硬盘加载到 RAM,再批量传输到 GPU,减少 IO 延迟。

  • 模型调试:调试代码时,RAM 缓存中间变量(如梯度、激活值),便于快速分析。

实际案例
训练 ResNet-50 时,若 RAM 不足,数据加载会成为瓶颈,导致 GPU 利用率不足,训练时间翻倍。

3. 自动驾驶

应用场景:实时处理摄像头、激光雷达数据,进行目标检测与路径规划。
RAM 的作用

  • 传感器融合:来自摄像头、雷达的原始数据(每秒数 GB)需在 RAM 中实时缓存和融合。

  • 模型推理:目标检测模型(如 YOLO)的权重和中间特征需在 RAM 中快速存取。

  • 决策缓存:实时路径规划的结果(如避障轨迹)需暂存于 RAM,供控制系统调用。

实际案例
自动驾驶汽车在高速行驶中,若 RAM 不足,可能导致传感器数据处理延迟 0.1 秒,在 100 km/h 速度下,车辆已移动 2.8 米,引发碰撞风险。

【二】计算机的内存和RAM是一个概念吗?详细介绍内存各种类型的作用

计算机的「内存」和「RAM」是同一个概念吗?

不完全等同
内存(Memory) 是一个广义概念,泛指计算机中用于临时或永久存储数据的部件,包含 RAM、ROM、Cache 等多种类型;
RAM(Random Access Memory) 是内存中最核心的部分,属于 临时性存储设备 ,负责 高速临时存储 。
两者的关系可以理解为:RAM 是内存的一部分,但内存不全是 RAM。日常所说的「电脑内存 16GB」特指 RAM 容量,但技术上需区分广义内存和狭义 RAM。

内存的完整分类

类型 特点 典型用途
RAM

– 临时存储(断电数据丢失)
– 高速读写
– 支持随机访问

运行程序、加载操作系统

ROM

– 永久存储(断电数据保留)
– 只读(部分可编程)

存储固件(如 BIOS)

Cache

– 比 RAM 更快
– 容量极小

CPU 缓存数据

虚拟内存

– 硬盘模拟的 RAM 扩展
– 速度慢但容量大

缓解物理内存不足

Flash

– 介于 RAM 和 ROM 之间
– 可擦写但速度较慢

U盘、SSD固态硬盘

通俗理解:用「办公室」比喻

  1. RAM(办公桌)

    • 我们正在处理的文件放在桌上,随时取用(快速访问)。

    • 下班时清空桌子(断电数据丢失)。

  2. ROM(墙上贴的操作指南)

    • 永久固定在墙上(断电不丢失)。

    • 只能阅读,不能修改(只读)。

  3. 硬盘(文件柜)

    • 长期存放大量文件(永久存储)。

    • 取用需要走到柜子前(速度慢)。

计算机内存的各个部分及其实际使用案例

1. RAM(随机存取存储器)

通俗解释:就像办公室的“办公桌”,存放你正在处理的工作文件和工具,随时取用,但下班后清空。
特点:高速、临时存储、断电数据丢失。

实际案例

  • 日常使用:同时打开浏览器、Word 和 Photoshop 时,这些软件的数据暂存在 RAM 中。

  • 游戏运行:玩《原神》时,游戏地图和角色模型加载到 RAM,确保流畅渲染。

领域应用

  • AIGC:生成 8K 图像时,Stable Diffusion 的模型参数和中间特征图(如 16GB+ 数据)需在 RAM 中缓存。

  • 传统深度学习:训练 ResNet 时,每个 Batch 的图像数据从硬盘加载到 RAM,再批量传输到 GPU。

  • 自动驾驶:实时融合摄像头和激光雷达数据(每秒数 GB),RAM 缓存数据供模型快速推理。

2. ROM(只读存储器)

通俗解释:像办公室“墙上贴的操作指南”,内容固定不可修改,断电也不会消失。
特点:永久存储、只读(部分可编程)。

实际案例

  • 电脑启动:BIOS 程序存储在 ROM 中,负责开机自检和引导操作系统。

  • 家电控制:微波炉的预设程序固化在 ROM 芯片中。

领域应用

  • 自动驾驶:车载系统的启动固件(如 Autopilot 初始化代码)存储在 ROM 中。

  • AIGC:AI 芯片(如 TPU)的底层指令集固化在 ROM 中。

  • 传统深度学习:GPU 的微码(Microcode)存储在 ROM,确保硬件基础功能。

3. Cache(高速缓存)

通俗解释:像办公桌的“抽屉”,存放最常用的工具(如计算器、笔),比去柜子取更快。
特点:速度极快、容量极小(KB~MB 级)。

实际案例

  • 网页加载:浏览器缓存常用网页资源(如图标),下次打开时秒加载。

  • CPU 运算:CPU 的 L1/L2 缓存存储近期计算的中间结果。

领域应用

  • 自动驾驶:目标检测模型(YOLO)的权重预加载到 GPU 缓存,加速推理。

  • AIGC:生成图像时,高频使用的风格迁移参数缓存在 CPU Cache 中。

  • 传统深度学习:训练时,反向传播的梯度值暂存于 Cache,减少内存访问延迟。

4. 虚拟内存(Virtual Memory)

通俗解释:当办公桌不够用时,临时借用文件柜空间,但拿取文件速度较慢。
特点:硬盘模拟 RAM、速度慢但容量大。

实际案例

  • 多任务处理:同时打开 50 个 Chrome 标签时,系统将部分不活跃标签数据移到虚拟内存。

  • 大型软件:运行 MATLAB 处理 100GB 数据时,物理 RAM 不足,部分数据暂存到硬盘。

领域应用

  • 传统深度学习:处理超大数据集(如天文图像)时,虚拟内存作为 RAM 的扩展。

  • AIGC:生成长视频时,中间帧序列暂存到虚拟内存,避免 RAM 溢出。

  • 自动驾驶:离线处理历史传感器数据时,虚拟内存支持批量分析。

5. Flash(闪存)

通俗解释:像办公室的“档案室”,长期存放文件,取用速度比柜子快,但不如办公桌。
特点:非易失性、可擦写、速度介于 RAM 和硬盘之间。

实际案例

  • U盘:保存文档、照片,即插即用。

  • SSD:电脑安装系统和软件,比机械硬盘快 10 倍。

领域应用

  • 自动驾驶:车载系统存储高精地图和算法模型(如 Tesla 的 FSD 芯片搭载 Flash)。

  • AIGC:Stable Diffusion 的预训练模型(.ckpt 文件)保存在 SSD 中,快速加载到 RAM。

  • 传统深度学习:训练完成的模型权重(如 PyTorch 的 .pth 文件)存储在 SSD 供部署。

总结:内存各部分的核心作用与领域价值

内存类型 核心作用 AIGC 案例 传统深度学习案例 自动驾驶案例
RAM

实时处理当前任务

生成 8K 图像的中间数据缓存

训练时批量加载数据到 GPU

实时融合多传感器数据

ROM

固化基础指令

AI 芯片指令集

GPU 微码

车载系统启动固件

Cache

加速高频数据访问

风格迁移参数缓存

梯度暂存加速反向传播

目标检测模型权重预加载

虚拟内存

扩展临时存储空间

长视频生成的帧序列暂存

超大数据集处理

历史数据批量分析

Flash

长期存储与快速读取

模型文件存储与快速加载

训练好的模型权重存档

高精地图与算法模型存储

关键结论

  • RAM 是性能核心:直接决定实时任务的处理能力(如生成图像、自动驾驶决策)。

  • ROM 是系统基石:确保硬件和软件的稳定启动。

  • Cache 是加速器:通过高频数据缓存提升效率。

  • 虚拟内存 & Flash 是扩展支持:突破物理限制,支持大规模数据处理和长期存储。

通俗记忆法

  • RAM 是“工作台”:越大越宽,能同时处理的任务越多。

  • ROM 是“说明书”:没有它,机器连启动都不会。

  • Cache 是“快捷键”:让常用操作快如闪电。

  • 虚拟内存是“备用桌”:桌子不够用时,临时用仓库凑合。

  • Flash 是“档案库”:东西存进去不容易丢,但取用比桌子慢。

开放性问题

Rocky从工业界、学术界、竞赛界以及应用界角度出发,总结AI行业的本质思考。这些问题不仅能够用于面试官的提问,也可以用作面试者的提问,在面试的最后阶段让面试双方进入深度的探讨与交流。

与此同时,这些开放性问题也是贯穿我们职业生涯的本质问题,需要我们持续的思考感悟。这些问题没有标准答案,Rocky相信大家心中都有自己对于AI行业的认知与判断,欢迎大家在留言区分享与评论。

【一】在AIGC时代,如何随着时代发展持续沉淀AIGC核心价值?

Rocky认为这是所有AI行业从业者都要终身思考的问题,只有找到适合自己的跟随时代发展持续沉淀AIGC核心价值,才能有厚积薄发的可能性。

【二】在AIGC时代,算法工程师如何跟随着时代发展持续沉淀AIGC跨周期的核心价值?

Rocky认为这是一个AI行业的本质问题,每个算法工程师都要终身去思考这个问题,才能持续构建个人在AIGC时代的核心价值。

推荐阅读

1、加入AIGCmagic社区知识星球!

AIGCmagic社区知识星球不同于市面上其他的AI知识星球,AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台,涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100+应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等干货

那该如何加入星球呢?很简单,我们只需要扫下方的二维码即可。与此同时,我们也重磅推出了知识星球2025年惊喜价:原价199元,前200名限量立减50!特惠价仅149元!(每天仅4毛钱)

时长:一年(从我们加入的时刻算起)

2、AIGC时代Rocky撰写的干货技术文章汇总分享!

  1. Sora等AI视频大模型等全维度解析文章:https://zhuanlan.zhihu.com/p/706722494

  2. Stable Diffusion 3和FLUX.1的10万字全维度解析文章:https://zhuanlan.zhihu.com/p/684068402

  3. Stable Diffusion XL的10万字全维度解析文章:https://zhuanlan.zhihu.com/p/643420260

  4. Stable Diffusion 1.x-2.x的10万字全维度解析文章:https://zhuanlan.zhihu.com/p/632809634

  5. ControlNet系列的全维度解析文章:https://zhuanlan.zhihu.com/p/660924126

  6. LoRA系列模型的全维度解析文章:https://zhuanlan.zhihu.com/p/639229126

  7. Transformer全维度解析文章:https://zhuanlan.zhihu.com/p/709874399

  8. 最全面的AIGC面经《手把手教你成为AIGC算法工程师,斩获AIGC算法offer!(2025年版)》文章:https://zhuanlan.zhihu.com/p/651076114

  9. 50万字大汇总《“三年面试五年模拟”之算法工程师的求职面试“独孤九剑”秘籍》文章:https://zhuanlan.zhihu.com/p/545374303

  10. Stable Diffusion WebUI、ComfyUI等AI绘画框架的全维度解析文章:https://zhuanlan.zhihu.com/p/673439761

  11. GAN系列模型的全维度解析文章:https://zhuanlan.zhihu.com/p/663157306

  12. YOLOv1-v7全系列大解析文章的pdf版本,

文章来源于互联网:AIGC时代算法工程师的面试秘籍(第三十三式2025.3.17-2025.4.6) |【三年面试五年模拟】

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » AIGC时代算法工程师的面试秘籍(第三十三式2025.3.17-2025.4.6) |【三年面试五年模拟】

AIGC时代算法工程师的面试秘籍(第二十七式2024.11.18-12.1) |【三年面试五年模拟】

写在前面

【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试经验,力求让读者在获得心仪offer的同时,增强技术基本面。

欢迎大家关注Rocky的公众号:WeThinkIn
欢迎大家关注Rocky的知乎:Rocky Ding
AIGC算法工程师面试面经秘籍分享:WeThinkIn/Interview-for-Algorithm-Engineer欢迎大家Star~
获取更多AI行业的前沿资讯与干货资源

Rocky最新发布Stable Diffusion 3和FLUX.1系列模型的深入浅出全维度解析文章,点击链接直达干货知识:https://zhuanlan.zhihu.com/p/684068402


大家好,我是Rocky。

又到了定期学习《三年面试五年模拟》文章的时候了!本周期共更新了80多个AIGC面试高频问答,依旧干货满满!诚意满满!

《三年面试五年模拟》系列文章帮助很多读者获得了心仪的算法岗offer,收到了大家的很多好评,Rocky觉得很开心也很有意义。

在AIGC时代到来后,Rocky对《三年面试五年模拟》整体战略方向进行了重大的优化重构,在秉持着Rocky创办《三年面试五年模拟》项目初心的同时,增加了AIGC时代核心的版块栏目,详细的版本更新内容如下所示:

  1. 整体架构:分为AIGC知识板块和AI通用知识板块。
  2. AIGC知识板块:分为AI绘画、AI视频、大模型、AI多模态、数字人这五大AIGC核心方向。
  3. AI通用知识板块:包含AIGC、传统深度学习、自动驾驶等所有AI核心方向共通的知识点。

Rocky已经将《三年面试五年模拟》项目的完整版构建在Github上:https://github.com/WeThinkIn/Interview-for-Algorithm-Engineer/tree/main,本周期更新的80+AIGC面试高频问答已经全部同步到项目中了,欢迎大家star!

本文是《三年面试五年模拟》项目的第二十七式,考虑到易读性与文章篇幅,Rocky本次只从Github完整版项目中摘选了2024年11月18号-2024年12月1号更新的部分高频&干货面试知识点和面试问题,并配以相应的参考答案(精简版),供大家学习探讨。

《三年面试五年模拟》版本更新白皮书,迎接AIGC时代中我们阐述了《三年面试五年模拟》项目在AIGC时代的愿景与规划,也包含了项目共建计划,感兴趣的朋友可以一起参与本项目的共建!

《三年面试五年模拟》系列将陪伴大家度过整个AI行业的职业生涯,并且让大家能够持续获益。

So,enjoy:

正文开始

目录先行

AI绘画基础:

  1. AIGC面试中必考的Stable Diffusion系列模型版本有哪些?

  2. AIGC面试中必考的AI绘画技术框架脉络是什么样的?

AI视频基础:

  1. Sora的Text-Encoder模型架构是什么样的?

  2. AI视频大模型的生成质量指标有哪些?

深度学习基础:

  1. 介绍一下PyTorch中.detach()、.clone()、requires_grad=True、torch.no_grad()的原理与作用

  2. 介绍一下CLIP-pooled-embedding的作用

机器学习基础:

  1. 什么是机器学习中的对比学习?

  2. 机器学习中训练集、验证集、测试集之间有哪些区别?

Python编程基础:

  1. 介绍一下Python中的sequence和mapping代表的数据结构

  2. 在AI服务中如何设置项目的base路径?

模型部署基础:

  1. 如何构建TensorRT模型的缓存机制?

  2. AI模型的轻量化效果评价指标有哪些?

计算机基础:

  1. 介绍一下AI行业中API的原理与作用

  2. 计算机中http协议与ssh协议有哪些异同?

开放性问题:

  1. AI算法工程师如何提升在AI行业中的影响力?

  2. AI算法工程师如何破圈在社会中提升自己的影响力?

AI绘画基础

【一】AIGC面试中必考的Stable Diffusion系列模型版本有哪些?

当前AIGC时代的AI算法面试中,Stable Diffusion系列模型是一个必考模型,Rocky在这里为大家梳理其中的必考版本,大家需要深入了解:

  1. Stable Diffusion 1.x版本,必考!
  2. Stable Diffusion 2.x版本,可能考
  3. Stable Diffusion XL版本,必考!
  4. Stable Diffusion 3.x版本,必考!
  5. FLUX.1版本,必考!

【二】AIGC面试中必考的AI绘画技术框架脉络是什么样的?

在进入AIGC时代后,大家在面试AIGC算法工程师时,面试官对于AI绘画技术的考察是面试的重中之重,因此Rocky总结梳理了AI绘画技术在工业界、投资界、学术界、竞赛界以及应用界的核心框架脉络,让大家能够有目标的进行技术学习与面试准备:

  1. AI绘画核心大模型:以FLUX.1系列和Stable Diffusion系列模型的知识为主,再加上DaLL-E、Imagen、Playgrond等主流AI绘画大模型的考察。
  2. AI绘画中的LoRA模型:LoRA模型相关知识的考察,包括SD LoRA模型、FLUX.1 LoRA、Dreambooth LoRA、Textual Inversion等。
  3. AI绘画生成可控模型:ControlNet系列模型、IP-Adapter模型等。
  4. AI绘画框架:ComfyUI、Stable Diffusion WebUI、Fooocus等。
  5. AI绘画辅助模型:GAN、U-Net、SAM、Dino等。

Rcoky也在撰写与沉淀AI绘画技术框架脉络的相关干货文章,力求给大家全网最详细的讲解与分析:

深入浅出完整解析Stable Diffusion 3(SD 3)和FLUX.1系列核心基础知识
深入浅出完整解析Stable Diffusion XL(SDXL)核心基础知识
深入浅出完整解析Stable Diffusion(SD)核心基础知识
深入浅出完整解析Stable Diffusion中U-Net的前世今生与核心知识
深入浅出完整解析LoRA(Low-Rank Adaptation)模型核心基础知识
深入浅出完整解析ControlNet核心基础知识
深入浅出完整解析主流AI绘画框架(Stable Diffusion WebUI、ComfyUI、Fooocus)核心基础知识
深入浅出完整解析AIGC时代中GAN(Generative Adversarial Network)系列模型核心基础知识

AI视频基础

【一】Sora的Text-Encoder模型架构是什么样的?

从Sora开源的技术报告中我们可以看到,Sora支持文本Promot和图像Prompt的输入,直观地来说,Sora可能配备了类似于CLIP的Text Encoder和Image Encoder来提取文本和图像两个模态的信息,并进行多模态信息特征的对齐。

【二】AI视频大模型的生成质量指标有哪些?

在AI视频大模型的生成质量评价指标中,我们可以使用自动化指标评估和人工评估两种方式。

在自动化评估指标方面,为了评估文本到视频生成的质量,我们可以使用VBench中的多个指标,如人类动作、场景、动态程度、外观风格等。同时还可以使用两个额外的视频评估工具:Devil 中的 Dynamic Quality (动态质量)和 Chrono-Magic 中的 GPT4o-MT Score,这些工具专注于视频的动态特性。动态质量是通过将各种质量指标与动态评分相结合来定义的,这种方法减少了视频动态性与视频质量之间的负相关性所带来的偏差,从而更全面地评估视频质量。

同时我们还可以设置人工评估,比如CogVideoX论文中设计了一百个精心编写的Prompt,这些Prompt的特点是分布广泛、表述清晰、概念范围明确。用这些提示词生成视频,并让评估小组为视频进行打分,每个子项评分范围为0到1,整体总分则在0到5之间,得分越高表示视频质量越好。同时任何分数扣减的原因也被仔细记录。主要从下面四个角度进行人工打分:

  1. 感官质量(Sensory Quality):主要关注生成的视频的感知质量,包括主体一致性、帧的连续性和稳定性。
  2. 指令遵循(Instruction Following):主要关注生成的视频是否与输入Prompt对齐,包括主体的准确性、数量、元素和细节的正确性。
  3. 物理模拟(Physics Simulation):主要关注生成的视频是否能够遵循物理世界的客观法则,例如光照效果、不同物体之间的交互以及流体动力学的逼真度。
  4. 封面质量(Cover Quality):主要关注从单帧图像中可以评估的指标,包括美学质量、清晰度和逼真度。

深度学习基础

【一】介绍一下PyTorch中.detach()、.clone()、requires_grad=True、torch.no_grad()的原理与作用

在 PyTorch 中,.detach().clone()requires_grad=Truetorch.no_grad() 是涉及 自动微分(autograd)张量操作 的核心概念。它们控制了张量是否参与计算图的构建、是否跟踪梯度,以及如何高效地操作张量。

1. .detach()

作用

.detach() 方法用于从当前的计算图中分离张量。分离后的张量与原张量共享相同的存储空间(数据),但不会再参与梯度计算。

原理

在 PyTorch 的自动微分机制中,每个操作都会在后台构建一个计算图,用于反向传播计算梯度。而 .detach() 会创建一个新的张量,分离计算图:

  • 新的张量不跟踪梯度。
  • 新张量的 requires_grad 属性为 False
常见用法
  1. 避免梯度计算

    • 在反向传播中,有些中间结果不需要计算梯度时,使用 .detach() 避免冗余计算图构建。
  2. 进行无梯度的张量操作

    • 处理某些张量,只需要其值而不需要其与梯度计算的关系。
示例
import torch

# 创建张量并参与计算图
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2

# 分离张量,y_detached 不再参与计算图
y_detached = y.detach()

# 检查 requires_grad 属性
print(y.requires_grad)       # True
print(y_detached.requires_grad)  # False

# 修改 y_detached 的值,不影响 y
y_detached[0] = 10
print(y)  # tensor([2., 4., 6.], grad_fn=)

2. .clone()

作用

.clone() 方法用于深复制一个张量,新张量的存储空间与原张量完全独立。

原理
  • .clone() 创建一个新的张量,具有与原张量相同的数据值和属性(如 requires_grad)。
  • 如果原张量需要梯度clone() 出的张量会继续参与梯度计算,且其计算图关系保持不变。
常见用法
  1. 创建独立的张量拷贝

    • 对原张量的修改不会影响到克隆后的张量。
  2. 操作过程中需要保留中间结果

    • 尤其在构建复杂的计算图时,使用 .clone() 可以保留独立状态。
示例
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

# 克隆张量
y = x.clone()
y[0] = 10  # 修改 y 不会影响 x

# 验证
print(x)  # tensor([1., 2., 3.], requires_grad=True)
print(y)  # tensor([10.,  2.,  3.], requires_grad=True)

# 克隆张量保持计算图
z = x * 2
z_clone = z.clone()
print(z.grad_fn)       # 
print(z_clone.grad_fn) # 

**3. requires_grad=True

作用

张量的 requires_grad 属性控制其是否需要计算梯度。如果设置为 True,该张量会参与计算图的构建,并在反向传播时计算和存储梯度。

原理
  • requires_grad=True
    • 张量会参与计算图,记录每一步的操作。
    • 在反向传播时,PyTorch 会根据计算图,计算梯度并存储在 tensor.grad 属性中。
  • requires_grad=False
    • 张量不会记录操作,且节省内存和计算资源。
常见用法
  1. 训练模型时需要梯度

    • 对模型参数(如权重)设置 requires_grad=True,以便在反向传播中更新权重。
  2. 冻结梯度

    • 在推理阶段,或冻结某些层时,将 requires_grad=False
示例
# 创建需要梯度的张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

# 操作
y = x * 2
z = y.sum()

# 反向传播
z.backward()

# 梯度
print(x.grad)  # tensor([2., 2., 2.])

# 冻结梯度
x.requires_grad_(False)
print(x.requires_grad)  # False

4. torch.no_grad()

作用

torch.no_grad() 是一个上下文管理器,临时禁用自动梯度计算。

原理

torch.no_grad() 块内:

  • 所有操作都会被标记为不需要梯度。
  • 不会构建计算图。
  • 可以节省内存和计算资源。

注意torch.no_grad() 是临时的,只在上下文块中生效。

常见用法
  1. 推理阶段

    • 在模型推理中,通常只需要前向传播,使用 torch.no_grad() 避免不必要的计算图构建。
  2. 冻结梯度操作

    • 修改模型权重或对张量进行操作时,不希望干扰现有计算图。
示例
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

# 不使用 torch.no_grad
with torch.no_grad():
    y = x * 2
    print(y.requires_grad)  # False

# 离开 no_grad 块后
z = x * 2
print(z.requires_grad)  # True

总结与对比

功能 作用 是否构建计算图 是否跟踪梯度
.detach() 分离张量与计算图,不再跟踪梯度
.clone() 深复制张量,生成新张量(可继续跟踪梯度) 是(如需要) 是(如需要)
requires_grad=True 控制张量是否需要计算梯度
torch.no_grad() 上下文管理器,禁用梯度计算(节省资源)
使用建议
  • 训练阶段requires_grad=True 保证计算图的正确构建。
  • 推理阶段:使用 torch.no_grad(),避免不必要的计算图构建。
  • 冻结部分梯度:使用 .detach() 或设置 requires_grad=False
  • 深复制张量:使用 .clone() 确保独立性。

【二】介绍一下CLIP-pooled-embedding的作用

CLIP Pooled Embedding 的作用详细解析

CLIP(Contrastive Language-Image Pretraining)是强大的AI多模态模型,由 OpenAI 提出,用于将自然语言与图像相联系。CLIP 的核心是一个双塔结构,分别包含一个文本编码器和一个图像编码器,通过对比学习(contrastive learning)训练,使图像和文本在共享的嵌入空间中具有相似的表示。

其中,Pooled Embedding 是 CLIP 提供的一种高效的语义特征表示方法,主要用于提取文本或图像的全局特征,广泛用于AI多模态任务和下游应用。

什么是 Pooled Embedding?

在 CLIP 中:

  1. 图像编码器(如 ViT 或 ResNet)将图像输入转化为一组 token 的嵌入表示。
  2. 文本编码器(如 Transformer)将文本输入转化为一组 token 的嵌入表示。

这些编码器通常生成序列化的输出,表示输入的各个部分。但在很多任务中,我们需要一个全局的语义特征,这就是 Pooled Embedding 的作用。

生成 Pooled Embedding 的方法
  1. CLS Token([CLS] 标记):

    • 在 Transformer 架构中(例如 BERT 或 CLIP 的文本编码器),通常会在输入前加入一个特殊的 [CLS] 标记。
    • 编码完成后,CLS 的嵌入被视为全局语义表征。
    • CLIP 文本编码器会直接使用该 CLS Token 的嵌入作为文本的 Pooled Embedding。
  2. Global Average Pooling(全局平均池化):

    • 对于图像编码器(如 ViT 或 ResNet),CLIP 通常使用全局平均池化操作,将图像的每个 token 的嵌入取平均值,生成单一向量表示,作为图像的 Pooled Embedding。

Pooled Embedding 的作用

1. 全局语义表征

Pooled Embedding 提供了输入(文本或图像)的全局语义信息,适合于需要整体语义理解的任务。

  • 文本: 表示整段文字的语义。
  • 图像: 表示整张图片的视觉语义。
2. 对比学习中的对齐

CLIP 的训练目标是将相关的图像-文本对拉近,而将不相关的对拉远。

  • 文本和图像分别通过其编码器生成 Pooled Embedding。
  • 通过对比学习(Contrastive Loss),CLIP 在高维空间中优化,使图像和对应文本的 Pooled Embedding 尽可能接近。
3. 下游任务的输入特征

Pooled Embedding 是许多下游任务的基础特征,常用于:

  • 分类任务: 提取图像或文本的嵌入后,输入分类器。
  • 检索任务: 用于图像到文本、文本到图像的检索匹配。
  • 多模态任务: 如视觉问答(VQA)和视觉-文本生成,使用 Pooled Embedding 作为全局上下文。
4. 高效表征

Pooled Embedding 通过一个固定大小的向量(如 512 维)表示输入,能够大幅简化计算,适合后续的处理和存储。

Pooled Embedding 的计算过程

图像编码器(Image Encoder)

假设图像编码器使用的是 ViT(Vision Transformer):

  1. 输入图像被分成固定大小的 patch。
  2. 每个 patch 转换为 token,输入到 Transformer。
  3. 输出的 token 是一个序列,其中包括了 [CLS] token。
  4. CLIP 使用 全局平均池化(Global Average Pooling) 对所有 token 取平均值,得到图像的 Pooled Embedding。
文本编码器(Text Encoder)

假设文本编码器使用的是 Transformer:

  1. 输入文本被分解为 token(如单词或子词)。
  2. 特殊的 [CLS] token 被添加到输入序列的开头。
  3. Transformer 输出序列的表示,其中 [CLS] token 的嵌入被用作文本的 Pooled Embedding。

应用场景

1. 多模态检索

通过 Pooled Embedding,可以实现图像与文本的相互检索:

  • 将图像的 Pooled Embedding 与文本的 Pooled Embedding 在共享空间中匹配。
  • 相似度较高的嵌入被认为是相关的。
2. 分类任务
  • 提取图像的 Pooled Embedding,作为输入特征传递给分类器。
  • 可用于物体分类、情感分析等任务。
3. 内容生成
  • 在生成任务中(如文本生成、图像生成),Pooled Embedding 可以作为条件输入,指导生成过程。
4. 语义搜索
  • 使用文本 Pooled Embedding,快速进行语义相关内容的检索。
  • 如基于文本描述搜索图像。

优点与局限性

优点
  1. 简洁高效:Pooled Embedding 是固定大小的向量,便于存储和后续计算。
  2. 语义丰富:对输入的全局语义有良好概括。
  3. 适用广泛:适合检索、分类等多种任务。
局限性
  1. 上下文丢失:对于复杂输入,可能丢失部分局部细节。
  2. 固定长度限制:特征向量维度固定,可能不足以表达某些复杂场景的全部信息。

机器学习基础

【一】什么是机器学习中的对比学习?

对比学习(Contrastive Learning)的核心概念

对比学习(Contrastive Learning)是一种无监督学习方法,其核心目标是通过对比数据样本之间的相似性与差异性,学习出高质量的特征表示。在机器学习和深度学习中,对比学习被广泛用于生成语义丰富的表示,特别是在视觉、自然语言处理(NLP)和多模态任务中。

1. 对比学习的核心思想

对比学习的关键在于:

  • 将相似的数据样本拉近:对语义相似或共享上下文的样本,学到的表示应该在高维嵌入空间中接近。
  • 将不相似的数据样本拉远:对于语义无关或无上下文关系的样本,其嵌入表示应该远离。

通过这一拉近和拉远的机制,模型可以在没有明确监督信号(如标签)的情况下,学习到语义上有意义的特征。

2. 对比学习的基本构造

(1) 正样本对(Positive Pair)
  • 正样本对是语义相似的两个数据样本。
  • 通常通过数据增强生成,例如对一张图像应用不同的增强方法(裁剪、翻转、变换等)。
(2) 负样本对(Negative Pair)
  • 负样本对是语义上不相关的两个数据样本。
  • 通常在一个小批量数据中,将不同样本视为负样本。
(3) 对比损失函数(Contrastive Loss)
  • 对比学习通过设计损失函数,使正样本对在嵌入空间中更接近,负样本对更远离。
  • 常用的对比损失包括:
    • 基于欧几里得距离的对比损失

      L

      =

      y

      D

      2

      +

      (

      1

      y

      )

      max

      (

      0

      ,

      m

      D

      )

      2

      L = y cdot D^2 + (1-y) cdot max(0, m-D)^2

      L=yD2+(1y)max(0,mD)2

      • D

        D

        D 是样本对的欧几里得距离。

      • y

        y

        y 表示样本对的标签(1 为正样本对,0 为负样本对)。

      • m

        m

        m 是一个距离的阈值。

    • InfoNCE 损失

      L

      =

      log

      exp

      (

      sim

      (

      z

      i

      ,

      z

      j

      )

      /

      τ

      )

      k

      =

      1

      N

      exp

      (

      sim

      (

      z

      i

      ,

      z

      k

      )

      /

      τ

      )

      L = -log frac{exp(text{sim}(z_i, z_j)/tau)}{sum_{k=1}^N exp(text{sim}(z_i, z_k)/tau)}

      L=logk=1Nexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)

      • z

        i

        ,

        z

        j

        z_i, z_j

        zi,zj 是正样本对的嵌入表示。

      • sim

        (

        )

        text{sim}(cdot)

        sim() 表示相似度函数(如余弦相似度)。

      • τ

        tau

        τ 是温度参数,用于调节分布平滑性。

      • N

        N

        N 表示小批量中的样本数。

3. 对比学习的实现框架

(1) 数据增强

对比学习的正样本对通常通过数据增强生成,常用的方法包括:

  • 图像任务:随机裁剪、旋转、翻转、颜色扰动。
  • 文本任务:同义词替换、删除、句子重组。
  • 时间序列任务:时间窗裁剪、噪声添加。
(2) 嵌入空间的设计

使用神经网络将数据样本映射到高维嵌入空间:

  • 使用主干模型(如 ResNet、Transformer)提取特征。
  • 加入投影头(Projection Head)将特征映射到嵌入空间,用于对比学习。
(3) 小批量采样

在每个小批量中,生成多个正样本对和负样本对:

  • 正样本对:同一数据的增强视图。
  • 负样本对:其他样本的视图。

4. 对比学习的优势

  1. 无需标签

    • 通过无监督学习,大幅减少对人工标注的依赖。
  2. 语义相关性

    • 嵌入空间的表示保留了语义信息,可以用在分类、检索等任务中。
  3. 泛化能力强

    • 学到的特征可以迁移到不同的下游任务。

【二】机器学习中训练集、验证集、测试集之间有哪些区别?

在机器学习中,数据集的划分是非常关键的一步,通常将数据划分为训练集验证集测试集

  • 训练集是模型学习的依据;
  • 验证集是模型优化的工具;
  • 测试集是评估模型性能的标准。

正确地划分和使用这些数据子集是确保模型性能和泛化能力的关键。

1. 训练集 (Training Set)

定义

训练集是用于训练模型的数据子集。模型通过训练集中的样本学习输入特征和目标输出之间的关系,调整模型的参数(如权重和偏置)以最小化预测误差。

特点
  • 模型训练的主要依据:训练集是用来优化模型的,模型会直接接触这些数据并从中学习。
  • 数据量通常是最多的,以保证模型有足够的样本来学习数据分布。
  • 通常用在监督学习中,训练集包括输入特征 KaTeX parse error: Can’t use function ‘)’ in math mode at position 3: (X̲)̲ 和对应的目标标签 KaTeX parse error: Can’t use function ‘)’ in math mode at position 3: (y̲)̲
目的
  • 优化模型的性能,使其能够尽可能准确地预测训练数据中的目标值。
  • 学习数据的模式和规律。

2. 验证集 (Validation Set)

定义

验证集是用于评估模型性能并调整超参数的数据子集。模型通过验证集来评估在未见数据上的表现,从而指导模型的超参数调节和选择最佳模型。

特点
  • 模型优化的工具:验证集用来调节超参数(如学习率、正则化强度、神经网络的层数等),而不直接影响模型的权重。
  • 验证集中的样本不用于训练,因此它能更好地反映模型在未知数据上的表现。
  • 数据量一般比训练集少,但必须足够大以保证评估的可靠性。
目的
  • 避免模型过拟合(overfitting)或欠拟合(underfitting)。
  • 帮助选择最佳的模型结构或超参数。
注意

如果超参数调节过多,验证集实际上可能成为一种“隐式训练数据”,从而降低模型对真正未知数据的泛化能力。

3. 测试集 (Test Set)

定义

测试集是用于最终评估模型性能的数据子集。这些数据在模型训练和验证过程中是完全未见的,目的是对模型的真实泛化能力进行客观评估。

特点
  • 最终性能的衡量标准:模型在测试集上的表现代表了它对完全未知数据的预测能力。
  • 测试集数据不能用于模型的训练或优化。
  • 数据量一般比训练集和验证集更少,但应足够大以确保评估的可靠性。
目的
  • 提供对模型在生产环境中真实表现的估计。
  • 检测模型是否有过拟合的迹象(即在训练集和验证集上表现良好,但在测试集上表现差)。

三者的区别总结

特性 训练集 验证集 测试集
用途 训练模型、调整权重 调整超参数,选择最佳模型 最终评估模型性能
模型接触方式 模型直接接触,权重被更新 模型间接接触,用于优化超参数 模型完全不可见,仅用于测试
数据量 最大 中等 最小
影响阶段 训练阶段 优化阶段 评估阶段
能否调整参数 是(调整超参数) 否(仅用于测试)

数据划分比例

根据数据集大小的不同,训练集、验证集和测试集的划分比例也会有所不同。以下是常见的划分比例:

  • 常规情况:训练集 : 验证集 : 测试集 = 6:2:2 或 8:1:1。
  • 小数据集:由于数据量少,可以采用交叉验证(Cross-Validation)代替单一验证集。
  • 大数据集:可以划分出更多比例的数据作为测试集或验证集。

验证集和测试集的特别注意点

  1. 验证集的动态性

    • 在训练过程中,验证集可能会多次用来评估模型。
    • 如果过度依赖验证集调整超参数,可能导致模型在验证集上表现较好但对真正未知数据(测试集)表现较差。
  2. 测试集的隔离性

    • 测试集必须完全独立,不能用于调参,否则会失去衡量模型真实性能的意义。
    • 如果多个模型使用同一个测试集进行评估,可能会导致数据泄漏或过度拟合。

Python编程基础

【一】介绍一下Python中的sequence和mapping代表的数据结构

在 Python 中,SequenceMapping 是两种核心的数据结构抽象类型,定义了不同的行为模式和用途。这些抽象类型在 collections.abc 模块中被定义,表示 Python 中通用的序列和映射行为。

  • Sequence 是按位置组织的有序数据结构,适合需要通过索引访问数据的场景。
  • Mapping 是键值对组织的无序数据结构,适合通过键快速查找值的场景。

Python 提供了丰富的内置类型和扩展类型,使得 SequenceMapping 能满足各种编程需求。了解它们的特性有助于选择合适的数据结构进行AI项目的高效开发。

Sequence

Sequence 是一种线性排列的有序数据结构,允许通过整数索引访问元素。序列支持切片和迭代操作,是最常见的容器之一。

常见的 Sequence 类型
  • list:可变序列,可以动态修改内容。
  • tuple:不可变序列,内容一旦定义就无法修改。
  • str:表示文本的不可变序列,每个元素是字符。
  • range:表示整数序列的不可变对象。
  • collections.deque:双端队列,可高效地在两端插入或删除元素。
Sequence 的特点
  1. 有序性:元素按照插入顺序排列。
  2. 支持索引:可以使用整数索引访问元素。
  3. 支持切片:可以通过切片操作获取子序列。
  4. 支持迭代:可以使用 for 循环遍历元素。
Sequence 的常用操作

以下是序列支持的一些通用操作:

操作 描述 示例
obj[index] 获取指定索引的元素 my_list[0]
obj[start:end] 切片操作,获取子序列 my_list[1:3]
len(obj) 获取序列长度 len(my_list)
in/not in 检查元素是否存在 3 in my_list
+/* 连接或重复序列 [1, 2] + [3, 4][1] * 3
for x in obj 遍历序列的每个元素 for x in my_list: print(x)
示例代码
from collections.abc import Sequence

# 定义不同类型的 Sequence
my_list = [1, 2, 3]       # list
my_tuple = (4, 5, 6)      # tuple
my_str = "hello"          # string

# 检查是否为 Sequence 类型
print(isinstance(my_list, Sequence))  # True
print(isinstance(my_tuple, Sequence)) # True
print(isinstance(my_str, Sequence))   # True

# 使用序列操作
print(my_list[0])         # 1
print(my_tuple[-1])       # 6
print(my_str[1:4])        # "ell"

Mapping

Mapping 是一种键值对(key-value)结构,表示元素的无序集合。它允许通过键(key)快速访问对应的值(value)。

常见的 Mapping 类型
  • dict:Python 内置的字典类型,支持哈希表操作。
  • collections.OrderedDict:保留插入顺序的字典。
  • collections.defaultdict:提供默认值的字典。
  • collections.Counter:计数器,统计元素出现次数。
Mapping 的特点
  1. 键值对存储:每个元素是 key: value 形式。
  2. 键的唯一性:每个键必须唯一,不能重复。
  3. 无序性:普通字典中,键值对的排列无序(从 Python 3.7 开始,dict 保留插入顺序)。
  4. 快速查找:通过键可以快速找到对应的值。
Mapping 的常用操作

以下是映射支持的一些通用操作:

操作 描述 示例
obj[key] 获取指定键的值 my_dict["name"]
obj[key] = value 设置或更新键对应的值 my_dict["age"] = 25
del obj[key] 删除指定键的键值对 del my_dict["name"]
key in obj 检查键是否存在 "name" in my_dict
obj.keys() 返回所有键 my_dict.keys()
obj.values() 返回所有值 my_dict.values()
obj.items() 返回所有键值对 my_dict.items()
len(obj) 返回映射的键值对个数 len(my_dict)
示例代码
from collections.abc import Mapping

# 定义不同类型的 Mapping
my_dict = {"name": "Alice", "age": 30}        # dict
from collections import defaultdict
my_defaultdict = defaultdict(int)            # defaultdict

# 检查是否为 Mapping 类型
print(isinstance(my_dict, Mapping))          # True
print(isinstance(my_defaultdict, Mapping))   # True

# 使用映射操作
print(my_dict["name"])                       # "Alice"
my_dict["age"] = 35                          # 更新值
my_dict["gender"] = "Female"                 # 添加新键值对
print(my_dict.keys())                        # 返回所有键

Sequence vs Mapping

特性 Sequence Mapping
数据结构 有序 无序
访问方式 通过索引访问 通过键访问
数据存储 按位置存储元素 键值对存储
可迭代性 可以迭代元素 可以迭代键、值或键值对
示例类型 list, tuple, str dict, defaultdict, OrderedDict

【二】在AI服务中如何设置项目的base路径?

在 AI 服务中设置 Base Path 是一个关键步骤,它能够统一管理项目中的相对路径,确保代码在开发和部署环境中都可以正确运行。

1. 常见 Base Path 设置方案

(1) 使用项目根目录作为 Base Path

项目根目录是最常见的 Base Path 选择,适合组织良好的代码结构,所有文件和资源相对于根目录存放。

代码实现

在入口脚本中设置项目根目录:

import os

# 设置项目根目录
BASE_PATH = os.path.dirname(os.path.abspath(__file__))

# 示例:构造文件路径
config_path = os.path.join(BASE_PATH, "config", "settings.yaml")
print(config_path)
  • os.path.abspath(__file__):获取当前脚本的绝对路径。
  • os.path.dirname():提取文件所在目录。
  • 优势:简单易用,适合大多数开发场景。
(2) 使用当前工作目录作为 Base Path

当前工作目录(Current Working Directory, CWD)是运行脚本时所在的目录。

代码实现
import os

# 获取当前工作目录
BASE_PATH = os.getcwd()

# 示例:构造文件路径
model_path = os.path.join(BASE_PATH, "models", "model.pt")
print(model_path)
  • 适用场景

    • 项目运行时始终从固定目录启动,例如通过 cd /path/to/project 再运行脚本。
  • 注意:如果脚本从不同目录运行,可能导致路径解析错误。
(3) 使用环境变量设置 Base Path

通过环境变量配置 Base Path,适合多环境部署,能够动态调整路径。

设置环境变量
  • Linux/Mac:
    export BASE_PATH=/path/to/project
    
  • Windows(命令提示符):
    set BASE_PATH=C:pathtoproject
    
代码实现

在代码中读取环境变量:

import os

# 获取环境变量设置的 Base Path
BASE_PATH = os.getenv("BASE_PATH", os.getcwd())

# 示例:构造文件路径
data_path = os.path.join(BASE_PATH, "data", "dataset.csv")
print(data_path)
  • os.getenv():读取环境变量,第二个参数是默认值。
  • 优势:适合不同环境配置(开发、测试、生产)。
(4) 使用配置文件指定 Base Path

通过配置文件集中管理路径信息,方便维护。

配置文件示例

config.yaml

base_path: "/path/to/project"
代码实现

使用 PyYAML 读取配置文件:

import os
import yaml

# 读取配置文件
with open("config.yaml", "r") as f:
    config = yaml.safe_load(f)
BASE_PATH = config["base_path"]

# 示例:构造文件路径
log_path = os.path.join(BASE_PATH, "logs", "service.log")
print(log_path)
  • 优势:路径配置集中化,易于管理。
  • 注意:需要额外依赖 PyYAML 或其他配置解析工具。
(5) 使用路径管理模块

封装路径管理逻辑到单独模块,例如 folder_paths.py,便于多脚本共享。

folder_paths.py 示例
import os

# 定义 Base Path
BASE_PATH = os.path.dirname(os.path.abspath(__file__))

# 目录路径
models_dir = os.path.join(BASE_PATH, "models")
data_dir = os.path.join(BASE_PATH, "data")
logs_dir = os.path.join(BASE_PATH, "logs")

# 获取完整路径
def get_full_path(sub_dir, file_name):
    return os.path.join(BASE_PATH, sub_dir, file_name)
在其他脚本中使用
import folder_paths

# 使用路径管理模块获取路径
model_path = folder_paths.get_full_path("models", "model.pt")
print(model_path)

# 使用预定义的路径
print(folder_paths.models_dir)
  • 优势:集中路径逻辑,减少重复代码。

2. 选择 Base Path 的策略

开发阶段
  • 使用项目根目录作为 Base Path,便于在本地开发和调试。
  • 使用 os.path.abspath(__file__) 确保路径与代码结构一致。
部署阶段
  • 推荐使用环境变量或配置文件管理 Base Path,支持灵活调整路径。
  • 确保环境变量和配置文件在不同环境中正确设置。

模型部署基础

【一】如何构建TensorRT模型的缓存机制?

在TensorRT架构中,模型运行主要依赖GPU,因此直接支持将整个TensorRT引擎从GPU移动到CPU并非直接内置的功能。但是我们可以通过一些技巧,将TensorRT引擎对象序列化到CPU(或者磁盘),并在需要时反序列化加载到GPU,可以有效管理显存,特别是在多模型推理或资源有限的场景下。这种方法实现了类似“缓存”的机制,能够动态加载模型到GPU,同时释放未使用的GPU资源,从而提高硬件资源的利用效率。

1. 基本思路

TensorRT模型(即引擎)在推理时需要加载到GPU中运行。如果需要将模型“缓存”到CPU,可以通过以下方法:

  1. 序列化引擎

    • 在推理完成后,将引擎序列化为二进制数据并存储在CPU内存中(甚至可以存储到磁盘)。
  2. 反序列化引擎

    • 在需要推理时,将二进制数据反序列化为TensorRT引擎,并加载到GPU中执行推理。

这种方法模拟了将模型缓存到CPU的过程,因为TensorRT本身无法直接在CPU上运行。

2. 实现步骤

1. 加载模型并创建TensorRT引擎
  • 首先我们加载ONNX模型或已有的TensorRT引擎,并创建可用于推理的引擎。
import tensorrt as trt

# 加载 TensorRT Logger
logger = trt.Logger(trt.Logger.WARNING)

# 创建 TensorRT Builder 和 Network
builder = trt.Builder(logger)
network = builder.create_network(flags=1  int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))

# 加载 ONNX 文件
onnx_file = "model.onnx"
with trt.OnnxParser(network, logger) as parser:
    with open(onnx_file, 'rb') as f:
        parser.parse(f.read())

# 构建引擎
config = builder.create_builder_config()
config.max_workspace_size = 1  30  # 设置最大工作空间
engine = builder.build_engine(network, config)
2. 将引擎序列化到CPU
  • 使用 TensorRT 的序列化功能,将引擎对象保存为二进制数据。
# 序列化引擎
serialized_engine = engine.serialize()

# 将序列化后的引擎保存到 CPU 内存(或者存储到文件)
cached_engine_on_cpu = serialized_engine  # 模拟缓存到 CPU
3. 在需要时重新加载引擎到 GPU
  • 使用 TensorRT 的反序列化功能,将缓存的引擎加载回 GPU。
# 反序列化引擎
runtime = trt.Runtime(logger)
engine_from_cpu = runtime.deserialize_cuda_engine(cached_engine_on_cpu)

# 创建执行上下文
context = engine_from_cpu.create_execution_context()
4. 推理流程
  • 构造输入和输出张量,并执行推理。
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit  # 初始化 CUDA 上下文

# 创建输入和输出缓冲区
input_shape = (1, 3, 224, 224)  # 示例输入维度
output_shape = (1, 1000)  # 示例输出维度

# 在 GPU 上分配内存
d_input = cuda.mem_alloc(np.prod(input_shape) * np.float32().nbytes)
d_output = cuda.mem_alloc(np.prod(output_shape) * np.float32().nbytes)

# 创建主机上的输入数据
input_data = np.random.rand(*input_shape).astype(np.float32)
cuda.memcpy_htod(d_input, input_data)

# 执行推理
bindings = [int(d_input), int(d_output)]
context.execute_v2(bindings)

# 从 GPU 拷贝结果到主机
output_data = np.empty(output_shape, dtype=np.float32)
cuda.memcpy_dtoh(output_data, d_output)

print("Inference result:", output_data)

3. 注意事项

1. 数据传输开销
  • 序列化和反序列化是额外的开销,因此在高频推理任务中可能导致性能下降。
  • 如果模型较大,序列化和反序列化的时间会显著增加。
2. GPU 资源管理
  • 每次加载引擎到 GPU 时,需要确保 GPU 上有足够的显存。
  • 在释放 GPU 资源后,可以通过 cuda.Context.synchronize() 确保设备状态一致。
3. 磁盘与内存存储选择
  • 如果缓存到 CPU 的模型较大,可以选择将其保存到磁盘(如 .plan 文件),并在需要时从磁盘加载。
4. TensorRT 的版本兼容性
  • 序列化的引擎仅在相同的 TensorRT 版本、CUDA 版本和 GPU 硬件架构上兼容。如果环境变化,需要重新生成引擎。

【二】AI模型的轻量化效果评价指标有哪些?

AI模型轻量化的效果评价指标主要用于衡量模型在资源使用效率性能表现实际应用适应性之间的平衡。下面是Rocky总结的主流轻量化效果评价指标及其适用场景:

1. 模型大小

指标定义
  • 模型文件大小:模型的总存储体积,通常以 MB(兆字节)或 GB(千兆字节)为单位。
  • 参数数量(Parameter Count):模型的可训练参数总数,通常以百万(M)或十亿(B)级别表示。
意义
  • 存储成本:模型越小,占用的存储空间越少,更适合在资源受限的设备(如移动设备、物联网设备)上部署。
  • 传输效率:在边缘设备与服务器之间传输模型时,小模型能够显著降低网络延迟。
评估方式
  • 比较模型轻量化前后的文件大小或参数数量的变化,例如:

    压缩率

    =

    原始模型大小

    压缩后模型大小

    text{压缩率} = frac{text{原始模型大小}}{text{压缩后模型大小}}

    压缩率=压缩后模型大小原始模型大小

  • 示例:一个 100MB 的模型压缩到 20MB,压缩率为 5x。

2. 推理速度

指标定义
  • 延迟(Latency):单次推理所需的时间,通常以毫秒(ms)为单位。
  • 吞吐量(Throughput):单位时间内模型能够处理的输入数量(例如 FPS 或样本/秒)。
意义
  • 实时性:延迟低的模型适合实时应用场景,如在线翻译、视频分析。
  • 处理效率:吞吐量高的模型适合批量处理任务,例如大规模数据预测。
评估方式
  • 延迟:测量模型在给定硬件(如 CPU、GPU 或专用加速器)上的单次推理时间。
  • 吞吐量:在一定时间窗口内运行模型,计算处理的输入数量。
  • 示例:模型轻量化后推理速度提升了 3x,意味着延迟降低到 1/3。

3. 能耗

指标定义
  • 功耗(Power Consumption):模型推理时所需的能量消耗,通常以瓦特(W)或焦耳(J)为单位。
  • 能效比(Energy Efficiency Ratio):每单位功耗下模型处理的样本数量(如 FPS/W)。
意义
  • 设备续航:低功耗模型更适合部署在电池供电设备(如手机、无人机)上。
  • 绿色计算:节能模型更符合环保要求,尤其在数据中心部署时可以降低运营成本。
评估方式
  • 使用硬件能耗监测工具,测量模型运行过程中的能耗,并比较轻量化前后的变化。
  • 示例:轻量化后,模型每秒功耗从 20W 降低到 8W。

4. 精度

指标定义
  • 模型性能指标

    • 生成任务:图像生成质量、对话准确度等
    • 分类任务:准确率(Accuracy)、召回率(Recall)、F1 分数等。
    • 回归任务:均方误差(MSE)、均绝对误差(MAE)等。
    • 检测任务:平均精度均值(mAP)。
    • 分割任务:交并比(IoU)。
  • 轻量化引起的精度变化

    Δ

    Performance

    =

    轻量化前精度

    轻量化后精度

    Delta text{Performance} = text{轻量化前精度} – text{轻量化后精度}

    ΔPerformance=轻量化前精度轻量化后精度

意义
  • 平衡点:评估轻量化后模型性能是否显著下降,以确保模型在目标任务中的实用性。
评估方式
  • 比较轻量化前后的模型在相同数据集上的性能表现。
  • 示例:轻量化模型的分类准确率从 95% 下降到 94.5%,性能下降了 0.5%。

5. 内存使用

指标定义
  • 显存占用(GPU Memory Usage):模型推理时在 GPU 上占用的显存,通常以 MB 或 GB 为单位。
  • RAM 使用量(CPU Memory Usage):模型推理时在 CPU 上占用的内存,通常以 MB 或 GB 为单位。
意义
  • 硬件适配性:轻量化模型应能够在低资源设备(如嵌入式系统)上运行。
  • 并发能力:占用内存越少,单一硬件上同时运行的实例数越多。
评估方式
  • 使用监控工具(如 NVIDIA 的 nvidia-smi 或 PyTorch/TensorFlow 的内存分配监控 API)测量内存占用。
  • 示例:轻量化后显存占用从 6GB 降低到 2GB。

6. 模型压缩比

指标定义
  • 模型压缩比(Compression Ratio)

    压缩比

    =

    原始模型大小

    压缩后模型大小

    text{压缩比} = frac{text{原始模型大小}}{text{压缩后模型大小}}

    压缩比=压缩后模型大小原始模型大小

意义
  • 存储效率:高压缩比意味着模型占用的存储空间显著减少。
评估方式
  • 计算模型在量化、剪枝或知识蒸馏后的大小变化。
  • 示例:一个 500MB 的模型压缩到 50MB,压缩比为 10x。

7. 参数稀疏度

指标定义
  • 稀疏率(Sparsity Ratio):模型权重中为零的参数所占的比例。

    稀疏率

    =

    零参数的数量

    总参数数量

    text{稀疏率} = frac{text{零参数的数量}}{text{总参数数量}}

    稀疏率=总参数数量零参数的数量

意义
  • 计算效率:稀疏模型在部署到支持稀疏优化的硬件(如专用加速器)时,可以显著提升推理速度和降低功耗。
评估方式
  • 检查轻量化后的权重矩阵,计算零值权重的比例。
  • 示例:模型稀疏率从 0% 增加到 50%。

8. 部署难易度

指标定义
  • 模型兼容性:轻量化后的模型是否能直接运行在目标硬件(如移动设备、嵌入式设备)上。
  • 转换成本:从开发框架到部署框架的转换复杂度(如从 PyTorch 转换到 TensorRT)。
意义
  • 工程效率:易部署的模型可以快速投入生产环境。
评估方式
  • 测试轻量化后的模型在目标硬件或框架(如 TensorRT、ONNX)上的兼容性。

9. 用户体验

指标定义
  • 响应时间(Response Time):模型在用户交互中的实际响应时间。
  • 体验流畅度:在应用中(如手机或 AR/VR 环境),模型轻量化后是否对体验流畅性有所改善。
意义
  • 实际效果:轻量化的最终目标是提升用户体验,这往往比单纯的性能指标更重要。
评估方式
  • 测量轻量化模型在实际应用场景中的响应速度和流畅度。
  • 示例:语音助手模型响应时间从 500ms 降低到 200ms。

10. 通用性和适应性

指标定义
  • 任务迁移性能:轻量化模型在多个任务上的性能是否保持一致。
  • 硬件适应性:模型是否能在多种硬件(如 GPU、TPU、CPU)上高效运行。
意义
  • 可扩展性:轻量化模型应具备更广泛的适应性,而不仅仅针对单一任务或设备优化。
评估方式
  • 在不同任务、设备上的性能测试,衡量其通用性。
  • 示例:模型在移动设备上的推理速度提升 3x,同时在服务器上的精度几乎无损。

总结

指标类别 具体指标 意义
资源效率 模型大小、内存使用、推理速度、能耗 衡量轻量化模型在资源受限设备上的表现。
性能表现 精度、稀疏率、压缩比 确保轻量化后模型的任务性能和计算效率的平衡。
适用性与体验 部署难易度、响应时间、任务迁移性能 评估轻量化模型在实际场景中的应用和适配能力。

计算机基础

Rocky从工业界、学术界、竞赛界以及应用界角度出发,总结归纳AI行业所需的计算机基础干货知识。这些干货知识不仅能在面试中帮助我们,还能让我们在AI行业中提高工作效率

【一】介绍一下AI行业中API的原理与作用

AI服务中的API概念详解

在AI行业中,API(Application Programming Interface,应用程序接口) 是一种用于连接不同系统或服务的标准化接口。它允许开发者通过简单的请求与复杂的AI服务进行交互,而不需要深入了解服务的底层实现。API 是 AI 服务中的关键桥梁,使得复杂的 AI 模型可以以一种简单、可复用的方式被开发者调用,并将人工智能融入到各种项目中。

1. 什么是API?

  • 定义
    API 是一种定义好的通信协议,允许一个软件程序与另一个软件程序进行交互。
    在 AI 服务中,API 通常用来提供对 AI 模型或服务的访问接口。

  • 作用

    • 将复杂的 AI 功能封装起来,通过简单的接口提供给开发者。
    • 提供标准化的调用方式,使得开发者可以方便地集成到自己的应用中。

2. API在AI服务中的作用

2.1 模型调用
  • AI 服务提供商(如 OpenAI、Google Cloud AI、AWS)通过 API 暴露模型功能。
  • 用户可以通过 API 调用模型执行特定任务,例如文本生成、图片识别或语音合成。
2.2 数据传输
  • API 用于在客户端(调用者)和服务端(AI 模型)之间传递输入数据和返回输出结果。
    • 输入数据:如图片、文本、语音文件。
    • 输出结果:如分类标签、生成的内容、分析报告。
2.3 抽象复杂性
  • AI 模型的训练和运行可能涉及复杂的算法和硬件部署。
  • API 将这些复杂性屏蔽,对外提供简单的调用接口,开发者无需关心底层实现。
2.4 易用性和集成
  • API 提供标准化的调用方式(如 HTTP 请求),可以方便地集成到各种编程语言和框架中。

3. 常见的AI服务API类型

3.1 基础类型API
  • AIGC

    • 提供图像生成、视频生成、文本对话等功能。
    • 示例:Stable Diffusion API、ChatGPT API、Sora API等。
  • 计算机视觉

    • 提供图像分类、目标检测、OCR(光学字符识别)等功能。
    • 示例:Google Vision API、AWS Rekognition。
  • 自然语言处理(NLP)

    • 提供语言生成、情感分析、翻译等功能。
    • 示例:OpenAI GPT API、Azure Cognitive Services Text Analytics。
  • 语音处理

    • 提供语音识别(ASR)、语音合成(TTS)等功能。
    • 示例:Google Speech-to-Text API、Amazon Polly。
3.2 多模态API
  • 处理多模态数据(如图像和文本的组合):
    • 示例:Stable Diffusion API(根据文本生成图片)、OpenAI DALL·E API。
3.3 定制模型API
  • 提供用户上传数据的能力,用于定制模型或微调预训练模型。
    • 示例:Hugging Face Hub API、Azure Custom Vision。

4. API的工作原理

4.1 请求-响应模式
  • 客户端向服务端发送一个请求(Request),服务端处理后返回响应(Response)。
  • 常用协议:HTTP/HTTPS
4.2 RESTful API
  • REST(Representational State Transfer)是最常用的 API 架构风格。
  • 特点:
    • 使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE)。
    • 数据格式通常是 JSON 或 XML。
    • URL 用于标识资源,参数携带操作指令。
4.3 API结构
  • Endpoint(端点)

    • 每个服务提供的功能对应一个唯一的 URL。例如:
      • 图像分类 API 的端点:https://api.example.com/v1/image-classify
      • 文本生成 API 的端点:https://api.example.com/v1/text-generate
  • 请求头(Headers)

    • 包含认证信息(如 API 密钥)。
  • 请求体(Body)

    • 提供输入数据,如文本、图片或音频文件。
  • 响应体(Response Body)

    • 服务返回的结果数据。
4.4 示例请求

以下是一个常见的 RESTful API 调用示例:

import requests

url = "https://api.example.com/v1/text-generate"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "prompt": "Write a story about AI",
    "max_tokens": 100
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

5. API的关键特性

5.1 可扩展性
  • AI 服务提供的 API 通常支持多种输入大小、批量处理能力等,便于扩展应用。
5.2 异步支持
  • 部分 API 支持异步调用,适合长时间运行的任务(如视频分析)。
5.3 认证和授权
  • 使用 API 通常需要身份认证,常见方式包括:
    • API Key:最常见,开发者通过密钥调用服务。
    • OAuth:更安全的授权方式,允许第三方应用安全访问用户资源。
5.4 速率限制(Rate Limiting)
  • 为防止滥用,API 通常限制每分钟或每小时的调用次数。例如:
    • 每分钟最多调用 60 次。
5.5 数据安全性
  • API 通信通常使用 HTTPS,确保数据在传输中加密。
  • AI 服务提供商对上传数据和结果数据的隐私保护至关重要。

6. API的优点

  • 快速集成:开发者无需训练模型,只需调用 API 即可实现功能。
  • 降低门槛:非 AI 专业开发者也能利用复杂的 AI 技术。
  • 灵活性:支持多种编程语言和框架,适用于各种项目需求。
  • 成本优化:通过云端服务节省硬件和运维成本。

【二】计算机中http协议与ssh协议有哪些异同?

HTTP 和 SSH 协议是计算机网络中两种常见的协议,虽然它们有不同的应用场景,但在某些方面也有相似之处。HTTP 更专注于数据传输和信息展示,而 SSH 则强调安全性和远程控制。在实际应用中,选择使用哪种协议需要根据具体AI需求而定。如果追求快速、高效的数据传输,HTTP 是首选;如果需要安全的远程通信或文件传输,SSH 是不二之选。

一、HTTP 协议

定义

HTTP(HyperText Transfer Protocol,超文本传输协议)是一个无状态的、基于请求-响应模式的应用层协议,主要用于客户端和服务器之间传输超文本数据(如 HTML 文件、图片等)。

应用场景
  • 浏览网页(通过浏览器与服务器交互)
  • 数据传输(如 RESTful API 的数据请求)
  • 前后端通信
技术特点
  • 协议层:HTTP 是基于 TCP/IP 的应用层协议。
  • 端口号:默认使用 80 端口(HTTPS 使用 443 端口)。
  • 无状态:HTTP 本身不记录会话状态,依赖于 Cookies 或 Session 等机制实现会话管理。
  • 通信模式:采用明文通信,数据安全性较低(除非通过 HTTPS 加密)。
  • 扩展性:支持通过 HTTP/2 和 HTTP/3 协议进行优化,提升速度和性能。

二、SSH 协议

定义

SSH(Secure Shell Protocol,安全外壳协议)是一种为网络服务提供加密通信的协议,主要用于远程登录和其他安全网络服务。

应用场景
  • 远程服务器登录和管理
  • 传输文件(通过 SCP 或 SFTP)
  • 执行远程命令
  • 隧道代理和端口转发
技术特点
  • 协议层:SSH 是一个基于 TCP/IP 的应用层协议。
  • 端口号:默认使用 22 端口。
  • 安全性:通过对数据进行加密(对称加密、非对称加密、散列算法),确保数据传输的保密性和完整性。
  • 状态保持:SSH 是一个基于会话的协议,会在会话期间保持状态。
  • 认证机制:支持基于密码和基于公钥的双重认证机制。

三、HTTP 和 SSH 的相同点

  1. 基于 TCP/IP 协议

    • 两者都工作在 TCP/IP 协议栈的应用层,依赖于 TCP 进行可靠的数据传输。
  2. 跨平台

    • HTTP 和 SSH 协议都可以在多种操作系统上使用,并且都是应用广泛的标准协议。
  3. 客户端-服务器架构

    • 两者都采用客户端与服务器的交互模式,例如:
      • HTTP:浏览器作为客户端向 Web 服务器发送请求。
      • SSH:本地计算机作为客户端远程连接到 SSH 服务器。
  4. 扩展性

    • 两者都支持功能扩展。例如:
      • HTTP 支持通过 HTTP/2、HTTP/3 和扩展头实现功能增强。
      • SSH 支持多种附加功能,如文件传输(SCP/SFTP)和端口转发。

四、HTTP 和 SSH 的不同点

特性 HTTP 协议 SSH 协议
主要用途 传输超文本数据,主要用于网页浏览和前后端通信 安全远程登录和管理服务器,提供安全的命令执行和数据传输
安全性 HTTP 是明文传输(除非通过 HTTPS 加密) SSH 默认启用加密,确保数据传输的保密性和完整性
默认端口 80(HTTP)或 443(HTTPS) 22
状态管理 无状态协议,通过外部机制(如 Cookie/Session)实现状态管理 基于会话的协议,会在整个会话期间保持连接状态
认证机制 一般无需身份认证,依赖于服务器开放的资源访问 需要身份验证(基于密码或公钥的认证机制)
通信方式 请求-响应模式,客户端发起请求,服务器返回响应 持续会话模式,客户端和服务器可以双向通信
数据内容 主要用于传输网页内容、文本数据和媒体文件 主要用于命令交互、远程文件传输和加密隧道通信
典型工具 浏览器(如 Chrome、Firefox) SSH 客户端(如 OpenSSH、PuTTY)
传输效率 明文传输效率高,HTTPS 的加密可能稍慢,但对静态资源非常高效 数据加密增加了开销,但适合需要高安全性的通信场景

五、应用场景对比

  1. HTTP 应用场景

    • 访问网页内容:如浏览器请求网页、获取图片、播放视频等。
    • API 调用:前端与后端的数据通信。
    • 传输静态资源:如 HTML、CSS 和 JavaScript 文件。
  2. SSH 应用场景

    • 管理服务器:远程登录到服务器执行管理任务。
    • 传输文件:使用 SCP 或 SFTP 协议上传或下载文件。
    • 构建安全隧道:通过 SSH 隧道代理访问内部网络或加密不安全的通信。

六、适用场景中的融合

尽管 HTTP 和 SSH 的用途不同,但在某些场景中可以结合使用。例如:

  • 通过 SSH 加密 HTTP 流量:可以使用 SSH 隧道将 HTTP 请求加密后传输,提升数据的安全性。
  • 远程管理 HTTP 服务:使用 SSH 连接远程服务器,部署和维护运行 HTTP 服务的 Web 服务器。

开放性问题

Rocky从工业界、学术界、竞赛界以及应用界角度出发,思考总结AI行业的干货开放性问题,这些问题不仅能够用于面试官的提问,也可以用作面试者的提问,在面试的最后阶段让面试双方进入深度的探讨与交流。

与此同时,这些开放性问题也是贯穿我们职业生涯的本质问题,需要我们持续的思考感悟。这些问题没有标准答案,Rocky相信大家心中都有自己对于AI行业的认知与判断,欢迎大家在留言区分享与评论。

【一】AI算法工程师如何提升在AI行业中的影响力?

Rocky认为这是一个AI行业从业者要思考的本质问题,不管是AIGC领域、传统深度学习领域还是自动驾驶领域,我们都需要在自己的职业生涯中持续思考与总结。

【二】AI算法工程师如何破圈在社会中提升自己的影响力?

Rocky认为这不仅仅是AI行业从业者要思考的本质问题,也是所有行业从业者要思考的本质问题,这是一个非常有价值的核心问题。

推荐阅读

1、加入AIGCmagic社区知识星球!

AIGCmagic社区知识星球不同于市面上其他的AI知识星球,AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台,涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100+应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等干货

那该如何加入星球呢?很简单,我们只需要扫下方的二维码即可。知识星球原价:299元/年,前200名限量活动价,终身优惠只需199元/年。大家只需要扫描下面的星球优惠卷即可享受初始居民的最大优惠:

2、Sora等AI视频大模型的核心原理,核心基础知识,网络结构,经典应用场景,从0到1搭建使用AI视频大模型,从0到1训练自己的AI视频大模型,AI视频大模型性能测评,AI视频领域未来发展等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Sora等AI视频大模型文章地址:https://zhuanlan.zhihu.com/p/706722494

3、Stable Diffusion 3和FLUX.1核心原理,核心基础知识,网络结构,从0到1搭建使用Stable Diffusion 3和FLUX.1进行AI绘画,从0到1上手使用Stable Diffusion 3和FLUX.1训练自己的AI绘画模型,Stable Diffusion 3和FLUX.1性能优化等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion 3和FLUX.1文章地址:https://zhuanlan.zhihu.com/p/684068402

4、Stable Diffusion XL核心基础知识,网络结构,从0到1搭建使用Stable Diffusion XL进行AI绘画,从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型,AI绘画领域的未来发展等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion XL文章地址:https://zhuanlan.zhihu.com/p/643420260

5、Stable Diffusion 1.x-2.x核心原理,核心基础知识,网络结构,经典应用场景,从0到1搭建使用Stable Diffusion进行AI绘画,从0到1上手使用Stable Diffusion训练自己的AI绘画模型,Stable Diffusion性能优化等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion文章地址:https://zhuanlan.zhihu.com/p/632809634

6、ControlNet核心基础知识,核心网络结构,从0到1使用ControlNet进行AI绘画,从0到1训练自己的ControlNet模型,从0到1上手构建ControlNet商业变现应用等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

ControlNet文章地址:https://zhuanlan.zhihu.com/p/660924126

7、LoRA系列模型核心原理,核心基础知识,从0到1使用LoRA模型进行AI绘画,从0到1上手训练自己的LoRA模型,LoRA变体模型介绍,优质LoRA推荐等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

LoRA文章地址:https://zhuanlan.zhihu.com/p/639229126

8、Transformer核心基础知识,核心网络结构,AIGC时代的Transformer新内涵,各AI领域Transformer的应用落地,Transformer未来发展趋势等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Transformer文章地址:https://zhuanlan.zhihu.com/p/709874399

9、最全面的AIGC面经《手把手教你成为AIGC算法工程师,斩获AIGC算法offer!(2024年版)》文章正式发布!

码字不易,欢迎大家多多点赞:

AIGC面经文章地址:https://zhuanlan.zhihu.com/p/651076114

10、50万字大汇总《“三年面试五年模拟”之算法工程师的求职面试“独孤九剑”秘籍》文章正式发布!

码字不易,欢迎大家多多点赞:

算法工程师三年面试五年模拟文章地址:https://zhuanlan.zhihu.com/p/545374303

《三年面试五年模拟》github项目地址(希望大家能多多star):https://github.com/WeThinkIn/Interview-for-Algorithm-Engineer

11、Stable Diffusion WebUI、ComfyUI、Fooocus三大主流AI绘画框架核心知识,从0到1搭建AI绘画框架,从0到1使用AI绘画框架的保姆级教程,深入浅出介绍AI绘画框架的各模块功能,深入浅出介绍AI绘画框架的高阶用法等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

AI绘画框架文章地址:https://zhuanlan.zhihu.com/p/673439761

12、GAN网络核心基础知识,网络架构,GAN经典变体模型,经典应用场景,GAN在AIGC时代的商业应用等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

GAN网络文章地址:https://zhuanlan.zhihu.com/p/663157306

13、其他

Rocky将YOLOv1-v7全系列大解析文章也制作成相应的pdf版本,大家可以关注公众号WeThinkIn,并在后台 【精华干货】菜单或者回复关键词“YOLO” 进行取用。

Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于算法,开发,竞赛,科研以及工作求职等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)

文章来源于互联网:AIGC时代算法工程师的面试秘籍(第二十七式2024.11.18-12.1) |【三年面试五年模拟】

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » AIGC时代算法工程师的面试秘籍(第二十七式2024.11.18-12.1) |【三年面试五年模拟】

AIGC时代算法工程师的面试秘籍(第三十五式2025.4.21-2025.5.4) |【三年面试五年模拟】

写在前面

【三年面试五年模拟】旨在挖掘&沉淀AIGC算法工程师在实习/校招/社招时所需的干货知识点与面试方法,力求让读者在获得心仪offer的同时,持续增强技术基本面。

欢迎大家关注Rocky的公众号:WeThinkIn
欢迎大家关注Rocky的知乎:Rocky Ding
AIGC算法工程师面试面经秘籍分享:WeThinkIn/Interview-for-Algorithm-Engineer欢迎大家Star~
获取更多AI行业的前沿资讯与干货资源

Rocky最新撰写10万字Stable Diffusion 3和FLUX.1系列模型的深入浅出全维度解析文章: https://zhuanlan.zhihu.com/p/684068402

AIGC算法岗/开发岗面试面经交流社群(涵盖AI绘画、AI视频、大模型、AI多模态、数字人等AIGC面试干货资源)欢迎大家加入:https://t.zsxq.com/33pJ0

文末更多干货技术福利与资源,欢迎大家查阅。


大家好,我是Rocky。

又到了定期学习《三年面试五年模拟》文章的时候了!本周期我们持续更新了丰富的AIGC面试高频问答,依旧干货满满!诚意满满!

Rocky创办的《三年面试五年模拟》项目在持续帮助很多读者获得了心仪的AIGC科技公司和互联网大厂的算法岗offer,收到了大家非常多的好评,Rocky觉得很开心也很有意义!

现在时间来到2025年,随着DeepSeek的横空出世,AIGC时代的科技浪潮破纪录达到了新高峰,AI行业对AIGC技术人才的需求也日益旺盛

**为了帮助大家在2025年的实习、秋招、春招以及社招求职时更加从容和有所依靠,Rocky将《三年面试五年模拟》项目进行重大战略架构升级,并承诺《三年面试五年模拟》项目将陪伴大家和码二代们的整个职业生涯,为大家在AI行业中的求职招聘保驾护航!**详细内容大家可以阅读:

2025年,AIGC算法岗面试必备干货资源发布!

Rocky已经将《三年面试五年模拟》项目的完整版构建在Github上:https://github.com/WeThinkIn/Interview-for-Algorithm-Engineer/tree/main,本周期更新的AIGC面试高频问答已经全部同步更新到项目中了,欢迎大家star!

本文是《三年面试五年模拟》项目的第三十五式,考虑到易读性与文章篇幅,Rocky本次只从Github完整版项目中摘选了2025年4月21号-2025年5月4号更新的部分高频&干货面试知识点,并配以相应的参考答案(精简版),供大家学习探讨。点赞本文,并star咱们的Github项目,你就收获了半个offer!再转发本文,你就收获了0.75个offer!

So,enjoy:

正文开始

目录先行

AI行业招聘信息汇总

  1. 本期共有4大公司新展开AIGC/传统深度学习/自动驾驶算法岗位招聘!

AI绘画基础:

  1. 为什么VAE生成效果不好,但是VAE+Diffusion整体效果就很好?

  2. GAN和Stable Diffusion有哪些差异?

AI视频基础:

  1. 什么是首尾帧生成视频大模型?

  2. 万相首尾帧模型(Wan2.1-FLF2V-14B)架构是什么样的?

深度学习基础:

  1. AIGC时代主流的深度学习框架有哪些?各自有什么特点?

  2. Caffe的depthwise为什么慢,该如何优化?Caffe新加一层需要哪些操作?

机器学习基础:

  1. 在机器学习中降维的方法都有哪些?

  2. 介绍一下机器学习中的朴素贝叶斯算法

Python编程基础:

  1. Python中tuple、list和dict有什么区别?

  2. Python中使用迭代器遍历和非迭代器遍历有什么区别?

模型部署基础:

  1. MACE框架和NCNN框架之间有什么区别?MACE和NCNN各自的加速原理是什么样的?

计算机基础:

  1. 介绍一下计算机中DOS攻击的概念

AI行业招聘信息汇总

  1. 滴滴2025春招开启:https://talent.didiglobal.com/
  2. 神州数码25届春招开启:https://digitalchina.com/aboutus/news/details623.html
  3. ITC 2025届春季校园招聘开启:https://hr.itc.vip/job/school.html
  4. 东方财富26届暑期实习开启:https://zhaopin.eastmoney.com/campus-recruitment/eastmoney/57971/#/

更多AIGC算法岗/开发岗面试干货资源,欢迎加入AIGC算法岗/开发岗求职社群(知识星球):https://t.zsxq.com/33pJ0

AI绘画基础

【一】为什么VAE生成效果不好,但是VAE+Diffusion整体效果就很好?

这个问题最本质的回答是:传统深度学习时代的VAE是单独作为生成模型;而在AIGC时代,VAE只是作为特征编码器,提供特征给Diffusion用于图像的生成。其实两者的本质作用已经发生改变。

同时传统深度学习时代的VAE的重构损失只使用了平方误差,而Stable Diffusion中的VAE使用了平方误差 + Perceptual损失 + 对抗损失。在正则项方面,传统深度学习时代的VAE使用了完整的KL散度项,而Stable Diffusion中的VAE使用了弱化的KL散度项。同时传统深度学习时代的VAE将图像压缩成单个向量,而Stable Diffusion中的VAE则将图像压缩成一个

N

×

M

Ntimes M

N×M 的特征矩阵。

上述的差别都导致了传统深度学习时代的VAE生成效果不佳。

【二】GAN和Stable Diffusion有哪些差异?

GAN(生成对抗网络)和Stable Diffusion(稳定扩散模型)都是AIGC、传统深度学习、自动驾驶领域的核心模型之一,其核心差异体现在模型架构、训练机制、生成质量及应用场景等方面。以下是Rocky总结的详细对比:

1. 核心机制差异

维度 GAN Stable Diffusion
生成原理 基于对抗训练:生成器(G)与判别器(D)通过博弈优化生成结果。 基于扩散过程:通过逐步去噪(从高斯噪声到目标图像)生成数据,结合潜在空间压缩技术。
训练稳定性 训练不稳定,易出现模式崩溃(生成单一结果)和梯度消失问题。 训练更稳定,优化目标为最小化噪声预测误差,收敛性较好。
生成步骤 单步生成(直接输出图像)。 多步迭代(通常20-50步),逐步修正噪声生成图像。

2. 生成质量与多样性

  • GAN的局限性

    • 多样性不足:易受训练数据分布限制,生成结果可能重复或缺乏创新(如StyleGAN生成人脸时细节固定)。
    • 高分辨率挑战:生成大尺寸图像需复杂架构(如ProGAN逐层训练),资源消耗大。
    • 可控性依赖潜在空间:通过调整潜在向量(如StyleGAN的W空间)控制生成,但语义编辑灵活性较低。
  • Stable Diffusion的优势

    • 高保真与多样性:扩散过程允许生成更复杂、多样的图像(如复杂场景融合)。
    • 文本条件生成:通过CLIP等模型将文本嵌入扩散过程,实现精准的文本到图像控制(如生成“戴墨镜的柯基”)。
    • 分辨率扩展性:利用潜在空间(如64×64压缩)降低计算量,结合超分模型生成4K图像。

3. 架构与资源需求

类别 GAN Stable Diffusion
核心组件 生成器(卷积网络)+ 判别器(分类网络)。 VAE编码器(压缩图像到潜在空间)+ U-Net(噪声预测)+ CLIP(文本条件嵌入)。
计算资源 推理速度快(单步生成),但训练需平衡G/D网络,调参复杂。 训练资源高(需多步反向传播),但推理可通过蒸馏技术加速(如Consistency Models)。
显存占用 低(如StyleGAN-T生成512×512图像仅需0.1秒)。 较高(默认模型需4GB显存生成512×512图像)。

4. 应用场景对比

  • GAN的适用场景

    • 快速生成:实时应用(如游戏角色生成、滤镜效果)。
    • 小数据集优化:在有限数据下(如医学图像)表现优于扩散模型。
    • 特定领域:人脸生成(StyleGAN)、图像风格迁移(CycleGAN)。
  • Stable Diffusion的适用场景

    • 复杂条件生成:文本到图像(DALL·E 3)、图像修复(Inpainting)。
    • 高质量艺术创作:支持LoRA、ControlNet插件,细化控制构图与风格。
    • 数据增强:生成合成数据集提升下游任务性能(如《Stable Diffusion for Data Augmentation》)。

AI视频基础

【一】什么是首尾帧生成视频大模型?

首帧和尾帧生成视频大模型(First-Last Frame to Video, FLF2V)是AI视频领域的核心技术之一,其核心目标是通过用户提供的起始帧和结束帧图像,自动生成中间过渡视频内容。这类AI视频大模型在影视制作、广告创意、游戏开发等领域具有广泛应用价值。

一、技术原理

  1. 条件控制与时空建模

    • 首尾帧语义对齐:通过CLIP等视觉-语言模型提取首帧和尾帧的语义特征,利用交叉注意力机制(Cross-Attention)将特征注入扩散模型的生成过程,确保画面内容与输入图像的一致性。例如,阿里Wan2.1-FLF2V-14B通过首尾帧的CLIP特征引导生成中间帧,实现98%的画面匹配度。
    • 运动轨迹预测:模型学习首尾帧之间的潜在运动规律,例如物体形变、镜头推拉等。采用时序扩散模型(Temporal Diffusion Model)结合运动轨迹预测的双支路架构,优化帧间连贯性,如Vidu Q1的“电影级运镜”功能。
  2. 高效压缩与潜在空间生成

    • 3D因果变分自编码器(3D Causal VAE):如阿里Wan-VAE将1080P视频压缩至1/128尺寸,保留动态细节(如毛发颤动、水波纹理),降低显存占用。
    • 扩散变换器(Diffusion Transformer, DiT):结合全注意力机制(Full Attention)和Flow Matching训练策略,生成高分辨率视频。例如,Wan2.1的DiT模块支持720P输出,并引入零初始化残差连接,避免干扰原始图像生成能力。
  3. 多模态条件融合

    • 支持文本、音频等多模态输入,通过T5文本编码器或音频特征提取模块,增强生成内容的可控性。例如,Wan2.1可动态嵌入中英文字幕,Vidu Q1支持AI音效生成。

二、模型架构

  1. 核心组件

    • 编码器:负责将输入图像压缩至低维潜在空间。例如,Ruyi的Casual VAE模块将时空分辨率分别压缩至1/4和1/8,采用BF16精度表示。
    • 扩散生成模块:基于DiT架构,处理潜在空间序列。阿里Wan2.1的DiT结合3D RoPE位置编码,捕捉时空依赖;图森未来Ruyi的Diffusion Transformer通过运动幅度控制参数调节生成强度。
    • 条件控制分支:专门处理首尾帧输入,如Wan2.1的FLF2V模块将首尾帧与噪声拼接,作为模型输入,并通过掩码机制分离控制信号与生成内容。
  2. 参数规模与训练策略

    • 大参数量模型(如Wan2.1-FLF2V-14B)通过三阶段训练(低分辨率预训练→高分辨率微调→细节优化)提升性能;轻量级模型(如Ruyi-Mini-7B)采用混合并行策略适配消费级显卡。
    • 训练数据:通常使用数百万至数亿视频片段,覆盖多场景、多风格。例如,Ruyi使用200M视频片段训练,Wan2.1结合WebVid-10M等数据集。

三、生成流程

  1. 输入处理

    • 图像预处理:将首尾帧标准化为统一分辨率(如720P),分割为视频序列的首帧和尾帧,并通过插值或循环叠加扩展时长(如Ruyi支持最长5秒/120帧)。
    • 语义特征提取:利用CLIP或ResNet提取图像特征,作为条件输入扩散模型。
  2. 潜在空间生成

    • 噪声注入与去噪:在扩散过程中,模型逐步去除潜在空间中的噪声,同时结合首尾帧特征生成连贯帧序列。例如,Wan2.1通过50步迭代优化细节。
    • 多帧并行生成:所有帧的潜在张量同时初始化,通过自注意力机制保证帧间一致性,避免闪烁问题。
  3. 解码与后处理

    • 潜在空间解码:利用VAE解码器将潜在序列转换为像素空间视频帧。
    • 超分辨率与插值:使用FILM算法或超分模型提升画质,如Vidu Q1支持1080P直出。

四、代表模型对比

模型 参数量 分辨率支持 核心特性 开源情况
Wan2.1-FLF2V-14B 14B 720P 首尾帧精准控制、中英文字幕生成 开源(GitHub)
Ruyi-Mini-7B 7.1B 1024×1024 多分辨率适配、运动幅度控制 开源(Hugging Face)
Vidu Q1 未公开 1080P 动漫风格优化、AI音效生成 商业API

【二】万相首尾帧模型(Wan2.1-FLF2V-14B)架构是什么样的?

万相首尾帧大模型是一个百亿参数规模(14B)的首尾帧生视频大模型,其核心架构设计旨在实现高可控性、高质量的视频生成。

1. 核心架构:Diffusion in Time(DiT)

  • 基础框架:基于扩散模型(Diffusion Model)与Transformer的融合架构,专为AI视频生成设计。DiT通过Full Attention机制捕捉视频的长时程时空依赖关系,确保生成视频在时间(帧间连贯性)和空间(画面细节一致性)上的高度统一。

2. 视频压缩VAE(变分自编码器)

  • 功能:将输入视频压缩至低维潜在空间,减少计算复杂度。支持720p高清视频的无损压缩,压缩比达256倍。
  • 创新设计

    • 因果性约束:在编码和解码过程中引入时间维度的因果性约束,防止信息泄漏,确保首尾帧与中间帧的逻辑连贯性。

3. 条件控制机制

  • 首尾帧输入处理:用户提供的首帧和尾帧图像与若干零填充中间帧拼接,形成控制视频序列。该序列与噪声及掩码(Mask)拼接后,作为DiT的输入。
  • 指令遵循:通过文本提示词(如“镜头移动”“特效变化”)控制生成内容,模型结合CLIP语义特征与交叉注意力机制动态调整生成细节。

4. 交叉注意力机制(Cross-Attention)

  • 功能:将首尾帧的语义特征(通过CLIP编码器提取)注入DiT生成过程,强化条件控制。
  • 实现方式

    • 首尾帧的CLIP特征与扩散模型的潜在特征进行注意力交互。

深度学习基础

【一】AIGC时代主流的深度学习框架有哪些?各自有什么特点?

主流深度学习框架的特点及行业应用分析

1. TensorFlow

特点

  • 灵活性与工业部署:支持静态图与动态图混合编程(Eager Execution),提供SavedModel格式实现跨平台部署(移动端、嵌入式设备)。
  • 生态系统完善:集成TensorBoard可视化工具、TFX流水线工具,支持分布式训练和TPU加速。
  • 多语言支持:核心为C++,上层API支持Python、Java等,适合大规模生产环境。

实际案例

  • 医疗影像分类:使用预训练的ResNet模型(TensorFlow Hub),在肺部CT图像中快速实现肺癌检测,准确率提升15%。

领域应用

  • AIGC:Stable Diffusion的底层优化中,利用TensorFlow Lite将模型压缩至移动端,实时生成高清图像。
  • 传统深度学习:ImageNet图像分类任务中,通过Keras API快速构建InceptionV3模型。
  • 自动驾驶:Waymo使用TensorFlow部署多传感器融合模型,实时处理激光雷达与摄像头数据。
2. PyTorch

特点

  • 动态计算图:支持即时调试,适合研究场景;Autograd机制简化反向传播实现。
  • 社区与科研支持:学术界主流框架,提供TorchScript实现模型序列化,兼容ONNX格式。
  • GPU加速优化:原生支持CUDA,混合精度训练效率提升30%。

实际案例

  • 自然语言处理:基于Transformer架构(Hugging Face库),训练GPT-3模型实现文本生成,参数量达1750亿。

领域应用

  • AIGC:Meta的Make-A-Video工具使用PyTorch动态图特性,实现文本到视频的跨模态生成。
  • 传统深度学习:Fast.ai库简化图像分类任务,5行代码完成CIFAR-10数据集训练。
  • 自动驾驶:特斯拉Autopilot采用PyTorch构建BEV(鸟瞰图)感知模型,优化多目标跟踪算法。
3. Keras

特点

  • 高层抽象与易用性:提供模块化API(如SequentialFunctional),10分钟内可搭建完整神经网络。
  • 多后端支持:兼容TensorFlow、Theano等,适合快速原型开发。
  • 性能局限:过度封装导致灵活性不足,大规模训练速度较慢。

实际案例

  • 手写数字识别:通过MNIST数据集训练LeNet-5模型,代码量仅20行,准确率达99%。

领域应用

  • AIGC:快速试验生成对抗网络(GAN)结构,如DCGAN生成动漫头像。
  • 传统深度学习:教育领域用于教学演示,如LSTM时间序列预测。
  • 自动驾驶:小规模车载系统(如停车标志检测)的轻量级模型部署。
4. Caffe/Caffe2

特点

  • 高效与模块化:专精计算机视觉,模型Zoo提供预训练权重(如AlexNet、VGG)。
  • 工业级优化:支持单GPU每日处理6000万张图像,延迟低至1ms/帧。
  • 扩展性差:新增网络层需手动实现C++/CUDA代码,对RNN支持薄弱。

实际案例

  • 图像分类:2014年ImageNet冠军模型GoogLeNet基于Caffe实现。

领域应用

  • AIGC:较少使用,但在早期风格迁移(如Neural Style)中有应用。
  • 传统深度学习:工业质检中快速部署ResNet进行缺陷检测。
  • 自动驾驶:Mobileye使用Caffe2优化车载视觉模型,实现实时车道线识别。
5. MXNet

特点

  • 分布式性能:支持多GPU/多节点训练,内存占用优化(较TensorFlow减少20%)。
  • 多语言接口:兼容Python、Scala、Julia,适合云平台(如AWS)。
  • 文档不足:社区活跃度低,新手学习成本高。

实际案例

  • 推荐系统:亚马逊使用MXNet构建深度因子分解机(DeepFM),提升广告点击率预测精度。

领域应用

  • AIGC:结合Apache TVM编译器,优化Stable Diffusion推理速度。
  • 传统深度学习:大规模NLP任务(如BERT预训练)的分布式加速。
  • 自动驾驶百度Apollo早期版本采用MXNet处理高精地图生成。
6. 其他框架
  • PaddlePaddle:百度开发的国产框架,侧重工业落地,支持模型压缩(如PaddleSlim)。
  • JAX:谷歌科研框架,基于自动微分和XLA编译器,适合高性能计算(如AlphaFold)。

总结:框架选择建议

  • 科研与快速迭代:优先选择PyTorch(动态图+社区资源)。
  • 工业部署与跨平台:TensorFlow(生态系统+生产工具链)。
  • 轻量级原型开发:Keras(易用性+快速验证)。
  • 计算机视觉专项:Caffe/Caffe2(性能优化+预训练模型)。

通过结合具体场景需求与框架特性,我们可最大化AIGC技术方案的部署效率与推理效果。

【二】Caffe的depthwise为什么慢,该如何优化?Caffe新加一层需要哪些操作?

一、Depthwise卷积速度瓶颈原因

  1. 内存访问模式低效
    Caffe默认采用NCHW数据布局,Depthwise卷积的逐通道计算导致内存访问跳跃性高,无法充分利用缓存局部性。例如,输入尺寸为[N, C, H, W]时,每个通道独立处理,导致相邻内存地址的数据无法批量加载。

  2. 缺乏专用算法优化

    • 标准卷积通常使用im2col + GEMM优化,但Depthwise的通道间无交互,GEMM效率低下。
    • 未应用Winograd算法(可减少乘加运算量),导致计算密度不足。
  3. 并行化不足
    Caffe的OpenMP线程调度在逐通道处理时粒度较粗,无法有效利用多核CPU。例如,当通道数C=32时,可能仅分配4线程,导致负载不均。

  4. 指令集未充分使用
    未针对ARM NEON或Intel AVX2进行汇编级优化,例如未展开循环或使用SIMD向量化指令。

案例验证
在MobileNetV1的Depthwise卷积层(3×3 kernel,输入尺寸112x112x32)中,Caffe原始实现耗时15ms,而TensorFlow Lite优化后仅需3ms。

二、Depthwise卷积加速方案

  1. 算法级优化

    • Winograd变换:将3×3卷积转换为4×4矩阵运算,减少60%乘法操作。

      F

      (

      4

      ,

      3

      )

       Winograd

      :

      需要

      16

      次乘法(原需

      3

      x

      3

      =

      9

      /

      点,总

      16

      x

      9

      =

      144

      16

      x

      16

      =

      256

      F(4,3) text{ Winograd}: 需要16次乘法(原需3×3=9次/点,总16×9=144 → 16×16=256)

      F(4,3) Winograd:需要16次乘法(原需3x3=9/点,总16x9=14416x16=256

    • 直接卷积优化:避免im2col,通过滑动窗口直接计算,减少内存占用。

  2. 数据布局调整
    将NCHW转为NHWC,提升内存连续性。例如,输入[N, H, W, C]更适应Depthwise的逐通道处理模式。

  3. 指令集加速

    • ARM NEON:使用SIMD指令并行处理4个通道(float32x4_t)。
    • CPU多线程:细粒度划分任务,如按行或通道块分配线程。
  4. 集成加速库
    调用Intel MKL-DNNNVIDIA CuDNN的Depthwise专用API(如CuDNN的cudnnDepthwiseConvolutionForward)。

优化效果
经上述优化后,同一MobileNetV1层的推理时间从15ms降至2.5ms,提升6倍。

三、Caffe添加新层操作步骤

  1. 定义层参数(Proto)
    caffe.proto中新增层的参数消息,例如添加MyLayerParameter

    message LayerParameter {
      optional MyLayerParameter my_layer_param = 12345;
    }
    message MyLayerParameter {
      optional float scale = 1 [default = 1.0];
    }
    
  2. 实现层类(C++)

    • 头文件my_layer.hpp:继承Layer类,声明Forward/Backward函数。
    • 源文件my_layer.cpp:实现CPU/GPU逻辑,例如:
      template typename Dtype>
      void MyLayerDtype>::Forward_cpu(const vectorBlobDtype>*>& bottom, 
          const vectorBlobDtype>*>& top) {
        const Dtype* input = bottom[0]->cpu_data();
        Dtype* output = top[0]->mutable_cpu_data();
        caffe_cpu_scale(count, scale_, input, output);
      }
      
  3. 注册层工厂
    layer_factory.cpp中添加注册宏:

    INSTANTIATE_CLASS(MyLayer);
    REGISTER_LAYER_CLASS(My);
    
  4. 编译与测试

    • 修改MakefileCMakeLists.txt,包含新层源码。
    • 编写测试用例,验证数值正确性(如梯度检查)。

案例:添加ScaleLayer实现通道加权,用于风格迁移模型的细节增强。

四、三大领域应用

  1. AIGC(生成式AI)

    • 应用场景:移动端实时风格迁移
    • 技术实现
      优化Depthwise卷积加速轻量级GAN模型(如MobileStyleGAN),在Snapchat等App中实现60FPS滤镜生成。
  2. 传统深度学习

    • 应用场景:工业质检
    • 技术实现
      在Caffe中新增DefectDetectLayer,融合Depthwise优化后的MobileNetV2,实现芯片缺陷检测(吞吐量提升3倍)。
  3. 自动驾驶

    • 应用场景:车载实时语义分割
    • 技术实现
      使用优化后的Depthwise卷积构建轻量级DeepLabV3+,在NVIDIA Jetson平台达到30FPS,添加BilinearUpsampleLayer提升边缘精度。

机器学习基础

【一】在机器学习中降维的方法都有哪些?

机器学习中的降维方法详解

一、常见降维方法分类

降维的核心目标是减少数据特征数量,同时保留关键信息。以下是主要方法及其特点:

方法类型 代表算法 核心思想 适用场景
线性降维 PCA(主成分分析) 通过正交变换将数据投影到方差最大的低维空间 无标签数据,通用特征压缩
LDA(线性判别分析) 最大化类别间差异,最小化类别内差异 有标签数据,分类任务优化
非线性降维 t-SNE(t分布邻域嵌入) 保持高维数据局部结构,适合可视化 高维数据可视化(如文本、图像)
UMAP(均匀流形逼近与投影) 保留全局和局部结构,计算效率优于t-SNE 大规模数据可视化与聚类
基于流形学习 Isomap、LLE(局部线性嵌入) 假设数据位于低维流形,通过邻域关系重建距离或权重 非线性结构数据(如人脸、基因)
深度学习 自编码器(Autoencoder) 通过编码器压缩数据,解码器重建,学习低维表示 特征提取、去噪、生成模型
变分自编码器(VAE) 结合概率生成模型,学习潜在空间分布 生成任务(如AIGC)
随机方法 随机投影(Random Projection) 使用随机矩阵近似保留数据距离,计算高效 高维数据快速降维
二、通俗易懂的案例:电商用户行为分析

场景:某电商平台收集了用户的10个维度的数据(年龄、性别、购买频率、浏览时长、点击商品数、购物车添加次数等),需对用户分群以制定营销策略。

问题:直接使用10维数据进行聚类会导致“维度灾难”,计算复杂且难以可视化。

解决方案

  1. 使用PCA进行无监督降维

    • 通过PCA提取前2个主成分,保留85%的方差。
    • 将数据投影到2维平面,发现用户分为3个群体:
      • 高频高价值用户(高购买频率、长浏览时间),
      • 低频浏览用户(高点击次数但低购买),
      • 潜在流失用户(近期无活动)。
  2. 使用t-SNE可视化

    • 若PCA分群不清晰,可用t-SNE进一步降维,保留局部结构,直观展示用户分布。

结果:运营团队针对不同群体推出定向优惠(如向流失用户发送折扣券),提升转化率15%。

三、三大领域中的应用
1. AIGC(生成式AI)
  • 应用场景:生成高质量图像或文本。

    • 方法:变分自编码器(VAE)学习低维潜在空间,控制生成内容。例如,Stable Diffusion通过潜在空间编码文本提示,生成符合语义的图像。
    • 案例:在文本生成中,VAE将输入文本压缩为低维向量,解码时结合注意力机制生成连贯段落。
2. 传统深度学习
  • 应用场景:图像分类与特征提取。

    • 方法:自编码器用于去噪或特征压缩。例如,在MNIST手写数字识别中,自编码器将28×28图像压缩为10维向量,再通过全连接网络分类。
    • 案例:医学影像分析中,PCA预处理MRI数据,减少噪声并加速模型训练。
3. 自动驾驶
  • 应用场景:实时处理传感器数据。

    • 方法:PCA或随机投影处理激光雷达点云数据。例如,Velodyne雷达每秒生成百万级点云,降维后保留关键障碍物轮廓,提升实时检测速度。
    • 案例:在目标跟踪中,t-SNE可视化多目标轨迹,辅助算法优化路径预测。

【二】介绍一下机器学习中的朴素贝叶斯算法

一、算法原理与公式推导

朴素贝叶斯是一种基于贝叶斯定理的分类算法,其核心思想是假设特征之间相互独立(“朴素”假设),从而简化概率计算。以下是公式推导与关键步骤:

1. 贝叶斯定理

贝叶斯定理描述了如何通过已知条件概率计算后验概率:

P

(

C

i

X

)

=

P

(

X

C

i

)

P

(

C

i

)

P

(

X

)

P(C_i | X) = frac{P(X | C_i) cdot P(C_i)}{P(X)}

P(CiX)=P(X)P(XCi)P(Ci)

  • P

    (

    C

    i

    )

    P(C_i)

    P(Ci) :类别

    C

    i

    C_i

    Ci 的先验概率。

  • P

    (

    X

    C

    i

    )

    P(X | C_i)

    P(XCi) :在类别

    C

    i

    C_i

    Ci 下,特征

    X

    X

    X 的条件概率。

  • P

    (

    C

    i

    X

    )

    P(C_i | X)

    P(CiX) :后验概率,即在特征

    X

    X

    X 下样本属于

    C

    i

    C_i

    Ci 的概率。

  • P

    (

    X

    )

    P(X)

    P(X) :证据因子,对所有类别相同,可忽略比较。

2. 朴素假设

假设特征

X

=

(

X

1

,

X

2

,

.

.

.

,

X

n

)

X = (X_1, X_2, …, X_n)

X=(X1,X2,,Xn) 相互独立,则联合条件概率可分解为:

P

(

X

C

i

)

=

j

=

1

n

P

(

X

j

C

i

)

P(X | C_i) = prod_{j=1}^n P(X_j | C_i)

P(XCi)=j=1nP(XjCi)

3. 分类决策规则

选择使后验概率最大的类别:

C

p

r

e

d

=

arg

max

C

i

P

(

C

i

)

j

=

1

n

P

(

X

j

C

i

)

C_{pred} = argmax_{C_i} P(C_i) prod_{j=1}^n P(X_j | C_i)

Cpred=argCimaxP(Ci)j=1nP(XjCi)

4. 概率估计方法
  • 离散特征:通过频率统计。

    P

    (

    X

    j

    =

    x

    j

    C

    i

    )

    =

    类别 

    C

    i

     中特征 

    X

    j

    =

    x

    j

     的样本数

    类别 

    C

    i

     的总样本数

    P(X_j = x_j | C_i) = frac{text{类别 } C_i text{ 中特征 } X_j = x_j text{ 的样本数}}{text{类别 } C_i text{ 的总样本数}}

    P(Xj=xjCi)=类别 Ci 的总样本数类别 Ci 中特征 Xj=xj 的样本数

  • 连续特征:假设服从高斯分布,用均值和方差估计概率密度。

    P

    (

    X

    j

    =

    x

    j

    C

    i

    )

    =

    1

    2

    π

    σ

    i

    ,

    j

    2

    exp

    (

    (

    x

    j

    μ

    i

    ,

    j

    )

    2

    2

    σ

    i

    ,

    j

    2

    )

    P(X_j = x_j | C_i) = frac{1}{sqrt{2pisigma_{i,j}^2}} expleft(-frac{(x_j – mu_{i,j})^2}{2sigma_{i,j}^2}right)

    P(Xj=xjCi)=2πσi,j2
    1
    exp(2σi,j2(xjμi,j)2)

5. 平滑技术(解决零概率问题)

使用拉普拉斯平滑(Laplace Smoothing)避免未出现特征导致概率为零:

P

(

X

j

=

x

j

C

i

)

=

计数

+

α

总样本数

+

α

N

P(X_j = x_j | C_i) = frac{text{计数} + alpha}{text{总样本数} + alpha cdot N}

P(Xj=xjCi)=总样本数+αN计数+α

  • α

    alpha

    α :平滑参数(通常取1)。

  • N

    N

    N :特征

    X

    j

    X_j

    Xj 的可能取值数。

6. 对数概率(解决数值下溢)

将连乘转换为求和,避免小数相乘导致下溢:

log

P

(

C

i

X

)

log

P

(

C

i

)

+

j

=

1

n

log

P

(

X

j

C

i

)

log P(C_i | X) propto log P(C_i) + sum_{j=1}^n log P(X_j | C_i)

logP(CiX)logP(Ci)+j=1nlogP(XjCi)

二、通俗易懂的案例:垃圾邮件分类

假设训练数据包含以下邮件,判断新邮件是否为垃圾邮件。

训练数据
邮件内容 类别
“免费领取奖品” 垃圾邮件
“赢取现金大奖” 垃圾邮件
“明天开会讨论项目” 正常邮件
“查看项目文档” 正常邮件
1. 特征提取

选择关键词:“免费”和“赢取”作为特征。

邮件内容 包含“免费” 包含“赢取” 类别
“免费领取奖品” 是(1) 否(0) 垃圾邮件
“赢取现金大奖” 否(0) 是(1) 垃圾邮件
“明天开会讨论项目” 否(0) 否(0) 正常邮件
“查看项目文档” 否(0) 否(0) 正常邮件
2. 计算概率
  • 先验概率

    P

    (

    垃圾邮件

    )

    =

    2

    4

    =

    0.5

    ,

    P

    (

    正常邮件

    )

    =

    2

    4

    =

    0.5

    P(text{垃圾邮件}) = frac{2}{4} = 0.5, quad P(text{正常邮件}) = frac{2}{4} = 0.5

    P(垃圾邮件)=42=0.5,P(正常邮件)=42=0.5

  • 条件概率(使用拉普拉斯平滑,

    α

    =

    1

    alpha = 1

    α=1 ):

    • 垃圾邮件

      P

      (

      免费

      =

      1

      垃圾

      )

      =

      1

      +

      1

      2

      +

      2

      =

      0.5

      P(text{免费}=1 | text{垃圾}) = frac{1 + 1}{2 + 2} = 0.5

      P(免费=1∣垃圾)=2+21+1=0.5

      P

      (

      赢取

      =

      1

      垃圾

      )

      =

      1

      +

      1

      2

      +

      2

      =

      0.5

      P(text{赢取}=1 | text{垃圾}) = frac{1 + 1}{2 + 2} = 0.5

      P(赢取=1∣垃圾)=2+21+1=0.5

    • 正常邮件

      P

      (

      免费

      =

      1

      正常

      )

      =

      0

      +

      1

      2

      +

      2

      =

      0.25

      P(text{免费}=1 | text{正常}) = frac{0 + 1}{2 + 2} = 0.25

      P(免费=1∣正常)=2+20+1=0.25

      P

      (

      赢取

      =

      1

      正常

      )

      =

      0

      +

      1

      2

      +

      2

      =

      0.25

      P(text{赢取}=1 | text{正常}) = frac{0 + 1}{2 + 2} = 0.25

      P(赢取=1∣正常)=2+20+1=0.25

3. 预测新邮件

新邮件内容:“免费赢取现金”,包含“免费”和“赢取”。

  • 计算后验概率

    • 垃圾邮件

      log

      P

      (

      垃圾

      X

      )

      =

      log

      0.5

      +

      log

      0.5

      +

      log

      0.5

      =

      1.732

      log P(text{垃圾} | X) = log 0.5 + log 0.5 + log 0.5 = -1.732

      logP(垃圾X)=log0.5+log0.5+log0.5=1.732

    • 正常邮件

      log

      P

      (

      正常

      X

      )

      =

      log

      0.5

      +

      log

      0.25

      +

      log

      0.25

      =

      2.773

      log P(text{正常} | X) = log 0.5 + log 0.25 + log 0.25 = -2.773

      logP(正常X)=log0.5+log0.25+log0.25=2.773

  • 结果:选择后验概率更大的类别,即垃圾邮件

三、实际应用场景
1. 文本分类(如AIGC)
  • 应用:自动生成文本的类别标注(如新闻分类、情感分析)。
  • 实现:将文本分词后统计词频,通过朴素贝叶斯判断所属类别。
2. 传统深度学习
  • 应用:作为基线模型验证特征有效性。
  • 实现:与TF-IDF结合,用于垃圾邮件过滤或用户评论分类。
3. 自动驾驶
  • 应用:传感器数据分类(如障碍物识别)。
  • 实现:将激光雷达点云或摄像头图像提取特征后,分类为“车辆”“行人”等。

Python编程基础

【一】Python中tuple、list和dict有什么区别?

一、核心概念与区别对比

维度 Tuple(元组) List(列表) Dict(字典)
可变性 不可变(创建后不能增删改元素) 可变(可动态增删改元素) 可变(可动态增删改键值对)
语法 使用圆括号 (1, 2, 3) 使用方括号 [1, 2, 3] 使用花括号 {"key": value}
内存效率 高(固定内存分配) 低(动态内存分配) 低(哈希表存储,需额外内存维护键)
查找速度 索引访问(O(1)) 索引访问(O(1)) 键查找(O(1))
典型用途 存储常量数据(如配置参数) 存储动态序列(如数据流) 存储键值映射(如特征字典)
元素类型 可包含任意类型 可包含任意类型 键必须为不可变类型(如字符串、数字、元组)

二、通俗易懂的案例:学生管理系统

假设需要管理学生的基本信息、课程列表和各科成绩:

  • 学号:一旦分配不可更改 → 使用Tuple存储:student_id = (2023001, "张三")
  • 课程列表:可能动态增减(如新增选修课) → 使用List存储:courses = ["数学", "物理", "化学"]
  • 成绩记录:需通过科目名称快速查询分数 → 使用Dict存储:scores = {"数学": 90, "物理": 85}

三、性能与使用场景总结

数据结构 性能优势 典型场景
Tuple 内存占用低,访问速度快 常量配置、多返回值(如函数返回(loss, acc)
List 动态操作灵活 数据流处理、循环遍历(如训练数据批次)
Dict 键查找高效(O(1)) 特征工程、参数管理(如模型超参、环境状态)

【二】Python中使用迭代器遍历和非迭代器遍历有什么区别?

一、核心概念与区别

维度 迭代器遍历 非迭代器遍历
实现方式 通过__iter__()__next__()方法实现惰性计算 通过索引直接访问元素(如for i in range(len(list))
内存占用 低(按需生成元素,不一次性加载数据) 高(需预加载所有数据到内存)
适用场景 大数据流、实时处理、内存敏感场景 小规模数据集、需要随机访问元素
灵活性 支持无限序列(如斐波那契数列) 仅支持有限序列
性能 延迟计算,节省内存,但单次访问可能稍慢 快速随机访问,但内存占用高

二、关键代码对比

任务 迭代器实现 非迭代器实现
遍历列表 for item in iter_list: for i in range(len(list)): item = list[i]
自定义无限序列 生成器函数yield 无法实现(需预定义长度)
文件读取 逐行for line in file: 一次性lines = file.readlines()

模型部署基础

【一】MACE框架和NCNN框架之间有什么区别?MACE和NCNN各自的加速原理是什么样的?

一、核心差异总结

维度 MACE NCNN
设计目标 移动端异构计算(CPU/GPU/DSP协同) 移动端CPU高效推理(轻量级+极致优化)
硬件支持 高通/联发科/松果芯片的CPU/GPU/DSP 主攻ARM CPU,支持Vulkan GPU扩展
模型格式 支持Caffe/TensorFlow/ONNX转换 支持Caffe/PyTorch/ONNX转换(需PNNX工具链)
性能优化 Winograd卷积+NEON/OpenCL/HVX指令优化 汇编级NEON优化+内存复用+多线程并行
系统响应 自动拆分OpenCL任务保证UI流畅 无特殊设计,依赖开发者控制任务调度
模型保护 支持模型转C++代码+常量混淆 无内置加密功能
社区生态 小米主导,应用集中在手机端 开源社区活跃,腾讯系App广泛使用

二、加速原理对比

1. MACE的加速原理
  • 异构计算融合

    • CPU:ARM NEON指令加速卷积/池化,支持big.LITTLE调度优化能效。
    • GPU:通过OpenCL实现并行计算,针对Adreno/Mali GPU优化内核。
    • DSP:集成高通Hexagon HVX库,加速矩阵运算(如语音识别中的MFCC特征提取)。
  • 算法优化

    • Winograd卷积:减少乘法运算量,提升卷积速度30%以上。
    • 内存依赖分析:动态复用中间结果内存,降低峰值内存占用50%。
  • 系统级优化

    • 任务分片:将长时GPU计算拆分为子任务,避免阻塞UI渲染。

案例:在小米手机的人像模式中,MACE同时调用CPU(人脸检测)+ GPU(背景虚化渲染)+ DSP(景深计算),整体延迟降低40%。

2. NCNN的加速原理
  • 指令级优化

    • ARM NEON汇编:手动编写汇编代码优化卷积/全连接层,相比C++实现提速2-3倍。
    • 内存池技术:预分配内存并复用,减少动态内存分配开销。
  • 计算图优化

    • 算子融合:将Conv+BN+ReLU合并为单一算子,减少中间数据传递。
    • 量化支持:8-bit整数量化模型,体积缩小4倍,推理速度提升1.5倍。
  • 多线程并行

    • 分块计算:将大矩阵拆分为子块,利用多核CPU并行处理。

案例:在微信的视频通话背景虚化功能中,NCNN通过NEON优化实时处理1080P视频流,单帧处理时间从15ms降至6ms。

三、实际应用场景对比

1. AIGC领域
  • MACE应用

    • 移动端Stable Diffusion轻量化:将图像生成模型部署到手机端,利用DSP加速潜在空间解码,生成512×512图像仅需3秒。
  • NCNN应用

    • 实时AI滤镜:在天天P图中,通过量化后的StyleGAN模型实现实时风格迁移,支持10种滤镜并行计算。
2. 传统深度学习
  • MACE应用

    • 工业质检:在工厂边缘设备部署ResNet-18,通过Hexagon DSP加速缺陷检测,吞吐量达200帧/秒。
  • NCNN应用

    • 移动端OCR:在QQ扫描功能中,使用CRNN+CTC模型识别文字,NEON优化使识别速度提升至30ms/行。
3. 自动驾驶
  • MACE应用

    • 多传感器融合:在车载平台中,CPU处理激光雷达点云,GPU渲染BEV地图,延迟控制在50ms内。
  • NCNN应用

    • 车载障碍物检测:通过YOLOv9模型+Vulkan加速,在车机端实现60FPS的实时检测。

四、选择建议

  • 选MACE:需跨CPU/GPU/DSP协同、强调功耗控制(如手机端复杂AI任务)。
  • 选NCNN:追求极致CPU性能、快速部署轻量模型(如移动App嵌入式AI)。

通过框架特性与场景需求的精准匹配,可最大化AI算法在移动端的落地效率。

计算机基础

Rocky从工业界、学术界、竞赛界以及应用界角度出发,总结归纳AI行业所需的计算机基础干货知识。这些干货知识不仅能在面试中帮助我们,还能让我们在AI行业中提高工作效率

【一】介绍一下计算机中DOS攻击的概念

1. DOS攻击(拒绝服务攻击)基本概念

DOS(Denial of Service)攻击是一种通过耗尽目标系统的资源(如带宽、内存、CPU等)或利用系统漏洞,使其无法正常提供服务的网络攻击行为。攻击者通过发送大量无效或恶意请求,导致合法用户无法访问目标服务,从而实现“拒绝服务”的目的。

2. DOS与DDOS的区别

  • DOS:攻击源为单一主机或少量主机,攻击流量集中,容易被识别和阻断。
  • DDOS(分布式拒绝服务攻击):攻击源为分布在多个地理位置的僵尸网络(Botnet),攻击流量分散且规模更大,防御难度显著增加。

3. 攻击原理与常见类型

(1)资源耗尽型攻击
  • SYN洪水攻击(SYN Flood)

    • 原理:利用TCP三次握手的漏洞。攻击者发送大量伪造源IP的SYN请求,服务器响应后等待客户端的ACK确认包。由于攻击者不完成握手,服务器资源被未完成的半连接耗尽。
    • 影响:服务器无法处理新的合法连接。
  • UDP洪水攻击(UDP Flood)

    • 原理:向目标服务器发送大量UDP数据包,占用网络带宽或消耗服务器处理能力。
    • 典型工具:LOIC(Low Orbit Ion Cannon)。
  • HTTP洪水攻击(HTTP Flood)

    • 原理:模拟合法用户发送大量HTTP请求(如GET/POST),耗尽服务器资源。
    • 特点:请求内容可能合法,难以与正常流量区分。
(2)漏洞利用型攻击
  • Ping of Death

    • 原理:发送超大的ICMP数据包(超过IP协议规定的最大长度),导致目标系统崩溃或重启。
    • 现代防御:现代操作系统已修复此漏洞。
  • Slowloris攻击

    • 原理:通过缓慢发送不完整的HTTP请求头,保持与服务器的连接长时间开放,耗尽并发连接数。
    • 特点:攻击流量小但效率高。

4. 防御措施

(1)流量过滤与限速
  • 防火墙与IPS/IDS:识别异常流量并阻断恶意IP。
  • 速率限制(Rate Limiting):限制单个IP的请求频率。
(2)资源优化
  • 负载均衡:将流量分散到多台服务器,避免单点过载。
  • CDN(内容分发网络):缓存静态内容,分担源站压力。
(3)协议加固
  • SYN Cookie:防御SYN洪水攻击,无需在服务器保存半连接状态。
  • TCP/IP协议栈调优:调整半连接队列长度、超时时间等参数。
(4)云服务防护
  • 云清洗服务:由云服务商自动过滤恶意流量,仅转发合法请求。
  • 弹性带宽:动态扩展带宽以应对突发流量。

5. 总结

  • DOS攻击本质:通过资源耗尽或漏洞利用,使目标系统丧失服务能力。
  • 防御核心:结合流量分析、协议优化和分布式架构,提升系统抗压能力。
  • 技术趋势:随着AI和机器学习的发展,攻击检测与防御将更加智能化。

推荐阅读

1、加入AIGCmagic社区知识星球!

AIGCmagic社区知识星球不同于市面上其他的AI知识星球,AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台,涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100+应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等干货

那该如何加入星球呢?很简单,我们只需要扫下方的二维码即可。与此同时,我们也重磅推出了知识星球2025年惊喜价:原价199元,前200名限量立减50!特惠价仅149元!(每天仅4毛钱)

时长:一年(从我们加入的时刻算起)

2、Sora等AI视频大模型的核心原理,核心基础知识,网络结构,经典应用场景,从0到1搭建使用AI视频大模型,从0到1训练自己的AI视频大模型,AI视频大模型性能测评,AI视频领域未来发展等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Sora等AI视频大模型文章地址:https://zhuanlan.zhihu.com/p/706722494

3、Stable Diffusion 3和FLUX.1核心原理,核心基础知识,网络结构,从0到1搭建使用Stable Diffusion 3和FLUX.1进行AI绘画,从0到1上手使用Stable Diffusion 3和FLUX.1训练自己的AI绘画模型,Stable Diffusion 3和FLUX.1性能优化等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion 3和FLUX.1文章地址:https://zhuanlan.zhihu.com/p/684068402

4、Stable Diffusion XL核心基础知识,网络结构,从0到1搭建使用Stable Diffusion XL进行AI绘画,从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型,AI绘画领域的未来发展等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion XL文章地址:https://zhuanlan.zhihu.com/p/643420260

5、Stable Diffusion 1.x-2.x核心原理,核心基础知识,网络结构,经典应用场景,从0到1搭建使用Stable Diffusion进行AI绘画,从0到1上手使用Stable Diffusion训练自己的AI绘画模型,Stable Diffusion性能优化等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Stable Diffusion文章地址:https://zhuanlan.zhihu.com/p/632809634

6、ControlNet核心基础知识,核心网络结构,从0到1使用ControlNet进行AI绘画,从0到1训练自己的ControlNet模型,从0到1上手构建ControlNet商业变现应用等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

ControlNet文章地址:https://zhuanlan.zhihu.com/p/660924126

7、LoRA系列模型核心原理,核心基础知识,从0到1使用LoRA模型进行AI绘画,从0到1上手训练自己的LoRA模型,LoRA变体模型介绍,优质LoRA推荐等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

LoRA文章地址:https://zhuanlan.zhihu.com/p/639229126

8、Transformer核心基础知识,核心网络结构,AIGC时代的Transformer新内涵,各AI领域Transformer的应用落地,Transformer未来发展趋势等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

Transformer文章地址:https://zhuanlan.zhihu.com/p/709874399

9、最全面的AIGC面经《手把手教你成为AIGC算法工程师,斩获AIGC算法offer!(2024年版)》文章正式发布!

码字不易,欢迎大家多多点赞:

AIGC面经文章地址:https://zhuanlan.zhihu.com/p/651076114

10、50万字大汇总《“三年面试五年模拟”之算法工程师的求职面试“独孤九剑”秘籍》文章正式发布!

码字不易,欢迎大家多多点赞:

算法工程师三年面试五年模拟文章地址:https://zhuanlan.zhihu.com/p/545374303

《三年面试五年模拟》github项目地址(希望大家能多多star):https://github.com/WeThinkIn/Interview-for-Algorithm-Engineer

11、Stable Diffusion WebUI、ComfyUI、Fooocus三大主流AI绘画框架核心知识,从0到1搭建AI绘画框架,从0到1使用AI绘画框架的保姆级教程,深入浅出介绍AI绘画框架的各模块功能,深入浅出介绍AI绘画框架的高阶用法等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

AI绘画框架文章地址:https://zhuanlan.zhihu.com/p/673439761

12、GAN网络核心基础知识,网络架构,GAN经典变体模型,经典应用场景,GAN在AIGC时代的商业应用等全维度解析文章正式发布!

码字不易,欢迎大家多多点赞:

GAN网络文章地址:https://zhuanlan.zhihu.com/p/663157306

13、其他

Rocky将YOLOv1-v7全系列大解析文章也制作成相应的pdf版本,大家可以关注公众号WeThinkIn,并在后台 【精华干货】菜单或者回复关键词“YOLO” 进行取用。

Rocky一直在运营技术交流群(WeThinkIn-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于算法,开发,竞赛,科研以及工作求职等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信Jarvis8866,拉你进群~)

文章来源于互联网:AIGC时代算法工程师的面试秘籍(第三十五式2025.4.21-2025.5.4) |【三年面试五年模拟】

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » AIGC时代算法工程师的面试秘籍(第三十五式2025.4.21-2025.5.4) |【三年面试五年模拟】
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们