归一化函数 & 激活函数

目录

Softmax函数

定义

输入输出

例子

总结

Layernorm

定义

输入输出

Sigmoid函数

定义

Tanh函数

定义

Relu函数

定义

Elu函数

定义

Gelu函数

定义

总结


Softmax函数

定义

softmax函数又称归一化指数函数,其作用是将一个 n 维的实值向量转换为概率分布。其数学公式如下:

  • x_{i}是输入向量的第 i 个元素

  • n是向量维度

  • e是自然对数的底数,e = 2.71828 ....

  • \sum _{j = 1}^{n} e^{x_{j}}是归一化因子,即所有类别原始得分指数化的总和。它确保了所有输出概率的总和为1。

由于是e指数,并且是归一化操作,因此我们可以得出Softmax的特性。

  1. 非负性。指数函数e^{x}总是为正数。
  2. 归一化。所有输出概率的总和为1。
  3. 范围。每个概率都严格在[0,1]之间。

输入输出

输入:是一个实数n维向量,其中每个元素可以是任意实数,代表了模型对不同类别的原始倾向性。

输出:是一个概率分布向量,其中每个元素都是一个介于0到1之间的实数,表示输入样本属于对应类别的概率,并且所有元素的和为1。

例子

假设我们有一个3分类问题(猫、狗、鸟),神经网络的最后一层输出为Z=[z猫​,z狗​,z鸟​]=[2.0,1.0,0.1],当应用Softmax函数时,其计算过程如下:

因此,经过Softmax归一化后的输出为P=[0.659,0.242,0.099],从这个输出向量中,我们可以看到这个向量对预测这个样本是“猫”的概率最高(约65.9%),其次是“狗”(约24.2%),最后是“鸟”(约9.9%)。

总结

  • Softmax的输入和输出都是n维向量,输出是针对输入进行归一化操作,来将实值向量转换为概率分布向量。

Layernorm

定义

一种在神经网络中对单个训练样本的所有特征进行归一化的技术。对于一个输入样本,LayerNorm 会在每个特征维度上进行归一化,使得每个特征的均值为0,方差为1,通过解决“内部协变量偏移”问题,来提高模型的训练效果和泛化能力。数学公式如下:

  • \mu 表示均值
  • \sigma ^{2} 表示方差
  • \varepsilon 一个很小是参数如10^{-5},用于数值稳定性,防止分母为0

为了保留模型的表达能力,LayerNorm引入了两个可学习的参数

  • \gamma 缩放因子,用于缩放归一化后的值
  • \beta 偏移因子,用于平移归一化后的值。

内部协变量偏移特指在深度神经网络的训练过程中,由于前一层参数的变化,导致后一层的输入数据分布发生变化的现象。简单来说,当你在训练一个深度神经网络时,每一层的参数都在不断更新。当前一层的参数更新后,它会产生新的输出。这个新的输出,对于紧随其后的下一层来说,就是它的“输入”。由于前一层的输出分布(即下一层的输入分布)发生了变化,这就像下一层在不断面对一个“移动的目标”或“变化的输入数据分布”。

以传话这个例子举例,比如一句话“小明爱吃苹果”,一个好的模型应该在将这句话传达给最后一个人时,最后一个人仍能理解原来说的是“小明爱吃苹果”,但如果发生内部协变量偏移,比如第一个人传递是对的,且队伍前面的人为了让最终信息传递更准确,会不断调整自己的传话方式,你(中间的层)会发现,你从前面那人听到的“口音”和“风格”总在变(比如可能是用粤语传递,可能是用潮汕话传递等)。你得不断适应这种变化的“输入”,导致自己很难稳定地学习如何把话传好。因此,就出现了内部协变量偏移,而LayerNorm就相当于一个标准翻译员,无论前面的人怎么说,他总能把话翻译成你熟悉的、统一的格式。这样,你就能专心把自己的部分做好,而不用担心前面的人不断改变“口音”了。

输入输出

  • 输入:n 维向量
  • 输出:n维归一化向量

LayerNorm是对单个数据的指定维度进行Norm处理,与batch无关,因此意味着在LayerNorm中,每个样本都有自己的均值和方差;与Batch Norm相比,体现在方向的不同,LayerNorm是横向归一化,Batch Norm是纵向归一化,具体区别如下:

Sigmoid函数

定义

图像是一个S形的曲线,目的是将输入向量进行归一化。早期使用的激活函数,目前较少使用。

特点

  • 将输出映射到概率空间,很适合作为二分类问题的输出层激活函数(因为可以解释为概率)。
  • 平滑性:可微分,方便反向传播
  • 非线性函数

缺点

  • 梯度消失。当输入 x 的值非常大或非常小(负数)时,函数的梯度会非常接近于0(微分趋于0。)。这意味着在反向传播时,梯度会变得非常小,导致网络权重更新缓慢,深层网络难以训练。
  • 非零中心输出。输出总是正的。这会导致下一层神经元的输入总是同号,从而在权重更新时引起“锯齿”效应,减慢收敛速度。
  • 计算成本高。需要进行指数运算,计算量较大。

补充解释:

  • 在深度神经网络中,梯度的计算是通过链式法则从输出层向输入层逐层反向传播的。当梯度通过多个层时,如果每一层的梯度(来自激活函数的导数)都小于1(尤其是接近0),那么这些小数相乘的结果会迅速变得极小,甚至趋近于0。这导致越靠近输入层的权重,接收到的梯度信号就越微弱,从而无法有效地学习。(因为要根据输出层的梯度来更新输入层的权重)
  • 锯齿效应是指在优化神经网络权重时,优化器的更新路径不是直接沿着最快下降的方向走向损失函数的最小值,而是来回震荡(呈现锯齿状),从而大大减缓了收敛速度。锯齿效应体现在对权重的梯度影响,由于激活函数输出非负,因此上一层所有神经元的输出 = 当前的神经元的输入 都是正数,那么在反向传播时,计算当前神经元权重的梯度时,通常会涉及到当前神经元输入w_{i}乘积。这意味着,所有权重的梯度\frac{\partial L}{\partial w_{i}}(损失函数对当前神经元某个权重的梯度)将同时具有相同的符号(要么全正,要么全负)。而当所有权重梯度符号相同时,它们的更新方向也是一致的(要么全部增加,要么全部减少)。你可以想象你在走路下山时,在左脚往前的过程中,右脚也必须往前。实际上,为达到最优解,某些权重需要增加,而另一些权重需要减少。但如果所有权重的梯度总是同向的,那么就无法实现这一点。我们要实现的是螺旋式上升的效果,要有所上升就必须要在这过程中有所下降,下降和上升的配合是为了更好地上升。

Tanh函数

定义

Tanh函数的图像与 Sigmoid 函数类似,都是一个S形曲线。不同的是,Sigmoid函数输出范围是(0,1),Tanh函数输出范围是(-1,1)。当输入 x 趋近于正无穷时,输出趋近于 1;当输入 x 趋近于负无穷时,输出趋近于 -1;当 x=0 时,输出为 0。

特点:

  • 零中心化输出 :Tanh 的输出以 0 为中心(即均值为 0),这是它相对于 Sigmoid 的一个显著优势,Tanh函数激活后有正有负。零中心化的输出有助于缓解“锯齿效应”问题,因为它可以使下一层神经元的输入均值更接近零,从而可能加快梯度下降的收敛速度。
  • 比 Sigmoid 梯度更强:体现在曲线的中间部分(非饱和区)坡度更陡了,这通常意味着更强的梯度信号,有助于更快的学习。
  • 可微分:处处可导,方便反向传播

缺点:

  • 梯度消失问题: 尽管比 Sigmoid 稍好,但 Tanh 仍然存在梯度消失问题。当输入 x 的绝对值很大时(即处于饱和区),其导数仍然会非常接近 0。在深层网络中,这会导致靠近输入层的梯度非常小,使得这些层难以学习。
  • 计算成本相对较高:设计到指数运算。

用途:在 ReLU 激活函数出现之前,Tanh 常常被用作循环神经网络 (RNN) 的隐藏层的默认激活函数,以及作为普通神经网络隐藏层的激活函数(如用于BERT的pooler层),因为它比 Sigmoid 表现更好。

Relu函数

定义

Relu函数相当于一个分段函数,在x大于0的部分采用线性函数,没有采用指数进行运算,降低了计算成本。

