【一起啃书】《机器学习》第五章 神经网络

文章目录

      • 第五章 神经网络
        • 5.1 神经元模型
        • 5.2 感知机与多层网络
        • 5.3 误差逆传播算法
        • 5.4 全局最小与局部极小
        • 5.5 其他常见神经网络
        • 5.6 深度学习

第五章 神经网络

5.1 神经元模型

  神经网络是由具有适应性简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应,神经网络中最基本的成分是神经元模型,以下为第一个神经元数学模型——M-P神经元模型。

  在这个模型中,神经元接收到来自 n n n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出,理想中的激活函数如下图a所示的阶跃函数,它将输入值映射为输出值“0”或“1”,其中“1”对应于神经元兴奋,“0”对应于神经元抑制。

  然而,阶跃函数具有不连续、不光滑等不太好的性质,所以实际常用Sigmoid函数作为激活函数。目前常用的激活函数主要有以下几种,具体的可以参考这个链接(激活函数 | 深度学习领域最常用的10个激活函数,详解数学原理及优缺点)。

  • 线性激活函数:输出与输入成正比,没有非线性特性,一般用于输出层。
  • Sigmoid激活函数:输出在0到1之间,具有平滑的非线性特性,一般用于二分类问题或者概率输出。
  • 双曲正切激活函数:输出在-1到1之间,具有平滑的非线性特性,一般用于多分类问题或者中心化输出。
  • ReLU激活函数:输出为0或者正数,具有分段的非线性特性,一般用于隐藏层,可以加速收敛和减少梯度消失。
  • Leaky ReLU激活函数:输出为负数或者正数,具有分段的非线性特性,一般用于隐藏层,可以避免ReLU的死亡节点问题。
  • ELU激活函数:输出为负指数或者正数,具有平滑的非线性特性,一般用于隐藏层,可以避免ReLU的死亡节点问题,并且有更好的收敛效果。
  • SELU激活函数:输出为负指数或者正数,具有平滑的非线性特性,一般用于隐藏层,可以自动归一化网络,并且有更好的收敛效果。
  • Swish激活函数:输出为负数或者正数,具有平滑的非线性特性,一般用于隐藏层,可以提高准确率和稳定性。
  • Softmax激活函数:输出为多个0到1之间的值,其和为1,具有平滑的非线性特性,一般用于输出层,可以表示多分类问题的概率分布。

5.2 感知机与多层网络

  感知机是神经网络最基本的模型,它是由一个或多个神经元组成的,而神经网络是由多个感知机或其他类型的神经元连接而成的复杂模型,它可以实现非线性分类和回归等功能,比如下面就是一个有两个输入神经元的感知机网络结构 y = f ( ∑ w i x i − θ ) y = f(\sum {{w_i}} {x_i} - \theta ) y=f(wixiθ),可以实现与、或、非运算。

  更一般的,给定训练数据集,权重 w w w以及阈值 θ \theta θ可以通过学习得到,而阈值 θ \theta θ可以看作固定输入为-1的权重 w n + 1 w_{n+1} wn+1,这样就可以统一为权重的学习,对于感知机来说,学习规则如下所示,假设当前感知机的输出为$\mathop y\limits^ \wedge $,感知机权重将这样调整:
w i ← w i + Δ w i Δ w i = η ( y − y ∧ ) x i {w_i} \leftarrow {w_i} + \Delta {w_i}\\ \Delta {w_i} = \eta (y - \mathop y\limits^ \wedge ){x_i} wiwi+ΔwiΔwi=η(yy)xi
  其中 η ∈ ( 0 , 1 ) \eta \in (0,1) η(0,1)称为学习率,若感知机预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整,这也是感知机学习算法,是一种基于误分类的监督学习算法,目标是找到一个能够将训练数据正确分类的超平面。

  感知机选择将预测值与实际值作差的形式来进行权重更新的依据是为了使超平面向正确分类的方向移动。当一个实例被误分类时,预测值与实际值的差就是误差的符号,它表示了超平面与实例之间的距离和方向,此时将误差乘以输入向量,就可以得到一个调整量,它表示了超平面在每个特征维度上需要移动的大小和方向,而将调整量加到权重上,就可以使超平面向正确分类的方向移动一定的距离。这样,经过多次迭代,超平面就可以逐渐接近最优的位置了。

  上述问题都是线性可分问题,而这样的感知机无法解决非线性可分问题,要解决非线性可分问题,需要考虑使用多层功能神经元。如下所示的两层感知机,就可以解决异或问题,而在输出层与输入层之间的一层神经元则被称为隐层或隐含层,也是具有激活函数的功能神经元。

  下面介绍一下前馈神经网络,在前馈神经网络中,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,如下所示:

  前馈神经网络与反馈神经网络的区别:深度学习–前馈神经网络、反馈神经网络

