神经网络(容易被忽视的基础知识)

news2025/7/20 21:08:13

主要内容:

  • 基本神经元
  • 作为线性分类器的单个神经元
  • 为什么要是深度神经网而不是”肥胖“神经网络?
  • 为什么在人工神经网络中的神经元需要激活函数?
  • 一些主要的激活函数
  • 神经网络中的偏置有什么意义?
  • 初始化神经网络的参数可以全为0吗,其他普通线性分类器呢?
  • 交叉熵损失存在的意义和与平方差损失相比有什么好处?

神经元

下面图表的左边展示了一个生物学的神经元,右边展示了一个常用的数学模型。乍一看还是有点相似的,事实上也是,人工神经网络中的神经元也有受到生物神经元的启发。总结要点:

  • 在生物的神经元(也就是左图)中,树突将信号传递到细胞体,信号在细胞体中相加。如果最终之和高于某个阈值,那么神经元将会_激活_,向其轴突输出一个峰值信号,注意这里输出是一个脉冲信号!
  • 在数学计算模型(也就是右图)中,首先将输入进行加权求和加上偏执,得到待激励值,然后将该值作为输入,输入到激活函数中,最后输出的是一个激励后的值,这里的激活函数可以看成对生物中神经元的激活率建模。由于历史原因,激活函数常常选择使用**sigmoid函数 σ \sigma σ\sigma,**当然还有很多其他激活函数,下面再仔细聊!
  • 需要注意:1.一个神经元可以看成包含两个部分,一个是对输入的加权求和加上偏置,一个是激活函数对求和后的激活或者抑制。2.注意生物中的神经元要复杂的多,其中一个是生物中的输出是一个脉冲,而现在大多数的数学模型神经输出的就是一个值,当然现在也有一些脉冲人工神经网络,可以自行了解!

作为线性分类器的单个神经元

  • 比如基础的逻辑回归,结合上面的神经元知识,可以发现,逻辑回归就是激活函数是sigmoid的单层简单神经网络。也就是说,只要在神经元的输出端有一个合适的损失函数,就能让单个神经元变成一个线性分类器。因此说,那些线性的分类器本身就是一个单层神经网络
  • **但注意,对于非线性的模型:SVM和神经网络走了两条不同的道路:神经网络通过多个隐层的方法来实现非线性的函数,有一些理论支持(比如说带隐层的神经网络可以模拟任何函数),但是目前而言还不是非常完备;SVM则采用了kernel trick的方法,这个在理论上面比较完备(RKHS,简单地说就是一个泛函的线性空间)。**两者各有好坏,神经网络最近的好处是网络设计可以很灵活,有很多的trick&tip,很多理论都不清不楚的;SVM的理论的确漂亮,但是kernel设计不是那么容易,所以最近也就没有那么热了。

为什么要是深度神经网而不是”肥胖“(宽度)神经网络?

“肥胖”网络的隐藏层数较少,如上左图。虽然有研究表明,浅而肥的网络也可以拟合任何的函数,但它需要非常的“肥胖”,可能一层就要成千上万个神经元。而这直接导致的后果是参数的数量增加到很多很多。

也有实验表明,也就是上图的实验,我们可以清楚的看出,当准确率差不多的时候,参数的数量却相差数倍。这也说明我们一般用深层的神经网络而不是浅层“肥胖”的网络。

注意:说神经网络多少层数的时候一般不包括输入层。 在神经网络中的激活主要讲的是梯度的更新的激活

为什么在人工神经网络中的神经元需要激活函数?

上图可看做普通的线性分类器,也就是线性回归方程。这个比较基础,效果如右图。当然有时候我们发现这样的线性分类器不符合我们要求时,我们很自然的想到那我们就加多一层,这样可以拟合更加复杂的函数,如下图a:

图a

图b

但同时当我们动笔算下, 就会发现, 这样一个神经网络组合起来,输出的时候无论如何都还是一个线性方程。如上图b右边,就只能这样分类。(那也太蠢了吧)。下图表示一层加如激活函数的情况!

一层很多时候是远远不够的,前面讲过,简单的线性分类器就可以看成是一层的神经网络,比如上图,激活函数是signmoid,那就可以看成是二分类的逻辑回归!

