👨💻作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️点击链接 加群。
🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职相关(简历撰写技巧、面经资料与心得)多方面综合学习平台,强烈推荐AI小白及AI爱好者学习,性价比非常高!加入星球➡️点击链接
💚AI面经专栏总结: 本专栏主要为总结各小中大厂的面经系列总结,内容涵盖了多个热门技术领域,包括但不限于算法、机器学习、CV、NLP、大模型、测开、大数据、数分等,内容包括问题及详细答案,此外金邀请了行业内经验丰富的技术专家和面试官,分享面试经验和技巧,帮助求职者顺利通关各类技术面试。
算法工程师面经系列
九维数据 计算机视觉算法工程师
-
详细聊项目
-
模型的常见优化方法
在机器学习和深度学习中,优化模型是提升模型性能的重要步骤。以下是常见的优化方法的详细说明:
1. **更换模型的backbone等结构**:
- 选择更强大的backbone:不同的backbone网络(如ResNet、DenseNet、EfficientNet等)具有不同的特性和性能表现。根据任务的复杂度和计算资源,选择合适的backbone可以提高模型的能力。
- 调整网络结构:可以通过增加或减少网络层数,调整卷积核大小,或者使用不同的激活函数(如ReLU、Leaky ReLU、Swish等)来优化模型结构。
- 使用预训练模型:通过使用在大型数据集(如ImageNet)上预训练过的模型作为基础,可以加速收敛并提高性能。
2. **数据准确**:
- 提高数据的标注质量:确保训练数据的标注是准确的,因为错误的标注会直接影响模型的学习效果。
- 数据清洗:去除数据集中错误或不一致的数据样本,以减少对模型训练的干扰。
3. **平衡数据解决样本不均衡**:
- 过采样和欠采样:对于不平衡数据集,可以通过过采样少数类或欠采样多数类来平衡数据。
- 使用加权损失函数:在损失函数中为不同类别设置不同的权重,以减少不平衡的影响。
- 生成合成样本:使用技术如SMOTE(Synthetic Minority Over-sampling Technique),生成合成的数据点来平衡类别。
4. **模型集成**:
- 集成学习方法:使用方法如Bagging(如随机森林)、Boosting(如XGBoost)、Stacking等,通过组合多个模型的预测来提升整体性能。
- 模型投票:对多个模型的预测结果进行投票,取多数票结果为最终预测,提高模型的鲁棒性。
5. **根据loss下降的趋势调整参数**:
- 学习率调整:根据训练过程中损失函数的下降趋势,调整学习率,例如使用学习率调度器(如ReduceLROnPlateau)或自适应学习率算法(如Adam, RMSprop)。
- 早停法(Early Stopping):监控验证集的损失,如果在若干个epoch内验证损失不再下降,则停止训练以防止过拟合。
- 超参数调优:通过网格搜索(Grid Search)或随机搜索(Random Search)等方法优化超参数(如batch size, 学习率等)。
- 介绍一下Transformer的结构,推导一下一个标准的Transformer block有多少参数
input:
- S sentences
- N tokens at maximum
- x dimention in the word embedding
- m number of heads
(1)自注意力层:该层用于计算输入序列中每个位置的注意力权重,以便在不同位置捕捉不同关系。它包括多个注意力头,每个头都有自己的权重矩阵。参数数量如下:
-
查询权重矩阵(Q):形状为(x, x)。
-
键权重矩阵(K):形状为(x, x)。
-
值权重矩阵(V):形状为(x, x)。
-
输出权重矩阵(O):形状为(x, x)。
(2)前馈神经网络:这是一个全连接的前馈神经网络层,用于每个位置的特征转换。参数数量如下: -
第一个全连接层的权重矩阵:形状为(x, y),其中y是隐藏层的维度。
-
第一个全连接层的偏差项:形状为(y)。
-
第二个全连接层的权重矩阵:形状为(y, x)。
-
第二个全连接层的偏差项:形状为(x)。
(3)Layer Normalization:该层包括用于每个子层的比例参数和偏差参数。这两个参数的形状取决于输入维度。
(4)残差连接:残差连接将输入与子层的输出相加,以防止梯度消失问题。
(5)Layer Normalization:另一层层标准化用于整个Transformer块的输出。 -
针对自注意力层:假设有m个注意力头,x是输入维度,每个头的权重矩阵数量为4个(Q、K、V、O)。因此,自注意力层的参数数量为4 * m * x * x。
-
针对前馈神经网络:前馈神经网络的参数数量取决于隐藏层的维度y和输入维度x。每个前馈神经网络层包括两个权重矩阵和两个偏差项,所以参数数量为2 * x * y + 2 * y。
-
层标准化和残差连接:这两部分的参数数量相对较小,取决于输入维度x。
因此,一个标准的Transformer块的总参数数量可以表示为:
4 * m * x * x + 2 * x * y + 2 * y + 少量参数(层标准化和残差连接的参数)
- 场景题: 现在有一百万张房屋外部的图片,每张图片可能既有一些日常生活和别的场景中常见的物体比如沙滩椅,长凳,泳池,草坪等,也有很多别的场景不常见或有一定背景的人才能识别的物体比如排水管,水电表,房檐,地基等。总共的物体类别大概有50~100类。需求是设计一个算法能够较为准确的在房屋外部图片上定位这些物体。
分别处理,对于常见的物体可以使用预训练模型进行微调,或者使用目标检测模型重新训练学习,因为图片数量充足,对于不常见的图像使用预训练模型进行微调。所有的模型结构尽可能使用相同的,但是权重参数不一样,需要哪个就导入其权重。
- 场景题: 假如训练集中只有图片所包含的所有类别,但是没有相应类别的位置(bbox),那么需要先设计一个解决方法给这些类别找位置,训练集才能拿来用。请列举一些实际的办法。
在训练集中只有类别信息而没有位置标注的情况下,需要设计方法来为这些类别生成位置(边界框),以下是一些可能的解决方案:
弱监督学习:
利用弱监督学习技术,通过图像级标签训练模型,逐步学习对象的潜在位置。这种方法通常结合多实例学习(Multiple Instance Learning, MIL)来实现。
类激活映射(CAM):
使用卷积神经网络(CNN),通过类激活映射(CAM)技术,生成每个类别在图像中的热力图。热力图可以帮助确定对象的大致位置。
注意力机制:
在神经网络中引入注意力机制,帮助模型自动聚焦于图像中最相关的区域,进而推测出对象的位置。
无监督/自监督学习:
利用无监督或自监督学习技术,从图像的自然结构中学习对象的边界和位置。这可以通过训练生成对抗网络(GAN)等模型来探索。
图像分割技术:
应用图像分割技术(如GrabCut, Graph Cut等),结合类别信息,尝试分割出目标对象,从而推测出对象的边界框。
使用预训练模型:
利用在其他数据集上已经预训练好的目标检测模型(如Faster R-CNN, YOLO等),在新数据集上进行推断,以获得初步的边界框预测。这些预测可以作为位置信息的初始值。
迭代式标注和微调:
结合少量人工标注的样本,使用模型进行初步预测,然后人工检查和修正预测结果,再用修正后的数据继续微调模型。
这些方法可以单独使用,也可以结合起来使用,以便更准确地推断对象的位置信息。选择具体的方法可能取决于数据集的规模、质量以及可用的计算资源。