深度学习:激活函数

http://blog.csdn.net/pipisorry/article/details/71157037

激活函数

神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

 

为什么要用激活函数

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

激活函数通常有如下一些性质:

  • 非线性:如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。当激活函数是非线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
  • 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
  • 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
  • f(x)≈x 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
  • 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。

激活函数如何选择

从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前常见的多是分段线性和具有指数形状的非线性函数。

选择的时候,就是根据各个函数的优缺点来配置,例如:

如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout。

最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout。

一般来说,在分类问题上建议首先尝试 ReLU,其次ELU,这是两类不引入额外参数的激活函数。然后可考虑使用具备学习能力的PReLU和MPELU,并使用正则化技术,例如应该考虑在网络中增加Batch Normalization层。

通常来说,很少会把各种激活函数串起来在一个网络中使用的。

某小皮

常用激活函数详解

激活函数用于隐层输出。

sigmoid函数/Logistic 函数

sigmoid单元也可以作为输出单元用来预测二值型变量取值为1的概率。

[Sigmod/Softmax变换 ]

软饱和和硬饱和

sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。Bengio 教授等[1]将具有这类性质的激活函数定义为软饱和激活函数。与极限的定义类似,饱和也分为左饱和与右饱和。

与软饱和相对的是硬饱和激活函数,即:f'(x)=0,当 |x| > c,其中 c 为常数。同理,硬饱和也分为左饱和和右饱和。常见的 ReLU 就是一类左侧硬饱和激活函数。

sigmoid评价

优点:

在特征相差比较复杂或是相差不是特别大时效果比较好(这样饱不饱和就没那么在影响了?)。

sigmoid激活函数在除了前馈网络以外的情景中更为常见。循环网络、许多概率模型以及一些自编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得sigmoid单元更具有吸引力,尽管它存在饱和性的问题。[深度学习]

缺点:
1 激活函数计算量大,反向传播求误差梯度时,求导涉及除法;
2 与分段线性单元不同,sigmoid单元在其大部分定义域内都饱和——当z取绝对值很大的正值时,它们饱和到一个高值,当z取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当z接近0时它们才对输入强烈敏感。sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。当使用一个合适的代价函数来抵消sigmoid的饱和性时,它们作为输出单元可以与基于梯度的学习相兼容。[深度学习]

sigmoid单元在反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。Sigmoids saturate and kill gradients. (sigmoid饱和和消失梯度)sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的(因为反向传播时候δj = σ'(aj)∑δkwkj,即梯度计算要用到前面的输入),从图中可以看出梯度的趋势。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f'(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f'(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。但是反过来,软饱能够让其对输入变化或噪声更鲁棒。Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。 (0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。

一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。

梯度消失问题至今仍然存在,但被新的优化方法有效缓解了,例如DBN中的分层预训练,Batch Normalization的逐层归一化,Xavier和MSRA权重初始化等代表性技术。这个问题也可以通过选择激活函数进行改善,比如PReLU;在LSTM中你可以选择关闭“遗忘闸门”来避免改变内容,即便打开了“遗忘闸门”,模型也会保持一个新旧值的加权平均。

3 Sigmoid 的 output 不是0均值。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:如果数据进入神经元的时候是正的(e.g. x>0 elementwise in f=wTx+b),那么 w 计算出的梯度也会始终都是正的或者始终都是负的 then the gradient on the weights w will during backpropagation become either all be positive, or all negative (depending on the gradient of the whole expression f)。 当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。

Tanh函数/双曲正切函数

tanh 是sigmoid的变形: t a n h( x)=2 s i g m o i d(2 x)−1
取值范围为[-1,1]。
tanh评价
优点:
1 tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
2 与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。文献 [LeCun, Y., et al., Backpropagation applied to handwritten zip code recognition. Neural computation, 1989. 1(4): p. 541-551.] 中提到tanh 网络的收敛速度要比sigmoid快,因为 tanh 的输出均值比 sigmoid 更接近 0,SGD会更接近 natural gradient[4](一种二次优化技术),从而降低所需的迭代次数
3 tanh更像是单位函数,更易训练。
缺点:
也具有软饱和性。

硬双曲正切函数(hard tanh)

它的形状和 tanh 以及整流线性单元类似,但是不同于后者,它是有界的,g(a) = max(−1, min(1, a))。它由 Collobert (2004)引入。

HTanh function

整流线性单元 ReLU及其变型

整流线性单元ReLU

Rectified Linear Unit(ReLU) 整流线性单元通常作用于仿射变换h=g(W⊤x+b)之上,当初始化仿射变换的参数时,可以将b的所有元素设置成一个小的正值,例如0.1。这使得整流线性单元很可能初始时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。

f(x)=max(0,x)

输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入。

曲线如图

对比sigmoid类函数主要变化是:
1)单侧抑制
2)相对宽阔的兴奋边界
3)稀疏激活性。

