Lecture2:损失函数及优化

news2024/11/15 11:09:19

目录

1.损失函数

1.1 支持向量机SVM 

1.1.1 SVM的代价函数及优化目标

1.1.2 如何理解将SVM成为大间距分类器

1.1.3 大间距分类器的数学原理

1.1.4 SVM核函数(构建非线性分类器) 及控制点的选择

1.1.5 构建自己的SVM

1.2 softmax分类器 

1.3 softmax VS SVM

2.优化 

2.1 梯度下降法 

2.2 随机梯度下降 


1.损失函数

        损失函数可以清晰地告诉我们一个分类器的好坏。

        损失函数通常定义如下:给予一个数据集\{({x_{i},y_{i}})\}_{i=1}^{N},在图像分类问题中,x即为输入图像,y为标签(数字)。定义损失函数L,它将接收来自函数f的预测分数,以及真实目标或标签Y,给我们可量化值告诉我们这个分类器的这些预测对于该训练示例的糟糕程度。

L = \frac{1}{N}\sum_{i}^{}L_{i}(f(x_{i},W),y_{i})

        还需强调的是,这是一个笼统的公式,计算结果是对于N个测试集的平均代价,W是我们待训练的参数。

        有了损失函数,我们就能评价我们训练出的参数W的好坏,我们来举一个例子:

        对于一个分类问题,我们算出每一个图像对应的和相应分类物体的相似度f(x,W)=Wx,我们可以看到,这个例子中,猫的得分明显不对,车子分类对了,青蛙彻底分类错了。

        我们用多分类SVM损失函数来讲述如上思想,如果对SVM不了解可以先阅读本文1.1章节,这里我将SVM的思想解释的很清楚了。

        对于多元SVM分类的损失函数:除了真实的分类y_i以外,对所有的分类y都做加和,也就是说我们在所有错误的分类上做和,比较正确分类的分数和错误分类的分数。如果正确分类的分数比错误分类的分数高出某个安全的边距(我们把这个边际设为1),如果真实的分数很高或者说真实分类的分数比其他任何错误分类的分数都要高很多,那么损失为0。接下来把图片对每个错误分类的损失加起来就可以得到数据集中这个样本的最终损失。最后对整个训练集的损失函数取平均。 
        这听起来像是一个if-then语句,如果真实类的分数比其它都高很多则认为这个分类器很好。SVM的损失函数图如下: 

         这里的x轴表示S_{y_{i}},即是训练样本真实分类的分数;y轴表示损失。可以看到随着真实分类的分数提升,损失会线性下降,—直到分数超过了—个阈值,损失函数的值就是0了。因为我们已经为这个样本成功地分对了类。
        多分类的SVM损失函数数学表达如下:

L_{i} = \sum_{j\neq y_{i}}^{}max(0,s_{j}-S_{y_{i}}+1)

         我们算一下第一组数据L_1的损失:因为猫是正确的分类,我们要对汽车和青蛙类都要做一遍运算。来看汽车,车子的分数5.1减去猫的分数3.2再加上1,我们比较猫和车的时候我们会得到一些损失,因为车的分数比猫还高这是不好的,对这个样本来说,我们得到了2.9的损失值;接着我们比较猫和青蛙的分数3.2-(-1.7),猫的分数超过青蛙得分1以上这表明这两个类别的的损失项为0。训练样例的多分类支持向量机损失函数是每一对这样的类别构成的损失项的加和也就是2.9加上0即2.9。我们用数学表达式表达即:

