修正线性单元(Rectified linear unit,ReLU)


Rectified linear unit

在神经网络中,常用到的激活函数有sigmoid函数f(x)=11+exp(−x)、双曲正切函数f(x)=tanh(x),今天要说的是另外一种activation function,rectified linear function,f(x)=max(0,x),

The rectifier is, as of 2015, the most popular activation function for deep neural networks

它的特点是被认为是more biologically plausible than widely used logistic sigmoid or hyperbolic tangent(双曲正切 tanh),就是说更加符合神经元信号激励原理。采用了rectified linear function作为activation function的unit被称为rectified linear unit。它的一个平滑解析函数为f(x)=ln(1+ex),被称之为softplus function,softplus的微分就是logistic function:f′(x)=ex/(ex+1)=1/(1+e−x)。另外一种函数叫做softmax function或者normalized exponential是logistic function的一个泛化,如下:

σ(z)j=ezj∑Kk=1ezk for j=1,...,K.

the softmax function常被用来various probabilistic multiclass classification methods 比如multinomial logistic regression,multiclass linear discriminant analysis, naive Bayes classifiers and artificial neural networks等。在Andrew Ng的机器学习课程中,softmax regression中就用到了softmax function。这里点一下说明。当然本文的重点还是在rectified linear function上。


有几种变体:

noisy ReLUs

可将其包含Gaussian noise得到noisy ReLUs,f(x)=max(0,x+N(0,σ(x))),常用来在机器视觉任务里的restricted Boltzmann machines中。

leaky ReLUs

允许小的非零的gradient 当unit没有被激活时。