ReLU 的导数(不存在sigmoid 的梯度消失的问题):

ReLU评价

ReLU 在x<0 时硬饱和。由于 x>0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”

ReLU 的优点:

  • 速度快    和sigmoid函数需要计算指数和倒数相比,relu函数其实就是一个max(0,x),计算代价小很多。
  • 减轻梯度消失问题    回忆一下计算梯度的公式。其中,是sigmoid函数的导数。在使用反向传播算法进行梯度计算时,每经过一层sigmoid神经元,梯度就要乘上一个。从下图可以看出,函数最大值是1/4。因此,乘一个会导致梯度越来越小,这对于深层网络的训练是个很大的问题。而relu函数的导数是1,不会导致梯度变小。当然,激活函数仅仅是导致梯度减小的一个因素,但无论如何在这方面relu的表现强于sigmoid。使用relu激活函数可以让你训练更深的网络。
  • 稀疏性    通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的,而采用sigmoid激活函数的人工神经网络,其激活率大约是50%。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为relu函数在输入小于0时是完全不激活的,因此可以获得一个更低的激活率。

或者优点等价的解释为:

Krizhevsky et al. 发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多(看右图)。有人说这是因为它是linear,而且非饱和的 non-saturating。相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。

虽然2006年Hinton教授提出通过分层无监督预训练解决深层网络训练困难的问题,但是深度网络的直接监督式训练的最终突破,最主要的原因是采用了新型激活函数ReLU。与传统的sigmoid激活函数相比,ReLU能够有效缓解梯度消失问题,从而直接以监督的方式训练深度神经网络,无需依赖无监督的逐层预训练。

ReLU另外一个性质是提供神经网络的稀疏表达能力。PReLU[10]、ELU[7]等激活函数不具备这种稀疏性,但都能够提升网络性能。

ReLU 的缺点:

