ReLU——Deep Sparse Rectifier Neural Networks
1. 摘要
ReLU 相比 Tanh 能产生相同或者更好的性能,而且能产生真零的稀疏表示,非常适合自然就稀疏的数据。
采用 ReLU 后,在大量的有标签数据下,有没有无监督预训练模型取得的最好效果是一样的,这可以被看做是训练深层有监督网络的一个新的里程碑。
2. 背景
2.1. 神经元科学的观察
对脑能量消耗的研究表明,神经元以稀疏和分布的方式编码信息,同时活跃的神经元的百分比估计在 1% 到 4% 之间。这是信息表示丰富度和潜在能量消耗的一种平衡。但是,如果没有额外的正则化,比如 \(L_1\) 惩罚,普通的神经网络是没有这个特性的。

在生物神经元模型中,射频和输入电流的关系如上面左图所示。而在深度学习领域,最常见的两个激活函数 Sigmoid 和 Tanh 的图像如上面右图所示。
2.2. 稀疏的优势
信息分离。密集表示的信息是高度纠缠的,任何输入的变化都会导致表示向量大部分元素的改变。而如果一个表示对小的输入变化是稀疏且鲁棒的,那么非零特征就总会大致保持不变。
有效的大小可变表示。不同的输入信息量可能不同,这就要求我们的表示也是大小可变的。而改变激活神经元的数量就可以让模型控制表示的有效维度以及需要的精度。
线性可分。稀疏表示的信息一般是在高维空间,更加容易线性可分。
分布但稀疏。密集的分布式表示是最丰富的表示,比纯局部要成倍地有效,而稀疏表示中非零特征的数量也可以保证其有效性。
但是,太过强调稀疏性也会减少模型的有效容量,降低性能。
3. 深度网络
神经科学研究表明,大脑皮层的神经元很少达到它们的最大饱和区域,这表明激活函数可以用 ReLU 来近似表示。

给定一个输入,只有一部分神经元被选择,网络的非线性也就来自于单个神经元的是否被激活。一旦确定了哪些神经元被选择,输出就是对输入的一个线性函数。正因为此,梯度的反向传播不会像 Sigmoid 或者 Tanh 那样容易消失,而且也不涉及指数部分的计算,节省计算成本,还能得到稀疏解。每一次,被激活的神经元都是不确定的,这可以看作是很多个共享参数的线性模型的组合。
5. 实验结果

可以看到,没有预训练时,采用 ReLU 作为激活函数取得了最好的结果。而增加了与训练后,效果与之前相比也并没有太大差异。

在稀疏性没有达到 85% 之前,稀疏性都不会降低模型最终的表现,超过 85% 之后,稀疏性过大会降低模型的容量导致效果下降。
获取更多精彩,请关注「seniusen」!

ReLU——Deep Sparse Rectifier Neural Networks的更多相关文章
- [C1W3] Neural Networks and Deep Learning - Shallow neural networks
第三周:浅层神经网络(Shallow neural networks) 神经网络概述(Neural Network Overview) 本周你将学习如何实现一个神经网络.在我们深入学习具体技术之前,我 ...
- Coursera, Deep Learning 1, Neural Networks and Deep Learning - week4, Deep Neural Networks
Deep Neural Network Getting your matrix dimention right 选hyper-pamameter 完全是凭经验 补充阅读: cost 函数的计算公式: ...
- Coursera, Deep Learning 1, Neural Networks and Deep Learning - week3, Neural Networks Basics
NN representation 这一课主要是讲3层神经网络 下面是常见的 activation 函数.sigmoid, tanh, ReLU, leaky ReLU. Sigmoid 只用在输出0 ...
- Coursera, Deep Learning 1, Neural Networks and Deep Learning - week1, Introduction to deep learning
整个deep learing 系列课程主要包括哪些内容 Intro to Deep learning
- PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
URL: https://arxiv.org/abs/1608.08021 year: 2016 TL;DR PVANet 一个轻量级多物体目标检测架构, 遵循 "less channels ...
- DeepVO: Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks
1.Introduction DL解决VO问题:End-to-End VO with RCNN 2.Network structure a.CNN based Feature Extraction 论 ...
- Coursera, Deep Learning 1, Neural Networks and Deep Learning - week2, Neural Networks Basics
Logistic regression Cost function for logistic regression Gradient Descent 接下来主要讲 Vectorization Logi ...
- Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 灵长类视觉系统激发了深度人工神经网络的发展,使计算机视觉领域发生了革命性的变化.然而,这些网络的能量效率比它们的生物学对 ...
- 论文翻译:2018_Source localization using deep neural networks in a shallow water environment
论文地址:https://asa.scitation.org/doi/abs/10.1121/1.5036725 深度神经网络在浅水环境中的源定位 摘要: 深度神经网络(DNNs)在表征复杂的非线性关 ...
随机推荐
- Day11 Java内部类
什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public ...
- 怎么在移动端模拟pc端进行web开发调试日志
由于移动端开发,许多地方需要进行手势交互开发,而在pc模拟手机浏览器中不能进行模拟手势,所以无法查看日志,于是网上找了一个,腾讯vConsole,感觉还可以,分享给大家安装也方便 我的项目是基于vue ...
- 企业案例 【故障修复】mysql主从故障解决过程
由于配置有zabbix监控,某日收到zabbix监控主从报警,,查看mysql状态, showslave status \G; slave复制状态有误,SLAVE_SQL_RUNNING为NO, 接着 ...
- 在文章详情页调用seo标题标签
在新闻的详情页,调用当前栏目的seo标题,原标签是:{dede:field.seotitle /} {dede:type} [field:seotitle/] {/dede:type} 修改 \inc ...
- gattAttribute_t 含义 中文解释
1. gattAttribute_t 是一个结构体数据类型,里面存放了各种类型的数据. 现在 看看 TI 是怎么描述的,如下: /** * @brief GATT Attribute form ...
- jQuery Nestable2 使用总结
最近,因为公司的一个新项目,用了一个基于bootstrap二次改造的国外友人的框架.感觉很一般吧,要求更换框架,客户拒绝.只能搞这个,发现里面一个jQuery插件-[Nestable]但是源作者长时间 ...
- 数据分析-pandas基础入门(一)
最近在学习python,所以了解了一下Pandas,Pandas是基于NumPy的一个开源Python库,它被广泛用于快速分析数据,以及数据清洗和准备等工作. 首先是安装numpy以及pandas, ...
- 大数据入门第七天——MapReduce详解(二)切片源码浅析与自定义patition
一.mapTask并行度的决定机制 1.概述 一个job的map阶段并行度由客户端在提交job时决定 而客户端对map阶段并行度的规划的基本逻辑为: 将待处理数据执行逻辑切片(即按照一个特定切片大小, ...
- 20155211 Exp1 PC平台逆向破解(5)M
20155211 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...
- element-ui 点击行如何获取table的行索引
文档中有一个tableRowClassName方法,可以获取到当前行的index, tableRowClassName ({row, rowIndex}) { //把每一行的索引放进row row.i ...