f(x)={x0.01xif x>0otherwise

Advantages

  1. Biological plausibility:单边,相比于反对称结构(antisymmetry)的tanh
  2. Sparse activation:基本上随机初始化的网络,只有有一半隐含层是处于激活状态,其余都是输出为0
  3. efficient gradient propagation:不像sigmoid那样出现梯度消失的问题
  4. efficient computation:只需比较、乘加运算。

    使用rectifier 作为非线性激活函数使得深度网络学习不需要pre-training,在大、复杂的数据上,相比于sigmoid函数等更加快速和更有效率。

    标准的sigmoid输出不具备稀疏性,需要通过惩罚因子来训练一堆接近于0的冗余数据,从而产生稀疏数据,比如L1,L2或者student-t作为惩罚因子,进行regularization。而ReLU为线性修正,是purelin的折线版,作用是如果计算输出小于0,就让它等于0,否则保持原来的值,这是一种简单粗暴地强制某些数据为0的方法,然而经实践证明,训练后的网络完全具备适度的稀疏性,而且训练后的可视化效果和传统pre-training的效果很相似。这说明了ReLU具备引导适度稀疏的能力。

从函数图形上看,ReLU比sigmoid更接近生物学的激活模型。

实际测量数据:纵坐标轴是神经元的放电速率(Firing Rate);横轴是毫秒(ms)

基于生物学的数学规则化激活模型(LIF)

(Softplus是ReLU的圆滑版,公式为:g(x)=log(1+e^x),从上面的结果看,效果比ReLU稍差)

ReLU在经历预训练和不经历预训练时的效果差不多,而其它激活函数在不用预训练时效果就差多了。ReLU不预训练和sigmoid预训练的效果差不多,甚至还更好。

相比之下,ReLU的速度非常快,而且精确度更高。

因此ReLU在深度网络中已逐渐取代sigmoid而成为主流。

ReLU导数(分段):

x <= 0时,导数为0

x > 0时,导数为1

早期多层神经网络如果用sigmoid函数或者hyperbolic tangent作为激活函数,如果不进行pre-training的话,会因为gradient vanishing problem而无法收敛。

而预训练的用处:规则化,防止过拟合;压缩数据,去除冗余;强化特征,减小误差;加快收敛速度。而采用ReLu则不需要进行pre-training。


实践应用

在应用中,把除了最外层输出用的sigmoid函数的其他所有用到sigmoid函数的地方全都改为ReLu函数,同时梯度也改为ReLu的,然后把学习速率调低。

修正线性单元(Rectified linear unit,ReLU)的更多相关文章

  1. ReLu(修正线性单元)、sigmoid和tahh的比较

    不多说,直接上干货! 最近,在看论文,提及到这个修正线性单元(Rectified linear unit,ReLU). Deep Sparse Rectifier Neural Networks Re ...

  2. 从损失函数优化角度:讨论“线性回归(linear regression)”与”线性分类(linear classification)“的联系与区别

    1. 主要观点 线性模型是线性回归和线性分类的基础 线性回归和线性分类模型的差异主要在于损失函数形式上,我们可以将其看做是线性模型在多维空间中“不同方向”和“不同位置”的两种表现形式 损失函数是一种优 ...

  3. Scaled Exponential Linear Unit

    https://www.bilibili.com/video/av9770302/?p=11 Relu Leaky Relu Parametric Relu就是把leaky部分的斜率学出来,而不是指定 ...

  4. Java实现线性阈值模型(Linear Threshold Model)

    影响力传播的线性阈值模型: 网络中连接任意两个节点u,v之间的边都有权重,任意一个节点它的各个邻居节点的边的权重之和为1,即 N(v):neighbors of v. 网络中的节点分为已激活节点和未激 ...

  5. 线性判别分析(Linear Discriminant Analysis,LDA)

    一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...

  6. 感知机和线性单元的C#版本

    本文的原版Python代码参考了以下文章: 零基础入门深度学习(1) - 感知器 零基础入门深度学习(2) - 线性单元和梯度下降 在机器学习如火如荼的时代,Python大行其道,几乎所有的机器学习的 ...

  7. 用线性单元(LinearUnit)实现工资预测的Python3代码

    功能:通过样本进行训练,让线性单元自己找到(这就是所谓机器学习)工资计算的规律,然后用两组数据进行测试机器是否真的get到了其中的规律. 原文链接在文尾,文章中的代码为了演示起见,仅根据工作年限来预测 ...

  8. (2)Deep Learning之线性单元和梯度下降

    往期回顾 在上一篇文章中,我们已经学会了编写一个简单的感知器,并用它来实现一个线性分类器.你应该还记得用来训练感知器的『感知器规则』.然而,我们并没有关心这个规则是怎么得到的.本文通过介绍另外一种『感 ...

  9. ReLu(Rectified Linear Units)激活函数

    论文参考:Deep Sparse Rectifier Neural Networks (很有趣的一篇paper) 起源:传统激活函数.脑神经元激活频率研究.稀疏激活性 传统Sigmoid系激活函数 传 ...

随机推荐

  1. 数码管动态显示——74HC04

    1.电路设计: p0实现段选,p2实现位选,74hc04是反相器,有反向和放大的双重作用. 2.程序设计: #include<reg52.h> code unsigned char sev ...

  2. [转载] 浏览器Browser对同域名下的请求并发数量

    原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好  https://www ...

  3. 详解Azure的权限控制

    注意:本文档仅限于Azure国际版,国内版略有不同   Azure中的角色分配相对来说是比较复杂的的,对于任何云组织来说,云的资源访问管理权限都是一项非常重要的功能,azure中的授权系统叫做基于角色 ...

  4. 三大框架 之 Hibernate框架概述(概述、配置、核心API)

    目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...

  5. mac 修改mysql root密码

    01-在系统偏好设置中停止mysql服务 或者使用指令 sudo /usr/local/mysql/support-files/mysql.server stop 02-输入指令: cd /usr/l ...

  6. html5中 input的pattern属性 和 details/summary元素

    html5--3.21 课程小结与其他新增元素 一.总结 一句话总结: input的pattern属性可以设置正则验证,比如检测学号的位数和数字区间 details/summary元素配合起来可以做元 ...

  7. python No module named 'urlparse'

    python3中,取消了urlparse 引用方式改为了: from urllib import parse

  8. vmWare安装centos7之后使用yum安装提示there are on enabled repos(修改yum源)

    可以使用这个命令修改yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.rep ...

  9. 性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %rbx,%rbp

    在Linux下做性能分析3:perf - 知乎 https://zhuanlan.zhihu.com/p/22194920 Linux Perf 性能分析工具及火焰图浅析 - 知乎 https://z ...

  10. 我大概知道他在说什么了,是对内存单元的竞争访问吧。Python有GIL,在执行伪码时是原子的。但是伪码之间不保证原子性。 UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情况。你先看看发送速率,还有是否带有拥塞控制。

    我大概知道他在说什么了,是对内存单元的竞争访问吧.Python有GIL,在执行伪码时是原子的.但是伪码之间不保证原子性.   UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情 ...