Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >隐藏单元与激活函数

隐藏单元与激活函数

作者头像
狼啸风云
修改于 2022-09-04 13:41:08
修改于 2022-09-04 13:41:08
2.3K0
举报

隐藏单元的设计是前馈神经网络一个独有的问题:该如何选择隐藏单元的类型,这些隐藏单元用在模型的隐藏层中。隐藏单元的设计是一个非常活跃的领域,并且还没有许多明确的指导性理论原则。

整流线性单元是隐藏层单元几号的默认选择。许多其他类型的隐藏单元也是可用的。决定何时使用那种类型的隐藏单元是困难的事(尽管整流线性单元是一个可接受的选择)。我们这里描述对于每种隐藏单元的一些基本直觉。这些直觉可用用来建议我们何时尝试一些单元。通常不可能预先预测出哪种隐藏单元工作做的好。设计过程充满了试验和错误,先直觉认为某种隐藏单元可能表现良好,然后用它组成神经网络进行训练,最后用试验集来评估它的性能。

这里列出的一些隐藏单元可能并不是在所有的输入点上都是可微的。例如,整流线性单元 处不可微。这似乎使得g对于基于梯度的学习算法无效。在实践中,梯度下降对这些机器学习模型仍然表现得足够好。部分原因是神经网络训练算法通常不会达到代价函数的局部最小值,而是仅仅显著的减少它的值。因为我们不再期望训练能够实际达到梯度为0的点,所以代价函数的最小值对应于梯度未定义的点是可接受的。不可微的隐藏单元通常是在少数点上不可微。一般来说,函数 具有左导数和右导数,左导数定位为在紧邻在 左边的函数的斜率,右导数定义为紧邻在 右边的函数的斜率。只有当函数在 处的左导数和右导数都有定义并且相等时,函数在 点处才是可微的。神经网络中用到的函数通常对左导数和右导数都有定义。在 的情况下,在 处的左导数是0,右导数是1。神经网络训练的软件实现通常返回左导数和右导数的其中一个,而不是报告导数未定义或产生一个错误。这可以观察到在数字计算机上基于梯度的优化总是受到数值误差的影响来启发式地给出理由。当一个函数要被计算 时,底层值真正为0是不大可能的。相对的,它可能是被舍入为0的一个小量 。在某些情况下,理论上有更好的理由,但这通常对神经网络的训练并不适用。重要的是,在实践中,我们可以放心的忽略下面描述的隐藏单元激活函数的不可微性。除非另有说明,大多数的隐藏单元都可以忽略下面描述的隐藏单元激活函数的不同微性。

一、整流线性单元及其扩展

整流线性单元使用激活函数 。整流线性单元易于优化,因为它们和线性单元非常相似。线性单元和整流线性单元的唯一区别在于整流线性单元在其一半的定义域上输出为零。这使得只要整流线性单元处于激活状态。它的导数都能报出较大。它的梯度不但大而且一致。整流操作的二阶导数几乎处处为0,并且在整流线性单元处于激活状态时,它的一阶导数处处为1。这意味着相比于引入二阶相应的激活函数来说,它的梯度方向对于学习来说更加有用。

整流线性单元通常作用于仿射变换之上:

当初始化仿射变换的参数时,可以将 的所有元素设置成一个小的正值,例如0.1。这使得整流线性单元很可能初始化时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。有很多整流线性单元的扩展存在。大多数这些扩展的表现比得上整流线性单元,并且偶尔表现得更好。整流线性单元的一个缺陷是它们不能通过基于梯度的方法学习那些使得他们激活为零的样本。整流线性单元的各种扩展保证了它们能在各个位置都接收梯度。

整流线性单元的3个扩展基于当 时使用的一个非零的斜率 。绝对值整流固定 来得到 。它用于图像中的对象识别,其中寻找在输入照明极性反转下不变的特征是由意义的。整流线性单元的扩展比这个应用更广泛。渗漏整流线性单元(Leaky ReLU)将 固定成一个类似0.01的小值,参数化整流线性单元(parametric ReLU)或者PReLU将 作为学习的参数。

maxout单元进一步扩展了整流线性单元。maxout单元将 划分为每组具有 个值的组,而不是使用作用于每个元素的函数 。每个maxout单元输出每组中的最大元素:

这里 是组的输入索引集 。这里提供了一种方法来学习对输入x空间中多个方向响应的分段线性函数。

