当前位置: 首页 > news >正文

【通俗易懂说模型】反向传播(附多元分类与Softmax函数)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. 多元分类

2.1 softmax函数

2.2 Softmax函数对比Sigmoid函数

3. 反向传播

3.1 反向传播与神经网络

3.2 总体观

3.3 逐级观(数学推理,仅仅想会使用不需要理解)

3.4 反向传播思想总结

4. 梯度反向传播的完整例子

Step1:前向传播

Step2:反向传播

Step3:梯度下降

5. 总结


1. 前言

        进入这篇文章之前,想必大家已经阅读过前面的系列文章:【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)-CSDN博客

【通俗易懂说模型】非线性回归和逻辑回归(附神经网络图详细解释)-CSDN博客

        通过前面的文章, 猫猫希望友友们对机器学习、深度学习等基础概念,以及发展历史有一个宏观的理解。同时对回归(线性、非线性、逻辑回归)有一个深入的认识。然后接下来,就让我们收拾收拾行囊,准备出发!下一站——多元分类、反向传播🥰🥰~

        网络上有很多关于反向传播的文章,但是猫猫看了都不是很满意。之前一遍又一遍看结果就是仍然不能理解。直到最近重新拿起反向传播思考才有更深入的认识,于是打算写这样一篇文章,希望能为大家入门深度学习理解反向传播提供一个全新的思路~~

2. 多元分类

        逻辑回归是二元分类,属于多元分类的一种特殊情况。在生活中,多元分类问题十分常见。无论是看完一部电影,给电影评星,还是将一本书归到某一类的书架上,都属于多元分类的问题。这一节,我们就详细介绍如何用神经网络进行多元分类。

2.1 softmax函数

        多元分类问题与二元分类问题类似,区别在于用softmax函数替代sigmoid函数。多元分类的神经网络要求输出层的神经元数目与所需分类的类别数保持一致。图3-26展示了多元分类的模型结构。假设分类的类别数为k,那么softmax函数需要输人k个值(n1,n2,...,nk),然后输出k个概率(π1,π2,...,πk)。softmax函数实际上是sigmoid函数的推广。softmax函数将所有分类的分数值(n1,n2,...,nk)转化为概率(π1,π2,...,πk),且各概率的和为1。

softmax函数的数学公式如下:

\pi_l=\frac{\mathrm{e}^{n_l}}{\sum_{j=1}^k\mathrm{e}^{\eta_l}}

softmax函数可以巧妙地将多个分类的分数转化为(0,1)的值并且和为1

\sum_{i=1}^{k}\pi_{i}=1

2.2 Softmax函数对比Sigmoid函数

Sigmoid函数:

        线性神经元的输出为\overrightarrow{x}*\overrightarrow{w},随后经过一个非线性的sigmoid函数(公式中常把它简写作sign),此函数的图像如下图所示。sigmoid函数的定义域为(-\infty,+\infty),值域为(0,1),表达式为:

\operatorname{sigm}(x)=\frac{1}{1+\mathrm{e}^{-x}}

Softmax函数:

        Softmax函数是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为K的任意实向量,Softmax函数可以将其压缩为长度为K,值在[0,1]范围内,并且向量中元素的总和为1的实向量。

\pi_l=\frac{\mathrm{e}^{n_l}}{\sum_{j=1}^k\mathrm{e}^{\eta_l}}

区别

  • Softmax所有分类概率总和为1。
  • Sigmoid值是为1这个类的概率a。无论输出结果多大,通过Sigmoid都限制在[0,1]之间。
  • Sigmoid另一个类0的概率就是1-a。

3. 反向传播

        反向传播算法(BackpropagationAlgorithm),又被业界称为BP算法,是深度神经网络取得成功的奠基石。深度神经网络实际上是多隐含层神经网络,在早期就已经被提出,但是当时没有找到很好的训练方法,使得深度神经网络的强大实力得不到发挥。直到反向传播算法的出现,深度神经网络才得以崭露头角。如今,反向传播是深度神经网络最重要的训练方法。

3.1 反向传播与神经网络

  1. 神经网络算法很早就被提出来了,但是对于如何找到合适的参数去拟合数据一直是个问题,人工找显然不现实。
  2. 后面梯度下降算法被提出来,我们也就知道了给出一个模型评价标志——loss。也就可以根据loss将目标改为降低loss从而训练模型参数。这时的问题就在于梯度下降算法需要知道函数的梯度。手工通过法则去计算每一个参数在loss中的梯度是不合适的。
  3. 反向传播的出现让求解参数的梯度变得非常简单。利用链式法则从函数的输出结果loss,逐级向前传播就可以一级一级求出每一个参数的梯度值
  4. 于是神经网络的训练模型才被完全建立起来,神经网络模型才有工作的可能性 

