从零开始,一步一步学习caffe的使用,期间贯穿深度学习和调参的相关知识!

激活函数参数配置

在激活层中,对输入数据进行激活操作,是逐元素进行运算的,在运算过程中,没有改变数据的大小,即输入和输出的数据大小是相等的。神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。

layer {name: "test"bottom: "conv"top: "test"type: "ReLU" #激活函数类型
}

常用激活函数总结

首先推荐一个常用激活函数可视化项目visualising activation functions in neural networks

Step

激活函数 Step 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。它无法应用于神经网络,因为其导数是 0(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。

Identity

通过激活函数 Identity,节点的输入等于输出。它完美适合于潜在行为是线性(与线性回归相似)的任务。当存在非线性,单独使用该激活函数是不够的,但它依然可以在最终输出节点上作为激活函数用于回归任务。

ReLU

修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数。它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。使用这个函数能使计算变得很快,因为无论是函数还是其导数都不包含复杂的数学运算。然而,当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。

Leaky ReLU

经典(以及广泛使用的)ReLU 激活函数的变体,带泄露修正线性单元(Leaky ReLU)的输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢)。

PReLU

参数化修正线性单元(Parameteric Rectified Linear Unit,PReLU)属于 ReLU 修正类激活函数的一员。它和 RReLU 以及 Leaky ReLU 有一些共同点,即为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率实际上是在模型训练中学习到的。

RReLU

随机带泄露的修正线性单元(Randomized Leaky Rectified Linear Unit,RReLU)也属于 ReLU 修正类激活函数的一员。和 Leaky ReLU 以及 PReLU 很相似,为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。

ELU

指数线性单元(Exponential Linear Unit,ELU)也属于 ReLU 修正类激活函数的一员。和 PReLU 以及 RReLU 类似,为负值输入添加了一个非零输出。和其它修正类激活函数不同的是,它包括一个负指数项,从而防止静默神经元出现,导数收敛为零,从而提高学习效率。

SELU

扩展指数线性单元(Scaled Exponential Linear Unit,SELU)是激活函数指数线性单元(ELU)的一个变种。其中λ和α是固定数值(分别为 1.0507 和 1.6726)。这些值背后的推论(零均值/单位方差)构成了自归一化神经网络的基础(SNN)。

SReLU

S 型整流线性激活单元(S-shaped Rectified Linear Activation Unit,SReLU)属于以 ReLU 为代表的整流激活函数族。它由三个分段线性函数组成。其中两种函数的斜度,以及函数相交的位置会在模型训练中被学习。

Sigmoid

Sigmoid 因其在 logistic 回归中的重要地位而被人熟知,值域在 0 到 1 之间。Logistic Sigmoid(或者按通常的叫法,Sigmoid)激活函数给神经网络引进了概率的概念。它的导数是非零的,并且很容易计算(是其初始输出的函数)。然而,在分类任务中,sigmoid 正逐渐被 Tanh 函数取代作为标准的激活函数,因为后者为奇函数(关于原点对称)。

Hard Sigmoid

Hard Sigmoid 是 Logistic Sigmoid 激活函数的分段线性近似。它更易计算,这使得学习计算的速度更快,尽管首次派生值为零可能导致静默神经元/过慢的学习速率(详见 ReLU)。

Tanh

在分类任务中,双曲正切函数(Tanh)逐渐取代 Sigmoid 函数作为标准的激活函数,其具有很多神经网络所钟爱的特征。它是完全可微分的,反对称,对称中心在原点。为了解决学习缓慢和/或梯度消失问题,可以使用这个函数的更加平缓的变体(log-log、softsign、symmetrical sigmoid 等等)

Hard Tanh

Hard Tanh 是 Tanh 激活函数的线性分段近似。相较而言,它更易计算,这使得学习计算的速度更快,尽管首次派生值为零可能导致静默神经元/过慢的学习速率(详见 ReLU)。

LeCun Tanh

LeCun Tanh(也被称作 Scaled Tanh)是 Tanh 激活函数的扩展版本。它具有以下几个可以改善学习的属性:f(± 1) = ±1;二阶导数在 x=1 最大化;且有效增益接近 1。

