神经网络五:常用的激活函数

2023-11-15

本文就现在神经网络中主要的几个激活函数进行分析和讲解,比较几个激活函数的优缺点。在此特声明,本文的内容是来自:CS231n课程笔记翻译:神经网络笔记1(上) - 智能单元 - 知乎专栏。因本人有时会查阅这些相关的知识点,一直翻文档比较麻烦,特从文档中摘录复制写到博客中,希望对广大参阅者也有帮助。


每个激活函数(或非线性函数)的输入都是一个数字,然后对其进行某种固定的数学操作。下

面是在实践中可能遇到的几种激活函数:

————————————————————————————————————————


左边是Sigmoid非线性函数,将实数压缩到[0,1]之间。右边是tanh函数,将实数压缩到[-1,1]。
————————————————————————————————————————

1 Sigmoid

sigmoid非线性函数的数学公式是\textstyle f(z) = 1/(1+\exp(-z)) ,函数图像如上图的左边所示。在前一节中已经提到过,它输入实数值并将其“挤压”到0到1范围内。更具体地说,很大的负数变成0,很大的正数变成1。在历史上,sigmoid函数非常常用,这是因为它对于神经元的激活频率有良好的解释:从完全不激活(0)到在求和后的最大频率处的完全饱和(saturated)的激活(1)。然而现在sigmoid函数已经不太受欢迎,实际很少使用了,这是因为它有两个主要缺点:
(1)Sigmoid函数饱和使梯度消失。sigmoid神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。回忆一下,在反向传播的时候,这个(局部)梯度将会与整个损失函数关于该门单元输出的梯度相乘。因此,如果局部梯度非常小,那么相乘的结果也会接近零,这会有效地“杀死”梯度,几乎就有没有信号通过神经元传到权重再到数据了。还有,为了防止饱和,必须对于权重矩阵初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习了。

(2)Sigmoid函数的输出不是零中心的。这个性质并不是我们想要的,因为在神经网络后面层中的神经元得到的数据将不是零中心的。这一情况将影响梯度下降的运作,因为如果输入神经元的数据总是正数(比如在中每个元素都有x>0),那么w关于的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数(具体依整个表达式f而定)。这将会导致梯度下降权重更新时出现z字型的下降。然而,可以看到整个批量的数据的梯度被加起来后,对于权重的最终更新将会有不同的正负,这样就从一定程度上减轻了这个问题。因此,该问题相对于上面的神经元饱和问题来说只是个小麻烦,没有那么严重。

2 Tanh

tanh非线性函数图像如上图右边所示。它将实数值压缩到[-1,1]之间。和sigmoid神经元一样,它也存在饱和问题,但是和sigmoid神经元不同的是,它的输出是零中心的。因此,在实际操作中,tanh非线性函数比sigmoid非线性函数更受欢迎。注意tanh神经元是一个简单放大的sigmoid神经元,具体说来就是:tanh(x)=2f(2x)-1 。

左边是ReLU(校正线性单元:Rectified Linear Unit)激活函数,当x=0时函数值为0。当x>0函数的斜率为1。右边是从Krizhevsky 等的论文中截取的图表,指明使用ReLU比使用tanh的收敛快6倍。

3 ReLU

在近些年ReLU变得非常流行。它的函数公式是 。换句话说,这个激活函数就是一个关于0的阈值(如上图左侧)。使用ReLU有以下一些优缺点:
(1)优点:相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用(Krizhevsky等的论指有6
倍之多)。据称这是由它的线性,非饱和的公式导致的。
(2)优点:sigmoid和tanh神经元含有指数运算等耗费计算资源的操作,而ReLU可以简单地通过对一个矩阵进行阈值计算得到。
(3)缺点:在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度流过Re LU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。例如,如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

4 Leaky ReLU