3.2 总体观

        现在,我们先讨论一个最简单的例子:隐含层的层数为1的神经网络的前向传播及反向传播的过程。如下图所示,我们的前向传播过程为:输入\overrightarrow{z}^1,经过隐含层得到\overrightarrow{z}^2,再经过输出层得到\overrightarrow{z}^3,经过损失函数得到损失值{z}^4

        接着进行反向传播,为了方便计算和推导,我们定义\overrightarrow{\delta }变量,暂时不去考虑\overrightarrow{\delta }代表什么。我们可以用一种抽象的方式去审视反向传播的过程,如下图所示。这个过程首先将\delta ^4=\frac{dL}{dL}=1作为输入,然后由\delta ^4反向传播至第3层各节点得到\overrightarrow{\delta ^3}\overrightarrow{\delta ^3}反向传播经过第2层各节点得到\overrightarrow{\delta ^2},利用\overrightarrow{z^3}\overrightarrow{\delta ^3}及第2层到第3层之间的权重矩阵W^{(2,3)}求得梯度值\frac{\partial L}{\partial W^{(2,3)} }。接着,\overrightarrow{\delta ^2}继续反向传播得到\overrightarrow{\delta ^1},我们利用\overrightarrow{z^2}\overrightarrow{\delta ^2}及第1层到第2层之间的权重矩阵W^{(1,2)}可以求得梯度值\frac{\partial L}{\partial W^{(1,2)} }

反向传播的理解:

  • 前向传播中一个数据点会生成三个下一层中的中间值。那么在反向传播中,每一个下一层中的中间值都会反向来调整数据点的参数。
  • 反向传播本质上是求解参数相对于最终输出Loss的影响大小(梯度)的
  • 上面有一个词用的非常模糊——反向传播。你可能会很疑惑,这个反向传播是怎么工作的,为什么就求出梯度大小了。下面的逐级观将给你答案
  • 总体观只要关注到\overrightarrow{\delta }即可,不用考虑\overrightarrow{\delta }具体值是什么,这个值又是如何求解的

3.3 逐级观(数学推理,仅仅想会使用不需要理解)

        上面猫猫展示了反向传播的总体过程,如果你还没有完全理解也没关系,下面我们要探讨每
层的细节。如下图所示,我们将神经网络的第1层作为代表进行观察,第1层的输人是,设第I层到第I+1层之间的权重矩阵为W^{(l,l+1)},于是可以将数据经过该层的变换看作函数f^l的运算。

前向传播的数学表达式如下:

\vec{z}^{l+1}=f^{l}(\vec{z}^{l},W^{(l,l+1)})

为了方便描述反向传播的过程,我们定义{\delta ^l_j},数学表达如下:

\delta_{j}^{l}=\frac{\partial L}{\partial z_{j}^{l}}

根据微积分的链式法则,可以得到:

\delta_{j}^{l}=\frac{\partial L}{\partial z_{j}^{l}}=\sum_{k}\frac{\partial L}{\partial z_{k}^{l+1}}\cdot\frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}=\sum_{k}\delta_{k}^{l+1}\frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}

        上面公式表明想要求解出l层神经元相对于最终输出L的影响度,则需要求解出\frac{\partial z_k^{l+1}}{\partial z_j^l}的值,同时利用后一层也就是l+1层神经元相对于最终输出L的影响度。而\frac{\partial z_k^{l+1}}{\partial z_j^l}的值就是第l层和第l+1层之间的权重值W,因此核心就在于求出每一层之间的权重。到这里我们就求出了每一个神经元对于输出Loss的梯度。接下去就要思考,这个梯度如何用来更新权重

        知道神经元对于Loss的梯度值后,我们就要根据梯度方向的相反方向去修正神经元的值。修正神经元的值本质就是修正神经元W权重的值。因此为了更新权重,需要计算出损失函数关于神经网络内每个权重的梯度,损失函数关于第l层到第I+1层之间权重矩阵W^{(l,l+1)}的梯度为:

\frac{\partial L}{\partial W^{(l,l+1)}}=\sum_{j}\frac{\partial L}{\partial z_{j}^{l+1}}\frac{\partial z_{j}^{l+1}}{\partial W^{(l,l+1)}}=\sum_{j}\delta_{j}^{l+1}\frac{\partial z_{j}^{l+1}}{\partial W^{(l,l+1)}}

        再来看下图,假设我们要修正W^{(2,3)},此时就需要知道W^{(2,3)}对于L的梯度。这个梯度的求解就要利用到z^3W^{(2,3)}\delta ^3,而这些我们都是已知的,因此这个梯度\frac{\partial L}{\partial W^{(2,3)}}就是已知的,那么就可以根据梯度下降法去梯度更新W^{(2,3)}的值了。​

3.4 反向传播思想总结

        网络上有许多关于反向传播的总结,基本都是带大家走一遍反向传播的流程。这样做自然有它的用处,但是猫猫发现很多时候我们都是走的时候能够看懂,但是让自己写一遍就不能理解了。究其原因就是仅仅知其然,并没有知其所以然。于是我想了这样一个角度去理解反向传播——总体观 和 局部观(逐级观)

        总体观想要告诉我们:

  1. 反向传播从输出值Loss向前面逐级传播
  2. 反向传播研究的是神经元相对于输出Loss的梯度(影响程度),也就是\delta
  3. 总体观要给我们灌输一个思想:神经元对于Loss的梯度本质上就是权重W对于Loss的梯度
  4. 前向传播一个第l层的神经元会参与计算第l+1层所有的神经元。因此反向传播时,所有第l+1层的神经元会反向作用于这个第l层的神经元,影响它的参数变化

        局部观想要告诉我们:

  1. 为什么神经元对于Loss的梯度本质上就是权重W对于Loss的梯度?
  2. 权重W对于Loss的梯度是多少?
  3. 所有第l+1层的神经元会反向作用于这个第l层的神经元,影响它的参数变化
  4. 链式法则的运用使得梯度可以逐层传播

4. 梯度反向传播的完整例子

        现在我们用一个例子来讲解BP,如下图所示,我们选取的例子是最简单的feed forward neural network,它有两层,输入层有两个神经元 x1,x2,隐藏层有两个神经元 h1,h2,最终输出只
有一个神经元y,各个神经元之间全连接。为了直观起见,我们给各个参数赋上具体的数值。我
们令下x1=1,x2=0.5,然后我们令W1,W2,W3,W4的真实值分别是1,2,3,4,令W5,W6的真实值是0.5,0.6。这样我们可以算出 y的真实目标值是t= 4。

        那么为了模拟一个Back Propagation的过程,我们假设我们只知道 x1=1,x2=0.5 ,以及对应的目标 t=4 。我们不知道 w1,w2,w3,w4,w5,w6 的真实值,现在我们需要随机为他们初始化值,假设我们的随机化结果是 w1=0.5,w2=1.5,w3=2.3,w4=3,w5=1,w6=1 。下面我们就开始来一步步进行Back Propagation吧。

Step1:前向传播

        首先,在计算反向传播之前我们需要计算Feed Forward Pass,也即是预测的 h1,h2,y 和误差项 E ,其中E=\frac{1}{2}(t-y)^2 。根据网络结构示意图,各个变量的计算公式为:

Step2:反向传播

        现在Feed Forward Pass算完了,我们来计算Backward Pass。 y 是神经网络预测的值,真实的输出是 t=4 。那么,要更新 w5 的值我们就要算\frac{ \partial E}{\partial w_5} ,根据链式法则有:

\frac{\partial E}{\partial w_5}=\frac{\partial E}{\partial y}\cdot\frac{\partial y}{\partial w_5}

因为 E=\frac{1}{2}(t-y)^2,所以:

\begin{aligned}\frac{\partial E}{\partial y}&=2\cdot\frac{1}{2}\cdot(t-y)\cdot(-1)\\&=y-t\\&=5.05-4=1.05\end{aligned}

y=w_5*h1+w_6*h2,所以 :

\frac{\partial y}{\partial w_5}=h_1+0=h_1=1.25

把上面两项相乘我们得到:

\begin{gathered}\frac{\partial E}{\partial w_5}=\frac{\partial E}{\partial y}\cdot\frac{\partial y}{\partial w_5}=(y-t)\cdot h_1\\=1.05\cdot1.25=1.3125\end{gathered}

Step3:梯度下降

        运用之前梯度下降法的公式更新 w5 ,得到新的 w5’ 。其中我们假设 η=0.1 (并且后面所有的 η 都等于 0.1 ):