L_1=max(0,5.1-3.2+1)+ max(0,-1.7-3.2+1) = 2.9

         同理我们算出L_2=0,L_3=12.9,最终我们得出整个训练集(仅有三个数据)的损失为L = (L_1+L_2+L_3)/3= 5.27

        我们来思考两个问题

        如果我们改变了一下汽车的分数会发生什么?损失变了!什么可以导致训练分数发生变化,我们训练的参数W

        如果我们改变了损失函数的计算方式会发生什么?损失函数的作用在于量化不同的错误到底有多坏,同时分类器会犯不同的错误,我们如何对分类器可能犯的不同类型的错误进行权衡,如果你使用平方项损失函数这意味着一个非常非常不好的错误就会更加不好成平方地不好,真的十分的不好,即我们不想要一个有严重分错的分类器,相比于上文的损失函数来说(利用上文的损失函数我们其实对微小的错误并不在意)但是如果分类出现很多错误出现很多错误,如果一个样例中出现了很多的错误那么我们就扩大错误以此来减少这个错误。
        因此,合理的损失函数有可以帮我们更好的判断训练出模型的好坏。

1.1 支持向量机SVM 

1.1.1 SVM的代价函数及优化目标

        从逻辑回归模型稍加改动就可以得到支持向量机模型(SVM)。

        在逻辑回归中,我们用假设函数z=\theta^{T}xsigmoid激活函数预测分类,如下图:

        我们想一下逻辑回归中我们希望这个模型做什么?

        当标定数据y=1时,我们希望预测到的z=\theta^Tx \gg 0 \ \ \ h_{\theta}(x)\approx 1, 当标定数据y=0时,我们希望预测到的z=\theta^Tx \ll 0 \ \ \ h_{\theta}(x)\approx0

        我们再来看代价函数:

Cost(h_{\theta}(x),y) = \frac{1}{m}\sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)}) = -\frac{1}{m}\begin{bmatrix} \sum_{i=1}^{m} ( y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)})) \end{bmatrix}

         当y=1时,第二项为0。我们观察第一项,画出来的代价函数如上图所示,当z很大时,预测值无限接近1,代价函数值无限小。那么我们取一个折线代替这个代价函数,如图,我们取一段直线+曲线代替了这个代价函数,如果这么做了有什么好处呢?

        首先,它和逻辑回归的结果相似。其次,它会使逻辑回归的计算变得简单。我们将这个代价函数命名为cost_{(1)}(z)。于是,现在我们的代价函数变成了:

