算法常见问题

1.c++虚函数

        虚函数是用来实现多态(polymorphism) 的一种机制。通过使用虚函数,可以在子类中重写父类中定义的方法,并且在运行时动态地确定要调用哪个方法。

        在类定义中将一个成员函数声明为虚函数,需要使用 virtual 关键字进行修饰 。

        通过指向派生类对象的基类指针或引用调用虚函数时,程序会根据对象的实际类型来调用相应的方法。

2.Softmax函数和Sigmoid函数的区别与联系

Sigmoid函数

        Sigmoid =多标签分类问题=多个正确答案=非独占输出(例如胸部X光检查、住院)。构建分类器,解决有多个正确答案的问题时,用Sigmoid函数分别处理各个原始输出。

        Sigmoid函数是一种logistic函数,它将任意的值转换到  之间

        

Softmax =多类别分类问题=只有一个正确答案=互斥输出(例如手写数字,鸢尾花)。构建分类器,解决只有唯一正确答案的问题时,用Softmax函数处理各个原始输出值。Softmax函数的分母综合了原始输出值的所有因素,这意味着,Softmax函数得到的不同概率之间相互关联。

        

        Softmax函数是二分类函数Sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。

        Softmax可以由三个不同的角度来解释。从不同角度来看softmax函数,可以对其应用场景有更深刻的理解:

        (1)softmax可以当作arg max的一种平滑近似,与arg max操作中暴力地选出一个最大值(产生一个one-hot向量)不同,softmax将这种输出作了一定的平滑,即将one-hot输出中最大值对应的1按输入元素值的大小分配给其他位置。

        (2)softmax将输入向量归一化映射到一个类别概率分布,即  

个类别上的概率分布(前文也有提到)。这也是为什么在深度学习中常常将softmax作为MLP的最后一层,并配合以交叉熵损失函数(对分布间差异的一种度量)。

        (3)从概率图模型的角度来看,softmax的这种形式可以理解为一个概率无向图上的联合概率。因此你会发现,条件最大熵模型与softmax回归模型实际上是一致的,诸如这样的例子还有很多。由于概率图模型很大程度上借用了一些热力学系统的理论,因此也可以从物理系统的角度赋予softmax一定的内涵。

总结

        如果模型输出为非互斥类别,且可以同时选择多个类别,则采用Sigmoid函数计算该网络的原始输出值。如果模型输出为互斥类别,且只能选择一个类别,则采用Softmax函数计算该网络的原始输出值。Sigmoid函数可以用来解决多标签问题,Softmax函数用来解决单标签问题。[1]对于某个分类场景,当Softmax函数能用时,Sigmoid函数一定可以用。

二分类任务

        对于二分类问题来说,理论上,两者是没有任何区别的。由于我们现在用的Pytorch、TensorFlow等框架计算矩阵方式的问题,导致两者在反向传播的过程中还是有区别的。实验结果表明,两者还是存在差异的,对于不同的分类模型,可能Sigmoid函数效果好,也可能是Softmax函数效果。

3.l1和l2正则化的区别是什么

        L1/L2的区别

        L1是模型各个参数的绝对值之和。L2是模型各个参数的平方和的开方值。

        L1会趋向于产生少量的特征,而其他的特征都是0。

        因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩阵

     L2会选择更多的特征,这些特征都会接近于0。  

     最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化||w||时,就会使每一项趋近于0。

        L1的作用是为了矩阵稀疏化。假设的是模型的参数取值满足拉普拉斯分布。

        L2的作用是为了使模型更平滑,得到更好的泛化能力。假设的是参数是满足高斯分布。

4.介绍svm算法

        是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。

        SVM可分为三种:

        线性可分SVM

        当训练数据线性可分时,通过最大化硬间隔(hard margin)可以学习得到一个线性分类器,即硬间隔SVM。

        线性SVM

        当训练数据不能线性可分但是近似线性可分时,通过最大化软间隔(soft margin)也可以学习到一个线性分类器,即软间隔SVM。

        非线性SVM

        当训练数据线性不可分时,通过使用核技巧(kernel trick)和最大化软间隔,可以学习到一个非线性SVM。

        SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

        SVM如何选择核函数

        Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。

        RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。

5.介绍transformer算法

        Transformer本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和Layer Normalization层。

6.1x1大小的卷积核的作用

        通过控制卷积核个数实现升维或者降维,从而减少模型参数。

        对不同特征进行归一化操作。

        用于不同channel上特征的融合。