当然 ReLU 也有缺点,就是训练的时候很”脆弱”,很容易就”die”了。举个例子:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后(lz:w-=梯度,此时参数w很可能变为一个很大的负值,之后正向传播时很大概率会使激活aj为0(因为relu激活总>0,w为负,输出一直<0),就死了δj = σ'(aj)∑δkwkj中aj为0之后δj也一直为0),这个神经元可能再也不会对任何数据有激活现象了。如果这个情况发生了,那么这个神经元的梯度就永远都会是0。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。 当然,如果你设置了一个合适的较小的learning rate(大的梯度流过一ReLU 神经元会变成小梯度,参数不会变得特别小,正向传播时激活就不一定为0了),这个问题发生的情况其实也不会太频繁。ReLU units can be fragile during training and can “die”. For example, a large gradient flowing through a ReLU neuron could cause the weights to update in such a way that the neuron will never activate on any datapoint again. If this happens, then the gradient flowing through the unit will forever be zero from that point on. That is, the ReLU units can irreversibly die during training since they can get knocked off the data manifold. For example, you may find that as much as 40% of your network can be “dead” (i.e. neurons that never activate across the entire training dataset) if the learning rate is set too high. With a proper setting of the learning rate this is less frequently an issue. 或者这么解释:如果某次某个点梯度下降的非常多,权重被改变的特别多,那么这个点的激励可能永远都是0了。

ReLU还经常被“诟病”的一个问题是输出具有偏移现象,即输出均值恒大于零。偏移现象和 神经元死亡会共同影响网络的收敛性。在arxiv的文章[Li, Y., et al., Improving Deep Neural Network with Multiple Parametric Exponential Linear Units. arXiv preprint arXiv:1606.00305, 2016.]中的实验表明,如果不采用Batch Normalization,即使用 MSRA 初始化30层以上的ReLU网络,最终也难以收敛。相对的,PReLU和ELU网络都能顺利收敛。

[CS231n Convolutional Neural Networks for Visual Recognition]

整流线性单元的三个扩展基于当 z i < 0 时使用一个非零的斜率 αi:hi=g(z,α)i=max(0,zi)+αimin(0,zi)

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

绝对值整流(absolute value rectification)

固定 α i = −1 来得到 g(z) = |z|。它用于图像中的对象识别 (Jarrett et al., 2009a),其中寻找在输入照明极性反转下不变的特征是有意义的。整流线性单元的其他扩展比这应用地更广泛。

渗漏整流线性单元(Leaky ReLU)(Maas et al., 2013)

将 α i 固定成一个类似 0.01 的小值。

参数化整流线性单元PReLU

参数化整流线性单元(parametric ReLU)或者 PReLU 将α i 作为学习的参数 [He, K., et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. ICCV 2015.],具有非饱和性:

与LReLU相比,PReLU中的负半轴斜率a可学习而非固定。原文献建议初始化a为0.25,不采用正则。个人认为,是否采用正则应当视具体的数据库和网络,通常情况下使用正则能够带来性能提升。

虽然PReLU 引入了额外的参数,但基本不需要担心过拟合。例如,在上述cifar10+NIN实验中, PReLU比ReLU和ELU多引入了参数,但也展现了更优秀的性能。所以实验中若发现网络性能不好,建议从其他角度寻找原因。

与ReLU相比,PReLU收敛速度更快。因为PReLU的输出更接近0均值,使得SGD更接近natural gradient。证明过程参见原文[10]。

此外,作者在ResNet 中采用ReLU,而没有采用新的PReLU。这里给出个人浅见,不一定正确,仅供参考。首先,在上述LReLU实验中,负半轴斜率对性能的影响表现出一致性。对PReLU采用正则将激活值推向0也能够带来性能提升。这或许表明,小尺度或稀疏激活值对深度网络的影响更大。其次,ResNet中包含单位变换和残差两个分支。残差分支用于学习对单位变换的扰动。如果单位变换是最优解,那么残差分支的扰动应该越小越好。这种假设下,小尺度或稀疏激活值对深度网络的影响更大。此时,ReLU或许是比PReLU更好的选择。

def prelu_func(features, initializer=None, scope=None):
    """
    Implementation of [Parametric ReLU](https://arxiv.org/abs/1502.01852) borrowed from Keras.
    """
    with tf.variable_scope(scope, 'PReLU', initializer=initializer):
        alpha = tf.get_variable('alpha', features.get_shape().as_list()[1:])
        pos = tf.nn.relu(features)
        neg = alpha * (features - tf.abs(features)) * 0.5
        return pos + neg


prelu = functools.partial(prelu_func, initializer=tf.constant_initializer(1.0))

自适应激活函数Dice

Dice(Data Adaptive Activation Function)激活函数诞生于alibaba 2018 的CTR论文[Deep Interest Network for Click-Through Rate Prediction]中,根据 Parametric ReLU 改造而来。Dice can be viewed as a generalization of PReLu.When E(s) = 0 and Var[s] = 0, Dice degenerates into PReLU.

        PRelu激活函数(包括ReLU类函数)的阶跃变化点在x=0处(rectified point固定为0),意味着面对不同的输入(输入分布发生变化时)这个变化点是不变的,DIN中改进了这个控制函数,平滑了rectified point附近曲线的同时,激活函数会根据每层输入数据的分布来自适应调整rectified point的位置,即选择了统计神经元输出的均值和方差(实际上就是Batch_Normalization,CTR中BN操作可是很耗时的,可以推测Dice复杂的计算快不起来不会大规模引用)来描述数据的分布:

控制函数p(s)曲线对比如下所示

f(s)曲线对比如下所示

dice的变化:

[最详细的推荐系统模型讲解——DIN(Deep Interest Network)注意力模型 - 知乎]

erelu激活函数

          
这里写图片描述

参数alpha一般设置成1.0。

论文(FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS))