Cost(h_{\theta}(x),y) = \sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)}) = \begin{bmatrix} \sum_{i=1}^{m} ( y^{(i)}cost_{(1)}(\theta^Tx) + (1-y^{(i)})cost_{(0)}(\theta^Tx) \end{bmatrix}

         同时,我们需要考虑正则化项。在逻辑回归中,我们通常采用A+\lambda B的形式,通过设定不同的正则化参数\lambda以便权衡我们能在多大程度上去适应训练集。在SVM中,我们用一个新的参数C,通过最小化代价函数CA+B来训练,通过设置C的大小来控制A或B的权重去适应数据集。由此得到了最后的优化目标:

\underset{\theta}{min}C\sum_{i=1}^{m}[y^{(i)}cost_{(1)}(\theta^Tx^{(i)})+(1-y^{(i)})cost_{(0)}(\theta^Tx^{(i)})]+\frac{1}{2}\sum_{i=1}^{n}\theta_{j}^{2}

         同时,SVM并不会输出概率,直接进行一个预测,输出0/1。即如果\theta^Tx> supposed输出1,反之输出0。

1.1.2 如何理解将SVM成为大间距分类器

         这是一个训练好的SVM的代价函数。我们可以看到当z = \theta^Tx\geqslant 1时,cost_{1}(z)=0。而不仅仅是\theta^Tx\geqslant 0,这就相当于在SVM中构建了一个安全间距。我们来看一下这个安全间距会带来什么样的影响。

\underset{\theta}{min}C\sum_{i=1}^{m}[y^{(i)}cost_{(1)}(\theta^Tx^{(i)})+(1-y^{(i)})cost_{(0)}(\theta^Tx^{(i)})]+\frac{1}{2}\sum_{i=1}^{n}\theta_{j}^{2}

        在此,我们假设C十分的大,这样我们的优化目标是使第一项接近于0。让我们试着在这种情况下理解优化问题,也就是要怎么做才能使第一项等于0。如下图: 

        具体来说,请观察下列数据集:

         其中有正样本和负样本,这些数据线性可分(存在一条直线使正样本负样本分开,不局限于一条直线),但是,看看如下图的分割,显然不好。

         相比而言,黑色的就好很多。从数学来讲,这条黑色的边界线到两样本有更大的距离(间距)(如蓝线),这个间距叫做支持向量机的间距

         同时这个间距是当参数C设置很大的时候才会出现对异常点很敏感,我们加入一个额外的正样本,如下图:额外的正样本可能让学习到的分界线由黑色向紫色移动。但我们不将参数C设置那么大最后我们得到的还是这条黑线。

1.1.3 大间距分类器的数学原理

        首先我们来看看向量的内积,u=[u_1,u_2]^T,v=[v_1,v_2]^T,那么如何计算uv的内积呢?将v投影到向量u上,测量一下投影的长度,如下图红线,长度记为p

        p就是向量v在向量u上的投影的长度或者说量,同时可以这样表示u^Tv=p\cdot ||u||=u_1v_1+u_2v_2
        现在让我们看看我们的优化目标:

        为了方便理解,我们将截距\theta_0设置为0(假设分类器过原点方便推导),特征数设置为2,即\theta_1,\theta_2

         我们将代价函数理解为向量内积的形式,如上图:那么每一个\theta^Tx^{(i)}可以计算成x^{(i)}投影到\theta^T的距离再乘以\theta^T的模。

          我们来看一下SVM为什么不会选择这种边界:

         这个决策边界\theta^Tx = 0对应着一个参数向量\theta,同时|\theta||x|cos\alpha =0能推出参数向量\theta与决策边界是垂直的,如下图:

        对于这个决策边界,对于正样本p^{(i)}|\theta| >0,我们可以看到p^{(i)}(O,x^{(i)})\theta的投影)相当的小,那就要求我们的|\theta|十分的大;同时对于负样本p^{(i)}|\theta| < 0,我们可以看到p^{(i)}(O,x^{(i)})\theta的投影)相当的小,那就也要求我们的|\theta|十分的大。但是我们的代价函数\underset{\theta}{min}\frac{1}{2}\sum_{j=1}^{n}\theta_{j}^2,要求|\theta|尽可能的小,冲突,因此这种决策边界自相冲突,不是一个好方向。

        而如上图的决策边界,对于正样本p^{(i)}|\theta| >0,我们可以看到p^{(i)}(O,x^{(i)})\theta的投影)相当的大,那就要求我们的|\theta|十分的小;同时对于负样本p^{(i)}|\theta| < 0,我们可以看到p^{(i)}(O,x^{(i)})\theta的投影)相当的大,那就也要求我们的|\theta|十分的小。同时我们的代价函数\underset{\theta}{min}\frac{1}{2}\sum_{j=1}^{n}\theta_{j}^2,要求|\theta|尽可能的小,冲突,因此这种决策边界满足我们的要求,是一个好方向。

        这就是SVM为什么会选择右边的假设的原因。也是SVM为什么选是大间距分类器的原理。它试图最大化p^{(i)}的值,p^{(i)}的值大了自然形成一个大间距的分界线。          

        由此,我们证明完了为什么SVM是一个大间距分类器。

1.1.4 SVM核函数(构建非线性分类器) 及控制点的选择

1.对核函数的直观理解

         如果想要拟合一个如上数据集的非线性的判别边界,一种方法是构建复杂多项式特征的集合如上图右面的决策边界,但我们不知道哪一个多项式是对我们的边界有作用的,同时计算量也会很大。

        我们来试试以下做法:

        对于特征x_{1},x_{2},我们手动选取三个点l_{1},l_{2},l_{3},我们将这些点称之为标记点,像这样定义新的特征给定一个实例x,让我将第一个特征f_1定义为一种相似度的变量,即度量训练样本x与第一个标记的相似度。

f_{1} = similarity(x,l^{(1)}) = exp(-\frac{||x-l^{(1)}||^2}{2\sigma ^2})