Leaky ReLU是为解决“Re LU死亡”问题的尝试。ReLU中当x<0时,函数值为0。而Leaky ReLU则是给出一个很小的负数梯度值,比如0.01。所以其函数公式为其中α 是一个小的常量。有些研究者的论文指出这个激活函数表现很错,但是其效果并不是很稳定。Kaiming He等人在2015年发布的论Delving Deep into Rectifiers中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。然而该激活函数在在不同任务中均有益处的一致性并没有特别清晰。

5 Maxout

一些其他类型的单元被提了出来,它们对于权重和数据的内积结果不再使用函数形式。一个相关的流行选择是Maxout(最近由Goodfellow等发布)神经元。Maxout是对ReLU和leaky ReLU的一般化归纳,它的函数是: 。ReLU和Leaky ReLU都是这个公式的特殊情况(比如ReLU就是当w1,b1=0的时候)。这样Maxout神经元就拥有Re LU单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的ReLU单元)。然而和ReLU对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。

6 总结

以上就是一些常用的神经元及其激活函数。最后需要注意一点:在同一个网络中混合使用不同类型的神经元是非常少见的,虽然没有什么根本性问题来禁止这样做。
一句话:“那么该用那种呢?”用Re LU非线性函数。注意设置好学习率,或许可以监控你的网络中死亡的神经元占的比例。如果单元死亡问题困扰你,就试试Leaky ReLU或者Maxout
,不要再用sigmoid了。也可以试试tanh,但是其效果应该不如Re LU或者Maxout。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络五:常用的激活函数 的相关文章

  • win10家庭版启用远程桌面

    此电脑右键属性 gt 远程设置 gt 允许远程协助连接这台计算机 勾选 下载RDP Wrapper 地址 https github com stascorp rdpwrap releases 解压后点击RDPCheck exe 如显示无法连