\begin{aligned}w_5^{'}&=w_5-\eta\cdot\frac{\partial E}{\partial w_5}\\&&\mathrm{25}\\&=0.86875\end{aligned}

同理,我们可以按照相同的步骤计算 w6' 的更新公式:

\begin{aligned}w_6^{'}&=w_6-\eta\cdot\frac{\partial E}{\partial w_6}\\&=1-0.1\cdot3.99\\&=0.601\end{aligned}

        下面我们再来看 w1,w2,w3,w4 ,由于这四个参数在同一层,所以求梯度的方法是相同的,因此我们这里仅展示对 w1 的推导。根据链式法则:

 \frac{\partial E}{\partial w_1}=\frac{\partial E}{\partial y}\cdot\frac{\partial y}{\partial h_1}\cdot\frac{\partial h_1}{\partial w_1}

        其中\frac{\partial E}{\partial y}=y-t 在求\frac{\partial E}{\partial w_5}的时候已经求过了。而根据y=w_5\cdot h_1+w_6\cdot h_2我们可以得到:

\frac{\partial y}{\partial h_1}=w_5+0=w_5

又根据 h1=w1⋅x1+w2⋅x2 我们可以得到:

\frac{\partial h_1}{\partial w_1}=x_1+0=x_1

因此我们有下面的公式:

\frac{\partial E}{\partial w_1}=(y-t)\cdot w_5\cdot x_1

现在我们代入数字并使用梯度下降法更新 w1

\begin{aligned}w_1^{'}&=w_1-\eta\cdot\frac{\partial E}{\partial w_1}\\&=w_1-\eta\cdot(y-t)\cdot w_5\cdot x_1\\&=0.5-0.1\cdot1.05\cdot1\cdot1\\&=0.395\end{aligned}

然后重复这个步骤更新w2、w3、w4

\begin{aligned}&w_2^{'}=w_2-\eta\cdot\frac{\partial E}{\partial w_2}\\&=w_2-\eta\cdot(y-t)\cdot w_5\cdot x_2\\&=1.5-0.1\cdot1.05\cdot1\cdot0.5\\&=1.4475\\&w_3^{'}=w_3-\eta\cdot\frac{\partial E}{\partial w_3}\\&=w_3-\eta\cdot(y-t)\cdot w_6\cdot x_1\\&=2.3-0.1\cdot1.05\cdot1\cdot1\\&=2.195\\&w_4^{'}=w_4-\eta\cdot\frac{\partial E}{\partial w_4}\\&=w_2-\eta\cdot(y-t)\cdot w_5\cdot x_2\\&=3-0.1\cdot1.05\cdot1\cdot0.5\\&=2.9475\end{aligned}

        现在我们已经更新了所有的梯度,完成了一次梯度下降法。我们用得到的新的 w+ 再来预测一次网络输出值,根据Feed Forward Pass得到 y’=3.1768 ,那么新的误差是 E‘=0.3388 ,相比于之前的 E=0.55125 确实是下降了呢,说明我们的模型预测稍微准了一点。只要重复这个步骤,不断更新网络参数我们就能学习到更准确的模型啦。

5. 总结

如果想要学习更多深度学习知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

相关文章:

【通俗易懂说模型】反向传播(附多元分类与Softmax函数)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

SQL Server查询计划操作符(7.3)——查询计划相关操作符(6)

7.3. 查询计划相关操作符 48)Key Lookup:该操作符对一个有簇索引的表进行书签查找。参数列包含簇索引的名字和用于查找簇索引中数据行的簇键。该操作符总是伴随一个Nested Loops操作符。如果其参数列中出现WITH PREFETCH子句,则查询处理器已决定使用异步预取(预读,read-ah…...

计算机视觉的研究方向、发展历程、发展前景介绍

以下将分别从图像分类、目标检测、语义分割、图像分割(此处应主要指实例分割)四个方面,为你介绍研究生人工智能计算机视觉领域的应用方向、发展历程以及发展前景。 文章目录 1.图像分类应用方向发展历程发展前景 2.目标检测应用方向发展历程…...

反转字符串-双指针法,

在 Java 中,使用 双指针法 反转字符串是一种高效且直观的方法。以下是详细的解析和代码实现。 1. 双指针法的核心思想 使用两个指针:一个指向字符串的起始位置(left),另一个指向字符串的末尾位置(right&…...

亚博microros小车-原生ubuntu支持系列 27、手掌控制小车运动

背景知识 本节跟上一个测试类似:亚博microros小车-原生ubuntu支持系列:26手势控制小车基础运动-CSDN博客 都是基于MediaPipe hands做手掌、手指识别的。 为了方便理解,在贴一下手指关键点分布。手掌位置就是靠第9点来识别的。 2、程序说明…...

STM32 HAL库 CANbus通讯(C语言)

#include "main.h" #include "stm32f1xx_hal.h"CAN_HandleTypeDef hcan; CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint8_t TxData[8]; uint8_t RxData[8]; uint32_t TxMailbox;void CAN_Init(void) {// 使能CAN时钟__HAL_RCC_CAN1_C…...

ML.NET库学习005:基于机器学习的客户细分实现与解析

文章目录 ML.NET库学习005:基于机器学习的客户细分实现与解析项目主要目的和原理目的原理 项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术 主要功能和步骤功能详细解读详细步骤解析 数据集及其处理步骤数据集处理步骤关键处理步骤原理1. 数据清洗与…...

(2/100)每日小游戏平台系列

新增一个猜单词小游戏! ------------------------------------------------------------------------------------------------------------------ 猜单词游戏玩法 游戏规则: 游戏会从一个预设的单词列表中随机选择一个单词。玩家有 6 次机会来猜测单…...

【Linux Oracle】杂货铺 日常实用2024

1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…...

浏览器的缓存方式几种

浏览器的缓存方式主要分为以下几种&#xff1a; 1. 强制缓存&#xff08;强缓存 / Memory Cache & Disk Cache&#xff09; 通过 Expires 或 Cache-Control 头部控制。在缓存有效期内&#xff0c;浏览器直接使用缓存&#xff0c;不发起请求。 关键HTTP头&#xff1a; Ex…...

黑马React保姆级(PPT+笔记)

目录 一、react基础 1.进程 2、优势 3、市场 4、搭建脚手架 认识目录 核心依赖&#xff08;右边两个react&#xff09; 去除非必要 运行原理&#xff1a; 总结 5、JSX 本质 高频场景 注意​编辑 渲染列表 总结 条件渲染 简单情况 复杂情况 事件绑定&#x…...

2025web寒假作业二

一、整体功能概述 该代码构建了一个简单的后台管理系统界面&#xff0c;主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮&#xff1b;右侧内容区域包括页头、用户信息管理内容&#xff08;含搜索框和用户数据表格&#xff09;以及页…...

三、OSG学习笔记-应用基础

前一章节&#xff1a;二、OSG学习笔记-入门开发-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145513874 一、 OsgGA: 界面事件处理空间&#xff0c;处理操作各种操作器的最大名字空间&#xff1b; GUIEventHandler: ui 事件操作类 注意&#xff1a;在启…...

CTFHub-RCE系列wp

目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞&#xff0c;全称是Remote Code Execution漏洞&#xff0c;翻译成中文…...

Linux ping不通百度但浏览器可以打开百度的的解决方法

问题描述&#xff1a;使用ping命令ping www.baidu.com,提示的地址为ipv6地址&#xff0c;但该地址ping不通&#xff0c;但使用浏览器直接打开百度网址可以打开。 问题可能的原因&#xff1a;&#xff08;1&#xff09;虚拟机上ipv6为自动模式&#xff0c;影响了ipv4寻址&#…...

Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?

1、提前设置热点数据永不过期 2、分布式中用redis分布式锁&#xff08;锁可以在多个 JVM 实例之间协调&#xff09;、单体中用synchronized&#xff08;锁只在同一个 JVM 内有效&#xff09; 编写服务类 import com.redisson.api.RLock; import com.redisson.api.RedissonCli…...

低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建

“老板说&#xff0c;这个项目得上Deepseek,还得再做个知识库...” 还有哪个开发者&#xff0c;最近没听到这样的抱怨&#xff1f; Deepseek爆火&#xff0c;推理端的智能提速&#xff0c;算力成本急剧下降&#xff0c;让不少原本不想用大模型&#xff0c;用不起大模型的企业&a…...

TCP服务器与客户端搭建

一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...

PDF 文件的安全功能概述

由于安全问题始终存在&#xff0c;我们希望重点介绍 PDF 文件格式提供的一些安全功能。如果您希望控制或限制用户可以执行的操作&#xff0c;这些功能可以启用。本文将介绍可以阻止哪些类型的操作&#xff0c;以及可以实施哪些不同的身份验证技术来提高 PDF 的安全性。 可以控制…...

在Linux上部署Jenkins的详细指南

引言 在当今快速迭代的软件开发环境中&#xff0c;持续集成和持续交付&#xff08;CI/CD&#xff09;变得越来越重要。Jenkins作为一个开源自动化服务器&#xff0c;能够帮助开发者更高效地进行代码集成、测试和部署。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 准…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...