CV面试题(持续更新!!!)
CV面试题
1、反卷积
在计算机领域中计算时,在计算过程中会先将卷积核转换为稀疏矩阵C的形式,并在此基础上进行正向传播操作(即左乘该稀疏矩阵C的转置),而在反向传播阶段,则需左乘该稀疏矩阵C。一般而言,在常规卷积操作中所涉及的操作可被看作是非零元素数量有限且具有权重作用的稀疏矩阵C与输入图像之间的矩阵相乘过程;而在此过程中所对应的损失函数梯度(即对输出y求导)则等价于对该稀疏矩阵C转置与损失梯度进行一次矩阵相乘运算的结果。相比之下,在反卷积运算中所遵循的操作流程与其对应的常规卷积操作形成对比:具体而言,在正向传播阶段应当执行的是对稀疏矩阵C转置的操作(即左乘该稀疏矩阵C),而在反向传播阶段则需左乘原始的稀疏矩阵C本身
2、反卷积的用途
实现上采样;近似重构输入图像,卷积层可视化
3、神经网络是生成模型还是判别模型?
判别模型,直接输出类别标签,或者输出类后验概率p(y|x)
4.Batch Normalization 和 Group Normalization有何区别?
Batch Normalization基于batch纬度遵循正交归一化过程,而GN则是在channel维度上基于每个group遵循正交归一化的步骤.此博文很详细
5、模型压缩的主要方法有哪些?
(1)从...结构上来看,在...方面进行分类:如剪枝技术、蒸馏方法以及基于神经架构搜索(NAS)自动学习新结构等方式。
(2)在参数化过程中涵盖数值精度相关的量化方法。
注释:有关于剪枝技术的具体实例可参考轻量化网络的相关研究。
如GroupConv这类操作在MobileNet V3中得到广泛应用;优化末尾计算资源密集的层;深度分离卷积则被用来提升特征提取效率的同时减少计算开销;这些方法都旨在降低整体计算复杂度并提升推理速度。
7.目标检测中IOU是如何计算的?
交并比。
8.目标检测中GIOU/DIOU/CIOU是如何计算的?
请参考我的这篇博文:

giou = iou - (|(C-AuB)|/|C|) 消除了iou在部分重叠情况下难以确定后续方向的缺陷。无法分辨对齐方式的问题。
DIOU = 1 - IOU + (P2/C2) 收敛速度快,并且量化了水平及垂直方向的收敛问题。
结合DIOU与AV之差值优化后得到CIOU以解决长宽比例收敛问题。
8.基于深度卷积神经网络模型用于图像分类任务时,在训练包含超过一百万类的数据集时会遇到哪些主要挑战?
提示:内存/显存占用;模型收敛速度等
9.深度学习中为什么不用二阶导去优化?
Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题。
10.深度机器学习中的mini-batch的大小对学习效果有何影响?
当mini-batch规模过小时,模型的收敛速度会显著下降.相反地,设置得太大会导致计算资源利用率下降.然而相应的系统内存可能会面临瓶颈问题.此外,这种情况下模型的预测精度会有所下降,并且模型的泛化能力也会相应受到影响.
11、dropout的原理,为什么可以防止过拟合?
其原理是在网络进行前向传播的过程中, 使得神经元的激活值以特定的概率降为零, 从而提升模型在面对未知数据时的表现能力
在前馈传播过程中,在每次训练迭代中会基于伯努利分布生成一个由0和1随机组成的掩码矩阵,并将该掩码矩阵与当前输入进行元素相乘操作得到经随机丢弃后的输出结果,并将其结果归一化处理为p的概率;而对于反向传播过程,在测试阶段同样避免了过拟合的问题,在计算梯度时会直接使用原始输入数据而不会引入任何丢弃机制
dropout如何防止过拟合呢? dropout其实类似于一种集成学习的方法,在集成学习中主要分为两种方式:一种是基于平均值的集成方法(Ensemble averaging),另一种是投票式的集成方法(Voting ensemble)。在神经网络中引入概率性的神经元舍弃机制后,在每次训练时实际上都会训练多个不同的网络模型(enssembles)。 dropout还打破了神经元之间的共适应关系,并非完全依赖于某些隐含节点的作用机制(instead of certain hidden nodes' fixed roles),从而增强了模型的整体鲁棒性(robustness)。 类似的逻辑也可以借鉴于生物进化理论中的角色扮演——环境的变化不会对物种造成毁灭性的影响(similar logic applies to biological evolution roles)
代码:
def dropout(x,p):
if p<0 or p>1:
raise Exception('The p must be in interval [0,1]')
retrain_prob = 1-p
sample = np.random.binomial(n=1,p=retrain_prob,size=x.shape)
x *=sample
x /=retrain_prob
return x
python
12.为什么SSD对小目标检测效果不好:
- 小目标对应的anchor(4-6)数量有限,在对应的feature map上难以获取足够的pixel级训练样本;这也是为何单阶段检测器(SSD)在执行数据增强操作后能够显著提升检测精度的原因:经过数据增强操作后的小目标被放大处理为大目标进行检测。
- 检测小目标不仅需要较大的feature map区域来提取精确的特征描述信息,并且还需要丰富的语义知识来有效区分小目标与背景区域
13.空洞卷积及其优缺点
虽然池化操作能够扩大感受野的大小,但它也会导致部分信息丢失.通过在卷积核中加入零权重的参数单元后,在每次卷积过程中就会跳过一些像素点
空洞卷积通过扩大每个输出点的感受野来提升模型捕捉长距离空间依赖的能力,并且相较于池化操作而言能够有效保留更多的特征信息,在图像处理以及语音序列分析等对全局信息依赖较高的任务中展现出较大的适用范围。
14.Fast RCNN中位置损失为何使用Smooth L1:

作者通过这种设置旨在使loss对于离群点更具鲁棒性。相较于L2损失函数,这种设计对异常值(outlier)具有一定的抵抗力,并有助于控制梯度的规模以避免训练过程中出现梯度爆炸的情况。
15、简述一下数据增强的方法
主要可分为离线增强与在线增强两类方法。其中离线增强的过程是指将数据集本地化进行处理;而在线增强则涵盖了多种具体的变换操作包括但不限于以下几种:翻转(水平翻转与垂直翻转)、旋转(包括顺时针旋转与逆时针旋转等)、缩放(按比例放大缩小)、裁剪(根据特定区域进行截取)、平移(水平与垂直方向上的移动)以及添加噪声等多样的处理手段。
16.超参数搜索方法
1、网格搜索:系统性地遍历所有候选参数组合,并通过迭代测试每一种可能性,在经过充分验证后确定最优参数作为最终解。
2、贝叶斯优化:当函数形式未知时,基于已有采样点利用贝叶斯方法估计其最大值位置的一种算法。该方法假设目标函数服从高斯过程(GP)分布。
17.如何理解卷积、池化等、全连接层等操作
卷积的作用:类似于滤波器,在不同位置捕捉图像的多样特征并形成特征图;激活函数的作用:通过引入非线性特性实现数据分类与回归;池化的作用:1、降低特征空间的复杂度以减少参数量并防止过拟合;2、增强模型对平移、旋转和缩放等变换的鲁棒性;3、抑制梯度传播的均匀性;此外,在GAN中常采用步长式卷积替代池化操作以实现下采样效果;全连接的作用:基于提取的深层特征完成数据分类与回归任务。
18.1x1大小的卷积核的作用
通过调节卷积核数量来实现升维或降维的效果,进而降低模型复杂度;通过批量归一化(BN)对不同特征进行标准化处理,并引入非线性激活函数(ReLU),实现各通道间的特征融合过程
19.常见激活函数特点
激活函数可分为两类:饱和型和非饱和型。
饱和型激活函数以sigmoid函数和tanh函数为代表。
它们的特点是运算量较大;其特点为容易出现梯度消失问题,并会对原始数据分布产生影响。
而非饱和型激活函数则具有运算速度快、有效抑制梯度消失现象及过拟合问题的优势。
其中:
sigmoid函数运算量较大;
其特点为容易出现梯度消失问题,并会对原始数据分布产生影响;
tanh同样具有较大的计算量;
relu激活函数具有简单的计算过程;
而leakrelu则通过引入一个参数a来解决神经元死亡的问题;
最后,
ELU避免了dying neural neurons的问题,
并且在所有点上都是连续的,
从而加速了随机梯度下降算法(SGD)的收敛速度,
虽然运算复杂度略高于其他常见激活函数,
但能够有效防止神经元死亡现象的发生。
在训练过程中, 若一个模型未达到预期效果且出现发散现象, 进而探讨该模型的有效性如何?同时, 探讨影响该模型收敛性的因素有哪些?
该模型并非完全失效;可能的原因包括数据分类标记存在误差以及样本信息过载导致学习困难;此外,在处理大规模样本时, 模型可能会因为信息量不足而无法有效学习
当学习率设置过高时可能导致振荡问题;而设置过低则可能导致模型无法有效收敛。复杂分类任务可能更适合于较简单的模型架构。数据未经过归一化处理。
21、在Python中可以通过什么模块读取图片,并在PyTorch与TensorFlow之间如何实现对图片分辨率的提升?
Python主要依赖于OpenCV、Pillow以及Scikit-Image(简称SKimage)这几个库来进行图像读取与处理工作;PyTorch框架常使用unsqueeze(0)函数来进行张量扩展操作;TensorFlow则常用tf.expand_dims指令来增加数据维度。
22、BP
信号沿前馈路径传递信息,在系统中伴随误差沿后向路径扩散并被逐层感知。在正向传播过程中,在正确标签指引下计算损失函数值,并在此基础上实现误差信息的反propagate the loss error。随后通过对模型参数进行迭代优化以减少预测偏差,在反复训练调整中使模型最终达到最优状态。
23、在机器学习中为什么经常使用梯度下降而不使用牛顿法?
1、牛顿法的核心指标是Hessian矩阵,在高维数据中这类矩阵体积庞大导致计算与存储上的挑战。
2、在处理小批量数据时,牛顿法对于噪声数据高度敏感。
3、当目标函数呈现非凸特性时,牛顿法容易陷入鞍点或局部极大值。
24、KL散度
KL散度又叫做相对熵

也可以写为:

熵:

交叉熵:

所以:相对熵 = 交叉熵-熵
25、finetune
微调的本质是以调整分类器输出数量的方式仅加载除最后一层全连接外的所有层的权重,并使用自己的数据集进行进一步的优化。
finetune的实践建议:
预训练模型受到约束,在微调过程中无法随意更改其网络架构;然而,在这种情况下它仍可接受任何图片作为输入。
在微调过程中所使用的学习率通常低于重新训练所需的学习率。
26、感受野的计算
第一个feature_map的感受野被设定为1;其计算方式遵循以下公式:r = r \times stride + (k - 1);其中r表示上一层的感受野长度; stride代表步长;k代表卷积核的大小。
全局stride等于所有stride的累乘。
全局padding: 首先通过计算\left(f_{\text {out }}-1\right) \times \text { stride}后再减去f_{\text {in }}并依次加上\text { kernelSize}最后再除以2从而实现Padding值P的计算
27、简述一下GooleNet的Inception模块的原理?
对输入图像通过多种不同尺度的卷积核执行处理,并在池化操作被同时处理后,将输出结果连接到一起。
28、简述一下SVM和函数的原理
核函数通过将数据映射到更高维的空间来进行后续的操作,在不需要显式地执行这样的映射操作的情况下,则直接对这两个向量进行点积运算后再应用核函数。其效果等同于依次执行映射操作后再进行点积运算,并从而能够简化计算过程并规避在高维空间中进行复杂点积运算的麻烦。
29、多尺度问题?
减少网络下采样率并结合空洞卷积以专注于小物体检测;根据具体任务需求设计更适合的锚框以实现精准匹配;多尺度MST的训练过程虽耗时虽长但效率提升明显;特征融合过程类似于FPN、DetNet、RefineDet等模型采用了多层次特征融合策略;SNIP在解决多尺度问题上表现出色;TridentNet通过空洞卷积实现了对不同尺度特征的有效分离
当进行训练并执行反向传播以更新模型参数时,仅关注处于预设范围内的目标,并引出了一个特殊的多尺度训练策略。
30、为什么mobileNet在理论上速度很快,工程上并没有特别大的提升?
虽然在计算量上有所降低 mobileNet 通过深度可分式卷积操作实现了网络结构的显著提升 GPU 计算主要基于并行数据处理机制 假设 GPU 内存容量足够满足需求 则 GPU 计算的速度核心因素在于网络结构的深度
31、多任务学习中loss权重的设置
最为基础的方法是:将所有相关参数初始化为1值,并在训练过程中观察损失函数的变化情况。随后经过一段训练后观察损失函数的变化情况。接着通过动态调整各层权重参数使其传递回来的各层梯度量维持在同一数量级水平。
32、SGD、Momentum、Adagard、Adam
首先由于病态曲率的存在会导致训练减慢以及局部极小值的问题。所以有了接下来的优化函数。
详解看我的博文
1、SGD算法在训练过程中很有可能选择被标记错误的标记数据,或者与正常数据差异很大的数据进行训练,那么使用此数据求得梯度就会有很大的偏差,因此SGD在训练过程中会出现很强的随机现象。SGD一次只进行一次更新,没有冗余,可以新增样本。但是SGD更新会造成严重的震荡。
所以出现了mini-batch梯度下降。
2、在随机梯度的学习算法中,每一步的步幅都是固定的,而在动量学习算法中,每一步走多远不仅依赖于本次的梯度的大小还取决于过去的速度。速度v是累积各轮训练参的梯度。动量法可以加速SGD,并且抑制震荡,使得梯度方向不变的维度更新更快,梯度方向改变的维度更新变慢,可以加快收敛,减少震荡,但是需要一定的先验知识。
3、前面的随机梯度和动量随机梯度算法都是使用全局的学习率,所有的参数都是统一步伐的进行更新的。AdaGrad其实很简单,就是将每一维各自的历史梯度的平方叠加起来,然后更新的时候除以该历史梯度值即可。所以Adagrad对低频的参数有较大的更新,对高频的参数有较小的更新,因此,对于稀疏的数据他的表现很好。缺点是Adagrad的学习率会不断收缩,最终变得非常小。
4、虽然AdaGrad在理论上有些较好的性质,但是在实践中表现的并不是很好,其根本原因就是随着训练周期的增长,学习率降低的很快。而RMSProp算法就在AdaGrad基础上引入了衰减因子
5、虽然动量加速了我们对最小值方向的搜索,但RMSProp阻碍了我们在振荡方向上的搜索.Adam通过名字我们就可以看出他是基于动量和RMSProp的微调版本,该方法是目前深度学习中最流行的优化方法。
当数据呈现稀疏特性时,则更适合采用自适应优化器。具体而言,在深度学习领域中存在多种自适应优化器选择方案如Adagrad、Adam、RMSprop等;通常情况下Adam展现出较好的性能表现;相比之下随机梯度下降(SGD)在具备良好初始条件下能够实现更快的收敛速度并精准地找到最优解点。
33、卷积后图像的大小

34、训练过程中的问题汇总。
loss的问题:
1、训练过程中loss为负数:
【原因】输入的训练数据没有归一化造成
【解决方法】把输入数值通过下面的函数过滤一遍,进行归一化
inputdata = (inputdata-inputdata.min())/(inputdata.max()-inputdata.min())
2、怎么看loss和acc的变化
train loss 不断下降,test loss不断下降,说明网络仍在学习;
train loss 不断下降,test loss趋于不变,说明网络过拟合;
train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
3、初始学习率设置的问题:
可以从0.0001到0.1每次扩大10倍试验,直到验证集上的loss增大。
一般0.01-0.1左右
mmdetection上面有自己的学习率设置方式,一般为0.125 batch_size gpus。
4、样本不平衡问题。(具体的我会另外再开一篇博文)
样本不平衡呈现长尾分布,解决方案:
a、上采样增强
b、下采样增强
c、训练动态加权采样
d、稀少数据专家模型
35、什么样的函数可用作激活函数
满足非线性,几乎处处可导,单调的函数可以用作激活函数
36、L1,L2正则化
见这篇博文
37、最小化均方误差和基于高斯分布的极大似然估计
其实这两个是一样的,公式推导一下就知道了。https://zhuanlan.zhihu.com/p/35138077
38、过拟合和欠拟合
在训练集中取得良好效果但测试集上的准确率却较低的情况即为过拟合。当模型在训练过程中无法有效减少损失函数值时表现出的学习能力较弱,则称为欠拟合。
产生原因:
过拟合产生的原因:模型太复杂,样本噪声多,决策树容易过拟合,iou阈值过高,训练集迭代次数太多。
欠拟合:模型复杂度低。数据不纯净。
解决方案:
过拟合:
1、正则化,l1,l2
2、dropout
3、早停,earlystoping
4、数据增广
欠拟合:
1、增加模型复杂度
2、数据预处理
39、梯度消失和梯度爆炸的原因和解决方案
详见链接
40、分布式训练
同步训练中存在"木桶效应",其要求各设备的计算能力需均衡分布,并且集群内的通信网络也需均衡配置。
异步模式理论上存在一定局限性,在实际训练过程中可能会导致梯度消失现象的发生。然而由于 mini-batch形式的随机梯度下降本质上是梯度下降的一种近似方法,并且即使是标准的梯度下降算法也无法确保全局最优解的存在。
在实际应用中,在同一时间段内采用异步训练方式的模型未必优于同步模式的表现。因此,在实践中这两种训练模式都有广泛的适用性
41、pytorch与tensorflow的区别
TensorFlow 是以其先进的技术和完善的功能著称的深度学习框架 ,不仅拥有强大的数据可视化能力 ,还提供了丰富的模型构建工具 。PyTorch 则是一个正处于发展阶段的框架 ,以其快速迭代和广泛的应用前景而备受关注 。
42、目标检测比赛中提高map的方法
43、如何解决不收敛的问题。
因为loss出现nan值,在损失函数计算过程中出现了异常情况。其中原因可能在于所使用的损失函数设计存在问题。为了进一步优化训练效果,请先确认数据是否进行了归一化处理,并检查是否存在梯度消失或爆炸的问题。建议对学习率进行优化设置,并适当降低初始学习率以加快收敛速度。请检查模型在训练过程中是否存在梯度传递问题,并根据实际情况调整相关的超参数设置以提高模型性能。
44、优化器
45、纳什均衡
囚徒困境
46、反卷积和上采样
47、排序算法的稳定性
排序算法的稳定性即为,在经过排序后是否会影响到两个相等元素在原始数组中的相对位置。可查看

48、堆排序
该算法基于二叉树结构来完成排序任务。在大顶堆中,父节点的值大于或等于子节点的值;而小顶堆则对应地满足父节点小于或等于子节点。
49、红黑树
50、python实现乘方的几种方式
列表生成式:
[x * x for x in range(1, 11)]
#1.使用列表推导式
[x2 for x in range(1,21)]
#使用lambda
[(lambda x:x2)(x) for x in range(1,21)]
采用映射机制进行运算
def cube(x):
return x ** 2
列表 = list(map(cube, range(1, 21)))
同时支持基于lambda的方式
列表 = list(map(lambda x: x ** 2, range(1, 21)))
51、python元组与数组的区别
元组不可以随意增加或者删除元素,数组可以。
52、python三个点是什么意思?
它去掉所有分隔符来表示空缺。
大家观察一下这个a[:, :, \text{None}]与a[\dots, \text{None}]执行后的结果相同。
这是因为这些操作实际上等价于前面两个分隔符被替代。
这样一来就明白了。
53、C++多态,继承
继承实现了代码的重用功能。多态设计旨在满足接口的多样性需求。
继承:从基类中定义属性和方法的能力称为继承。
多态:根据编译状态决定调用基类还是派生类函数的行为称为多态设计。
‘一个接口即能被多种方法实现’。
多态可分为静态多态与动态多态两种类型。
静态多态:在编译阶段即可确定目标地址并生成对应代码的过程称为静态多态。
静态多态通常采用函数重载的方式实现:调用速度快且效率高但缺乏灵活性。
动态多态:只有在运行阶段才能确定目标地址的过程称为动态多态。
动态多态则通过虚函数来实现:允许派生类重新定义基类的方法以达到功能覆盖的目的。
54、虚函数
成员函数主要分为静态成员函数与非静态成员函数两大类,在非静态成员函数中又进一步划分为普通功能模块与虚功能模块。
55、机器学习部分算法的总结
KNN算法用于确定测试样本所属类别的过程如下:首先计算该测试样本周围的k个最近邻居;接着统计这些邻居中各类别的数量分布情况;最后根据统计结果将测试样本归类到数量最多的类别中。
在朴素贝叶斯模型中,在下图中

感知机:感知机等同于在输入空间中将实例划分成两类的分离超平面。该感知机致力于确定这个超平面的位置,并引入了一个基于误分类的损失函数来指导学习过程。为了优化这个损失函数,我们采用了梯度下降算法不断调整参数直至达到最小值。
支持向量机模型主要包括三个关键组成部分:线性可分型的支持向量机、带软间隔的支持向量机模型以及核函数方法。该模型旨在通过最大化分类器的几何间隔来确定最优分离超平面。
逻辑回归:

56、SVM解决多分类问题
可以采用多个二分类组合的方式。例如:1对1,1对多,多对多等。
57、K-means中初始类中心怎么确定?
随机地从数据集中选出K个样本作为类别中心,并将样本群随机地划分为K个子群体;接着依次计算每个子群体的类别中心位置
58、偏差和方差
在机器学习中衡量模型性能的重要指标包括偏差与方差这两个关键概念。具体来说:
- 偏差衡量了网络的实际输出与预期目标之间的差异。
- 方差反映了训练过程中不同预测结果之间的不一致程度。
因此,在高方差的情况下(即当数据分布较为分散时),尽管训练误差较低但模型可能过度捕捉到了噪声从而导致泛化能力下降;而在低方差的情况下(数据分布较为集中)虽然泛化能力较好但可能会牺牲一定的准确性。
进一步地随着模型复杂度的提升在这种情况(即当模型变得过于复杂时)虽然预测效果会逐渐改善(即偏差减少)但其泛化能力反而会下降(即方差增大)。
59、padding中same和vaild的区别?

effective computation: new_height and new_width are calculated as (W - F + 1) ÷ S, resulting in an integer via rounding up
SAME computation: new_height and new_width are calculated as W ÷ S, resulting in an integer via rounding up
60、F1 score,F2 score,F0.5 score
该算法通过综合衡量召回率与精确度的重要性来计算性能指标,并赋予两者同等的价值;而该改进方法则侧重于通过提高召回效率来显著提升整体性能水平
对于涉及等式与不等式约束的优化问题,在什么情况下KKT条件能够取得极值?这种情况下其成为充分或必要条件的标准是什么?而对SVM而言
考虑任意普遍性的问题,在应用KKT条件下实现极值求解时其仅具备必要性而缺乏充分性;当限定于凸优化的情形下该方法则可满足充要条件要求;支持向量机属于凸优化领域中的典型方法
62、维数灾难?
在特征数量较小时提升算法性能相对容易,在向量维度增长到一定程度后进一步添加更多维度反而不利于性能提升
63、Hinge Loss的核心思想是什么?
该损失函数定义为\ell(y) = \max(0, 1 - y \cdot \hat{y})其中这个公式代表的是合页损失函数。可以看出在使用支持向量机(SVM)作为模型时当实例离支持向量越远其对应的损失值也会越大。
64、SVM为什么要求对偶问题?为什么对偶问题与原问题等价?
该优化问题难以直接求解,并且包含了许多难以直接处理的不等式约束条件。该优化问题满足Slater条件,在这种情况下强对偶性成立,默认情况下两者之间存在某种对应关系。
65、简述一下常用的网络模型训练技巧
1、增加batch_size的同时调整学习率设置为初始值0.1乘以batch_szie/256的比例
2、执行学习率预热阶段
3、在残差块中的BN层中将γ参数初始化为0
4、移除BN层中的权重衰减项
5、将数据类型转换为半精度浮点数float16
6、应用余弦衰减策略于学习率调节
7、引入标签平滑化技术以提升模型鲁棒性
8、采用知识蒸馏方法辅助训练过程
9、结合mix_up与cutout随机裁剪策略作为数据增强手段
66、soft_max的推导
前向传播:f\left(x_{i}\right)=\frac{e^{x_{i}}}{\sum_{j=1}^{K} e^{x_{j}}}
后向传播:当k=i时:
\frac{\partial f}{\partial x_{k}}=\frac{\partial f}{\partial x_{i}}=\frac{e^{x_{i}} \times \sum_{j=1}^{K} e^{x_{j}}-e^{2 x_{i}}}{\left(\sum_{j=1}^{K} e^{x_{j}}\right)^{2}}=\frac{e^{x_{i}} \times\left(\sum_{j=1}^{K} e^{x_{j}}-e^{x_{i}}\right)}{\left(\sum_{j=1}^{K} e^{x_{j}}\right)^{2}}
上式可简化为:
\frac{\partial f}{\partial x_{k}}=f\left(x_{k}\right)\left(1-f\left(x_{k}\right)\right)
当k !=i时:
\frac{\partial f}{\partial x_{k}}=\frac{-e^{x_{i}} \times e^{x_{k}}}{\left(\sum_{j=1}^{K} e^{x_{j}}\right)^{2}}=-f\left(x_{i}\right) f\left(x_{k}\right)
两者合并起来为:
\frac{\partial f}{\partial x_{k}}=-\sum_{i \neq k} f\left(x_{i}\right) f\left(x_{k}\right)+f\left(x_{k}\right)\left(1-f\left(x_{k}\right)\right)=f\left(x_{k}\right)-\sum_{i=1}^{K} f\left(x_{k}\right) f\left(x_{i}\right)
67、attention机制
对于 Attention,主要分为 hard attention以及 soft attention
针对 hard attention机制,在位置信息建模方面采用了多元伯努利分布的方式,并基于最大似然估计的方法推导出下界表达式。通过应用Jensen不等式,在参数矩阵进行梯度优化处理时采用滑动平均方法以降低方差水平。为了进一步减小方差,在梯度估计过程中采用滑动平均方法以降低方差水平的同时引入多远伯努利分布的熵损失项。其训练规则与强化学习中的策略更新机制具有相似性
针对 soft attention 的过程主要包含以下三个步骤:首先通过计算 query 与每个 key 之间的相似度来获取权重值,并采用包括点积、拼接以及感知机等多种常用的相似度函数来进行这一操作;接着将这些权重经过 softmax 函数进行归一化处理;最后将这些权重与对应的 key-value 对进行加权求和以生成最终的 attention 输出结果。值得注意的是,在当前许多研究中常将 key 和 value 设为同一个实体;attention 计算流程如图所示

68、CNN中的卷积层的反向传播
69、卡特兰数
有2n个0,1,求每一时刻1都比0多的序列的个数。

70、正交基的公式
需要满足AA^T =E或者A^TA=E(T是转置)
71、利用均匀分布和中心极限定理来产生正态分布

72、无向图,有向图
有向图模型(贝叶斯网络):依赖关系仅限于父节点与子节点之间的连接。包括但不限于NB(Naive Bayes)、HMM(隐马尔可夫模型)、朴素贝叶斯以及深度信念网络等。无向图模型(马尔科夫网络):其依赖关系通常基于全连接子图进行划分。包括LR(Logistic Regression)、MEM(其通用形式)、CRF(条件随机场)等。参考:
73、取多维列表偶行偶列

74、python的数据类型
1、数值型数据
2、布尔字段别
3、文本字段别
4、列表结构
5、不可修改的元组:固定且不可变的数据结构
6、集合:无序存储、去重功能及固定元素组成的数据结构
7、哈希表或映射字段别
75、pytorch的函数
1、通过DataLoader加载数据
2、对权重参数以及偏置参数进行初始化
3、选择优化算法,并设置相应的学习率策略
4、定义损失函数损失 = torch.nn...
5、包括卷积层、池化层、ReLU激活函数、Dropout正则化以及全连接层等模块
6、在反向传播过程中计算损失梯度
7、通过torch.save保存模型参数,并使用torch.load加载模型
76、CTCloss
与交叉熵的区别:
交叉熵就是简单地分类one_hot,ctcloss的话会包含序列的信息,提升分类准确率。
CTCLOSS解决的问题就是:输入与输出的label不需要完全对齐,CTC允许我们的神经网络在任意一个时间段预测label,只有一个要求—输出序列的顺序是正确的就好。
CTCLoss中两个重复字符中间的blank不会消除这两个重复字符:
ab_bc ------abbc
77、交叉熵
真实概率*log(1/预测概率)。
78、神经网络中使用sigmoid激活函数怎么实现非线性性?
在神经网络领域中使用sigmoid作为非线性激活函数是常见的做法;而神经网络体系中的非线性特性则主要通过将多个非线性激活函数进行层次化组合与深度叠代来实现。
79、K-means算法不知道有多少个聚类中心怎么办?
肘部法则用于评估聚类效果:通过计算各聚类的均方误差之和并绘制曲线图来确定拐点位置。对于每个聚类组而言,gap值定义为其内部距离与外部距离之比。采用随机抽样的方法进行数据分组。
80、逻辑回归相对于线性回归怎么实现分类?
在线性回归的基础上做sigmoid。

81、BFS,DFS的实现步骤?
广度优先搜索算法的搜索步骤一般是:
(1)从队列头取出一个结点,检查它按照扩展规则是否能够扩展,如果能则产生一个新结点。
(2)检查新生成的结点,看它是否已在队列中存在,如果新结点已经在队列中出现过,就放弃这个结点,然后回到第(1)步。否则,如果新结点未曾在队列中出现过,则将它加入到队列尾。
(3)检查新结点是否目标结点。如果新结点是目标结点,则搜索成功,程序结束;若新结点不是目标结点,则回到第(1)步,再从队列头取出结点进行扩展。
最终可能产生两种结果:找到目标结点,或扩展完所有结点而没有找到目标结点。
深度优先搜索的步骤是:
递归栈
82、hashmap和hash冲突
hashmap:就是通过hash函数映射到数组的某一位置。
hash冲突(解决方案):
HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
83、简单介绍一下LR?
详见逻辑回归
84、如何提高模型检测的召回率
增加数据集,数据增广,降低iou阈值,模型融合。
85、不同大小的同一物体怎么识别?
86、static的作用
修饰变量或者方法作为全局变量或者全局方法使用
87、LSTM与GRU

88、马氏距离

89、SGD与ADAM
Adam由一阶矩和二阶矩共同作用于模型参数中。梯度更新是SGD采用的方式。而Adam则表现出易陷入局部极小值及训练不稳定的特点。为了避免上述缺陷,在优化算法的选择上建议综合考虑采用Adam与SGD相结合的方式。
90、python的内存管理机制
引入计数,垃圾回收,内存池机制
变量名通过引用对象获取对象的类型和值。
每当这个引用被使用时,引用来表示其被调用的次数;每次调用都会使引用来表示其被调用的次数递增;当引用来表示其被调用的次数降为零时会触发垃圾回收机制。
容器表明当两个对象被赋值调用时会共享相同的内存区域。因此,在这种情况下,一个变量的增大会导致另一个变量也增大的现象会发生。
基于256k的阈值设计了一种高效的内存管理策略,在较大容量的现代存储区域中采用动态获取(malloc)的方式获取资源,在较小容量的存储区域则建立了专门的内存池来进行资源分配
91、static存放变量在哪里?
通常情况下,通过new生成的动态数据被存储在堆内存中;而在执行过程中位于函数内的所有内部变量则会被存储在栈内存中。这些变量通常会在函数退出时释放内存空间;值得注意的是,在某些情况下即使是在函数内部定义的静态局部变量也会被存储到全局内存区域;然而这些全局内存中的数据在没有外部干预的情况下不会因函数退出而被回收。
92、linux静态库,动态库
静态库的扩展名是.a
动态库的扩展名是.so
这类静态函数库通常以libxxx.a的形式存在,并且其中xxx表示该函数库的名称。由于所有静态函数都已嵌入目标代码中,在编译完成后将不再占用外部资源存储空间。其明显优势在于编译后的执行程序无需依赖外部函数库支持即可运行;然而这一特性也带来了一定的局限性:一旦静态函数库发生更改,则需要重新进行编译操作。
动态库:这类库的常见名称通常以libxxx.M.N.so的形式出现(其中xxx表示特定的基名),同样的基名下可能会包含不同主副版本号(如libversion.x.y.so)。需要注意的是这些基名必须包含主副版本号除非不需要包含版本信息但名称必须具备特定结构以供识别使用。与静态函数库相比动态链接库(DLL)在编译阶段并未将整个函数集合整合到目标可执行文件中而是由调用者在运行时主动加载所需的具体功能模块这样可以使生成的可执行文件体积较小且不会对原有程序的功能造成影响。由于动态链接库并未预先整合到程序代码中因此只有当程序实际调用这些功能模块时才会加载相应的共享链接库从而确保了资源的有效利用与空间占用量的最小化。对于Linux等基于Linux内核的操作系统来说这些标准目录通常是预先定义好的例如位于/lib/usr/lib等位置。
在使用静态的程序库时,在运行环境中将被识别出所需的功能模块,并通过复制的方式将其转移至执行文件中;由于这种复制过程是完整的,在完成此步骤后就可以停止进一步的操作了。而对动态链接库来说情况并非如此;在运行时该类型的数据结构会在目标可执行文件内部预先标记出来;因为这类数据结构能够节省内存空间,在Linux系统环境下默认情况下链接操作会选择先建立动态链接;如果同时存在静态链接和动态链接而没有特别指定的情况下,默认情况下系统将优先建立与之相关的功能模块与其中的一个链接实体进行关联
93、为什么bert用LN?
94、多任务学习中需要注意的点
三点总结 三个主要方面: hard性参数同步机制;统一损失函数优化策略;分组学习率策略与全局调优.
95、one-hot编码的作用
将离散特征的取值映射到了欧式空间
96、交叉熵和最大似然估计的关系推导
在信息论中,交叉熵被视为一种基于最大似然估计的方法。具体而言,在处理二项分布时,我们通过最大似然估计来计算概率分布,并通过对这些概率值取负对数来优化损失函数。
97、Transformer的原理
98、SVM如何应对多分类场景
99、锚框的意义是什么?完全锚框的意义又是什么?
100、Sobel算子主要用于图像处理中的什么功能?
101、什么是嵌入方法?
102、在数据不平衡的情况下使用哪些损失函数?分类问题又该如何选择损失函数?
103、回归问题中常用哪些损失函数?对于分类问题又该如何选择相应的损失函数?
104、Focal loss模型中有哪些关键参数需要进行调节?其调参通常包括哪些步骤?
105、请写出自注意力机制的手写公式(可选)
106、“朴素”贝叶斯中的“朴素”具体指代什么含义?
107、简述AUC值的意义及其与ROC曲线的关系;并说明PR曲线的特点及应用场景
108、“K-means算法在初始中心点选择方面有哪些常用方法?”
109、“为何CNN中的卷积核通常设计为方形或长方形?”以及“为何常见设计多采用奇数尺寸?”
110、“请写出手写map的基本公式(可选)”
111、“请画出VGG-16网络的整体架构图(可选)”
112、“请详细写出K-means算法的伪代码(可选)”
113、“最大池化操作与平均池化操作各自适用于什么样的场景?”
114、“如何对多模态特征进行有效融合?”
115、“请手动画出LR模型的基本原理图并简述其损失函数的核心思想(可选)”
116、“树模型在处理连续型特征时通常采用哪些策略?”
注:以上内容仅作为示例,请根据具体需求进行完善。