maxout单元可以学习具有多达 段的分段线性的凸函数。maxout函数因此可以视为学习激活函数本身,而不仅仅是单元之间的关系。使用足够大的 ,maxout单元可以以任意的精确度来近似任何凸函数。特别地,具有两块的maxout层可以学习实现和传统层相同的输入 的函数,这些传统层可以使用整流线性激活函数、绝对值整流、渗漏整流线性单元或参数化整流线性单元,或者可以学习实现与这些都不同的函数。maxout层的参数化当然将于这些层不同,所以即使是maxout学习实现和其他种类的层是相同的x的函数这种情况下,学习的机理也是不一样的。

每个maxout单元现在由 个权重向量来参数化,而不仅仅是一个,所以maxout单元通常比整流线性单元需要更多的正则化。如果训练集很大并且每个单元的块数保持很低的话,它们可以在没有正则化的情况下工作得不错。maxout单元还有一些其他的优点。在某些情况下,要求更少的参数可以获得一些统计和计算上的优点。具体来说,如果由n个不同的线性滤波器描述的特征可以在不损失信息的情况下,用每一组k个特征的最大值来概括的话,那么下一层可以获得k倍更少的权重数。因为每个单元有多个滤波器驱动,maxout单元具有一些冗余来帮助它们抵抗一种被称为灾难遗忘的现象,这个现象是说神经网络忘记了如何执行它们过去训练的任务。

整流线性单元和它们的这些扩展都是基于一个原则,那就是如果它们的行为更接近线性,那么模型更容易优化。使用线性行为更容易优化的一般性原则同样也适用于除深度线性网络以外的情景。循环网络可以从序列中学习并产生状态饿输出的序列。当训练它们时,需要通过一些时间步来传播信息,当其中包含一些线性计算(具有大小接近1的某些方向导数)时,这会更容易。作为性能最好的循环网络结构之一,LSTM通过求和在时间上传播信息,这是一种特别直观的线性激活函数。

2、logistic sigmoid与双曲正切函数

在引入整流线性单元之前,大多数神经网络使用logistic sigmoid激活函数

或者是双曲正切激活函数 这些激活函数紧密相关,因为

我们已经看过sigmoid单元作为输出单元用来二值型变量取值为1的概率。与分段线性单元不同,sigmoid单元在其最大部分定义域内都饱和------当z取绝对值很大的正值时,它们饱和到一个高值,当z取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当z接近0时它们才会对输入强烈敏感。sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们作为前馈神经网格中的隐藏单元。当使用一个合格的代价函数来抵消sigmoid的饱和性时,它们作为输出单元可以与基于梯度的学习相兼容。

当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比logistic sigmoid函数表现更好。在tanh(0)=0而 的意义上,它更像是单位函数。因为tanh在0附近与单位函数类似,训练深层神经网络的激活能够被保持地很小。这使得训练tanh网络更加容易。sigmoid激活函数在除了前馈神经网络以外的情景中更为常见。循环网络,许多概率模型以及一些自编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得sigmoid单元更具有吸引力,尽管它存在饱和性的问题。

3、其他隐藏单元

也存在许多其他单种类的隐藏单元,但它们明显不常用。一般来说,很多种类的可微函数都表现得很好。许多未发布的激活函数与流行的激活函数表现得一样好。为了提供一个具体的例子,作者在MNIST数据集上使用 测试了一个前馈网络,并且获得了小于1%的误差率,这可以与更为传统的激活函数获得的结果相媲美。在新技术的研究和开发期间,通常会测试许多不同的激活函数,并且会发现许多标准方法变体表现非常好。这意味着,通常新的隐藏单元表现大致相当,那么他们是非常常见的,不会引起别人的兴趣。列出文献中出现的所有隐藏单元类型是不切实际的。我们只对一些特别有用和独特的类型进行强调。其中一种是完全没有激活函数 ,也可以认为这是使用单位函数作为激活函数的情况。我么已经看过线性单元可以作为神经网络的输出。它也可以用作隐藏单元。如果神经网络的每一层都仅由线性变换组成,那么网络作为一个整体也将是线性的。然而,神经网络的一些层是纯线性也是可以接受的。考虑具有n个输入和p个输出的神经网络层 。我们可以用两层来代替它,一层使用权重矩阵U,另一层使用权重矩阵V。如果第一层没有激活函数,那么我们对基于W的原始层的权重矩阵进行因式分解。分解分解方法是计算 。如果 产生了g个输出,那么U和V一起仅包含 个参数,而W包含np个参数。如果很小,这可以在很大程度上节省参数。这是以将线性变换约束为低秩的代价函数来实现,但这些低秩关系往往是足够的。线性隐藏单元因此提供了一种减少网络中参数数量的有效方法。