f_{2} = similarity(x,l^{(2)}) = exp(-\frac{||x-l^{(2)}||^2}{2\sigma ^2})

f_{3} = similarity(x,l^{(3)}) = exp(-\frac{||x-l^{(3)}||^2}{2\sigma ^2})

        这里的相似度函数就是核函数,我们这里采用高斯核函数。 我们看一下核函数做了什么,为什么这些相似度函数为什么这些表达式是有意义,我们先看看第一个标记:

f_{1} = similarity(x,l^{(1)}) = exp(-\frac{||x-l^{(1)}||^2}{2\sigma ^2})= exp(-\frac{\sum_{j=1}^{n}(x_{j}-l_{j}^{(1)})^2}{2\sigma ^2})

         如果x距离l_{1}很近,则f_{1} \approx 0,反之f_{1} \approx 1。因此x若很接近特征f_{1}则输出1反之输出0。用图来表示的话如下图:

         同时,不同的\sigma取值也会对我们的相似度函数有影响:

        那么我们根据特征能得到狩么样的预测函数呢?

        给定一个训练样本x,我们准备计算出三个特征变量f_1,f_2,f_3,预测函数的预测值将等于1,即\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3\geq 0时,我已经找到了一个学习算法并且已经得到这些参数\theta的值。

        我们要做的是我想要知道会发生什么如果我们有一个训练实例,它的坐标正好是这个洋红色的点,我想知道我的预测函数会给出怎样的预测结果?因为我的训练实例接近于l^{(1)},那么我们会有f_1接近l^{(1)},又因为训练样本xl^{(2)},l^{(3)}都很远,因此f^{(2)},f^{(3)}接近于0,于是我们的\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3 = \theta_0+\theta_1,根据这个值和0的关系我们可以预测输出是0还是1。

        如果我们有一个点离l^{(1)},l^{(2)},l^{(3)}都很远,则\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3 = \theta_0,根据这个值和0的关系我们可以预测输出是0还是1。

         我们通过对大量的样本进行相应的处理,最后可能得出这个样本点接近l^{(2)}预测值输出1,接近l_3预测值输出0....。我们最后会得到这个预测函数的判别边界。如下图:

         在这个判别边界里面,预测值就为1,反之为0。这就是我们如何定义控制点和核函数来训练出非常复杂的非线性决策边界的方法。

2.如何选取控制点

         在实际应用中,在给定学习问题中,在我们的数据集中有一些正样本和一些负样本,我们的想法是:将选取我们所拥有的每一个样本点只需要直接使用它们作为标记点即可。

        如果我有一个训练样本x_{1},那么我将在这个样本点完全相同的位置上选做我的第一个标记点;如果我另外一个训练样本x_{2},那么我将在这个样本点完全相同的位置上选做我的第二个标记点....这个方法最终可以得到m个标记点(数据总数为m)。

        用数学方法表示:

          当给定一个x时(数据集、交叉验证集或测试集)我们计算f_1,f_2,...,f_m,得到了一个特征向量f=[f_1,f_2,...,f_m],也可以加入一个截距f_0。如果我们有一个训练样本(x^{(i)},y^{(i)}),我们对这个样本要计算特征是这样的:

        首先计算它的特征向量f^{(i)},计算\theta^Tf^{(i)},若大于0则预测y=1。这就是已知\theta的情况下如何得到预测结果的过程。

        但如何得到\theta呢?我们训练下面这个式子:

\underset{\theta}{min}C\sum_{i=1}^{m}[y^{(i)}cost_{(1)}(\theta^Tf^{(i)})+(1-y^{(i)})cost_{(0)}(\theta^Tf^{(i)})]+\frac{1}{2}\sum_{i=1}^{m}\theta_{j}^{2}

        我们就训练出了参数\theta

        那我们讨论最后两个问题

        超参数C的选择:这里给出结论

        大的C:低偏差、高方差

        小的C:高偏差、低方差

        超参数\sigma ^2的选择:这里给出结论

        大的\sigma ^2:高斯核函数变化相对平滑;高偏差、低方差 

        小的\sigma ^2:高斯核函数变化相对剧烈;低偏差、高方差

