首页 > 其他分享 >什么是激活函数?零基础扫盲~

什么是激活函数?零基础扫盲~

时间:2024-08-30 17:23:15浏览次数:5  
标签:输出 函数 梯度 ReLU 扫盲 激活 输入

我刚开始学习深度学习的时候,看到了这么一段话:

作者把非线性激活函数(ReLU)用在了模型里,发现训练速度显著提高,原因在于

传统用的是饱和非线性激活函数,例如tanh,训练时如果进入到饱和区域,那么会因为梯度变化过小而难以训练;而ReLU是一种非饱和非线性激活函数,接受阈是0~∞∞,不存在tanh的问题。

来源:经典神经网络论文超详细解读(一)——AlexNet学习笔记(翻译+精读)_alexnet论文-CSDN博客


初学的我有很多疑问:

1、什么是激活函数?有什么用?

2、常见的激活函数有什么

3、什么是线性激活函数?什么是饱和激活函数?

4、什么是梯度消失问题?

5、为什么使用Relu能克服梯度消失问题?

以下是我能理解的回答:


一、什么是激活函数?

激活函数是神经网络中的一个重要组件,它决定了每个神经元的输出。当一个神经元接收到输入信号后,会进行加权求和,然后通过激活函数进行处理,最终得到这个神经元的输出。

(类似圈出来的隐层部分,由输入层进行加权求和之后并不是马上进行下一轮运算,而是再经过一个激活函数决定给下一轮的值)

激活函数的作用主要有以下几点:

1、非线性化:激活函数就像是在给神经网络“增加脑筋”,让它不仅能处理简单的事情,还能理解复杂的问题。

2、归一化:有些激活函数会把输出值限制在一定范围内,比如把所有结果都压缩在0到1之间。这样可以让训练过程更平稳,不至于出现太大的波动,确保网络学得更稳定。

3、激励作用:激活函数决定了神经元是否“开工”工作。就像一个开关,控制着神经元是否把信号传递给下一层,影响到最终的结果。

二、常见的激活函数有什么

常见的激活函数有:

  • ReLU(Rectified Linear Unit): 输出为输入值和0之间的较大值,公式为 f(x) = max(0, x),常用于深度神经网络,因为它计算简单且在实际应用中表现出色。

  • Sigmoid: 将输入映射到0到1之间,公式为 f(x) = 1 / (1 + e^(-x)),常用于输出层做二分类问题。
  • Tanh(双曲正切函数): 将输入映射到-1到1之间,公式为 f(x) = (e^x - e^(-x)) / (e^x + e^(-x)),比 Sigmoid 在某些情况下表现更好。

  • Softmax: 通常用于多分类问题的输出层,将输出值转化为概率分布,所有输出的和为1。

不同的激活函数在不同的任务中有不同的适用性,选择合适的激活函数是设计神经网络时的重要一步。

三、什么是线性激活函数?什么是饱和激活函数?

线性激活函数

线性激活函数是指输入与输出成线性关系的激活函数,通常表现为 f(x) = x,即输出与输入相同。这意味着不管输入是什么值,输出都是它的原值,没有进行任何非线性变换。

  • 优点: 计算简单,不会出现梯度消失问题(梯度消失后面再说)。
  • 缺点: 没有引入非线性特性,导致整个神经网络只能表示线性关系,即使多层堆叠,仍然等价于单层线性变换。因此,使用线性激活函数的神经网络无法解决复杂的非线性问题。

饱和激活函数

饱和激活函数指的是当输入值足够大或足够小时,输出会趋向于某个固定值,并且不再随输入的变化而变化。这类函数通常具有“饱和”区间,即输入过大或过小时,输出不再变化。

例如tanh,可以看到当输入值趋近正无穷的时候,输出为1。

四、什么是梯度消失问题?

梯度消失问题发生在反向传播过程中,当神经网络的层数较多时,梯度(即损失函数对网络参数的导数)在从输出层向前传播到输入层的过程中逐渐变小,甚至接近于零。这样一来,前几层网络的权重更新会变得非常缓慢,甚至停止更新,从而导致模型难以学习深层次的特征。

这个问题主要出现在使用 Sigmoid 和 Tanh 等饱和激活函数的情况下,因为这些函数在输入非常大或非常小时,导数(梯度)接近于零。当这些梯度通过链式法则逐层相乘时,它们会进一步减小,导致梯度几乎消失。

五、为什么Relu能解决梯度消失问题?

