深度学习:激活函数

张开发
2026/4/10 23:33:35 15 分钟阅读

分享文章

深度学习:激活函数
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中你可以选择关闭“遗忘闸门”来避免改变内容即便打开了“遗忘闸门”模型也会保持一个新旧值的加权平均。3Sigmoid 的 output 不是0均值。这是不可取的因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是如果数据进入神经元的时候是正的(e.g.x0 elementwise infwTxb)那么w计算出的梯度也会始终都是正的或者始终都是负的 then the gradient on the weightswwill during backpropagation become either all be positive, or all negative (depending on the gradient of the whole expressionf)。 当然了如果你是按batch去训练那么那个batch可能得到不同的信号所以这个问题还是可以缓解一下的。因此非0均值这个问题虽然会产生一些不好的影响不过跟上面提到的 kill gradients 问题相比还是要好很多的。Tanh函数/双曲正切函数tanh 是sigmoid的变形tanh(x)2sigmoid(2x)−2取值范围为[-1,1]。tanh导数值与sigmoid导数值对比tanh的导数值要远远大于sigmoid的导数值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 更接近 0SGD会更接近 natural gradient[4]一种二次优化技术从而降低所需的迭代次数。3 tanh更像是单位函数更易训练。缺点与sigmoid一样tanh函数具有容易饱和的特点没有根治梯度消失的问题计算复杂度较高幂运算更加复杂tanh_temperaturedef tanh_temperature(xtensor):return 4.0 * tf.nn.tanh(xtensor / 4.0)核心作用是缓解梯度消失。标准tanh(x)的值域是(-1, 1)当输入稍大时输出就饱和了梯度接近0。4 * tanh(x/4)的效果输入除以4把输入压缩到线性区附近避免过早饱和输出乘以4把值域扩展到(-4, 4)保留更大的表达范围直觉上看在原点附近4 * tanh(x/4) ≈ x近似线性梯度接近1训练更稳定但在输入很大时仍有饱和效果起到软截断的作用防止交叉特征的值爆炸。用在交叉特征上特别合适——特征乘法容易产生数值较大的输出这个函数既能限制范围又不会把梯度杀死。硬双曲正切函数(hard tanh)它的形状和 tanh 以及整流线性单元类似,但是不同于后者,它是有界的,g(a) max(−1, min(1, a))。它由 Collobert (2004)引入。HTanh function整流线性单元 ReLU及其变型整流线性单元ReLURectified Linear Unit(ReLU) 整流线性单元通常作用于仿射变换hg(W⊤xb)之上当初始化仿射变换的参数时可以将b的所有元素设置成一个小的正值例如0.1。这使得整流线性单元很可能初始时就对训练集中的大多数输入呈现激活状态并且允许导数通过。f(x)max(0,x)输入信号 0 时输出都是00 的情况下输出等于输入。曲线如图对比sigmoid类函数主要变化是1单侧抑制2相对宽阔的兴奋边界3稀疏激活性。ReLU 的导数不存在sigmoid 的梯度消失的问题ReLU评价ReLU 在x0 时硬饱和。由于 x0时导数为 1所以ReLU 能够在x0时保持梯度不衰减从而缓解梯度消失问题。但随着训练的推进部分输入会落入硬饱和区导致对应权重无法更新。这种现象被称为“神经元死亡”。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/tanhReLU 只需要一个阈值就可以得到激活值而不用去算一大堆复杂的运算。虽然2006年Hinton教授提出通过分层无监督预训练解决深层网络训练困难的问题但是深度网络的直接监督式训练的最终突破最主要的原因是采用了新型激活函数ReLU。与传统的sigmoid激活函数相比ReLU能够有效缓解梯度消失问题从而直接以监督的方式训练深度神经网络无需依赖无监督的逐层预训练。ReLU另外一个性质是提供神经网络的稀疏表达能力。PReLU[10]、ELU[7]等激活函数不具备这种稀疏性但都能够提升网络性能。ReLU 的缺点当然 ReLU 也有缺点就是训练的时候很”脆弱”很容易就”die”了。举个例子一个非常大的梯度流过一个 ReLU 神经元更新过参数之后lzw-梯度此时参数w很可能变为一个很大的负值之后正向传播时很大概率会使激活aj为0因为relu激活总0w为负输出一直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:hig(z,α)imax(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 引入了额外的参数但基本不需要担心过拟合。例如在上述cifar10NIN实验中 PReLU比ReLU和ELU多引入了参数但也展现了更优秀的性能。所以实验中若发现网络性能不好建议从其他角度寻找原因。与ReLU相比PReLU收敛速度更快。因为PReLU的输出更接近0均值使得SGD更接近natural gradient。证明过程参见原文[10]。此外作者在ResNet 中采用ReLU而没有采用新的PReLU。这里给出个人浅见不一定正确仅供参考。首先在上述LReLU实验中负半轴斜率对性能的影响表现出一致性。对PReLU采用正则将激活值推向0也能够带来性能提升。这或许表明小尺度或稀疏激活值对深度网络的影响更大。其次ResNet中包含单位变换和残差两个分支。残差分支用于学习对单位变换的扰动。如果单位变换是最优解那么残差分支的扰动应该越小越好。这种假设下小尺度或稀疏激活值对深度网络的影响更大。此时ReLU或许是比PReLU更好的选择。def prelu_func(features, initializerNone, scopeNone):Implementation of [Parametric ReLU](https://arxiv.org/abs/1502.01852) borrowed from Keras.with tf.variable_scope(scope, PReLU, initializerinitializer):alpha tf.get_variable(alpha, features.get_shape().as_list()[1:])pos tf.nn.relu(features)neg alpha * (features - tf.abs(features)) * 0.5return pos negprelu functools.partial(prelu_func, initializertf.constant_initializer(1.0))自适应激活函数DiceDice(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类函数的阶跃变化点在x0处rectified point固定为0意味着面对不同的输入输入分布发生变化时这个变化点是不变的DIN中改进了这个控制函数平滑了rectified point附近曲线的同时激活函数会根据每层输入数据的分布来自适应调整rectified point的位置即选择了统计神经元输出的均值和方差(实际上就是Batch_Normalization,CTR中BN操作可是很耗时的可以推测Dice复杂的计算快不起来不会大规模引用)来描述数据的分布控制函数p(s)曲线对比如下所示f(s)曲线对比如下所示dice的变化[最详细的推荐系统模型讲解——DINDeep 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对输入变化或噪声更鲁棒。相比reluelu存在负值可以将激活单元的输出均值往0推近达到batchnormlization的效果且减少了计算量。输出均值接近0可以减少偏移效应进而使梯度接近于自然梯度。ELU的输出均值接近于零所以收敛速度更快。Lrelu和prelu虽然有负值存在但是不能确保是一个噪声稳定的去激活状态。Elu在负值时是一个指数函数对于输入特征只定性不定量。[ELU激活函数]实践效果relubn组合准确率最高relubnelupreluelubnrelu。可见elu在激活函数里表现最好但是它不必加BN这样减少了BN的计算量。在 ImageNet上不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛PReLU网络在MSRA的Fan-in caffe 初始化下会发散而 ELU 网络在Fan-in/Fan-out下都能收敛。[激活函数reluprelueluBN对比on cifar10]softplus函数f(x) ζ(x) ln(1ex)这是整流线性单元的平滑版本,由 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) ]主流大模型使用的激活函数主要有四类分别是ReLUGeLU、SwiGLU以及Deep Norm。GLUGated Linear Unit激活函数门线性单元这个基本的双线性函数定义为GLU(x) x ⊗ σ(g(x))。其中x是输入向量⊗表示逐元素相乘σ表示Sigmoid函数g(x)是通过全连接层或卷积层得到的中间向量。GLU激活函数最初在NLP任务中提出并在机器翻译、语音识别等领域取得了良好的效果。具有门控机制可以帮助网络更好地捕捉序列数据中的长期依赖关系。门控机制使得GLU能够选择性地过滤输入向量的某些部分并根据输入的上下文来调整输出。门控部分的作用是将输入进行二分类决定哪些部分应该被保留哪些部分应该被抑制。例如在语言模型中GLU激活函数可以帮助网络根据上下文选择性地关注某些单词或短语从而更好地理解句子的语义。门控机制可以有效地减少噪声和不相关信息的影响提高网络的表达能力和泛化能力。总结起来GLU激活函数通过门控机制实现对输入的选择性过滤帮助网络捕捉长期依赖关系和上下文信息。这种机制在处理序列数据和NLP任务中具有重要的作用可以提高模型的性能和效果[GLU激活函数PaLM模型中SwiGLU激活函数的原型 - 知乎]GeLU高斯误差线性单元 Gaussian Error Linear UnitGeLU是在激活函数中引入了随机正则的思想类似于dropout、zoneout、ReLU的综合ReLU就是一个较好的有非线性拟合的能力的激活函数又可通过加入如Dropout正则化来提高其泛化能力而zoneout是Dropout的一个变种。GELU通过来自上面三者的灵感希望在激活中加入正则化的思想。具体的GELU对于输入乘上了一个以01组成的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 GPTs 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))))Swish激活函数Swishx⋅sigmoid(βx) 就是GeLu里面的高斯函数换成了sigmoid吧Swishx⋅sigmoid(x)图像swish不同beta参数图像及其一阶导Swish特点关于正则化效果x轴越靠近左半轴纵坐标的值越小甚至接近于0如果x值是-10那么经过激活之后的值接近于0那么就可以一定程度上过滤掉一部分信息起到正则化的效果。tf实现tf.nn.swish(features)[Swish激活函数 - Chen洋 - 博客园]SwiGLU和GeGLU激活函数SwiGLU 和 GeGLU都是Noam Shazeer在文章中探索的激活函数变体。是GLU变体之一来源于论文 GLU Variants Improve Transformer。SwiGLU就是swish再*一个x的线性变换。GeGLU就是gelu再*一个x的线性变换。作者并没有对激活函数提出的原理和动机做过多描述论文本身是对各类激活函数变种效果的对比尝试。从对比实验中看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) ]

更多文章