Empirical Evaluation of Rectified Activation in Convoluation Network 激活函数的讨论

本文主要是介绍Empirical Evaluation of Rectified Activation in Convoluation Network 激活函数的讨论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Empirical Evaluation of Rectified Activation in Convoluation Network

对神经网络激活函数的经验评估

Standard rectified linear unit    relu  标准整流线单元   这是最常用的激活函数

Leaky rectified linear unit      lrelu

Parametric rectified linear unit  prelu

Randomized leakly rectified linear unit   rrelu

 

我们的实验表明, 在整流活化单元中, 将非零斜率合并为负的部分可以持续地改善结果。

此外, 在小规模数据集上, 使用确定性负斜率或学习它都容易拟。

所以在遥感影像数据集上高质量有标签数据的缺乏,小数据集的特性是更适合rrelu的。

 

尽管其深度,现代深度学习系统的关键特征之一是使用非饱和激活函数(例如ReLU)来替换其饱和对象(例如S形,tanh)。

使用非饱和激活(rrelu)功能的优点在于两个方面:一是解决所谓的“爆炸/消失梯度”,二是加快收敛速度。

 

讨论一下激活函数:

神经元只对输入部分的少部分选择性响应,大部分信号被屏蔽了,这样可以提高学习的精度,更快更好的获取稀疏学习特征。传统的sigmoid函数,同时有近乎一半的神经元被激活,不符合神经元激活的特性。

最重要的两点,第一:稀疏神经元激活的稀疏性。第二,激活函数的区域性。

 

关于稀疏性的特点:

  1. 信息解离:

当前,深度学习一个明确的目标是从数据变量中解离出关键因子。原始数据(以自然数据为主)中通常缠绕着高度密集的特征。原因是这些特征向量是相互关联的,一个小小的关键因子可能牵扰着一堆特征,有点像蝴蝶效应,牵一发而动全身。

基于数学原理的传统机器学习手段在解离这些关联特征方面具有致命弱点。

然而,如果能够解开特征间缠绕的复杂关系,转换为稀疏特征,那么特征就有了鲁棒性(去掉了无关的噪声)

  1. 线性可分性:

稀疏特征有更大可能线性可分,或者对非线性映射机制有更小的依赖。因为稀疏特征处于高维的特征空间上(被自动映射了)

从流形学习观点来看(参见降噪自动编码器),稀疏特征被移到了一个较为纯净的低维流形面上。

线性可分性亦可参照天然稀疏的文本型数据,即便没有隐层结构,仍然可以被分离的很好。

  1. 稀疏性激活函数的作用:

激活函数本身具有稀疏性,可以更有效的从数据集上学习到相对稀疏的特征。起到自动化解离的效果。

 

过分强调稀疏性引入也不好,会减少模型的有效容量,即特征屏蔽太多,导致模型无法学习到有效特征。论文中对稀疏性的引入度做了实验,理想稀疏性(强制置0)比率是70%~85%。超过85%,网络就容量就成了问题,导致错误率极高。对比大脑工作的95%稀疏性来看,现有的计算神经网络和生物神经网络还是有很大差距的。

庆幸的是,ReLu只有负值才会被稀疏掉,即引入的稀疏性是可以训练调节的,是动态变化的。

只要进行梯度训练,网络可以向误差减少的方向,自动调控稀疏比率,保证激活链上存在着合理数量的非零值。

Relu函数,使得迷行自动引入稀疏性,这一做法,等效于无监督学习的预训练。缩小了非监督和监督学习之间的代沟,当然,加快了网络训练速度。

 

First, is sparsity the most important factor for a good performance?
Second, can we design better non-saturated activation functions that could beat ReLU?

 

 

相比较于relu的负数部分全部取0,对lrelu,ai是固定的,对prelu,ai是学习得到的,对Rrelu,ai在训练集上是一个在一定范围内随机变化的,在测试集上是固定的。

Relu:

Lrelu:

在原论文中,ai值被设为接近100,这篇论文中,该值设定为5.5

leaked = tf.scalar_mul(leaky_ratio, features)
tensor = tf.maximum(features, leaked,                  

name='maximum')
return tensor

Prelu:

公式同lrelu,不过ai是通过反向传播算法从训练上学习到的。

Rrelu:

aji服从均匀分布,对aji的取值

 

实验结果:

1.CIFAR-10/100  采用NIN或者Inception结构上进行了不同激活函数的训练

2.National Data Science Bowl Competition

NDSB Net

 

Result and Discussion

以relu函数为基准,

  1. lrelu表现好于relu,a=100与relu差不多,但是a越小,效果越好
  2. 在训练集上,prelu的loss最低的,而lrelu和rrelu的loss都要比relu要高,这说明prelu可能在小数据集上存在比较严重的过拟合问题。
  3. 在NDSB数据集上训练集更小,但是模型结构更大,所以说Rrelu在对抗过拟合的时候效果更好。

 

结论:

  1. relu函数并不是最好的,lrelu变体就很好,但是缺乏理论支持。
  2. 大尺度数据集上的激活函数?

 

这篇关于Empirical Evaluation of Rectified Activation in Convoluation Network 激活函数的讨论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248396

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

JavaSE(十三)——函数式编程(Lambda表达式、方法引用、Stream流)

函数式编程 函数式编程 是 Java 8 引入的一个重要特性,它允许开发者以函数作为一等公民(first-class citizens)的方式编程,即函数可以作为参数传递给其他函数,也可以作为返回值。 这极大地提高了代码的可读性、可维护性和复用性。函数式编程的核心概念包括高阶函数、Lambda 表达式、函数式接口、流(Streams)和 Optional 类等。 函数式编程的核心是Lambda

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C