下面扩展到多层,如下图1,2:

图1

图2

图1是一个简单的MLP(全链接神经网络),图2的右边课简单表示左图的可视化,那么对比之前的无激活函数的图,很明显是更加的非线性,拟合能力也会更强,同时可以想到,当层数更多,其能力也会越来越强!

简单来说:就是使得神经网络具有的拟合非线性函数的能力,使得其具有强大的表达能力!

简单扩展,神经网络的万能近似定理:一个前馈神经网络如果具有线性层和至少一层具有"挤压"性质的激活函数(如signmoid等),给定网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维空间到另一个有限维空间的borel可测函数。

要相符上面的定理,也就是想拟合任意函数,一个必须点是“要有带有“挤压”性质的激活函数”。这里的“挤压”性质是因为早期对神经网络的研究用的是sigmoid类函数,所以对其数学性质的研究也主要基于这一类性质:将输入数值范围挤压到一定的输出数值范围。(后来发现,其他性质的激活函数也可以使得网络具有普适近似器的性质,如ReLU 。

一些主要的激活函数

sigmoid

**优点:**有较好的解释性

缺点:1.Sigmoid函数饱和使梯度消失。sigmoid神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。2.输出不是零中心的,这一情况将影响梯度下降的运作,因为如果输入神经元的数据总是正数,那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这样梯度下降权重更新时出现z字型的下降。这样收敛会变得异常的慢。(这也是为什么要一直保持为数据的0中心化)—–但这个问题比较小3.exp()在深度神经网络时候相比其他运算就比较慢

Tanh非线性函数

**优点:1.**它的输出是零中心的。因此,在实际操作中,tanh非线性函数比sigmoid非线性函数更受欢迎。

**缺点:**1.和Sigmoid函数一样,饱和使梯度消失。计算慢

ReLU

优点:1.ReLU对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文alexnet指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的;2.注意:现在大部分的DNN用的激活函数就是ReLu

**缺点:1.**当x是小于0的时候,那么从此所以流过这个神经元的梯度将都变成0;这个时候这个ReLU单元在训练中将死亡(也就是参数无法更新),这也导致了数据多样化的丢失(因为数据一旦使得梯度为0,也就说明这些数据已不起作用)。

Leaky ReLU

**优点:1.**非饱和的公式;2.Leaky ReLU是为解决“ReLU死亡”问题的尝试

**缺点:**1.有些研究者的论文指出这个激活函数表现很不错,但是其效果并不是很稳定

Kaiming He等人在2015年发布的论文Delving Deep into Rectifiers中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。然而该激活函数在在不同任务中均有益处的一致性并没有特别清晰。

ELU

指数线性单元(Exponential Linear Units, ELU) ELU的公式为:

ELU.png 函数曲线如下:

Maxout

  • Maxout是对ReLU和leaky ReLU的一般化归纳

**优点:**1.拥有ReLU单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的ReLU单元)

**缺点 :1.**每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。难训练,容易过拟合

怎么用激活函数

“那么该用那种呢?”用ReLU非线性函数。注意设置好学习率,(如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。),_解决方案:_或许可以监控你的网络中死亡的神经元占的比例。如果单元死亡问题困扰你,就试试Leaky ReLU或者Maxout,不要再用sigmoid了。也可以试试tanh,但是其效果应该不如ReLU或者Maxout。

神经网络中的偏置有什么意义?