7.空洞卷积及其优缺点

        pooling操作虽然能增大感受野,但是会丢失一些信息。空洞卷积在卷积核中插入权重为0的值,因此每次卷积中会skip掉一些像素点;

        空洞卷积增大了卷积输出每个点的感受野并且不像pooling会丢失信息,在图像需要全局信息或者需要较长sequence依赖的语音序列问题上有着较广泛的应用。

8.介绍Transformer中的Q K V

  • q代表的是query查询,后续会和每一个k进行匹配,找到最相似的k
  • k代表的是key关键字,后续会被每一个q匹配
  • v代表的是value值,代表从输入中提到的信息
  • Q、K、V概念来源于检索系统,其中Q为Query、K为Key、V为Value。可以简单理解为Q与K进行相似度匹配,匹配后取得的结果就是V。举个例子我们在某宝上搜索东西,输入的搜索关键词就是Q,商品对应的描述就是K,Q与K匹配成功后搜索出来的商品就是V。

        注意:每一个key,都对应一个value;计算query和key的匹配程度就是计算两者相关性,相关性越大,代表key对应value的权重也就越大,这就是不同信息的权重不一样,这就是注意力机制!

例如:

        图书馆里有很多书(value),为了方便查找,我们给书做了编号(key)。当我们想要了解漫威这本书(query)的时候,我们就可以看看那些动漫、电影、甚至二战(美国队长)相关的书籍。

9.self-attention的公式

         其中,X XX表示输入的数据,Q , K , V Q,K,VQ,K,V对应内容如图,其值都是通过X XX和超参(先初始化,后通过训练优化)进行矩阵运算得来的。

        可以理解为:Self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。

10.目标跟踪算法中卡尔曼滤波的作用是什么

         其有两个前提假设:

        系统对运动的建模是线性(linear)的;

        噪声是符合正态分布(Gaussian)的;

1.卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波)过程。​

2、在跟踪中卡尔曼滤波可以基于目标前一时刻的位置,来预测当前时刻的位置,并且可以比传感器更准确的估计目标的位置。

3.卡尔曼滤波不需要前面的历史数据,只需要前一时刻的状态数据就可以进行预测。

11.Focal loss介绍

        FOCAL LOSS是一种针对样本不平衡问题的一种损失函数,用于解决分类器在处理高度偏斜数据集时的困难问题。具体来说,FOCAL LOSS通过调整常规交叉熵损失函数中每个正负样本的权重,使得模型更加关注那些难以分类的样本,从而提高模型在少数类上的分类准确率。

        FOCAL LOSS最初由Lin等人于2017年在论文"Focal Loss for Dense Object Detection"中提出,主要应用于目标检测任务中的多目标分类问题。该损失函数的表达式如下:

        $$FL(p_t)=-(1-p_t)^\gamma\log(p_t)$$

        其中,$p_t$是模型预测的概率值,$\gamma$是一个可调整的超参数,用于控制难易样本的权重。当$\gamma$=0时,FOCAL LOSS退化为普通的交叉熵损失;当$\gamma>0$时,FOCAL LOSS会降低容易分类的样本的权重,增加难分类样本的权重。

        FOCAL LOSS的主要思想是通过降低简单样本的权重,增加难分类样本的权重,来达到处理不平衡数据的目的。在实践中,FOCAL LOSS已经被广泛地应用于各种图像分类、目标检测和语义分割等任务中,取得了较好的效果。

12.匈牙利分配

参考:采用匈牙利算法求解分配问题_匈牙利分配算法-CSDN博客

        分配问题也称指派问题,是一种特殊的整数规划问题,分配问题的要求一般是这样的:n个人分配n项任务

        简单的说:就是n*n矩阵中,选取n个元素,每行每列各有一个元素,使得和最小。

 什么是匈牙利算法?

 1)理论基础:

        若从指派问题的系数矩阵的某行(列)各元素中分别减去或者加上常数k,其最优任务分配问题不变。

         2)匈牙利算法的流程图

        Step 1: 行归约

        找出每行的最小元素,分别从每行中减去这个最小元素;

        Step 2 : 列归约

        找出每列的最小元素,分别从每列中减去这个最小元素

        经过以上两步变换,矩阵的每行每列都至少有了一个零元素。接下来就进行第三步,试着指派任务。

        Step 3 : 指派任务

① 确定独立零元素。