论文中提到,elu函数可以加速训练并且可以提高分类的准确率。

它有以下特征:

  • 融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。
  • elu由于其正值特性,可以像relu,lrelu,prelu一样缓解梯度消失的问题。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。
  • 相比relu,elu存在负值,可以将激活单元的输出均值往0推近,达到batchnormlization的效果且减少了计算量。(输出均值接近0可以减少偏移效应进而使梯度接近于自然梯度。)ELU的输出均值接近于零,所以收敛速度更快。
  • Lrelu和prelu虽然有负值存在,但是不能确保是一个噪声稳定的去激活状态。
  • Elu在负值时是一个指数函数,对于输入特征只定性不定量。

[ELU激活函数]

实践效果:

relu+bn组合准确率最高,relu+bn>elu>prelu>elubn>relu。可见elu在激活函数里表现最好,但是它不必加BN,这样减少了BN的计算量。

在 ImageNet上,不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛,PReLU网络在MSRA的Fan-in (caffe )初始化下会发散,而 ELU 网络在Fan-in/Fan-out下都能收敛。

[激活函数(relu,prelu,elu,+BN)对比on cifar10]

softplus函数

f( x)= ζ(x) =ln(1+ e x)

这是整流线性单元的平滑版本,由 Dugas et al. (2001b) 引入用于函数近似,由 Nair and Hinton (2010a) 引入用于无向概率模型的条件分布。Glorot et al. (2011a) 比较了 softplus 和整流线性单元,发现后者的结果更好。通常不鼓励使用 softplus 函数。softplus 表明隐藏单元类型的性能可能是非常反直觉的——因为它处处可导或者因为它不完全饱和,人们可能希望它具有优于整流线性单元的点,但根据经验来看,它并没有。 这里写图片描述

Maxout单元

Maxout[Goodfellow, I.J., et al. Maxout Networks.  ICML 2013.]是ReLU的推广,是对 ReLU 和 Leaky ReLU 的一般化归纳,其发生饱和是一个零测集事件(measure zero event)。正式定义为:

Maxout网络能够近似任意连续函数,且当w2,b2,…,wn,bn为0时,退化为ReLU。 其实,Maxout的思想在视觉领域存在已久。例如,在HOG特征里有这么一个过程:计算三个通道的梯度强度,然后在每一个像素位置上,仅取三个通道中梯度强度最大的数值,最终形成一个通道。这其实就是Maxout的一种特例。
Note: lz每个神经元有多个不同输入,求梯度时取最大。

Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。


RBF激活函数

[ Deeplearning:径向基网络(RBF)]

[深度学习中的激活函数导引 ]

[【机器学习】神经网络-激活函数-面面观(Activation Function) ]

主流大模型使用的激活函数

主要有四类,分别是ReLU,GeLU、SwiGLU以及Deep Norm。

GLU(Gated Linear Unit)激活函数

门线性单元这个基本的双线性函数定义为:GLU(x) = x ⊗ σ(g(x))。其中,x是输入向量,⊗表示逐元素相乘,σ表示Sigmoid函数,g(x)是通过全连接层或卷积层得到的中间向量。

GLU激活函数最初在NLP任务中提出,并在机器翻译、语音识别等领域取得了良好的效果。具有门控机制,可以帮助网络更好地捕捉序列数据中的长期依赖关系。门控机制使得GLU能够选择性地过滤输入向量的某些部分,并根据输入的上下文来调整输出。门控部分的作用是将输入进行二分类,决定哪些部分应该被保留,哪些部分应该被抑制。例如,在语言模型中,GLU激活函数可以帮助网络根据上下文选择性地关注某些单词或短语,从而更好地理解句子的语义。门控机制可以有效地减少噪声和不相关信息的影响,提高网络的表达能力和泛化能力。