函数的做法是在0和x取最大值,这意味着当 x>0 时,输出为 x;当 x≤0 时,输出为 0。因此Relu函数输出范围是[0, +∞),x=0处有一个拐点。

特点:

  • 解决了梯度消失问题(针对正区间):在x>0处,Relu函数的导数恒为1。这意味着在正区间,梯度不会随着层数的加深而衰减,从而有效缓解了深度网络中的梯度消失问题,使得深层网络能够更快地学习。而在Sigmoid和Tanh函数中,当x位于饱和区时,函数的导数值很小,从而出现梯度消失。[ 你的目的是下山(梯度下降),导数值相当于下山速度,如果下山深度太慢,是不是就相当于你停留在山上了(梯度消失)]。
  • 计算效率高:没有指数运算,ReLU 的计算非常简单,只需进行一个简单的阈值判断。
  • 稀疏性对于负输入,ReLU 的输出为 0(你在迈出左脚时,可以保持右脚不动),这导致神经元的激活是稀疏的(即并非所有神经元都会被激活)。稀疏性有助于提高模型的泛化能力,并减少过拟合。
  • 加速收敛:与使用 Sigmoid 或 Tanh 相比,网络收敛速度更快。

缺点:

  • 死亡 ReLU 问题 : 当输入 x≤0 时,ReLU 的导数为 0。这意味着如果一个神经元在训练过程中,其输入总是负数,那么它的梯度将永远为 0,导致该神经元的权重永远不会被更新,这个神经元就“死亡”了,不再学习。这可能会减少网络的有效容量。
  • 非零中心输出: 和 Sigmoid 一样,ReLU 的输出是非零中心化的(总是非负),这可能导致训练过程中出现“锯齿效应”,从而略微减慢收敛速度。(仍然会出现迈出左脚时,需要右脚也同步迈出)
  • 不可微性: 在 x=0 处不可导。但在实际应用中,这通常不是问题,因为我们可以使用次梯度(subgradient)或者简单地将 x=0 处的导数定义为 0 或 1。

用途:ReLU 及其各种变体(如 Leaky ReLU, PReLU, ELU, GELU 等)是目前卷积神经网络 (CNN) 和普通前馈神经网络隐藏层中最常用、默认的激活函数。

Elu函数

定义

ELU 函数旨在结合 ReLU 的优点,并解决其“死亡 ReLU”问题,同时使激活值的均值更接近零,从而加快学习速度。具体地,对于x < 0的部分采用指数函数来进行优化。

α 是一个超参数,通常设置为正数,比如 1.0。如下图所示

  • 当 x>0 时,ELU 的行为与 ReLU 相同,输出就是输入 x。
  • 当 x≤0 时,ELU 的输出是一个指数衰减的曲线,平滑地趋近于 −α
  • 输出范围是 (−α,+∞)

特点:

  • 解决了“死亡 ReLU”问题:死亡Relu问题是由于Relu函数负区间导数为0,而Elu函数由于在负区间有一个非零的输出,并且梯度不为零(导数为\alpha e^{x}),因此即使输入为负,神经元也能持续学习和更新,避免了 ReLU 的“死亡”问题。
  • 使激活值均值更接近零: ELU 允许输出为负值,这有助于将激活值的均值推向零。均值接近零的激活值可以使梯度更接近单位自然梯度,从而减少内部协变量偏移的影响,并可能加速学习。
  • 平滑的负区间: 在负区间的曲线是平滑的, 有助于减少梯度下降的震荡,可能带来更好的泛化能力。
  • 保留 ReLU 优点: 在正区间不饱和,梯度不会消失,计算相对高效

缺点:

  • 计算成本较高:涉及指数运算。
  • 超参数α。需要手动设置α这个超参数,超参的不同可能会影响模型的性能,不够统一。

用途:在某些任务和网络架构中被证明比 ReLU 具有更好的性能和更快的收敛速度,尤其是在更深的网络中。它常常被用作 ReLU 的一个替代品。

Gelu函数

定义

Gelu全称Gaussian Error Linear Unit / 高斯误差线性单元,其函数是近年来在大型预训练模型中变得非常流行的一种激活函数,特别是在 Transformer 架构中。它旨在以一种更平滑、更随机的方式引入非线性。Gelu是目前基于Transformer架构下的模型常用的激活函数,比如BERT和ViT。