1.1.5 构建自己的SVM

        我们首先要确定参数C的选择以及高斯核函数的选择。

        对于内核函数,有以下几种:

        ①线性核函数(无核):即不带有核函数的SVM pridict\ y=1 \ if \ \theta^Tx \geqslant 0,可以当你有大量的特征且样本的数量很少的时候使用。

        ②高斯核函数(上文讲述过):我们需要选择参数\sigma ^2、将特征归一化。可以当特征很少且样本很多的时候使用。

        ③多项式核函数:(x^Tl+costant)^{degree},表现较差一般不使用。

        随后构建代价函数求解\theta

        最后预测,我们的SVM就实现完成了。

1.2 softmax分类器 

         深度学习中另外一个流行分类选择是softmax分类器,它的损失函数在深度学习中使用的更为广泛。我们来介绍下这个函数:

        回想一下多类别SVM函数分类的背景,针对那些得分我们并没有一个解释,当我们进行分类时我们的模型函数给我们输出了几个数字,这些数字代表了这些类别的得分,但没给我们一个解释,我们仅仅知道正确分类的得分应该比不正确分类的得分高。(3.2>5.1?)

         除此之外我们并没有解释这些得分的真正意涵,但对于softmax分类来说,我们将赋予得分实在的意义,我们会基于这些得分去计算概率分布:

P(Y=k|X=x_{i} )= \frac{e^{s_k}}{\sum_{j}^{e^s_{j}}}

        我们将其指数化以便结果都是正数,接着我们利用这些指数的和来归一化它们;当我们的分数经过softmax函数处理后,我们得到了概率分布,对于所有类别我们都有了相应概率(每个概率都介于0~1之间)。所有类别的概率和为1。

        代价函数如下:

L_{i} = -logP(Y=y_i|X=x_{i})= -log(\frac{e^{s_{y_{i}}}}{\sum_{j}{e^{s_{j}}}})

         我们拿一个具体例子举一下:

         同样地,softmax的代价函数最小值为0,最大值为\infty

1.3 softmax VS SVM

       我们用一张图对比SVM和softmax吧!

         这两个损失函数的差别在于我们如何来解释这些分值,进而量化度量到底有多坏:所以对于SVM深入研究并观察正确的分类的分值和不正确分类的分值的边际,而对于softmax我们打算去计算一个概率分布然后查看负对数概率。
        在多分类SVM损失函数中,当样本为车那么车的分值就会比其他确的分类的分值要高,即使车的得分值稍微有所变化也并不会对结果产生根本改变,因为对于SVM损失函数来说,唯一关心的是正确的分值要比不正确分值高出一个安全边际。
        但是softmax这种方式就相当不同了,softmax的目标是将概率质量函数(离散分布值)等于1,所以你给正确分类再高的分值,同时给不正确分类再低的分值,softmax依然会在正确分类上积累更多的概率质量。正确的分类的概率向1迈进,将不正确的分类分值向0靠近。

2.优化 

        如何优化W使得损失函数达到最小?

        高等数学中我们学过梯度的方向是函数增加最快的方向,那么负梯度的方向就是函数下降最快的方向,那么我们可以将损失函数(代价函数)求出关于变量W的负梯度方向,使得损失函数取到最小。

2.1 梯度下降法 

        在实际的深度学习算法中,首先我们初始化W为随机值,然后我们执行梯度下降算法,更新W的值....一直循环,最后网络会收敛。如下图:

         但在这里步长是一个超参数,这就告诉我们每次戍算梯度时在那个方向前进多少距离,
这个步长也被叫做学习率。找到学习率是一个深度学习算法最先需要做的事情(相比于正则化参数..)。
        由于这部分在我机器学习的博客中有,不再赘述。