5.3 误差逆传播算法

  多层网络的学习能力比单层感知器强得多,如果想训练多层网络,上述简单感知器的学习规则显然就不够了,需要更强大的学习算法,下面来介绍一下BP算法,BP算法是一种用于训练多层神经网络的梯度下降算法,它利用链式法则计算网络每层的权重对损失函数的梯度,然后更新权重来最小化损失函数。BP算法分为两个阶段:激励传播和权重更新。激励传播阶段包括前向传播和反向传播,前向传播是将训练输入送入网络以获得预测结果,反向传播是计算预测结果与训练目标的误差。权重更新阶段是根据误差和梯度调整网络的权重,以减小误差。

  下面对BP算法中的一些符号进行定义,以一个拥有 d d d个输入神经元、 l l l个输出神经元、 q q q个隐层神经元的多层前馈网络结构为例,假设隐层和输出层神经元都是用Sigmoid函数作为激活函数。

  • D D D:训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , x i ∈ R d , y ∈ R l D = \{ ({x_1},{y_1}),({x_2},{y_2}),...,({x_m},{y_m})\} ,{x_i} \in {{ R}^d},y \in {{ R}^l} D={(x1,y1),(x2,y2),...,(xm,ym)},xiRd,yRl,即输入示例由 d d d个属性描述,输出 l l l维实值向量
  • θ j {\theta _j} θj:输出层第 j j j个神经元的阈值
  • γ h {\gamma _h} γh:隐层第 h h h个神经元的阈值
  • v i h {v_{ih}} vih:输入层第 i i i个神经元与隐层第 h h h个神经元之间的连接权重
  • w h j {w_{hj}} whj:隐层第 h h h个神经元与输出层第 j j j个神经元之间的连接权重
  • α h {\alpha _h} αh:隐层第 h h h个神经元接收到的输入 α h = ∑ i = 1 d v i h x i {\alpha _h} = \sum\limits_{i = 1}^d {{v_{ih}}{x_i}} αh=i=1dvihxi
  • β j {\beta _j} βj:输出层第 j j j个神经元接收到的输入 β j = ∑ h = 1 q w h j b h {\beta _j} = \sum\limits_{h = 1}^q {{w_{hj}}} {b_h} βj=h=1qwhjbh,其中 b h b_h bh为隐层第 h h h个神经元的输出

  对于训练例 ( x k , y k ) ({x_k},{y_k}) (xk,yk),假定神经网络的输出为 y ∗ k = ( y ∗ 1 k , y ∗ 2 k , . . . , y ∗ l k ) {{y^*}_k} = ({y^*}_1^k,{y^*}_2^k,...,{y^*}_l^k) yk=(y1k,y2k,...,ylk),即 y ∗ l k = f ( β j − θ j ) {y^*}_l^k = f({\beta _j} - {\theta _j}) ylk=f(βjθj),则网络在 ( x k , y k ) ({x_k},{y_k}) (xk,yk)上的均方误差为
E k = 1 2 ∑ j = 1 l ( y ∗ l k − y j k ) 2 {E_k} = \frac{1}{2}{\sum\limits_{j = 1}^l {({y^*}_l^k - y_j^k)} ^2} Ek=21j=1l(ylkyjk)2
  下面以隐层到输出层的连接权重 w h j w_{hj} whj为例来进行权重更新的推导,对于误差 E k E_k Ek,给定学习率 η \eta η,有