i 从第一行(列)开始,若该行(列)中只有一个零元素,对该零元素标1,表示这个任务就指派给某人做。

每标一个1,同时将该零元素同列的其他零元素标为2,表示此任务已不能由其他人来做。(此处标1、2的操作与课本画圈、划去操作同理)

如此反复进行,直到系数矩阵中所有的零元素都已经被标为1或者2为止。

② 指派

我们观察到,系数矩阵中标记为1的零元素正好等于4,这表示已经确定了最优的指派方案。

此时,只需将0(1)所在位置记为1,其余位置记为0,则获得了该问题的最优解。

异常情况

上例仅为一种理想情况正常情况下,我们在对支付矩阵进行变换时会出现两种情况:

① 出现零元素的闭合回路

②标记成1的元素个数小于n

这两种情况导致支付矩阵中独立零元素出现不足。

i.出现零元素的闭合回路(有多于两行或两列存在两个以上的零元素。)

图的第一行的一二列零元素和第四行的一二列零元素构成回路

这里我们的处理方法是:

先对cost方阵做一个备份(因为会出现多解),然后我们可以顺着回路的走向,对间隔的零元素标记成1,然后对标记成1的零元素所有的行列划一条直线,把这两条直线的其他零元素标记成2,得到一种结果后,再求出多解。

ii. 矩阵中所有标记成1的零元素小于n

因此,我们需要对其进行【画盖0线】的操作。(即画出可以覆盖最多0元素的直线)

(1)画盖0线:利用最少的水平线和垂直线覆盖所有的零。

具体操作如下:

① 对没有标记为1的零元素所在的行打√;

②在已打“√”的行中,对标记为2的零元素所在列打√

③ 在已打“√”的列中,对标记为1的零元素所在行打“√”

④重复②和③,直到再不能找到可以打√的行或列为止。

⑤对没有打“√”的行画一横线,对打“√”的列画一垂线,这样就得到了覆盖所有零元素的最少直线数目的直线集合。

(2)继续变换系数矩阵

①在未被覆盖的元素中找出一个最小元素。

②对未被覆盖的元素所在行中各元素都减去这一最小元素。这时已被覆盖的元素中会出现负元素。

③对负元素所在的列中各元素加上这一最小元素。

Step4

我们发现,在经过一次变换后,独立零元素的个数仍然少于4.此时返回第三步,反复进行,直到矩阵中每一行都有一个被标记为1的元素为止。

13.Mosaic数据增强方法

        Mosaic是一种数据增强方法,可以用于训练物体检测模型,其中在随机裁剪的4张图片上进行拼接,以生成一个大的马赛克图像。

        在YOLOv4中,Mosaic数据增强可以通过以下步骤实现:

  1. 随机选择四张不同的图片。
  2. 对这四张图片进行随机的缩放和平移操作,使它们的大小、位置不同。
  3. 将这四张图片按照某种规则进行拼接,形成一个大的马赛克图像。通常情况下,将四张图片分别放置在左上、右上、左下和右下的位置上,然后进行拼接。
  4. 在拼接后的大图像上进行随机裁剪,得到多个大小不同的子图像。
  5. 对每个子图像进行标注,并将它们作为训练数据输入给YOLOv4模型进行训练。

通过使用Mosaic数据增强,可以有效地增加训练数据的多样性,提高模型的准确率和鲁棒性。此外,由于Mosaic数据增强可以同时使用多张图片进行训练,因此可以节省GPU内存,提高训练效率。

14.协方差

        协方差是用来衡量两个变量之间线性相关程度的统计量,它描述的是这两个变量同时偏离自身均值时所产生的期望值。协方差可以是正数、负数或者零。

        具体来说,如果两个变量的协方差为正数,则表明这两个变量的变化趋势是相同的;如果协方差为负数,则表明这两个变量的变化趋势是相反的;如果协方差为零,则表明这两个变量之间不存在线性相关关系。

        协方差可以用以下公式来计算:

        cov(X,Y) = E[(X-μ_X)(Y-μ_Y)]

        其中,X和Y是要计算协方差的两个随机变量,μ_X和μ_Y分别是这两个随机变量的均值,E[ ]表示期望值运算符。

        在实际应用中,协方差通常被用作衡量两个变量之间的联合变化程度。例如,当我们研究两种产品的销售量时,可以计算它们的销售量之间的协方差,以了解它们之间的关系强度。另外,在金融领域,协方差也常被用于构建投资组合模型,以评估不同投资品种之间的风险和收益关系。