2.2 随机梯度下降 

        实际中,训练样本可能非常大。每一步梯度下降都要计算每个样本的偏导数取平均,这样在大数据集中是不可行的。所以实际操作中我们往往使用随机梯度下降,它并非针算整个训练集的误差和梯度值,而是在每一次迭代中选取一小部分训练样本称为minibatdh(小批量),按惯例这里都取2的n次幂(32,64,128..)然后我们利用这minibatch来估算误差总和以及实际梯度。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06-07-08 - 突破512字节的限制

---- 整理自狄泰软件唐佐林老师课程 1. 突破限制的准备工作 辅助函数 字符串打印软盘读取内存比较根目录区查找 1.1 字符串打印 问题&#xff1a; 主引导程序中如何进行字符串的打印&#xff1f; 1.1.1 BIOS中的字符串打印 指定打印参数&#xff08;AX 0x1301&#xff0…

Web大学生网页作业成品:个人博客主页 (纯HTML+CSS代码)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

HUST编译原理实验2

语法分析&#xff0c;建立并显示语法树 以识别 a 10.01; 为例&#xff0c;阐述语法分析的构造过程 1. 建立AST储存结构 由a 10.01得知&#xff0c;语法构成为: SentenceList->Sentence->Exp SEMI->ID ASSIGNOP FLOAT SEMI因此&#xff0c;需要储存结构如下 typ…

Java数据结构与Java算法学习Day10---图的了解和无向图(简略笔记记录)

目录 1.1图的定义及分类 142 1.2无向图 143 1.2.1图的相关术语 143 1.2.2无向图的存储结构 144 1.3图的API设计 145 1.4图的搜索 146 1.4.1深度优先搜索 146 1.4.2深度优先搜索API设计 147 1.5广度优先搜素 149 1.5.1广度优先搜索API设计及代码实现 150 1.5.2广度…

QT 系统学习 day04 事件(鼠标,键盘), UDP 通信, TCP 通信,多个定时器,重写绘画事件