Δ w h j = − η ∂ E k ∂ w h j ∂ E k ∂ w h j = ∂ E k ∂ y ∗ l k ⋅ ∂ y ∗ l k ∂ β j ⋅ ∂ β j ∂ w h j , ∂ β j ∂ w h j = b h \Delta {w_{hj}} = - \eta \frac{{\partial {E_k}}}{{\partial {w_{hj}}}}\\ \frac{{\partial {E_k}}}{{\partial {w_{hj}}}} = \frac{{\partial {E_k}}}{\partial {y^*}_l^k} \cdot \frac{\partial {y^*}_l^k}{{\partial {\beta _j}}} \cdot \frac{{\partial {\beta _j}}}{{\partial {w_{hj}}}}, \frac{{\partial {\beta _j}}}{{\partial {w_{hj}}}} = {b_h} Δwhj=ηwhjEkwhjEk=ylkEkβjylkwhjβj,whjβj=bh
  Sigmoid函数有一个很好的性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x) = f(x)(1 - f(x)) f(x)=f(x)(1f(x)),所以可以定义如下 g j g_j gj
g j = − ∂ E k ∂ y ∗ l k ⋅ ∂ y ∗ l k ∂ β j = − ( y ∗ l k − y j k ) f ′ ( β j − θ j ) = y ∗ l k ( 1 − y ∗ l k ) ( y j k − y ∗ l k ) {g_j} = - \frac{{\partial {E_k}}}{\partial {y^*}_l^k} \cdot \frac{\partial {y^*}_l^k}{{\partial {\beta _j}}} = - ({y^*}_l^k - y_j^k)f'({\beta _j} - {\theta _j}) = {y^*}_l^k(1 - {y^*}_l^k)(y_j^k - {y^*}_l^k) gj=ylkEkβjylk=(ylkyjk)f(βjθj)=ylk(1ylk)(yjkylk)
  将上述 g j g_j gj代入之前的式子即可得到权重 w h j w_{hj} whj的更新公式: Δ w h j = η g j b h \Delta {w_{hj}} = \eta g_j b_h Δwhj=ηgjbh,类似也可以得到其他权重的更新公式,如下所示:
Δ θ j = − η g j , Δ v i h = η e h x i , Δ γ h = − η e h 其中 e h = − ∂ E k ∂ b h ⋅ ∂ b h ∂ α h = − ∑ j = 1 l ∂ E k ∂ β j ⋅ ∂ β j ∂ b h f ′ ( α h − γ h ) = ∑ j = 1 l w h j g j f ′ ( α h − γ h ) = b h ( 1 − b h ) ∑ j = 1 l w h j g j \Delta {\theta _j} = - \eta {g_j},\Delta {v_{ih}} = \eta {e_h}{x_i},\Delta {\gamma _h} = - \eta {e_h}\\ 其中{e_h} = - \frac{{\partial {E_k}}}{{\partial {b_h}}} \cdot \frac{{\partial {b_h}}}{{\partial {\alpha _h}}} = - \sum\limits_{j = 1}^l {\frac{{\partial {E_k}}}{{\partial {\beta _j}}} \cdot \frac{{\partial {\beta _j}}}{{\partial {b_h}}}} f'({\alpha _h} - {\gamma _h}) = \sum\limits_{j = 1}^l {{w_{hj}}} {g_j}f'({\alpha _h} - {\gamma _h}) = {b_h}(1 - {b_h})\sum\limits_{j = 1}^l {{w_{hj}}} {g_j} Δθj=ηgj,Δvih=ηehxi,Δγh=ηeh其中eh=bhEkαhbh=j=1lβjEkbhβjf(αhγh)=j=1lwhjgjf(αhγh)=bh(1bh)j=1lwhjgj
  下面给出BP算法的工作流程,对于每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权重和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,比如训练误差已达到一个很小的值。

  BP算法的目标是要最小化训练集 D D D上的累积误差 E = 1 m ∑ k = 1 m E k E = \frac{1}{m}\sum\limits_{k = 1}^m {{E_k}} E=m1k=1mEk,在这里要注意虽然BP算法里面有反向传播这一步,但这与反馈神经网络中的反馈是不同的,BP算法里面的反向传播是指根据网络的输出误差,从输出层到输入层逐层计算并更新权重参数的过程,而反馈神经网络中的反馈是指网络的输出会经过一定的变换后,再作为输入传回到网络中,形成一个循环或回路。

  下面介绍一下两种BP算法:标准BP算法与累积BP算法。

  标准BP算法每次只针对一个训练样例更新参数,也就是随机梯度下降法(stochastic gradient descent),优点是参数更新频繁,可以加快收敛速度和避免局部最优,缺点是参数更新不一致,可能导致震荡和偏离最优方向。累积BP算法每次针对所有训练样例更新参数,也就是批量梯度下降法(batch gradient descent),优点是参数更新稳定,可以减少噪声和波动,缺点是参数更新缓慢,可能导致陷入局部最优或过拟合。比如,假设有n个训练样例,分别使用标准BP和累积BP,那么参数更新的次数取决于迭代轮数,假设迭代轮数为m,那么:

  • 标准BP算法每轮迭代会对每个训练样例进行一次参数更新,所以总共会进行m*n次参数更新。
  • 累积BP算法每轮迭代会对所有训练样例进行一次参数更新,所以总共会进行m次参数更新。

  为了缓解BP网络的过拟合,一共有两种策略——早停和正则化早停是将数据集分成训练集和验证集,训练集用来计算梯度、更新连接权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权重和阈值。正则化是在误差目标函数中增加一个用于描述网络复杂度的部分,比如连接权重与阈值的平方和。