ReLU(Rectified Linear Unit) 是一种非线性激活函数,定义为 f(x) = max(0, x)。ReLU 的主要特点是:

  1. 非饱和性: 当输入为正数时,ReLU 的梯度始终为1,不会出现像 Sigmoid 和 Tanh 那样的梯度趋近于零的情况。这意味着在正值区间,梯度可以保持较大的值,从而避免梯度消失。
  2. 稀疏性: 当输入为负数时,ReLU 的输出为0,对应的梯度也是0。这会导致一部分神经元在训练过程中不会被激活,使得模型更加稀疏,提高了计算效率。

为什么 ReLU 可以克服梯度消失问题?

  • 稳定的梯度: ReLU 的梯度在正值区间内是恒定的1,这使得反向传播过程中的梯度不容易随着层数增加而消失。
  • 深层网络的有效训练: 因为 ReLU 不会饱和,梯度不会消失,所以可以有效训练深层网络,捕捉更多复杂的特征。

标签:输出,函数,梯度,ReLU,扫盲,激活,输入
From: https://blog.csdn.net/buggggg_/article/details/141722447

相关文章

  • 对象切割 和 虚函数
    对象切割简介:当你将一个派生类对象赋值给一个基类对象时,只会保留基类部分的信息,派生类的特有信息会被丢弃。这就是所谓的对象切割(slicing)发生时刻:将派生类对象赋值给父类对象时,如下classFather{};classSon:publicFather{};Sons;Fatherf=s; //发生......
  • MYSQL实现Oracle中decode函数
    背景:写oracle脚本迁移mysql时,mysql不支持decode函数思路:理解decode函数使用方法及参数含义1、decode(expression,value,result1,result2)     理解:如果expression=value,则输出result1,否则输出result22、decode(expression,value1,result1,value2,result2,value3,res......
  • 02.类、对象、成员函数的介绍
    2.类、对象、成员函数的介绍2.1类的基本概念在上一节中,讨论了类,对象,数据成员(属性),成员函数(行为)。有日期对象、时间对象、音频对象、视频对象、汽车对象、人对象等。几乎任何名词都可以在属性(如名称、颜色和大小)和行为(如计算、移动和通信)方面合理地表示为软件对象。可以将......
  • 用manim证明函数的左右极限
    http://t.csdnimg.cn/2pVdFhttp://t.csdnimg.cn/2pVdF在上一节的最后两个示例中,我们看到了两个不存在的限制。然而,对于每个例子来说,每个限制不存在的原因是不同的。我们看一下下面的例子: 极限不存在,因为函数没有固定为单个值 t走近t=0。越接近  t=0  我们移动得越......
  • 常用函数
    一、常用日期函数1.unix_timestamp:返回当前或指定时间的时间戳selectunix_timestamp();selectunix_timestamp("2020-10-28",'yyyy-MM-dd');2.from_unixtime:将时间戳转为日期格式selectfrom_unixtime(1603843200);3.current_date:当前日期selectcurrent_date......
  • DBA_oracle日期函数-【来自多个项目】
    selectTO_DATE(trunc(F_GXSJ),'YYYY-MONTH-DD')fromfsxx_dx_log_newwheretrunc(F_GXSJ)=TO_DATE()selecttrunc(F_GXSJ)fromfsxx_dx_log_new--2012-10-26selectSUBSTR(TO_CHAR(trunc(F_GXSJ),'YYYY-MM-DD'),6,2)fromfsxx_dx_......
  • Makefile编写2--使用变量,函数
    一、使用变量1、变量值的替换其格式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾的“a”替换成“b”字串。2、把变量的值再当成变量x=yy=za:=$($(x))3、override指示符如果有变量是通常make的命令行参数设置的,那么......
  • Typora 1.4.8 最新Typora破解激活教程!
    一、typora介绍Typora是一款Markdown编辑器和阅读器,风格极简/多种主题/支持macOS,Windows及Linux二、下载地址破解工具已经放到网盘了,需要的自取。网盘地址:Typora1.4.8最新Typora破解激活教程! 三、破解教程双击typora1.48-setup-x64.exe进行安装找到破解补丁中......
  • C++学习随笔——委托构造函数
    C++11中,引入了委托构造函数(delegatingconstructors)的概念。委托构造函数允许一个构造函数调用同一个类中的另一个构造函数,以减少代码重复。 委托构造函数的语法:classMyClass{public:MyClass(intx):value(x){//这个构造函数初始化value}M......
  • sql函数
    1.presto:1.array_position(applist_install,'com.funtomic.matchmasters')>02.split('joyit_daily_mas_cleaner','_')[3]—>presto从1开始计位(spark从0开始计位)3.日期diff:1.DATE_DIFF('day',DATE_PARSE('20220301&#......