公式:

其中 X 是一个标准正态分布的随机变量, P(X\leq x) 是标准正态分布的累积分布函数 (CDF) \phi (x)。更简洁的公式如下:

在实际实现中,通常使用其近似公式(因为它包含 erf 误差函数):

GELU 可以被看作是一种结合了 ReLU 的非线性和 Dropout 的随机正则化效果的激活函数。它不是简单地通过阈值来“门控”输入(如 ReLU 对负值直接置零),而是根据输入值在标准正态分布中的百分位数来“权重”输入。从图片我们可以看出在[-2,0]区间是与Relu函数最大的不同之处。

  • 当 x 越大,Φ(x) 越接近 1,输出越接近 x。
  • 当 x 越小,Φ(x) 越接近 0,输出越接近 0。
  • 由于 Φ(x) 是平滑的,GELU 在 x=0 附近比 ReLU 更平滑,提供了更柔和的梯度。

特点:

  • 性能卓越:在许多最先进的大型模型(特别是 Transformer 架构)中,GELU 已经显示出比 ReLU 和 ELU 更好的性能。
  • 平滑性:相比 ReLU 的硬性阈值(小于0区域统一取值为0,因此导数为0),GELU 的平滑特性使其在梯度计算时更稳定(在小于0的部分可以求导,且曲线平滑),减少了训练过程中的震荡
  • 输出负值: 允许输出负值,这有助于激活值的均值更接近零,从而可能减少内部协变量偏移的影响。
  • 非单调性:其独特的非单调性(在负区间有一个小“凹陷”)被认为有助于模型捕捉更复杂的模式。
  • 与 Dropout 兼容: 设计思想上融合了随机性,与 Dropout 等正则化技术有内在联系

缺点:

  • 计算复杂度高: 包含指数函数或误差函数(及其近似),计算成本高于 ReLU,但现代深度学习框架通常有高效的实现。

总结

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

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

相关文章

使用 C# 入门深度学习:线性代数详细讲解

在深度学习的领域中&#xff0c;线性代数是基础数学工具之一。无论是神经网络的训练过程&#xff0c;还是数据的预处理和特征提取&#xff0c;线性代数的知识都无处不在。掌握线性代数的核心概念&#xff0c;对于理解和实现深度学习算法至关重要。在本篇文章中&#xff0c;我们…

【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解&#xff1a;搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…

CICD遇到npm error code EINTEGRITY的问题

场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…

Android13 wifi设置国家码详解

Android13 wifi设置国家码详解 文章目录 Android13 wifi设置国家码详解一、前言二、设置wifi国家码相关代码1、adb或者串口也能设置和获取当前国家码&#xff08;1&#xff09;查询命令的方式&#xff08;2&#xff09;获取和设置国家码的示例 2、Java代码设置国家码3、获取当前…

c/c++的opencv高斯模糊

深入探索图像高斯模糊&#xff1a;原理、C/C实现与OpenCV应用 在图像处理的众多技术中&#xff0c;模糊&#xff08;或平滑&#xff09;是最为基础且不可或缺的一环。它广泛应用于降噪、图像预处理、特征提取前的平滑以及计算机图形学中的各种视觉效果。在高斯模糊&#xff08…

Java求职者面试:从Spring Boot到微服务的技术点解析

Java求职者面试&#xff1a;从Spring Boot到微服务的技术点解析 场景&#xff1a;互联网医疗-预约挂号系统 面试官&#xff1a; “小明&#xff0c;我们今天的场景是一个互联网医疗的预约挂号系统。我们需要支持高并发的用户预约操作&#xff0c;同时保证数据一致性和系统的高…

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能&#xff0c;是任何品牌内容营销策略的重要组成部分。 但是&#xff0c;为了发展您的 YouTube 频道并消除噪音&#xff0c;优化您的视频内容以便可以在搜索结…

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类&#xff0c;以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明&#xff1a; /*** Java Collection Framework 说明&#xff1a;** 在 Java 中&#xff0c;集合&#xff08;Collec…

如何用ipmitool修改FRU信息?

如何用ipmitool修改FRU信息&#xff1f; FRU&#xff08;Field Replaceable Unit&#xff0c;现场可更换单元&#xff09;记录了服务器硬件的关键信息&#xff0c;如序列号、制造商、型号等。通过ipmitool修改FRU信息&#xff0c;常用于硬件维护、资产标签更新或调试场景。以下…