5.4 全局最小与局部极小

  在神经网络的训练过程中,我们往往会谈到两种最优:局部极小与全局最小。显然,参数空间内梯度为零的点,只要其误差函数值小于邻点的误差函数值,就是局部极小点;可能存在多个局部极小值,但是却只会有一个全局最小值。

  基于梯度的搜索时使用最为广泛的参数寻优方法,梯度下降法是沿着负梯度方向搜索最优解,因为负梯度方向是函数在当前点的方向导数最小的方向,方向导数是函数沿着某个方向的变化率,它与函数的梯度和该方向的单位向量的点积相等,当两个向量的夹角为180度时,点积最小,也就是说,当单位向量与梯度的反方向一致时,方向导数最小。因此,沿着负梯度方向走,函数值下降最快。

  目前常采用以下策略来试图跳出局部极小,从而进一步接近全局最小:

  • 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数,这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。
  • 使用“模拟退火”技术。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
  • 使用随机梯度下降。与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。

5.5 其他常见神经网络

(1)RBF网络

  RBF网络是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元的激活函数,而输出层则是对隐层神经元输出的线性组合。

(2)ART网络

  竞争型学习是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。而ART网络是竞争型学习的重要代表,该网络由比较层、识别层、识别阈值和重置模块组成。

  在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元,竞争的最简单方式是,计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜。获胜神经元将向其他识别层神经元发送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权重将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。

(3)SOM网络

  SOM网络是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。

  如下图所示,SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。

(4)级联相关网络

  一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权重、阈值等参数。与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构,级联相关网络是结构自适应网络的重要代表。

  级联相关网络有两个主要成分:“级联”和“相关”。级联是指建立层次连接的层级结构,相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。

(5)Elman网络

  Elman网络是最常用的递归神经网络之一,如下所示,它的结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。隐层神经元通常采用Sigmoid激活函数,而网络的训练则常通过推广的BP算法进行。

5.6 深度学习

  典型的深度学习模型就是很深层的神经网络,深度学习有很多应用场景,例如:

  • 语音识别:深度学习可以用于语音识别、语音合成等任务,例如谷歌的语音助手、苹果的Siri等。
  • 图像识别:深度学习在图像分类、目标检测、图像语义分割等计算机视觉任务中取得了显著成果,例如谷歌的人脸识别、腾讯的美颜相机等。
  • 自然语言处理:深度学习可以用于文本生成、机器翻译、情感分析等自然语言处理任务,例如微软的小冰、百度的翻译等。
  • 游戏:深度学习可以用于强化学习,让机器自主地学习和优化策略,例如谷歌的AlphaGo、OpenAI的Dota 2机器人等。
  • 医疗:深度学习可以用于医疗图像分析、疾病诊断、药物发现等医疗领域,例如IBM的Watson、阿里的ET医疗大脑等。
  • 艺术:深度学习可以用于图像风格迁移、图像生成、音乐生成等艺术领域,例如谷歌的Deep Dream、Prisma等。

  以下是卷积神经网络用于手写数字识别的一个例子。

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

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

相关文章

生产流程图怎么制作?思路提供

生产流程图是一种图表,用来展示生产流程中的各个环节及其顺序。这种图表可以帮助企业管理者更好地了解生产过程中的各个环节,从而更好地进行管理和优化。生产流程图通常包括各个生产环节的名称、所需时间、参与人员、设备和工具等信息。 在制作生产流程图…

七大软件架构设计原则详解

目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…

基于jdk1.8的Java服务监控和性能调优