1. 事件 (有 键盘按下&#xff0c; 鼠标按下&#xff0c; 鼠标双击等) 1.重写键盘按下事件&#xff0c; 函数&#xff1a; void keyPressEvent(QKeyEvent *event) /*** 按键按下事件 ***/ 代码&#xff1a; void keyPressEvent(QKeyEvent *event) /*** 按键按下事件 ***/{q…

【吴恩达机器学习笔记】十五、大规模机器学习

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

低代码开发平台——体验系统的重要性

什么是优秀的体验&#xff1f; 简而言之&#xff0c;优质的体验意味着可以随时随地根据客户的需求提供服务&#xff0c;这在数字化的世界中&#xff0c;意味着真正的多重体验。Gartner早在2018年就定义了MXDP&#xff08;多体验开发平台&#xff09;&#xff0c;以应对我们日常…

游戏开发38课 unity 模板测试

ShaderLab 命令&#xff1a;模板 配置与 GPU 上的模板缓冲区相关的设置。 模板缓冲区为帧缓冲区中的每个像素存储一个 8 位整数值。为给定像素执行片元着色器之前&#xff0c;GPU 可以将模板缓冲区中的当前值与给定参考值进行比较。这称为模板测试。如果模板测试通过&#xff…

liunx如何重启mysql

Linux如何重启MySQL Linux中重启MySQL可以使用service mysql restart命令和脚本启动方式/etc/inint.d/mysql restart。 推荐&#xff1a;MySQL教程 其他命令如下&#xff1a; 一、 启动 1、使用 service 启动&#xff1a;service mysql start 2、使用 mysqld 脚本启动&am…

使用redis做分布式锁

思路步骤 获取锁, 使用 SETNX 命令设置一个key.如果没获取到&#xff0c;从新拿锁&#xff0c;返回步骤1 ; 从新拿锁可以设置等待时间;也可以记录拿锁次数为了做“避免死循环”.如果获取到&#xff0c;使用 EXPIRE 给锁加存活时间&#xff1b;接步骤3&#xff0c;执行业务&…

微机----------------中断控制器8259A(可编程的中断控制器)

目录 功能8259A的引脚8259A的工作方式中断响应顺序8259A的中断优先级管理8259A中断屏蔽管理⭐8259A的中断结束管理功能 ①单片825能管理8级中断,并且可级联管理64级 ②可对任一级中断单独屏蔽或允许 ③中断被响应后,可直接提供中断类型号 ④可通过编程选择其工作方式 IRR中断…

C++入门篇

入门C命名空间命名空间定义命名空间的使用C输入&#xff0c;输出缺省参数缺省参数概念缺省参数分类函数重载函数重载概念C支持函数重载的原因引用引用概念引用特性具体应用const修饰的常量进行引用&#xff08;常引用&#xff09;传值&#xff0c;传引用的效率引用和指针的区别…

【无标题】3 GENERIC语句 和 INTEGER类型

【VHDL】【作业】3 GENERIC语句 和 INTEGER类型 文章目录【VHDL】【作业】3 GENERIC语句 和 INTEGER类型前言什么是GENERIC语句&#xff1f;32位加法器仿真波形总结每天进步一点点 笔记仅供自学&#xff0c;用来回看复习&#xff0c;不一定适合你&#xff0c;如有错误请指出。前…

SpringBoot:概述

Spring Boot 是 Spring 开源组织下的子项目&#xff0c;是 Spring 组件一站式解决方案&#xff0c;主要是简化了使用 Spring 的难度&#xff0c;简省了繁重的配置&#xff0c;提供了各种启动器&#xff0c;开发者能快速上手。 &#xff5e; 本篇内容包括&#xff1a;Spring Boo…

[选型] 实时数仓之技术选型

数仓技术路线选型 对于已有的hive数据仓&#xff0c;怎样改造成实时数仓的要求呢&#xff1f; 2.关于实时数仓的选型 如果选择hbase&#xff0c;建议选择kudu 如果选择kudu, 还可以选择doris 如果选择doris&#xff0c;建议选择iceberg 以上三种选择&#xff0c;要配合具体…

C++实现身份证号码过滤与排序

1.描述 警察办案里检索到一批(n个)身份证号码&#xff0c;希望按出生日期对它们进行从大到小排序&#xff0c;如果有相同日期&#xff0c;则按身份证号码大小进行排序&#xff0c;如果是错误的身份证号&#xff0c;则从排序列表中删除(仅需判断前两位省级地区编码是否在下面的…

知识图谱-KGE-语义匹配-双线性模型-2016:NAM

【paper】 Probabilistic Reasoning via Deep Learning: Neural Association Models【简介】 本文是中科大和科大讯飞联合发表在 IJCAI 2016 上的工作&#xff0c;本文提出了 NAM&#xff08;Neural Association Model&#xff09;用于概率推理&#xff0c;并具体化为 DNN&…

十二月7号

一、uboot概念 1.1 uboot和bootloader关系 1.bootloader:是一系列引导加载程序的统称 boot:引导 loader&#xff1a;加载 2.uboot是引导加载程序中的一种 1.2 uboot特点 1.uboot是由德国DNEX小组进行维护的 2.uboot是一个开源分布式系统 3.uboot支持多种硬件架构平台(ARM/X8…

Blazor 部署 pdf.js 不能正确显示中文资源解决办法

原文链接 [https://www.cnblogs.com/densen2014/p/16964858.html] 在Blazor项目嵌入 pdf.js 时不能正确显示中文,浏览器F12显示如下错误 错误 l10n.js /web/locale/locale.properties not found. 我找到了解决方案。它不仅消除了上面提到的错误&#xff08;即 404 - locale.p…

nextjs13 webpack5 使用wasm报错

问题描述&#xff1a; 在next 13, webpack 5, react 18的项目中使用Rust编写的wasm报错&#xff1a; ./node_modules/image-map-path/image_map_path_bg.wasm Module parse failed: Unexpected character (1:0) The module seem to be a WebAssembly module, but module is n…