【阅读】神经网络为何非激活函数不可?

1. 激活函数是什么,它在网络中有什么作用?

  一个函数,帮助神经网络从数据中学习复杂模式。激活函数在人工神经网络中的作用:接收前一个单元输出的信号,并将其转换成某种可以被下一个单元接收的形式。

2. 为什么需要激活函数而不使用线性函数?

     a.有助于我们根据要求将神经元的输出值限定在一定的范围内.

    b.具有在神经网络中加入非线性的能力.

3. 理想的激活函数有哪些特征?

    a.梯度消失问题:神经网络是利用梯度下降过程来训练的。

           梯度下降由基于链式规则的反向传播组成,链式规则用于获取权值变化以减少每次训练后的损失。

    b.以零为中心:激活函数的输出应对称于零,这样梯度就不会向特定方向移动。

     c. 计算成本:网络的每一层都会应用激活函数,它在深层网络中需要计算数百万次。因此,激活函数的计算成本应该很低。

    d.可微性

4. 目前使用的各种非线性函数。

    a.Sigmoid函数

从未在实际模型中使用。Sigmoid 函数计算量大,会导致梯度消失问题且不以零为中心,通常在二进制分类问题中才会使用。

Softmax 逻辑回归模型: Sigmoid 函数在多分类问题上的一种推广形式。也产生 0-1 范围内的值,因此被用作分类模型的最后一层。

    b.双曲正切函数 tanh:仅仅解决了以零为中心这个问题

    c.线性整流函数(Rectified Linear Unit, ReLU)

      又称修正线性单元,定义为 f(x)=max(0,x)

      在卷积神经网络中。它计算简单,不会饱和,不产生梯度消失问题,但不以零为中心。存在dying ReLU问题,输入是负数时,输出都会变成零,导致一些节点完全死掉。存在激活爆炸问题,上限是inf,有时会产生不可用的点。

      d.Leaky ReLU 和 Parametric ReLU 函数

       f(x)=max(αx,x)

      α的值永远不会设置为趋近于 1 的值.如果我们分别将α设为每个神经元的超参数,则得到 Parametric ReLU 或 PReLU。

5、ReLU6 函数

         e.ReLU6 函数

         在 x>0 的区域基本上等同于 ReLU, f(x)=min(max(0,x),6).

         有助于阻止激活增长,防止梯度爆炸(趋近无限时)以及正常 ReLUs 发生的其他小问题。

          想法结合ReLU6和Leaky ReLU

5. 在最新研究中涌现的值得关注的非线性激活函数。

     a.Swish 函数

         f(x)=x*sigmoid(x)

      ReLU 在 x=0 时会突然发生改变,而 Swish它不会在某个点上突变, 更容易收敛。但计算成本高。

    b.Hard-Swish 或 H-Swish函数

     用线性类型的 ReLU 函数取代了指数类型的 sigmoid 函数,成本低于swish


6. 在深层神经网络中应该使用哪些激活函数以及如何使用它们?

    Tanh和sigmoid不推荐使用,会引起梯度消失问题。

    一开始引入ReLU函数。在权重层(诸如 CNN、RNN、LSTM 或线性感知层)之后添加激活层。若模型已停止学习,用Leaky ReLU替换,以避免dying ReLU,但会增加计算时间。

    若也有Batch-Norm 层(批标准化层)。顺序:先进行 CNN-Batch(卷积神经网络批处理),再进行 Norm-Act(标准化动作)再执行激活函数。

激活函数的默认超参数如果是在如 Tensorflow 和 Pytorch等框架中使用,则效果最好。也可以调整 Leaky ReLU 中的负斜率并将其设置为 0.02 以加快学习速度。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容