JVM的参数类型 X参数 非标准参数-Xint: 解释执行-Xcomp: 第一次使用就编译成本地代码-Xmixed: JVM自己来决定是否编译成本地代码 默认使用的是mixed mode 用的不多, 只需要做了解, 用的比较多的是XX参数 XX参数 非标准化参数相对不稳定主要用来JVM调优和Debug Boolean: …

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

阿里云u1服务器通用算力型CPU处理器性能测评

阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最高vCPU算力与6代企业级实例持平,提供2c-32c规格和1:1/2/4/8丰富…

elasticsearch结构化查询(一)

在上一篇中我们介绍了DSL相关的知识,接下来我们将会学习elasticsearch的结构化查询,同时也实践一下上一篇的DSL的查询用法 什么是结构化搜索? 从《Elasticsearch权威指南》上摘取部分解释如下: 结构化搜索是指查询包含内部结构的数据。日期&#xff0…

MATLAB 之 函数文件、特殊形式的函数和程序调试与优化

文章目录 一、函数文件1. 函数文件的基本结构2. 函数调用2.1 函数调用的格式2.2 函数的递归调用2.3 函数参数的可调性2.4 全局变量与局部变量 二、特殊形式的函数1. 子函数2. 内联函数3. 匿名函数 三、程序调试与优化1. 程序调试方法1.1 利用调试函数进行程序测试1.2 利用调试工…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言: 在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程…

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…

Docker高频使用命令总结(镜像与容器命令)

目录 一.Docker常用命令总结 1.镜像命令管理 2.容器命令管理 二.Docker镜像操作命令 1.docker search:搜索镜像 2.docker pull:下载镜像 3.docker push:上传镜像 4.docker images:查看本地镜像 5.docker inspect &#x…

360+ChatGLM联手研发中国版“微软+OpenAI”

文章目录 前言360与智谱AI强强联合什么是智谱AI360智脑360GLM与360GPT大模型战略布局写在最后 前言 5月16日,三六零集团(下称“360”)与智谱AI宣布达成战略合作,双方共同研发的千亿级大模型“360GLM”已具备新一代认知智能通用模…

Springboot——事物管理

文章目录 事务管理一、 Spring事务管理1.1 事务回顾1.2 案例: 解散部门(未开启事务)1.3 事务管理注解Transactional1.4 事务管理日志开关1.5 rollbackFor 异常回滚属性1.6 propagation 事务传播行为1.7 解散部门并记录操作日志1.7.1 创建数据…

技术探秘:揭秘Bean Factory与FactoryBean的区别!

大家好,我是小米,一个热衷于技术分享的29岁小编。今天,我们来聊一聊在Spring框架中常用的两个概念:beanFactory和FactoryBean。它们虽然看似相似,但实际上有着不同的用途和作用。让我们一起来揭开它们的神秘面纱吧&…

离散数学_九章:关系(6)

🪐9.6 偏序 1、⛺偏序关系和偏序集⛲偏序关系⛲偏序(关系)的例子 a. “大于或等于” 关系b. “整除” 关系c. “包含” 关系 🎬偏序集🎬可比性(comparability) " ≼ " 符号a. 可比 &a…

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1)

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1) 苹果采摘机器人1、采摘流程与硬件设计2、机械臂驱动以及采摘轨迹设计2.1、台达A2电机驱动实现2.2、机械臂寻找苹果巡逻轨迹 苹果采摘机器人 1、采摘流程与硬件设计…

C++/Qt 小知识记录3

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识 QLineEdit限制输入大于0的正整数QLayout内清空已布局的WidgetWindows结束进程直接结束,子进程不响应结束事件正常结束,子进程响应结束事件 CMake关闭控制台Console实体与值对…

尾调用优化

尾调用优化 最近遇到一个堆栈溢出的问题,分析后发现可收敛为递归边界问题。结合“红宝书”中相关内容和ES6规范中的一些优化机制,整理记录如下。 前言 程序运行时,计算机会为应用程序分配一定的内存空间。应用程序会自行分配所获得的内存空…

数组或结构体赋值时memcpy与直接赋值的效率比较

先上结论: 二者不一定谁快通常情况下,数组维度越大,使用memcpy效率更高数组维度越大,直接赋值耗时主体是循环耗时 Note: “等号赋值”被编译器翻译成一连串的MOV指令,而memcpy则是一个循环。“等号赋值”比…

深入解析PyTorch中的模型定义:原理、代码示例及应用

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…