15.BN的理论

Batch Norm的优点:

  • 可以使用大的学习率加快训练
  • 使得网络对权重初始化依赖程度降低
  • 可以缓解网络的过拟合问题

训练时,以mini-batch为单位,进行归一化操作。如下计算公式:

        对mini-batch中m个数据计算均值和方差,之后通过减去均值,除以标准差的变换,将输入数据分布重新调整到均值为0、方差为1。

    接下来,BatchNorm层会对归一化后的数据利用下述公式进行缩放和平移的变换:

    初始化时,γ = 1, β = 0,之后再通过训练迭代,将这两个超参数调整到合适的值。

    加入平移和缩放的原因是,不一定所有数据都服从标准正态分布,通过平移和缩放可以使得归一化后的数据保留原有学习来的特征,同时还完成归一化操作,加速了训练。

因此BN层是以mini-batch为单位,沿着通道维度进行的:

算法如下:

需要注意的是,

  • 在训练时,需要利用每一批数据(batch)计算均值和方差。
  • 在测试时,用训练中通过移动平均法保存的均值和方差作为参数。
  • 当一个模型训练完成之后,BN层所有参数:均值、方差、γ和β就都确定了。

    BN层的反向传播过程利用链式求导法则,求解dγ、dβ和dx即可。需要强调的是求解dx。均值、方差也都是包含x的函数,因此对x求导时,需要考虑进去,推导过程比较繁琐,可以用batch=2只有x1,x2两个输入情况进行推导,之后推广到batch=m

注意到代码中:

  1. beta、gamma在训练状态下,是可训练参数,在推理状态下,直接加载训练好的数值。

  2. moving_mean、moving_var在训练、推理中都是不可训练参数,只根据滑动平均计算公式更新数值,不会随着网络的训练BP而改变数值;在推理时,直接加载储存计算好的滑动平均之后的数值,作为推理时的均值和方差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/749146.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

山海相逢,因你而至!第九届全球边缘计算大会·深圳站圆满召开!

2024年6月22日,第九届全球边缘计算大会在深圳盛大开幕。本次盛会由边缘计算社区主办,并获得了EMQ、研华科技、华为等重量级单位的鼎力支持。大会汇聚了来自全球各地的业界精英,共同探讨边缘计算的前沿技术、应用趋势以及创新实践,…

Isaac Sim 9 物理(1)

使用Python USD API 来实现 Physics 。 以下内容中,大部分 Python 代码可以在 Physics Python 演示脚本文件中找到,本文仅作为个人学习笔记。 一.设置 USD Stage 和物理场景 Setting up a USD Stage and a Physics Scene USD Stage不知道怎么翻译&#…

docker 部署的 wordpress 接入阿里云短信服务 详细实操介绍