总结起来,GLU激活函数通过门控机制实现对输入的选择性过滤,帮助网络捕捉长期依赖关系和上下文信息。这种机制在处理序列数据和NLP任务中具有重要的作用,可以提高模型的性能和效果

[GLU激活函数:PaLM模型中SwiGLU激活函数的原型 - 知乎]

GeLU

高斯误差线性单元 (Gaussian Error Linear Unit)GeLU是在激活函数中引入了随机正则的思想,类似于dropout、zoneout、ReLU的综合:ReLU就是一个较好的有非线性拟合的能力的激活函数,又可通过加入如Dropout正则化来提高其泛化能力,而zoneout是Dropout的一个变种。GELU通过来自上面三者的灵感,希望在激活中加入正则化的思想。

具体的,GELU对于输入乘上了一个以0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为 X ,mask为 m ,则 m 服从一个伯努利分布( \Phi(x)=P(X <= x) , X 服从标准正态分布),这么选择是因为神经元的输入趋向于正态分布,这么设定使得输出在随机依赖于输入的同时,若输入减小,则输出会有一个更高的概率被dropout掉。

GeLU的数学形式可表达为

其中误差函数(erf)是:

近似表达

因为erf无解析表达式(但已经有精确的计算函数实现了),原论文给出了两种近似表达:

Sigmoid近似:,其图像如下:

 

tanh近似:,其图像如下:

很多实验都证明GeLU可以学习的更快更好。比如gpt和bert都是用的这个。

[BERT中的激活函数GELU:高斯误差线性单元 - 知乎]

torch实现

在pretrained-BERT-pytorch/modeling.py中,已经有了精确的计算方式:

0.5 * x * (1.0 + torch.erf(x / math.sqrt(2.0)))

[torch.special — PyTorch 2.0 documentation]

简化版OpenAI GPT's gelu is slightly different (and gives slightly different results)Also see https://arxiv.org/abs/1606.08415 和 在google-research/bert/modeling.py中的GELU,是采用tanh近似的方式计算:
0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))

SwiGLU

SwiGLU 和 GeGLU都是Noam Shazeer在文章中探索的激活函数变体。是GLU变体之一,来源于论文 GLU Variants Improve Transformer

Swish激活函数:Swish=x⋅sigmoid(βx)  就是GeLu里面的高斯函数换成了sigmoid吧

SwiGLU:就是GLU中sigmoid再*一个x吧。

GeGLU定义为:

作者并没有对激活函数提出的原理和动机做过多描述,论文本身是对各类激活函数变种效果的对比尝试。从对比实验中看SwishGLU和GeGLU是可以取得最小误差的,而在大模型中也得到了广泛应用。

[PaLM中使用的激活函数:SwiGLU-腾讯云开发者社区-腾讯云]

[昇腾大模型|结构组件-2——ReLU、GeLU、SwiGLU、GeGLU - 知乎]

激活函数速查表

[by Sebastian Raschka]

[https://en.wikipedia.org/wiki/Activation_function]

[tensorflow中的Activation Functions]

某小皮

输出单元

1 用于高斯输出分布的线性单元

2 用于bernoulli输出分布的sigmoid单元

3 用于multinouli输出分布的softmax单元

softmax函数:

[ Sigmod/Softmax变换]
线性、sigmoid 和 softmax 输出单元是最常见的。神经网络可以推广到我们希望的几乎任何种类的输出层。最大似然原则给如何为几乎任何种类的输出层设计一个好的代价函数提供了指导。
一般的,如果我们定义了一个条件分布 p(y | x; θ),最大似然原则建议我们使用− log p(y | x; θ) 作为代价函数。
4 其它输出类型
异方差模型
混合密度网络:用于执行多峰回归,具有n个分量的高斯混合输出。

from: 深度学习:神经网络中的激活函数_皮皮blog-CSDN博客

ref: [深度学习-花书]

[常用激活函数比较]

[神经网络-激活函数-面面观(Activation Function) ]

  • 16
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值