最基础的神经元感知器如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEC0xkPO-1678155273995)(https://pic4.zhimg.com/602ceee97d817007fdf4eebb58082eeb_b.png)]

这个例子中输入为 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3x_1, x_2, x_3 三个变量, 输出为0或1. 当三个变量的加权和 ∑ i w i x i \sum_i w_ix_i iwixi\sum_i w_ix_i大于某个阈值的时候, 输出为1, 反之为0.

$output = \left{ \begin{array}{ll} 0 & \textrm{if $\sum_iw_ix_i < $threshold }\ 1 & \textrm{if $\sum_iw_ix_i \geq KaTeX parse error: Expected 'EOF', got '}' at position 11: threshold }̲ \end{array} \r… output = \left\{ \begin{array}{ll} 0 & \textrm{if $\sum_iw_ix_i < $threshold }\\ 1 & \textrm{if $\sum_iw_ix_i \geq $threshold } \end{array} \right.

注意这里的阈值, 它度量了神经元产生正(负)激励的难易程度.也就是说,在上文的模型中, 阈值越大, 产生正激励的难度越大.

而为了更好的计算和表达,我们可以把其中的b和 ∑ i w i x i \sum_i w_ix_i iwixi\sum_i w_ix_i 移到同一边,同时给他取了一个不错的名字,叫做偏置Bias,而w叫做权重weight!

$output = \left{ \begin{array}{ll} 0 & \textrm{if ∑ i w i x i + b < 0 \sum_iw_ix_i +b< 0 iwixi+b<0}\ 1 & \textrm{if ∑ i w i x i + b ≥ 0 \sum_iw_ix_i +b\geq 0 iwixi+b0 } \end{array} \right.$ output = \left\{ \begin{array}{ll} 0 & \textrm{if s u m _ i w _ i x _ i + b < 0 \\sum\_iw\_ix\_i +b< 0 sum_iw_ix_i+b<0}\\ 1 & \textrm{if s u m _ i w _ i x _ i + b g e q 0 \\sum\_iw\_ix\_i +b\\geq 0 sum_iw_ix_i+bgeq0 } \end{array} \right.

也就是说: 偏置的大小度量了神经元产生正(负)激励的难易程度.

这是最简单的感知器神经元. 而现代神经网络中常用的Sigmoid, tanh或是ReLU都是在 w ⋅ x + b \textbf{w} \cdot \textbf{x} + b wx+b\textbf{w} \cdot \textbf{x} + b的基础上加上一个激活函数, Bias也就是b的意义是一样的。

同时对于偏置需要注意的点是:**偏置是不需要正则化的,并且正则化偏置的话会导致欠拟合。**我们从意义上去理解话,若对偏置正则化(惩罚),会导致激活变得更加简单,偏差就会上升,学习的能力就会下降!

初始化神经网络的参数可以全为0吗,其他普通线性分类器呢?

在讲初始化前,先简单复习下反向传播算法可表示为以下几个步骤:

  1. 进行前馈传导计算,利用前向传导公式,得到 L 2 , L 3 L_{2},L_{3} L2,L3L_{2},L_{3} ,直到输出层 L n l L_{nl} LnlL_{nl} 的激活值。
  2. 对输出层(第 n l nl nlnl 层),计算:

3. 对于 l = n l − 1 , n l − 2 , n l − 3 , . . . , 2 l=nl-1,nl-2,nl-3,...,2 l=nl1,nl2,nl3,...,2l=nl-1,nl-2,nl-3,…,2 的各层,计算:

4. 计算最终需要的偏导数值:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qq0p6Vts-1678155273996)(https://pic1.zhimg.com/v2-3019483d69a9cb3ba4cdf5a523b6bea4_b.jpg)]

5. 对 f f ff 举个例子,若表示sigmoid函数,就可以计算得到

从上往下,其中_y代表正确label,_ a n l a^{nl} anla^{nl} 代表最后一层的输出, z n l z^{nl} znlz^{nl} 表达的是最后一层的加权求和值, f f ff 代表的是激活函数,δ代表的是要反向传播回去的误差, l l ll 代表第l层,w,b表示权重和偏置。

我们前面说过:线性分类器逻辑回归模型可以算作为一个简单的单层神经网络。为了更好的说明问题,假设一个场景,在十类分类的数字手写识别中,我们将本来二分类的逻辑回归推到多分类的_softmax,也就是说,神经元的激活函数是softmax。也就是下图,然后分析:_

  • 输入层(不算是一层):28×28=784个输入单元。也就是n=784
  • 输出层:10个输出单元, 激活函数为_softmax,也就是m=10_
  • 它由两组参数组成: _W_和b, 前者是一个10×784维的权值矩阵, 后者是长度为10的bias 列向量.现在我们假设把它们全部初始化为0:
  • 第一次正向计算过程中, 简单算出,输出层的所有输出为0.5.
  • 反向时,根据前面复习的反向传播算法,首先计算_δ,假如 y i y^{i} yiy^{i} =1, 即输入_x_对应的数字为_i, 那么除了第_i_个神经元的_δ是不同的,其他的值都是一样_, 又于计算权重w梯度的公式得知,注意此时的 a l a^{l} ala^{l} 就是输入值x,又由于输入向量_x_的元素之间的不同, 所以即使_δ是一样的,但_最终得到的10个梯度值有很大概率是不同且非0的, 所以第一次BP过程可以取得成效并将一些_w_和所有的_b_变成非0值.
  • 由于w值已经变得不相同了,这个时候前向传播和后向传播也就会正常的进行, 后面的训练显然也可以顺利进行.

得出结论,没有隐层时, 可以将所有的参数初始化为0.

如果有隐层呢?假如还是用sigmoid激活函数呢。来个更简单MLP,

  • 第一次正向计算过程中, 简单算出,输出层的所有输出为神经元4,5,6输出的值(初始化w,b为0,激活函数是sigmoid)都是一样的,都是0.5
  • 第一个反向传播过程,由权重的更新公式,算出即 W 6 , 4 , W 6 , 5 W_{6,4},W_{6,5} W6,4,W6,5W_{6,4},W_{6,5} (神经元6和4,5之间的权重)是一样的,同样算出 W 4 , 1 , W 4 , 2 , W 4 , 3 , W 5 , 1 , W 5 , 2 , W 5 , 3 W_{4,1},W_{4,2},W_{4,3},W_{5,1},W_{5,2},W_{5,3} W4,1,W4,2,W4,3,W5,1,W5,2,W5,3W_{4,1},W_{4,2},W_{4,3},W_{5,1},W_{5,2},W_{5,3} 都一样,但非0,由sgd算法赋值。
  • 然后第二次正向时,算出神经元4,5的输出一样(因为4,5都是接受1,2,3神经元的输入,且权重相同),但和神经元6的输出不一样。
  • 然后第二次反向时,根据公式,得出 W 4 , 1 , W 5 , 1 一样, W 4 , 2 , W 5 , 2 一样, W 4 , 3 , W 5 , 3 W_{4,1},W_{5,1}一样,W_{4,2},W_{5,2}一样,W_{4,3},W_{5,3} W4,1,W5,1一样,W4,2,W5,2一样,W4,3,W5,3W_{4,1},W_{5,1}一样,W_{4,2},W_{5,2}一样,W_{4,3},W_{5,3} 一样。原因在于计算 W 4 , 1 , W 5 , 1 W_{4,1},W_{5,1} W4,1,W5,1W_{4,1},W_{5,1} 用的是一样的输出,这个也可以从公式得出!
  • 最后结论,一直循环,发现学习得到的模型中, 所有的隐单元都是相同的(在这里就是神经元4,5永远 W 4 , 1 , W 5 , 1 一样, W 4 , 2 , W 5 , 2 一样, W 4 , 3 , W 5 , 3 W_{4,1},W_{5,1}一样,W_{4,2},W_{5,2}一样,W_{4,3},W_{5,3} W4,1,W5,1一样,W4,2,W5,2一样,W4,3,W5,3W_{4,1},W_{5,1}一样,W_{4,2},W_{5,2}一样,W_{4,3},W_{5,3} 一样). 学习失败.

对于隐层使用了其他函数比如ReLU: f(net)=max(0,_net)_其结果也是一样的: 除了输入层的输出值为_x_本身, 不为0, 其余的所有层的输出都为0. BP时所有梯度也都为0, 包括输出层. 这意味着所有的非输入神经元都是无意义的. 学习失败.对于卷积神经网络,循环神经网络也是一样的,故一般会用其他初始化方式。

最后最后的结论是, 一般只在训练SLP/逻辑回归模型时才使用0初始化所有参数., 更实用的结论是, 深度模型都不会使用0初始化所有参数.

交叉熵存在的意义和与平方差相比有什么好处?

一个非常常见的,非常漂亮的成本函数是“交叉熵”(cross-entropy)。交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。它的定义如下:

其中,y 是我们预测的概率分布, y’ 是实际的分布

1.交叉熵是正的,2.当所有输入x的输出都能接近期望输出y的话,交叉熵的值将会接近 0。这两个特征在直觉上我们都会觉得它适合做代价函数。事实上,我们的均方代价函数也同时满足这两个特征。然而…

为什么在神经网络中用交叉熵代替二次代价函数?

还是从反向传播,参数更新的角度理解更新参数的公式如下:

a 是 神经元的输出,其中 a = σ(z), z = wx + b,可知,偏导数受激活函数的导数影响,假设这里是传统的**sigmoid激活函数(在之前很多时候都是)。**那么sigmoid 的导数在输出接近 0 和 1 的时候 是非常小的,这会导致一些实例在刚开始训练时学习得非常慢!

但是如果换成是交叉熵loss,其更新权重公式最后推导得出如下:

由以上公式可知,权重学习的速度受到 σ(z) − y 影响,更大的误差,就有更快的学习速度,还避免了二次代价函数方程中因 σ′(z) 导致的学习缓慢。

但是现在也有很多其他的激活函数并不会产生饱和状态,那么均方差也有其存在价值。

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

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

相关文章

【java】java基本类型和包装类型的区别

文章目录简介1.包装类型可以为 null&#xff0c;而基本类型不可以2.包装类型可用于泛型&#xff0c;而基本类型不可以3.基本类型比包装类型更高效4.自动装箱和自动拆箱简介 Java 的每个基本类型都对应了一个包装类型&#xff0c;比如说 int 的包装类型为 Integer&#xff0c;d…

ECOLOY直接更换流程表单后导致历史流程中数据为空白的解决方案

用户反馈流历史流程打开是空白了没有内容。 一、问题调查分析&#xff1a; 工作流“XX0204 员工培训协议审批流程”workflowId37166产生的7个具体流程中&#xff0c;创建日期为2021年的4个具体流程原先引用的数据库表单应该是“劳动合同签订审批表”(formtable_main_190)&…

JavaScript-缓存

参考资料彻底解决让用户清一下浏览器缓存浏览器缓存彻底理解浏览器的缓存机制彻底弄懂前端缓存浅解强缓存和协商缓存浏览器缓存策略(强缓存和协商缓存)一文搞定Http缓存-强制缓存与协商缓存前端浏览器缓存知识梳理ASP.NET Core 中使用缓存IIS中设置Cache-Control是什么当我们第…

[Gin]框架底层实现理解(一)

前言&#xff1a;路由原理———压缩字典 这边简单讲一下gin非常重要的一个基点&#xff0c;也就是他作为go web框架的一个亮点 也就是Trie树和压缩字典算法 gin 通过树来存储路由&#xff0c;讲路由的字符拆解为一个个的结点&#xff0c;在获取handler函数时&#xff0c;会…

项目管理系统软件有哪些?这10款最好用的项目管理软件值得推荐

项目管理系统软件有哪些&#xff1f;这10款好用的项目管理系统软件值得推荐 如今企业规模不断扩大&#xff0c;业务逐渐复杂化&#xff0c;项目管理系统已经成为现代企业管理中不可或缺的一环&#xff1b; 而项目管理系统软件不仅可以保证项目按时完成&#xff0c;提高团队的…

【Java基础 下】 029 -- 多线程

目录 一、为什么要有多线程&#xff1f; 1、线程与进程 2、多线程的应用场景 3、小结 二、多线程中的两个概念&#xff08;并发和并行&#xff09; 1、并发 2、并行 3、小结 三、多线程的三种实现方式 1、继承Thread类的方式进行实现 2、实现Runnable接口的方式进行实现 3、利用…

MySQL简述

一、什么是数据库 数据库&#xff08;DB&#xff0c;DataBase&#xff09; 概念&#xff1a;数据仓库&#xff0c;相当于一款软件&#xff0c;安装在操作系统&#xff08;Windows&#xff0c;Linux&#xff0c;mac&#xff0c;…&#xff09;之上&#xff0c;可以存储大量的数…

nvm安装及使用(win)

一、安装nvm 下载地址&#xff1a;下载之后安装包安装 安装路径不要有中文或者空格 安装时尽量不要选择系统盘&#xff08;安装在系统盘可能会涉及到权限问题&#xff09; 安装前一定要把 node 的环境变量和 npm 的环境变量删除&#xff0c;否则在切换 node 版本时会报错 二、…

SCL_PFENET跑通填坑

1.数据准备&#xff1a;VOC2012数据集&#xff0c;initmodel文件夹&#xff08;预训练模型&#xff09;&#xff0c;SegmentationClassAug数据2.训练部分&#xff1a;训练部分没什么需要改动的&#xff0c;也就改一下选择的配置文件。在config文件夹里有关于coco和voc数据的配置…

备战蓝桥杯Day3python——迭代器的使用

python封装的迭代器 我们接下来介绍用于返回笛卡尔积的Permutations函数 Permutations(iterator, r) r:表示进行迭代后返回的长度 实例&#xff1a; >>> from itertools import permutations >>> a abc >>> for i in permutations(a,3):print …

Java深拷贝,浅拷贝

一、浅拷贝&#xff1a; &#xff08;1&#xff09; 对于数据类型是基本数据类型的成员变量&#xff0c;浅拷贝会直接进行值传递&#xff0c;也就是将该属性复制一份给新的对象。因为是两份不同的数据&#xff0c;所以对其中一的对象的成员变量值进行修改&#xff0c;不会影响另…

大考在即 百度版ChatGPT会翻车吗?

文心一言的发布会定档3月16日&#xff0c;不出意外&#xff0c;百度创始人李彦宏、CTO王海峰将出现在北京总部的发布会现场。这是百度版ChatGPT最新的官方消息&#xff0c;2月7日&#xff0c;文心一言首次官宣&#xff0c;当时称&#xff0c;产品“3月见”。 3月如期而至&…

C语言再学习 -- __attribute__详解

一、attribute 介绍 __attribute__是一个编译属性&#xff0c;用于向编译器描述特殊的标识、错误检查或高级优化。它是GNU C特色之一&#xff0c;系统中有许多地方使用到。__attribute__可以设置函数属性&#xff08;Function Attribute&#xff09;、变量属性&#xff08;Var…

JavaScript 如何优雅地获取多层级response中的某个深层次字段 ?. 可选链条(Optional chaining)

文章目录一句话场景&#xff1a;从一个多层级对象中拿一个处在深层次位置的字段MDN 可选链搜索引擎使用一句话 var marriedFlag response.data.userList[0].married; // 如果中间某个对象为空&#xff0c;会报Errorvar marriedFlag response?.data?.userList[0]?.married…

外贸新手找客户的开发信修炼之旅(一)

开发信是一种传统的开发海外客户的方式&#xff0c;相信即便是外贸新手也或多或少有所耳闻&#xff0c;甚至已经通过邮件开发到了一些有意向的客户&#xff0c;但有时也会遇到开发信效果不好的情况&#xff0c;收到的回复寥寥无几。其实说白了开发信的本质与派发传单相同&#…

李开复已经对美图公司失去耐心,并在美图公司身上损失惨重

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经经过对美图公司&#xff08;01357&#xff09;的投资人回报、产品、业务结构、战略、财务业绩、估值等方面进行了研究&#xff0c;认为美图这家公司不行&#xff0c;非常不看好&#xff0c;以下是理由供你参考。一…

10 Seata配置Nacos注册中心和配置中心

Seata配置Nacos注册中心和配置中心 Seata支持注册服务到Nacos&#xff0c;以及支持Seata所有配置放到Nacos配置中心&#xff0c;在Nacos中统一维护&#xff1b; 高可用(集群)模式下就需要配合Nacos来完成: 具体配置如下 注册中心 Seata-server端配置注册中心&#xff0c;…

【洛谷 P1219】[USACO1.5]八皇后 Checker Challenge 题解(深度优先搜索+回溯法)

[USACO1.5]八皇后 Checker Challenge 题目描述 一个如下的 666 \times 666 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线&#xff08;包括两条主对角线的所有平行线&#xff09;上至多有一个棋子。 上面的布…

13_MySQL中的约束

目录 1. 约束(constraint)概述 1.1 为什么需要约束 1.2 什么是约束 1.3 约束的分类 2. 非空约束 2.1 作用 2.2 关键字 2.3 特点 2.4 添加非空约束 2.5 删除非空约束 3. 唯一性约束 3.1作用 3.2 关键字 3.3 特点 3.5 关于复合唯一约束 4. 主键(PRIMARY KEY)约束 4.1 作用 4.2 关…

【Django】Hello,DJango!

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…