uniapp vue 开发微信小程序 分包梳理经验总结

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“uniapp vue 开发微信小程序 分包梳理经验总结”。 在使用 UniAppvue框架开发微信小程序时&#xff0c;当项目比较大的时候&#xff0c;经常需要分包加载。它有助于控制主包的大小&#xff0c;从而提升小程序的启…

git合并多次commit提交

首先查看历史记录 git log 查看你想要合并的commit是哪些&#xff08;注意&#xff1a;这里是逆序&#xff0c;最上的是最新提交&#xff09; 找到当前想要合并的最后一个记录&#xff0c;复制该记录的下一个记录的 id&#xff08;黄色部分commit id&#xff09;&#xff0c…

系统架构设计(七):数据流图

定义 数据流图&#xff08;Data Flow Diagram, DFD&#xff09;是一种用于表示信息系统数据流转及处理过程的图形工具。 它反映系统功能及数据之间的关系&#xff0c;是结构化分析与设计的重要工具。 主要符号 符号说明描述举例方框外部实体&#xff08;源或终点&#xff09…

MAUI与XAML交互:构建跨平台应用的关键技巧

文章目录 引言1. 代码隐藏文件关联1.1 XAML文件与代码隐藏文件的关系1.2 部分类机制1.3 InitializeComponent方法1.4 XAML命名空间映射 2. 元素名称与x:Name属性2.1 x:Name属性的作用2.2 命名规则与最佳实践2.3 x:Name与x:Reference的区别2.4 编译过程中的名称处理 3. 在代码中…

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件&#xff0c;但是它不止可以用来读取文件&#xff0c;还可以和RCE&#xff0c;XXE&#xff0c;反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议&#xff0c;它是一种过滤器&#xff0c;可以作为一个中…

微信小程序开发中,请求数据列表,第一次请求10条,滑动到最低自动再请求10条,后面请求的10条怎么加到第一次请求的10条后面?

在微信小程序中实现分页加载数据列表&#xff0c;可通过以下步骤将后续请求的10条数据追加到首次加载的数据之后&#xff1a; 实现步骤及代码示例 定义页面数据与参数 在页面的 data 中初始化存储列表、页码、加载状态及是否有更多数据的标识&#xff1a; Page({data: {list…

如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南

在电商领域&#xff0c;获取商品详情数据对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。某手作为国内知名的电商平台&#xff0c;提供了丰富的商品资源。通过 Java 爬虫技术&#xff0c;我们可以高效地根据商品 ID 获取某手商品的详细信息。本文将详细介…

电平匹配电路

1、为什么要电平匹配? 现在很多SOC器件为了降低功耗,都把IO口的电平设计成了1.8V,核电压0.85V,当这种SOC做主平台时,在做接口设计需要格外关注电平的匹配。单板中经常需要将1.8V的电平转换成3.3V或者转成5V。如果没有注意到输入和输出信号之间的电平匹配,系统就无法正常…

【技术揭秘】Profinet转RS485如何优化冲剪机的实时通信性能?​​

在现代工业自动化领域&#xff0c;通信协议是连接不同设备和系统的关键。RS485和Profinet是两种广泛使用的工业通信标准&#xff0c;它们各自拥有独特的特性和应用场景。本文将探讨如何通过一个小疆智控Profinet转RS485网关来优化冲剪机的应用&#xff0c;提高生产线的效率和可…

面经总目录——持续更新中

说明 本面经总结了校招时我面试各个公司的面试题目&#xff0c;每场面试后我都及时进行了总结&#xff0c;同时后期补充扩展了同类型的相近面试题&#xff0c;校招时从两个方向进行投递&#xff0c;视觉算法工程师和软件开发工程师&#xff08;C方向&#xff09;&#xff0c;所…

AI前端页面生成:deepsite、Qwen Web Dev

deepsite网页生成 https://huggingface.co/spaces/enzostvs/deepsite 落地页美观不错,默认用tailwindcss实现样式 提示词: AI 功能是核心,通过后端 server.js 实现。server.js 使用 Express 框架,依赖 @huggingface/inference 库与 Hugging Face 推理 API 交互,具体使用…