softmax单元是另外一种经常用作输出的单元,但有时也可以用作隐藏单元。softmax单元很自然地表示具有k个可能值的离散型随机变量的概率分布,所以它们可以用作一种开关。这些类型的隐藏单元通常仅用于明确地学习操作内存的高级结构中。其他一些常见的隐藏单元类型包括:

径向基函数: 。这个函数在 接近模板 时更加活跃。因为它对大部分x都饱和到0,因此很难优化。

softplus函数: 。这是整流线性单元的平滑版本,softplus和整流线性单元,发现后者的结果更好。通常不鼓励使用softplus函数。softplus表明隐藏单元类型的性能可能是非常反直觉的------因为它处处可导或者因为它不完全饱和,人们可能希望它具有优于整流线性单元的点,但根据经验来看,它并没有。

硬双曲正切函数:它的形状和tanh以及整流线性单元类似,但是不同于后者,它是有界的,

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年07月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习 学习笔记(20)深度前馈网络
深度前馈网络(deep feedforward network),也叫做前馈神经网络(feedforward neural network)或者多层感知机(multilayer perceptron,MLP),是典型的深度学习模型。前馈网络的目标是近似某个函数
2018/09/04
1.9K0
机器学习 学习笔记(20)深度前馈网络
【激活函数合集】盘点当前最流行的激活函数及选择经验
在阅读DarkNet源码的时候发现作者定义了大量从古至今流行的损失函数,本着科普的态度我打算做一个全面的总结,所以就有了这篇文章。
BBuf
2020/02/26
2.9K0
机器学习深度学习 笔试面试题目整理(1)
梯度消失:这本质上是由于激活函数的选择导致的, 最简单的sigmoid函数为例,在函数的两端梯度求导结果非常小(饱和区),导致后向传播过程中由于多次用到激活函数的导数值使得整体的乘积梯度结果变得越来越小,也就出现了梯度消失的现象。  梯度爆炸:同理,出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。
2018/09/04
1.4K0
神经网络中常见的激活函数
深度学习中已经成为了人工智能领域的必备工具,源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。寻找隐藏层的权重参数和偏置的过程,就是常说的“学习”过程,其遵循的基本原则就是使得网络最终的输出误差最小化。在神经⽹络中,激活函数是必须选择的众多参数之⼀,从而使神经⽹络获得最优的结果和性能。
半吊子全栈工匠
2022/12/03
1.9K0
神经网络中常见的激活函数
激活函数 | 深度学习领域最常用的10个激活函数,详解数学原理及优缺点
激活函数是神经网络模型重要的组成部分,今天分享从激活函数的数学原理出发,详解了十种激活函数的优缺点。
计算机视觉研究院
2021/03/13
34K0
激活函数
【注】Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数。常用的 Sigmoid 型函数有 Logistic 函数和 Tanh 函数。
hotarugali
2022/03/09
9930
激活函数
资源 | 从ReLU到Sinc,26种神经网络激活函数可视化
选自GitHub 作者:David Sheehan 机器之心编译 在本文中,作者对包括 Relu、Sigmoid 在内的 26 种激活函数做了可视化,并附上了神经网络的相关属性,为大家了解激活函数提供了很好的资源。 在神经网络中,激活函数决定来自给定输入集的节点的输出,其中非线性激活函数允许网络复制复杂的非线性行为。正如绝大多数神经网络借助某种形式的梯度下降进行优化,激活函数需要是可微分(或者至少是几乎完全可微分的)。此外,复杂的激活函数也许产生一些梯度消失或爆炸的问题。因此,神经网络倾向于部署若干个特定的
机器之心
2018/05/10
1.2K0
入门必看!一文读懂神经网络中的激活函数(二)
看看深度学习之激活函数 本篇接着上一篇推文入门《必看!从零开始了解到训练神经网络(一)》,在介绍完神经网络的基本原理和结构之后,继续介绍神经网络中的关键之一 —— 激活函数。 树根这一部分会给大家通俗讲一下激活函数的概念,原理以及作用,还有实际应用中各种激活函数的优缺点。因为激活函数本身就是一种数学函数,推文中出现数学公式在所难免,但是树根力求讲得通俗清晰,让初学者都能读懂,轻松入门深度学习。 1 感知机 Percrptron Activation Function 感知机由Rosenblatt于1957年
企鹅号小编
2018/01/31
2.9K0
入门必看!一文读懂神经网络中的激活函数(二)
5分钟了解神经网络激活函数
机器学习是一个使用统计学和计算机科学原理来创建统计模型的研究领域,用于执行诸如预测和推理之类的主要任务。这些模型是给定系统的输入和输出之间的数学关系集。学习过程是估计模型参数的过程,以便模型可以执行指定的任务。学习过程会尝试使机器具有学习能力,而无需进行显式编程。这是ANN的作用。
deephub
2020/05/09
9450
5分钟了解神经网络激活函数
反向传播神经网络中的非线性激活函数-AI快速进阶系列
从我们关于线性函数的文章中所做的考虑,很明显,平面(线性模型)不能近似于图的函数。
jack.yang
2025/04/05
890
反向传播神经网络中的非线性激活函数-AI快速进阶系列
一文讲透神经网络的激活函数
原理上来说,神经网络模型的训练过程其实就是拟合一个数据分布(x)可以映射到输出(y)的数学函数,即 y= f(x)。
算法进阶
2022/06/02
7500
一文讲透神经网络的激活函数
神经网络中的激活函数
正如你所见,该函数是一条直线或称为线性的。因此,函数的输出不会被限制在任何范围之间。
云水木石
2019/07/01
1.7K0
神经网络中的激活函数
吾爱NLP(2)--解析深度学习中的激活函数
由惑而生,所以我打算总结一下深度学习模型中常用的激活函数的一些特性,方便大家日后为模型选择合适的激活函数。   说到激活函数,就不能不提神经网络或者深度学习,从一个新手入门深度学习领域,我觉得首先需要理解三个基本的构成要素:
流川枫
2018/09/12
8870
吾爱NLP(2)--解析深度学习中的激活函数
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇四:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
汀丶人工智能
2023/04/12
13.6K1
神经网络初学者的激活函数指南
如果你刚刚开始学习神经网络,激活函数的原理一开始可能很难理解。但是如果你想开发强大的神经网络,理解它们是很重要的。
自学气象人
2023/06/21
3080
神经网络初学者的激活函数指南
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
汀丶人工智能
2023/04/17
1.3K0
A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
激活函数其实并不简单:最新的激活函数如何选择?
如今,机器学习领域的科学进步速度是前所未有的。除非局限在一个狭窄的细分市场,否则要跟上时代的步伐是相当困难的。每天都有新论文出现并声称自己取得了一些最先进的成果。但是这些新发现中的大多数从来没有成为默认的首选方法,有时是因为它们没有最初希望的那么好,有时只是因为它们最终在新进展的洪流中崩溃了。
deephub
2021/09/15
1.3K0
激活函数其实并不简单:最新的激活函数如何选择?
为神经网络选择正确的激活函数
来源:Deephub Imba本文共3400字,建议阅读5分钟本篇文章中我们将讨论神经网络中常见的激活函数,并使用可视化技术帮助你了解激活函数的函数定义和不同的使用场景。 我们都知道神经网络模型中使用激活函数的主要目的是将非线性特性引入到我们的网络中,强化网络的学习能力。激活函数应用于隐藏层和输出层中每个节点的称为 z 的输入加权和(此处输入可以是原始数据或前一层的输出)。 在本篇文章中我们将讨论神经网络中常见的激活函数,并使用可视化技术帮助你了解激活函数的函数定义和不同的使用场景。 在看完本文章后,你可以
数据派THU
2022/03/04
1.3K0
深度学习基础知识(四)--- 激活函数
激活函数也就是一些非线性单元,如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
TeeyoHuang
2020/02/14
9150
深度学习基础知识(四)--- 激活函数
从ReLU到GELU,一文概览神经网络的激活函数
在计算每一层的激活值时,我们要用到激活函数,之后才能确定这些激活值究竟是多少。根据每一层前面的激活、权重和偏置,我们要为下一层的每个激活计算一个值。但在将该值发送给下一层之前,我们要使用一个激活函数对这个输出进行缩放。本文将介绍不同的激活函数。
机器之心
2019/12/23
4.7K0
推荐阅读
相关推荐
机器学习 学习笔记(20)深度前馈网络
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档