首页 > 其他分享 >激活函数

激活函数

时间:2024-11-14 19:43:26浏览次数:1  
标签:输出 函数 梯度 ReLU 传播 激活



一、正向传播和反向传播


  • 在模型训练过程中,是同时包含正向传播和反向传播的

    • 正向传播是模型根据输入数据和当前的参数(权重和偏置)计算预测输出的过程。例如,在一个图像分类神经网络模型中,输入是图像的像素数据,经过多个隐藏层的计算,最终在输出层得到预测的类别概率分布。

    • 反向传播紧接着正向传播进行。它基于正向传播得到的预测输出和真实标签之间的差异(通过损失函数来衡量),计算每个参数的梯度。这个梯度表示了参数对损失函数的影响程度,然后利用这些梯度来更新模型的参数(权重和偏置)。

    • 这种正向传播和反向传播的交替进行是模型训练的核心机制。每次正向传播得到预测结果后,通过反向传播调整参数,然后再进行下一次正向传播,如此反复,直到模型收敛(即损失函数的值不再显著下降或者达到预设的训练轮数等停止条件)。


  • 在多层神经网络中,即使中间层没有像输出层那样的真实标签,依然可以进行反向传播。

    • 在反向传播阶段,中间层的参数更新是基于损失函数对输出层的影响,通过链式法则将误差从输出层反向传播回中间层来间接利用损失函数,以此来更新中间层的参数,使网络整体朝着损失减小的方向优化。




二、梯度消失 梯度爆炸


  • 梯度消失时,靠近输入层的网络层的参数更新变得非常缓慢。因为参数更新是通过梯度乘以学习率来实现的,梯度接近于零会导致这些层的参数几乎无法更新,使得模型难以学习到输入数据的有效特征,从而导致训练过程漫长,甚至无法收敛到一个较好的结果

  • 梯度爆炸会使模型的训练过程变得极不稳定。参数更新步长过大可能会导致模型在训练过程中跳过最优解,甚至无法收敛。





三、激活函数


  • 在神经网络的训练过程中,激活函数主要用于前向传播(Forward Propagation)阶段的神经元计算

  • 激活函数在隐藏层中的作用:

    • 控制神经元输出范围:例如,Sigmoid 函数的输出范围是(0,1),Tanh 函数的输出范围是(-1,1),在使用反向传播算法更新权重时,如果神经元的输出范围过大,可能会导致梯度消失或梯度爆炸问题。而通过合适的激活函数控制输出范围,可以在一定程度上缓解这些问题。

    • 引入非线性因素:如果没有激活函数,神经网络的每一层都只是对输入进行线性变换。而激活函数可以打破这种线性关系。例如,使用 ReLU 激活函数,多层神经网络通过激活函数的非线性作用,就可以逼近任何复杂的函数,从而能够更好地拟合数据中的复杂模式。


  • 激活函数在输出层中的作用:

    • 对于分类任务:多分类使用 Softmax 激活函数。Softmax 函数可以将神经元的输出转换为概率分布;对于二分类任务,Sigmoid 函数是常用的激活函数。

    • 对于回归任务:在回归任务中,输出层通常不使用激活函数,或者使用线性激活函数(即输出等于输入)。因为回归任务的目标是预测一个连续的值,不需要将输出转换为概率或限制在特定的范围内。





四、激活函数有哪些


  1. Sigmoid函数

    • 函数表达式及性质
    • 适用情况
      • 二分类问题的输出层:如在判断一封邮件是否为垃圾邮件。
      • 概率估计场景:如在医学诊断中,预测患者患有某种疾病的概率。
  2. Tanh函数(双曲正切函数)

    • 函数表达式及性质
    • 适用情况
      • 隐藏层:Tanh函数通常用于神经网络的隐藏层。与Sigmoid函数相比,它的输出范围更对称,中心在0点。这使得在反向传播过程中,梯度的更新更稳定。例如,在多层感知机(MLP)用于时间序列预测的隐藏层中,Tanh函数可以帮助模型更好地学习数据中的正负特征。
      • 需要输出中心为零的数据场景:当希望神经元的输出在正负区间都有分布,并且对数据的正负特征都比较敏感时,Tanh函数是比较合适的。比如在一些信号处理相关的神经网络应用中,Tanh函数可以更好地处理正负信号。
  3. ReLU函数(修正线性单元)

    • 函数表达式及性质
    • 适用情况
      • 隐藏层和输出层广泛应用:ReLU函数是目前深度学习中最常用的激活函数之一,广泛应用于神经网络的隐藏层和输出层。在图像识别、语音识别等众多领域的深度学习模型的隐藏层中,ReLU函数能够有效缓解梯度消失问题,加速模型的训练。例如,在卷积神经网络(CNN)用于图像分类任务时,如ResNet、VGG等模型的隐藏层大量使用ReLU函数。
      • 处理非负数据场景:如果数据本身具有非负的特性或者希望神经元输出非负的值,ReLU函数是一个自然的选择。例如,在处理图像像素值(通常是非负的)的神经网络中,ReLU函数可以很好地适应这种数据特性。
  4. Leaky ReLU函数

    • 函数表达式及性质
    • 适用情况
      • 缓解ReLU函数的“神经元死亡”问题:在一些情况下,ReLU函数可能会导致神经元“死亡”,即某些神经元在训练过程中永远不会被激活(输出始终为0)。Leaky ReLU函数通过为负数输入提供一个小的梯度,降低了这种风险。在一些对模型稳定性要求较高的应用中,如深度强化学习中的价值网络或者深度生成模型的某些部分,Leaky ReLU可以作为ReLU的替代选择。
  5. Softmax函数

    • 函数表达式及性质
    • 适用情况
      • 多分类问题的输出层:在神经网络用于多分类任务时,Softmax函数是输出层的常用激活函数。例如,在手写数字识别(MNIST数据集)任务中,输出层有(10)个神经元,经过Softmax函数后,这(10)个输出值分别表示数字(0 - 9)的概率,概率最高的类别即为预测的类别。Softmax 函数输出的所有概率之和是1