随机推荐

  • VS2019使用以及UE4的代码调试

    1 会进行代码调试 Ctrl Shift B 编译代码 Ctrl f5 运行 不调试 f5 调试 shift f5 停止调试 f11 逐步执行 f9 切换断点 对于UE4的工程代码的调试仍然需要学习与总结 2 会进行函数查找 不借助番茄插件
  • lattice 包的用法

    1 library lattice 加载包 d lt data frame x seq 0 14 y seq 1 15 z rep c a b c times 5 xyplot y x data d xy的散点图 xyplot y x z
  • 关于贷后的8个专业名词解析

    一 DPD day past due DPD的意思是逾期天数 指的是逾期用户在最早违期日期至目前日期的时间间隔 贷后催收时需要计算用户的逾期天数 并根据逾期的情况采用不同的催收手段 二 Mn M1 Mn的意思是逾期的期数 比如M1表示逾期一
  • 《Autodesk Revit二次开发基础教程》书籍终于上架了

    由Autodesk中国研究院Revit开发团队的几位同事一起编撰的 Autodesk Revit二次开发基础教程 于今天在天猫同济大学出版社旗舰店正式上架 购买链接在这里 https detail tmall com item htm u
  • TensorFlow训练模型的过程中打开tensorboard

    在训练的过程中 想通过tensorboard实时观察训练损失和验证集准确率 一直出错 打开tensorboard后在浏览器查看 然后训练就停止了 提示信息如下 File D ProgramData PycharmProjects tf le
  • Spring源码分析(一):Spring底层核心原理解析

    本节只讲结论 不做验证 后面会专门拉代码讲解验证 Spring的核心是IOC和AOP 大概有这么几个核心知识点 Bean的生命周期底层原理 依赖注入底层原理 初始化底层原理 推断构造方法底层原理 AOP底层原理 Spring事务底层原理 S
  • 大陆医生谈收入

    官网 ZY123 com 中医123 本人今年45岁 84年大本 87年研究生毕业 很正规的医学院校毕业 随后分到中部一家大型医院干了4年临床 91年先到欧洲的实验室混了几年 后来到临床上干了2年后回来了 也算 海龟 吧 先在广东的两家医院
  • 【基础教学】UiBot的下载、安装与使用

    鉴于很多小伙伴 可能刚刚关注UiBot 对这个平台还不是很了解 我们准备系统的讲解UiBot的相关操作 方便您对UiBot的认识与使用 目录 1 UiBot软件简介 2 UiBot能为您做什么 3 系统环境及配置要求 4 下载与安装 5 注
  • 堆排序(几个重点)

    https blog csdn net touch 2011 article details 6767673 几个重点 大小顶堆虽然逻辑形式是完全二叉树 但实际是以数组的形式存储 最后一个非叶子节点 最后一个有孩子的节点 的位置是 n 2
  • linux 获取进程输出流,linux后台进程与标准输出

    一 遇到问题 笔者在测试阶段 把服务拉到服务器上 部署之后 启动服务 但是没有启动成功 也没有报错信息 二 先理解一些概念 1 黑洞 dev null 这个就是黑洞 这是一个文件 这个文件是一个 只写 的文件 从里面读不出信息 为什么要使用
  • Elasticsearch 查询和聚合查询:基本语法和统计数量

    摘要 Elasticsearch是一个强大的分布式搜索和分析引擎 提供了丰富的查询和聚合功能 本文将介绍Elasticsearch的基本查询语法 包括预发查询和聚合查询 以及如何使用聚合功能统计数量 引言 Elasticsearch是一种开
  • C++实现查找字符串中的数字,并输出

    例如输入 dsafjoi3425sfsdjl5435asfkl 3400输出为 3425 5434 3400 include
  • Stata如何快速安装外部命令

    Stata如何快速安装外部命令 来自微信公众号 TidyFridy 1 之前在安装Stata外部命令时 访问外网速度很慢 安装SSC外部命令没有成功 出现过stacktrace not available 的提示 解决办法 Stata的安装
  • 数据结构课程设计-五子棋

    1 题目描述 五子棋的游戏规则是两人对弈 使用黑白两色棋子 轮流下在棋盘上 当一方先在横线 竖线 斜对角线方向形成五子连线 则取得胜利 2 设计要求 在内存中 设计数据结构存储游戏需要的数据 满足五子棋游戏的游戏规则 实现简单的人机对战功能
  • 条款28.理解引用折叠

    理解引用折叠 以下面这个模板为例 template
  • 华为校招机试题-去除多余空格-2023年

    题目描述 去除文本多余空格 但不去除配对单引号之间的多余空格 给出关键词的起始和结束下标 去除多余空格后刷新关键词的起始和结束下标 条件约束 1 不考虑关键词起始和结束位置为空格的场景 2 单词的的开始和结束下标保证涵盖一个完整的单词 即一
  • Pycharm的python console报错“Error running console” “错误:无法启动进程,指定的不是一个工作目录”

    1 依次选择 File 文件 gt setting 设置 gt Build Execution Deployment 构建 执行部署 gt Console gt Python Console找到python console设置 2 设置 1
  • 【简单】HJ14 字符串排序(Python、C++两种语言实现)

    题目 给定 n 个字符串 请对 n 个字符串按照字典序排列 数据范围 1 n 1000 1 n 1000 字符串长度满足 1 len 100 1 len 100 输入描述 输入第一行为一个正整数n 1 n 1000 下面n行为n个字符串 字
  • VsCode连接服务器并编辑服务器端代码

    打开 VsCode 安装 Remote SSH 插件 安装完成后 页面左侧插件下方会出现一个形如电脑的图标 页面右下角也会出现绿色的远程控制的标志 新建SSH连接 选择 远程资源管理器 点击 设置 齿轮状图标 选择配置文件并打开 按照实际信
  • 神经网络五:常用的激活函数

    本文就现在神经网络中主要的几个激活函数进行分析和讲解 比较几个激活函数的优缺点 在此特声明 本文的内容是来自 CS231n课程笔记翻译 神经网络笔记1 上 智能单元 知乎专栏 因本人有时会查阅这些相关的知识点 一直翻文档比较麻烦 特从文档中