ArcTan

视觉上类似于双曲正切(Tanh)函数,ArcTan 激活函数更加平坦,这让它比其他双曲线更加清晰。在默认情况下,其输出范围在-π/2 和π/2 之间。其导数趋向于零的速度也更慢,这意味着学习的效率更高。但这也意味着,导数的计算比 Tanh 更加昂贵。

Softsign

Softsign 是 Tanh 激活函数的另一个替代选择。就像 Tanh 一样,Softsign 是反对称、去中心、可微分,并返回-1 和 1 之间的值。其更平坦的曲线与更慢的下降导数表明它可以更高效地学习。另一方面,导数的计算比 Tanh 更麻烦。

SoftPlus

作为 ReLU 的一个不错的替代选择,SoftPlus 能够返回任何大于 0 的值。与 ReLU 不同,SoftPlus 的导数是连续的、非零的,无处不在,从而防止出现静默神经元。然而,SoftPlus 另一个不同于 ReLU 的地方在于其不对称性,不以零为中心,这兴许会妨碍学习。此外,由于导数常常小于 1,也可能出现梯度消失的问题。

Signum

激活函数 Signum(或者简写为 Sign)是二值阶跃激活函数的扩展版本。它的值域为 [-1,1],原点值是 0。尽管缺少阶跃函数的生物动机,Signum 依然是反对称的,这对激活函数来说是一个有利的特征。

Bent Identity

激活函数 Bent Identity 是介于 Identity 与 ReLU 之间的一种折衷选择。它允许非线性行为,尽管其非零导数有效提升了学习并克服了与 ReLU 相关的静默神经元的问题。由于其导数可在 1 的任意一侧返回值,因此它可能容易受到梯度爆炸和消失的影响。

Symmetrical Sigmoid

Symmetrical Sigmoid 是另一个 Tanh 激活函数的变种(实际上,它相当于输入减半的 Tanh)。和 Tanh 一样,它是反对称的、零中心、可微分的,值域在 -1 到 1 之间。它更平坦的形状和更慢的下降派生表明它可以更有效地进行学习。

Log Log

Log Log 激活函数(由上图 f(x) 可知该函数为以 e 为底的嵌套指数函数)的值域为 [0,1],Complementary Log Log 激活函数有潜力替代经典的 Sigmoid 激活函数。该函数饱和地更快,且零点值要高于 0.5。

Gaussian

高斯激活函数(Gaussian)并不是径向基函数网络(RBFN)中常用的高斯核函数,高斯激活函数在多层感知机类的模型中并不是很流行。该函数处处可微且为偶函数,但一阶导会很快收敛到零。

Absolute

顾名思义,绝对值(Absolute)激活函数返回输入的绝对值。该函数的导数除了零点外处处有定义,且导数的量值处处为 1。这种激活函数一定不会出现梯度爆炸或消失的情况。

Sinusoid

如同余弦函数,Sinusoid(或简单正弦函数)激活函数为神经网络引入了周期性。该函数的值域为 [-1,1],且导数处处连续。此外,Sinusoid 激活函数为零点对称的奇函数。

Cos

如同正弦函数,余弦激活函数(Cos/Cosine)为神经网络引入了周期性。它的值域为 [-1,1],且导数处处连续。和 Sinusoid 函数不同,余弦函数为不以零点对称的偶函数。

Sinc

Sinc 函数(全称是 Cardinal Sine)在信号处理中尤为重要,因为它表征了矩形函数的傅立叶变换(Fourier transform)。作为一种激活函数,它的优势在于处处可微和对称的特性,不过它比较容易产生梯度消失的问题。

参考

从ReLU到Sinc,26种神经网络激活函数可视化
visualising activation functions in neural networks