一、阿里云短信服务配置: 1、登录 阿里云短信服务 完成指引短信相关配置 2、创建RAM用户 并完成授权 出于安全及规范考虑 需通过RAM 用户来完成OponApl 接口调用,创建成功需完成短信接口(AliyunDysmsFullAccess、AliyunDysmsReadOnlyAccess…

【大模型】大模型微调方法总结(二)

1.Adapter Tuning 1.背景 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT微调方式,拉开了 PEFT 研究的序幕。他们指出,在面对特定的下游任务时,如果进行 Full-Fintuning&#xff0…

执行yum命令报错Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error

执行yum命令报错 [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error 修改图中所示两个文件: vim epel.repo vim CentOS-Base.repo 将所有的http://mirrors.cloud.aliyuncs.com 修改为http://mirrors.aliyun.com。 修改…

数据库逻辑结构设计-实体和实体间联系的转换、关系模式的优化

一、引言 如何将数据库概念结构设计的结果,即用E-R模型表示的概念模型转化为关系数据库模式。 E-R模型由实体、属性以及实体间的联系三个要素组成 将E-R模型转换为关系数据库模式,实际上就是要将实体及实体联系转换为相应的关系模式,转换…

【深度学习】基于深度离散潜在变量模型的变分推理

1.引言 1.1.讨论的目标 阅读并理解本文后,大家应能够: 掌握如何为具有离散潜在变量的模型设定参数在可行的情况下,使用精确的对数似然函数来估计参数利用神经变分推断方法来估计参数 1.2.导入相关软件包 # 导入PyTorch库,用于…

LLM vs SLM 大模型和小模型的对比

语言模型是能够生成自然人类语言的人工智能计算模型。这绝非易事。 这些模型被训练为概率机器学习模型——预测适合在短语序列中生成的单词的概率分布,试图模仿人类智能。语言模型在科学领域的重点有两个方面: 领悟情报的本质。 并将其本质体现为与真实…

Java学习十一—Java8特性之Stream流

一、Java8新特性简介 2014年3月18日,JDK8发布,提供了Lambda表达式支持、内置Nashorn JavaScript引擎支持、新的时间日期API、彻底移除HotSpot永久代。 ​ Java 8引入了许多令人兴奋的新特性,其中最引人注目的是Lambda表达式和Stream API。以…

十年磨一剑,华火电燃组合灶重磅问世,引领厨房新时代

十年磨一剑,华火研发团队经过不懈努力,成功将等离子电生明火技术与电陶炉红外线光波炉技术精妙融合,打造出的这款具有划时代是意义的电燃组合灶HH-SZQP60,终于在 2024 年6月震撼登场,该灶以其卓越的创新技术和独特的产…

day01-项目介绍及初始化-登录页

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 day01-项目介绍及初始化-登录页一、人力资源项目介绍1.1项目架构和解决方案主要模块解决的问题 二、拉取项目基础代码1.引入库2.升级core-js版本到3.25.5按照完整依…

一篇文章带你玩懂数据库的基础函数

数据库的函数 单行函数1.数据函数2.字符串函数3.时间函数4.流程函数 多行函数聚合函数 阅读指南: 本文章讲述了对于数据库的单行和多行函数,如果读者感兴趣,后续我们会更新高级的操作在我们的对于数据库教程的合集中,大家可以来很…

振弦采集仪在大型工程安全监测中的应用探索

振弦采集仪在大型工程安全监测中的应用探索 振弦采集仪是一种用于监测结构振动和变形的设备,它通过采集振弦信号来分析结构的动态特性。在大型工程安全监测中,振弦采集仪具有重要的应用价值,可以帮助工程师和监测人员实时了解结构的状况&…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全非约束系约束系RBCD资源系Spooler利用

红队内网攻防渗透 1. 内网横向移动1.1 委派安全知识点1.1.1 域委派分类1.1.2 非约束委派1.1.2.1 利用场景1.1.2.2 复现配置:1.1.2.3 利用思路1:诱使域管理员访问机器1.1.2.3.1 利用过程:主动通讯1.1.2.3.2 利用过程:钓鱼1.1.2.4 利用思路2:强制结合打印机漏洞1.1.2.5 利用…

利用Linked SQL Server提权

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 利用Linked SQL Server提权 Linked SQL server是一个SQL Server数据库中的对象,它可以连接到另一个SQL Server或非SQL Server数据源(如Oracle&a…

Techviz:XR协作工作流程,重塑远程电话会议新形式

在当今快速发展的数字环境中,无缝远程协作的需求正在成为企业多部门协同工作的重中之重,尤其是对于制造业、建筑和设计等行业的专业人士而言,这一需求更加迫切。传统的远程电话会议协作形式存在着延滞性,已经渐渐跟不上当今快节奏…

脑洞爆裂,OLED透明屏与红酒柜相结合

当OLED透明屏与红酒柜相结合时,我们可以设想一个极具创新性和实用性的产品,将科技美学与品酒文化完美融合。以下是我为这种结合提出的一些创新设想: 透明展示与虚拟标签 透明展示:OLED透明屏能够直接安装在红酒柜的玻璃门或侧面&a…

面试突击指南:Java基础面试题3

1.介绍下进程和线程的关系 进程:一个独立的正在执行的程序。 线程:一个进程的最基本的执行单位,执行路径。 多进程:在操作系统中,同时运行多个程序。 多进程的好处:可以充分利用CPU,提高CPU的使用率。 多线程:在同一个进程(应用程序)中同时执行多个线程。 多线程…

Redis 7.x 系列【9】数据类型之自动排重集合(Set)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SADD2.2 SCARD2.3 SISMEMBER2.4 SREM2.5 SSCAN2.6 SDIFF2.7 SU…

Jmeter,badboy学习

1、注意Jmeter与jdk之间的版本对应 2、Jmeter的作用: jmeter可以做接口测试和压力测试。其中接口测试的简单操作包括做http脚本(发get/post请求、加cookie、加header、加权限认证、上传文件)、做webservice脚本、参数化、断言、关联&#x…