机器学习的三个基本要素
机器学习的基本要素包括模型、学习准则(策略)和优化算法三个部分。机器学习方法之间的不同,主要来自其模型、学习准则(策略)、优化算法的不同。
模型
机器学习首要考虑的问题是学习什么样的模型(Model)。在监督学习中,给定训练集,学习的目的是希望能够拟合一个函数 f ( x ; θ ) f({\bm x}; {\bm \theta}) f(x;θ)来完成从输入特征向量 x {\bm x} x到输出标签的映射。这个需要拟合的函数 f ( x ; θ ) f({\bm x}; {\bm \theta}) f(x;θ)称为模型,它由参数向量 θ {\bm \theta} θ决定。 θ {\bm \theta} θ称为模型参数向量, θ {\bm \theta} θ所在的空间称为参数空间(Parameter Space)。一般来说,模型有两种形式,一种形式是概率模型(条件概率分布),另一种形式是非概率模型(决策函数)。决策函数还可以再分为线性和非线性两种,对应的模型称为线性模型和非线性模型。在实际应用中,将根据具体的学习方法来决定采用概率模型还是非概率模型。
将训练得到的模型称为一个假设,从输入空间到输出空间的所有可能映射组成的集合称为假设空间(Hypothesis Space)。在监督学习中,模型是所要学习的条件概率分布或决策函数。模型的假设空间包含所有可能的条件概率分布或决策函数。例如,假设决策函数是输入特征向量 x {\bm x} x的线性函数,那么模型的假设空间是所有这些线性函数构成的函数集合。假设空间中的模型一般有无穷多个,而机器学习的目的是从这个假设空间中选择出一个最好的预测模型,即在参数空间中选择一个最优的估计参数向量 θ ^ \hat{{\bm \theta}} θ^。
学习准则(策略)
在明确了模型的假设空间之后,接下来需要考虑的是按照什么样的准则(策略)从假设空间中选择最优的模型,即学习准则或策略问题。
机器学习最后都归结为求解最优化问题,为了实现某一目标,需要构造出一个“目标函数”(Objective Function),然后让目标函数达到极大值或极小值,从而求得机器学习模型的参数。如何构造出一个合理的目标函数,是建立机器学习模型的关键,一旦目标函数确定,可以通过优化算法来求解。
对于监督学习中的分类问题与回归问题,机器学习本质上是给定一个训练样本集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T = \{({\bm x}_1, y_1), ({\bm x}_2, y_2), \ldots, ({\bm x}_N, y_N)\} T={(x1,y1),(x2,y2),…,(xN,yN)},尝试学习 x i → y i {\bm x}_i \rightarrow y_i xi→yi的映射函数 f ( x i ; θ ) f({\bm x}_i; {\bm \theta}) f(xi;θ),其中 θ {\bm \theta} θ是模型的参数向量,使得给定一个输入样本数据 x {\bm x} x,即便这个 x {\bm x} x不在训练样本中,也能够为 x {\bm x} x预测出一个标签值 y ^ \hat{y} y^。
-
损失函数
(1)0-1 损失函数
0-1 损失函数(0-1 Loss Function)是最直接地反映模型正确与否的损失函数,对于正确的预测,损失函数值为 0;对于错误的预测,损失函数值为 1。其数学表达式为:
L ( y i , f ( x i ; θ ) ) = { 0 , f ( x i ; θ ) = y i 1 , f ( x i ; θ ) ≠ y i L(y_i, f({\bm x}_i; {\bm \theta})) = \begin{cases} 0, & f({\bm x}_i; {\bm \theta}) = y_i \\ 1, & f({\bm x}_i; {\bm \theta}) \neq y_i \end{cases} L(yi,f(xi;θ))={0,1,f(xi;θ)=yif(xi;θ)=yi可见,0-1 损失函数不考虑预测值与实际值的误差大小,只要预测错误,损失函数值均为 1。虽然 0-1 损失函数能够直观地反映模型的错误情况,但是它的数学性质并不是很好——不连续也不可导,因此在优化时很困难。通常,会选择其他相似的连续可导函数来替代它。
(2)平方损失函数
平方损失函数(Quadratic Loss Function)是模型输出的预测值与实际观测值之差的平方,其数学表达式为:
L ( y i , f ( x i ; θ ) ) = [ y i − f ( x i ; θ ) ] 2 L(y_i, f({\bm x}_i; {\bm \theta})) = [y_i - f({\bm x}_i; {\bm \theta})]^2 L(yi,f(xi;θ))=[yi−f(xi;θ)]2从直觉上理解,平方损失函数只考虑预测值与实际观测值之间误差的大小,不考虑其正负。但由于经过平方运算,与实际观测值偏差较大的预测值会比偏差较小的预测值受到更严重的惩罚。平方损失函数具有良好的数学性质——连续、可微分且为凸函数,是机器学习回归任务中最常用的一种损失函数,也称为 L 2 L_2 L2损失函数。
当模型输出预测值与实际观测值之间的误差服从高斯分布的假设成立时,最小化均方误差损失函数与极大似然估计本质上是一致的,在此情形下(如回归任务),均方误差损失函数是最优的选择。
(3)绝对损失函数
绝对损失函数(Absolute Loss Function)是模型输出的预测值与实际观测值之差的绝对值,其数学表达式为:
L ( y i , f ( x i ; θ ) ) = ∣ y i − f ( x i ; θ ) ∣ L(y_i, f({\bm x}_i; {\bm \theta})) = |y_i - f({\bm x}_i; {\bm \theta})| L(yi,f(xi;θ))=∣yi−f(xi;θ)∣
绝对损失函数也称为 L 1 L_1 L1损失函数。与平方损失函数类似,绝对损失函数也只考虑预测值与实际观测值之间误差的大小,不考虑其正负。所不同的是,由于绝对损失与绝对误差之间是线性关系,平方损失与误差之间是平方关系,当误差非常大的时候,平方损失会远大于绝对损失。因此,当样本中出现一个误差非常大的离群样本(Outlier)时,平方损失会产生一个非常大的损失,对模型的训练会产生较大的影响。所以,与平方损失函数相比,绝对损失函数对于离群样本更加鲁棒,即不易受到离群样本的影响。
另一方面,当使用梯度下降算法时,平方损失函数的梯度为 [ y i − f ( x i ; θ ) ] [y_i - f({\bm x}_i; {\bm \theta})] [yi−f(xi;θ)],而绝对损失函数的梯度为 ± 1 \pm 1 ±1,即平方损失函数的梯度的幅度会随误差大小变化,而绝对损失函数的梯度的幅度则一直保持为 1,即便在绝对误差 ∣ y i − f ( x i ; θ ) ∣ |y_i - f({\bm x}_i; {\bm \theta})| ∣yi−f(xi;θ)∣很小时,绝对损失函数的梯度的幅度也同样为 1,这实际上是非常不利于模型的训练的。当然,也可以通过在训练过程中动态调整学习率来缓解这个问题,但是总的来说,平方损失函数通常比绝对损失函数可以更快地收敛。
(4)对数损失函数
其定义为:
L ( y i , f ( x i ; θ ) ) = − log P ( y i ∣ x i ) L(y_i, f({\bm x}_i; {\bm \theta})) = -\log P(y_i \mid {\bm x}_i) L(yi,f(xi;θ))=−logP(yi∣xi)
对数损失函数(Logarithmic Loss Function)或负对数似然损失函数(Negative Log Likelihood Loss Function)源于极大似然估计的思想——极大化对数似然函数,而通常习惯于最小化损失函数,因此将它转变为最小化负对数似然函数。取对数是为了方便计算极大似然估计,因为在极大似然估计中,直接求导比较困难,所以通常都是先取对数再求导寻找极值点。 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yi∣xi)是指当前模型对于输入样本 x i {\bm x}_i xi的预测值为 y i y_i yi的概率,即预测正确的概率。因为对数函数是单调递增的,所以在公式中加上负号之后,表示预测正确的概率越高,其损失函数值越小,即最大化 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yi∣xi)等价于最小化损失函数。对数损失函数通常用于逻辑斯谛回归(Logistic Regression)模型的推导中。
(5)交叉熵损失函数
交叉熵(Cross Entropy)是 Shannon 信息论中一个重要概念,用于衡量同一个随机变量中的两个不同概率分布的差异程度。假设一个样本集中有两个概率分布 p p p和 q q q,其中 p p p表示真实概率分布, q q q表示非真实概率分布。假如,按照真实概率分布 p p p来衡量表示一个样本所需要的编码长度的期望为:
H ( p ) = − ∑ i p i log p i H(p) = -\sum_{i} p_i \log p_i H(p)=−i∑pilogpi
但是,如果按照非真实概率分布 q q q来衡量表示服从真实概率分布 p p p的一个样本所需要的平均编码长度,则应该是:
H ( p , q ) = − ∑ i p i log q i H(p, q) = -\sum_{i} p_i \log q_i H(p,q)=−i∑pilogqi
此时将 H ( p , q ) H(p, q) H(p,q)称为交叉熵。
在机器学习中,交叉熵可作为损失函数。交叉熵损失函数(Cross-Entropy Loss Function)定义为:
L ( y i , f ( x i ; θ ) ) = − [ y i log f ( x i ; θ ) + ( 1 − y i ) log ( 1 − f ( x i ; θ ) ) ] L(y_i, f({\bm x}_i; {\bm \theta})) = -[y_i \log f({\bm x}_i; {\bm \theta}) + (1 - y_i) \log (1 - f({\bm x}_i; {\bm \theta}))] L(yi,f(xi;θ))=−[yilogf(xi;θ)+(1−yi)log(1−f(xi;θ))]
(6)合页损失函数
对于一个二分类的问题,数据集的标签取值是 { + 1 , − 1 } \{+1, -1\} {+1,−1},预测值是一个连续型实数值函数,那么合页损失函数(Hinge Loss Function)的定义为:
L ( y i , f ( x i ; θ ) ) = max ( 0 , 1 − y i f ( x i ; θ ) ) L(y_i, f({\bm x}_i; {\bm \theta})) = \max(0, 1 - y_i f({\bm x}_i; {\bm \theta})) L(yi,f(xi;θ))=max(0,1−yif(xi;θ))
在机器学习中,软间隔支持向量机(SVM)模型的原始最优化问题等价于最小化合页损失。只有当样本被正确分类且函数间隔大于 1 时,合页损失才等于 0;否则损失是 1 − y i f ( x i ; θ ) 1 - y_i f({\bm x}_i; {\bm \theta}) 1−yif(xi;θ),只能大于 0。
除了上述几种损失函数外,还有其他针对特定任务的损失函数。总而言之,没有一个适合所有机器学习问题的损失函数,损失函数的设计是以能够更好地解决具体问题为目的的。针对特定问题选择损失函数涉及许多因素,例如所选机器学习模型的类型、是否易于计算导数以及训练样本集中离群样本所占比例等。
2. 期望风险
模型的输入 X {\bm X} X和输出 Y Y Y都可以看作是输入和输出联合空间的随机变量,服从联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),称损失函数在该联合概率分布上的期望为 期望风险(Expected Risk),其数学表达式为:
R exp ( θ ) = E ( X , Y ) ∼ P ( x , y ) [ L ( y , f ( x ; θ ) ) ] = ∫ L ( y , f ( x ; θ ) ) P ( x , y ) d x d y R_{\exp}({\bm \theta}) = E_{({\bm X}, Y) \sim P({\bm x}, y)}[L(y, f({\bm x}; {\bm \theta}))] = \int L(y, f({\bm x}; {\bm \theta})) P({\bm x}, y) \, {\rm d}{\bm x} {\rm d}y Rexp(θ)=E(X,Y)∼P(x,y)[L(y,f(x;θ))]=∫L(y,f(x;θ))P(x,y)dxdy
期望风险是损失函数的期望,用来度量平均意义下模型预测的性能好坏。
3. 经验风险
一个好的模型应当有较小的期望风险。机器学习的目标在于从假设空间中选取最优模型,而选取最优模型的准则是期望风险最小化。显然,要使期望风险 R exp ( θ ) R_{\exp}({\bm \theta}) Rexp(θ)最小化,需要知道联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),在模式分类问题中,即必须已知先验概率和条件概率密度。但是,在实际的机器学习问题中,无法得知真实的联合概率分布函数,因此也没有办法直接计算期望风险。事实上,如果知道数据的联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),可以直接利用贝叶斯公式求得条件概率 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yi∣xi),也没必要学习模型了。
然而,从另一个方面来看,可以利用训练样本集中的 N N N个观测样本近似地求出经验风险。给定一个训练样本数据集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x i , y i ) , ⋯ , ( x N , y N ) } , T = \{({\bm x}_1, y_1), ({\bm x}_2, y_2), \cdots, ({\bm x}_i, y_i), \cdots, ({\bm x}_N, y_N)\}, T={(x1,y1),(x2,y2),⋯,(xi,yi),⋯,(xN,yN)},
很容易计算出模型的经验风险(Empirical Risk)或经验损失(Empirical Loss),即根据训练样本集的平均损失。
R emp ( θ ) = 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) R_{\text{emp}}({\bm \theta}) = \frac{1}{N} \sum_{i=1}^{N} L(y_i, f({\bm x}_i; {\bm \theta})) Remp(θ)=N1i=1∑NL(yi,f(xi;θ))
由于 R emp ( θ ) R_{\text{emp}}({\bm \theta}) Remp(θ)是用已知训练样本(即经验数据)定义的,因此称为经验风险。在假设空间、损失函数以及训练样本集确定的情况下,经验风险可以确定。根据大数定律,当训练样本集中的样本数量 N N N趋向于无穷大时,经验风险收敛于期望风险。这样,可用经验风险 R emp ( θ ) R_{\text{emp}}({\bm \theta}) Remp(θ)来逼近期望风险 R exp ( θ ) R_{\exp}({\bm \theta}) Rexp(θ)。使得经验风险最小的模型是最优的模型,这是经验风险最小化(Empirical Risk Minimization, ERM)准则。按照经验风险最小化准则,求解模型的最优参数估计是求解如下的最优化问题:
θ ^ = arg min θ R emp ( θ ) = arg min θ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) \hat{{\bm \theta}} = \arg \min_{{\bm \theta}} R_{\text{emp}}({\bm \theta}) = \arg \min_{{\bm \theta}} \frac{1}{N} \sum_{i=1}^{N} L(y_i, f({\bm x}_i; {\bm \theta})) θ^=argθminRemp(θ)=argθminN1i=1∑NL(yi,f(xi;θ))
4. 结构风险
当训练集中的样本数量足够大时,经验风险最小化(ERM)准则能保证有很好的效果,在现实中被广泛采用。例如,极大似然估计(Maximum Likelihood Estimation)是经验风险最小化的一个例子。当模型是条件概率分布、损失函数是对数损失函数时,经验风险最小化等价于极大似然估计。然而,通常情况下,由于训练样本集中的样本数量是有限的,而且训练集中的样本数据包含了各种噪声,因此实际所用的训练集不能很好地反映样本数据的真实分布。在这种情况下,如果利用经验风险最小化准则,则会导致模型产生“过拟合”(Overfitting)现象。
导致“过拟合”发生的因素有很多,最主要的原因是训练样本数量不足以及模型过于复杂。为了解决这一问题,需要引入结构风险函数,即对经验风险函数进行矫正,即在经验风险上加上表示模型复杂度的正则(Regularization)项或惩罚(Penalty)项。在假设空间、损失函数以及训练样本集确定的情况下,结构风险函数定义为:
R str ( θ ) = 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ φ ( θ ) R_{\text{str}}({\bm \theta}) = \frac{1}{N} \sum_{i=1}^N L(y_i, f({\bm x}_i; {\bm \theta})) + \lambda \varphi ({\bm \theta}) Rstr(θ)=N1i=1∑NL(yi,f(xi;θ))+λφ(θ)
式中, λ ( λ > 0 ) \lambda (\lambda > 0) λ(λ>0)为正则化系数,也称惩罚因子,用以权衡经验风险和模型复杂度; φ ( θ ) \varphi ({\bm \theta}) φ(θ)代表模型函数的复杂度,是定义在假设空间上的泛函,简单来说是函数的函数。模型函数的复杂度越高, φ ( θ ) \varphi ({\bm \theta}) φ(θ)也越大。一般使用模型参数向量 θ {\bm \theta} θ的 ℓ 2 \ell_2 ℓ2范数或 ℓ 1 \ell_1 ℓ1范数来近似模型的复杂度。通过设置正则化系数 λ \lambda λ,来权衡经验风险和正则项,减小参数规模,达到模型简化的目的,从而使模型具有更好的泛化能力。因此,结构风险函数强制使模型的复杂度不应过高,这种学习准则(策略)称为结构风险最小化(Structural Risk Minimization, SRM)准则。正则化可以看成结构风险最小化的实现,是为了防止过拟合而提出来的策略。
结构风险小意味着经验风险小、模型复杂度低。结构风险小的模型通常对训练样本以及新的测试样本都有较好的预测性能。结构风险最小化的策略认为结构风险最小的模型是最优的模型。所以按照结构风险最小化准则,求解模型的最优参数估计是求解如下的最优化问题:
θ ^ = arg min θ R str ( θ ) = arg min θ [ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ R ( θ ) ] \hat{{\bm \theta}} = \arg \min_{{\bm \theta}} R_{\text{str}}({\bm \theta}) = \arg \min_{{\bm \theta}} \left[ \frac{1}{N} \sum_{i=1}^N L(y_i, f({\bm x}_i; {\bm \theta})) + \lambda R({\bm \theta}) \right] θ^=argθminRstr(θ)=argθmin[N1i=1∑NL(yi,f(xi;θ))+λR(θ)]
优化算法
在获得了训练样本集、确定了假设空间以及选定了合适的学习准则之后,要根据准则(策略)从假设空间中选择最优模型,需要考虑用什么样的计算方法来求解模型参数估计。
机器学习模型的训练和学习的过程,实际上是求解最优化问题的过程。如果最优化问题存在显式的解析解,则这个最优化问题比较简单,可以求出它的闭式解。但是,如果不存在解析解,则需要通过数值计算的方法来不断逼近。在机器学习中,很多优化函数是凸函数,因此,如何高效地寻找到全局最优解,是一个值得研究的问题。
目前,常用的优化算法有梯度下降法(Gradient Descent, GD)、随机梯度下降法(Stochastic Gradient Descent, SGD)、批量梯度下降法(Mini-Batch Gradient Descent, MBGD)、牛顿法、拟牛顿法、坐标下降法等。
相关文章:
机器学习的三个基本要素
机器学习的基本要素包括模型、学习准则(策略)和优化算法三个部分。机器学习方法之间的不同,主要来自其模型、学习准则(策略)、优化算法的不同。 模型 机器学习首要考虑的问题是学习什么样的模型(Model&am…...

神经机器翻译:联合学习对齐和翻译
大家读完觉得有帮助记得关注和点赞!!! 摘要 神经机器翻译是最近提出的机器翻译方法。与传统的统计机器翻译不同,神经机器翻译旨在构建一个可以联合调整以最大化翻译性能的单一神经网络。最近为神经机器翻译提出的模型通常属于编码…...

[Web 安全] PHP 反序列化漏洞 —— PHP 魔术方法
关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 魔术方法 - 简介 - PHP 魔术方法 - 简单教程,简单编程PHP 中,以两个下划线 ( __ ) 开头方法称之为 「 魔术方法 」 这些 「 魔术方法 」 在 [PHP](/l/yufei/php…...

聆听PostgreSQL数据库的使用
参考:(1)零基础入门PostgreSQL教程 (2)菜鸟教程 文章目录 一、PostgreSQL是什么?二、基本使用1.下载2.操作(1)数据库(2)表 一、PostgreSQL是什么?…...

2025嵌入式软件开发工程师--音频方向
一、选择题(每题3分,共30分) 1.以下哪个不是C语言中的关键字?( ) A. int B. Float C. Define D. Return 2.以下代码的输出是: ( ) inta 5, b 10; printf("%d“, a b); A. 15 B.16 …...
C#释放内存空间的方法
目录 前言释放 C# 对象内存的六种方法1、手动释放内存空间2、使用 Using 语句3、使用 垃圾回收器4、GC.Collect() 方法5、GC.WaitForPendingFinalizers() 方法6、WeakReference 类 注意 前言 当不再需要对象时释放内存空间对于防止内存泄漏和提高应用程序性能至关重要。C# 提供…...

《鸢尾花数学大系:从加减乘除到机器学习》开源资源
《鸢尾花数学大系:从加减乘除到机器学习》开源资源 Gitee:https://gitee.com/higkoo/ bilibili:https://space.bilibili.com/513194466 GitHub:https://github.com/Visualize-ML...
如何将一台服务器的pip环境迁移到另一个机器?
在没有网络的情况下,将一台服务器的 pip 环境迁移到另一台机器,可按以下步骤进行操作: 步骤一:在源服务器上导出已安装的包列表 在有网络且已安装所需 Python 包的源服务器上,使用以下命令导出已安装的 Python 包列表: pip freeze > requirements.txt该命令会将当前…...

Java 入门 (超级详细)
一、什么是Java Java是一种高级编程语言,由Sun Microsystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运…...
计算机基础面试(数据结构)
1. 数组和链表的区别是什么?各自的优缺点是什么? 专业解答: 数组内存连续,支持随机访问,但插入删除效率低;链表内存离散,插入删除高效,但访问需遍历。 初中生版: 数组像…...

DBGPT安装部署使用
简介 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mul…...

【蓝桥杯单片机】第十二届省赛
一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…...

开源嵌入式实时操作系统NuttX介绍
一、NuttX RTOS的发展历程:从个人项目到Apache顶级开源项目 NuttX 是一款轻量级、可扩展的实时操作系统(RTOS),其发展历程堪称开源社区的经典案例。 起源与初创(2003-2007) NuttX 由 Gregory Nutt 于2003…...

阿里云服务器部署项目笔记 实操 centos7.9
阿里云服务器部署项目笔记 实操 centos7.9 springboot vue elementUImysqlredis 相关的redis,mysql,nginx镜像,jdk 通过网盘分享的文件:docker镜像 链接: https://pan.baidu.com/s/15VwcWBP4Jy07xADuvylgQw?pwdm2g9 提取码: m2g9 配置环境 连接云服务器 安装…...

Java-实现PDF合同模板填写内容并导出PDF文件
可用于公司用户合同导出pdf文件 效果图 一、导入所需要jar包 <!--生成PDF--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency&…...

Docker安装Grafana数据可视化平台
介绍 Grafana是一个开源的监控和数据可视化平台,主要用于展示和分析时间序列数据。提供功能强大且灵活的数据可视化和监控工具,适用于多种场景,它广泛应用于DevOps、IT运维、物联网(IoT)和业务分析等领域。 Grafana的主…...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...

解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题
一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux(centos)系统没有出现这问题,如果你是linux系统碰到的,本文也有一定大参考价值。 根本思路就是:tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…...

武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会
2025年2月21日下午,武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司(以下简称“谱度众合”)在学院学术厅举行校企联培专业学位研究生合作交流会。武汉大学生命科学学院副院长刘星教授、生命科学学院周宇教授、产…...
4.网络技术与应用
一、计算机网络基础 1. 网络基本原理 通信模型: OSI七层模型: 物理层(传输比特流,如网线、光纤)数据链路层(MAC地址,交换机)网络层(IP地址,路由器࿰…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...