ReLU函数简介
来源:互联网 发布:长征六号 知乎 编辑:程序博客网 时间:2024/05/29 14:09
打开一些神经网络的网络描述文件,可以看到不同的层,其中就有一种层的类型,叫做ReLU。今天正好有小伙伴问起,虽然是基础部分但是还是来总结一下吧。首先看网络结构描述的形式:
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 96 pad: 3 kernel_size: 7 stride: 2 }}layer { name: "relu1" type: "ReLU" bottom: "conv1" top: "conv1"}
这里截取Faster R-CNN的模型文件一小部分,可以看到,在卷积层后面紧接着是一个ReLU层,主要定义了name,type,bottom,top,其属于非线性激活函数的一种,同类型的函数还有sigmoid函数,tanh函数,softplus函数等等。对于ReLU函数,其公式即为个ReLU(x)=max(0, x)
,而sigmoid函数为sigmoid(x)= 1/(1+e^-x)
,而Softplus(x)=log(1+ex)
。有一个经典的4种函数图形表示如下:
从图形可以看出,后图中的ReLU与softplus函数与前图中的传统sigmoid系激活函数相比,主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)。
那么为什么现在这么多网络都更多地使用ReLU函数呢?
一个重要原因就是上面提到的,其稀疏激活性。
标准的sigmoid函数输出不具备稀疏性,需要用一些惩罚因子来训练出一大堆接近0的冗余数据来,从而产生稀疏数据,例如L1、L1/L2或Student-t作惩罚因子。因此需要进行无监督的预训练。
而ReLU是线性修正,是purelin的折线版。它的作用是如果计算出的值小于0,就让它等于0,否则保持原来的值不变。这是一种简单粗暴地强制某些数据为0的方法,然而经实践证明,训练后的网络完全具备适度的稀疏性。而且训练后的可视化效果和传统方式预训练出的效果很相似,这也说明了ReLU具备引导适度稀疏的能力。
因此,ReLu的使用,使得网络可以自行引入稀疏性,同时大大地提高了训练速度。下面贴出一些不同函数下的训练结果对比数据:
ReLU因而在深度网络中已逐渐取代sigmoid而成为主流。
- ReLU函数简介
- RELU函数理解
- sigmoid与ReLU函数
- Relu函数作用
- ReLu激活函数
- ReLu激活函数
- 激活函数-ReLU
- 激活函数-relu
- keras代码阅读-relu函数
- 【Tensorflow】tf.nn.relu函数
- 神经网络回顾-Relu激活函数
- RELU
- sigmod函数tanh函数ReLU函数
- 人工神经网络之激活函数 -RELU函数
- ReLu(Rectified Linear Units)激活函数
- ReLu(Rectified Linear Units)激活函数
- ReLu(Rectified Linear Units)激活函数总结
- ReLu(Rectified Linear Units)激活函数
- String 类的实现 以及 Strcpy、Strcat函数的实现
- Surf算法特征点检测与匹配
- MATLAB批量导入.dat文件
- Activity详解三 启动activity并返回结果
- Hadoop安装包的目录结构
- ReLU函数简介
- IP数据报的分片与重组
- c_stdlib头文件
- wildcard 的理解
- 适配器模式 : 农村小伙娶乌克兰美女语言不通 翻译软件立功
- Spring学习第八天:调用外部属性文件
- 网站高并发高负载系统架构
- 寻迹小车——代码
- 升级了 beta 版 Xcode 8 和 beta 版 macOS,结果悲剧了