标签:输出,函数,梯度,ReLU,传播,激活
From: https://www.cnblogs.com/kakafa/p/18546645

相关文章

  • Rust ?(Rust错误传播运算符?)(用于简化错误处理,自动将错误从函数中返回)(可恢复错误Result<T
    文章目录Rust错误传播运算符:深入理解与应用1.错误处理的基础1.1`Result`枚举1.2`Option`枚举2.错误传播运算符(`?`)2.1基本语法2.2工作原理1.检查返回值2.提取`Ok`值2.3错误传播示例3.错误传播与自定义错误类型(没仔细看)3.1定义自定义错误类型3.2自定义......
  • 关于变量的声明和定义、内部函数和外部函数
    关于变量的声明和定义一个函数一般由两部分组成:声明部分和执行语句。声明部分的作用:是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行声明。对于函数而言,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是对函数功能的定义。对被调用函数的声明是放在主调......
  • vite将工具函数js打包为npm包并发布
    创建vite项目,将vue依赖清除(因为是纯函数js)npmcreatevitepackage.json中vue的依赖都删掉,把src、public等目录都删掉;package.json文件如下{ "name":"tool",//npm包名 "private":false, "version":"0.0.0", "type":"modul......
  • vue3 h函数应用,el-table-v2定义column
    一、引入import{h}from'vue'二、column属性cellRenderer使用h函数h函数中嵌套Element组件Popconfirm{title:'注释',width:165,flexGrow:1,key:"str",dataKey:"str",cellRenderer:({rowData}:any)=>{......
  • 字符函数和字符串函数
    1.字符分类函数2.字符转换函数3.strlen的使⽤和模拟实现4.strcpy的使⽤和模拟实现5.strcat的使⽤和模拟实现6.strcmp的使⽤和模拟实现7.strncpy函数的使⽤8.strncat函数的使⽤9.strncmp函数的使⽤10.strstr的使⽤和模拟实现11.strtok函数的使⽤12.strer......
  • Flask新手教程之- 视图函数的装饰器
    除了@app.route,Flask还支持其他装饰器,用于实现更复杂的功能。 示例:@app.before_request:在每个请求处理之前运行的函数。@app.after_request:在每个请求处理之后运行的函数。@app.teardown_request:在请求结束后运行的函数,用于清理工作。  实例:@app.before_requestd......
  • C++中的仿函数Functor
    在C++中,有仿函数Functor的概念,首先要明白,它叫做仿函数,就说明它本身肯定不是一个函数=>事实上,它是一个类的对象,但是可以像函数一样来进行调用怎么来理解这句话呢“仿函数是一个类的对象,但是它可以像函数一样来进行调用”? 是这样的=>本质是在这个类里面实现一个operator(),......
  • C语言:函数递归
    #include<stdio.h>intmain(){ printf("haha\n"); main(); return0;}先来看这段代码,这是最简易的一段递归的代码。当我们打印完haha后会main函数调用自己,这样就会使屏幕一直打印haha,但是会停止,这是为什么呢?因为当我们为main函数在栈区开出的内存被不断使用,最后导致栈溢......
  • 【Pytorch】神经网络介绍|激活函数|使用pytorch搭建方法
    神经网络神经网络介绍概念神经网络人工神经网络ANN也称神经网络NN是一种模仿生物神经网络结构和功能的计算模型人脑可以看作是一个生物神经网络,由众多神经元连接而成,神经网络可以看作是模拟生物神经元的过程输入层inputLayer:输入x的那一层输出层output......
  • 高级语言调用C接口(二)回调函数(1)
    前言先说一下上一篇文章给出了各高级语言类型和C类型的对应关系,只包含基本类型,不包含结构体等复杂结构,高级语言只有常见的JAVA(Android通用)、C#、Python、Arkts(鸿蒙系)。其它语言如delphi、PB之类的古老语言目前使用的人非常稀少,默认不写了;还有js调用需要编译位wasm,但限制非......