caffe详解之激活函数层相关推荐

  1. 【PyTorch】3.4 nn网络层-池化、线性、激活函数层

    目录 一.池化层--Pooling Layer 1.最大值池化 2.平均值池化 3.最大值上采样池化 二.线性层(全连接层)--Linear Layer 三.激活函数层--Activation Lay ...

  2. C++ 虚函数详解(虚函数表、vfptr)——带虚函数表的内存分布图

    前言 总所周知,虚函数是实现多态的基础. 引用或指针的静态类型与对象本身的动态类型的不同,才是C++支持多态的根本所在. 当使用基类的引用或指针调用一个虚函数成员时,会执行动态绑定. 所有的虚函数都必 ...

  3. caffe详解之损失函数

    从零开始,一步一步学习caffe的使用,期间贯穿深度学习和调参的相关知识! [转]Caffe中的损失函数解析 导言 在有监督的机器学习中,需要有标签数据,与此同时,也需要有对应的损失函数(Loss F ...

  4. pytorch —— 池化、线性、激活函数层

    1.池化层--Pooling Layer 池化运算:对信号进行"收集"并"总结",类似水池收集水资源,因为得名池化层. 收集:多变少: 总结:最大值/平均值 1 ...

  5. caffe详解之全连接层

    全连接层参数说明 全连接层,输出的是一个一维向量,参数跟卷积层一样.一般将全连接置于卷积神经网络的后几层.权重值的初始化采用xavier,偏置初始化为0. layer { name: "ip ...

  6. ResNet残差网络及变体详解(符代码实现)

    本文通过分析深度网络模型的缺点引出ResNet残差网络,并介绍了几种变体,最后用代码实现ResNet18. 文章目录 前言 模型退化 残差结构 ResNet网络结构 Pre Activation Re ...

  7. 激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

    神经网络中使用激活函数来加入非线性因素,提高模型的表达能力. ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softp ...

  8. AlexNet结构详解(引用MrGiovanni博士)

    Reference. Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Ne ...

  9. yolov3网络(DarkNet53)结构详解以及Pytorch代码实现

    目录 引言 网络结构讲解 网络结构设计理念 残差结构 步长为2的卷积替换池化层 网络性能评估 yolo v3中Darknet-53网络基于Pytorch的代码实现 总结 引言 yolo v3用于提取特 ...

最新文章

  1. 分布式,集中式,云原生存储技术
  2. 用sublime server 启动本地服务器(手机访问电脑页面)
  3. Oracle中Hint深入理解(原创)
  4. 腾讯 AI 医学进展破解“秃头”难题,登 Nature 子刊!
  5. 20172317 2018-2019-1 《程序设计与数据结构》第6周学习总结
  6. python映射类型-详解Python中映射类型(字典)操作符的概念和使用
  7. react native windows 搭建(完整版)
  8. hive 0.11 mysql_Hive的升级(0.8.0到0.11.0)
  9. Sqli-labs第一题详解
  10. ElasticSearch---------------------step2,了解elasticsearch相关的基本概念
  11. mysql vba日期空值_使用SQL(VBA/ADO)命令填充来自重复记录的相应非空值的NULL字段...
  12. Vue在组件上使用v-model
  13. 细说Python Lambda函数的用法,建议收藏!
  14. ORACLE 索引失效的原因与解决
  15. 著名mybb论坛的汉化步骤
  16. matlab 2010 win10,win10系统运行matlab2010找不到指定的程序的教程介绍
  17. 上班族们都有哪些一直坚持的业余兴趣爱好?
  18. HTML中的 meta 标签
  19. 笔记本电脑通过手机蓝牙上网
  20. nao机器人行走速度_基于PID控制的NAO机器人循线行走技术研究

热门文章

  1. 2021年数维杯数学建模分析和思路——B题
  2. Unity 一起看+弹幕 Socket通信
  3. 生成式对抗网络(GAN)简介
  4. 用JavaScript读取excel并按列转换为数组
  5. 利用Python将多张图像合成视频
  6. 大学军训板报计算机学院,军训板报
  7. 透过数字化转型再谈数据中台(三):一文遍历大数据架构变迁史
  8. iOS中UIColor,CGColor,CIColor详解
  9. Win11家庭版无法远程连接的解决办法
  10. 一个出身寒门的状元之编程