zoukankan      html  css  js  c++  java
  • modeling probabilities and nonlinearities: activation functions (Grokking 第九章学习笔记)

    为什么需要激活函数?

    在Grokking书中之前的章节,我们学会了如何搭建一个如下所示的、简单的神经网络,并根据输出数据做出预测。

    很容易可以看出:隐藏层神经元的值,是对应的输入层神经元乘以权重后的累加和。同理,输出层神经元的值也是如此。

    这就导致了一个问题:不管隐藏层如何叠加,最终的预测结果总是输入值的线性表示。

    在具体的场景中,这个问题更加的直观。比如在下图所示的分类问题中,我们可以很容易的找到一条线段完成分类操作:

    但是在处理类似异或等问题时,我们始终不能用一条线段来完成分类

    为了解决类似的问题,我们在神经网络中引入激活函数,使得最终的预测结果与输入值之间的关系变成非线性关系。

    激活函数的性质

    首先激活函数必须是连续的,在这里先复习以下函数连续的概念:

      设函数 y = f (x)在点x0的某邻域内有定义,如果当自变量的改变量△x趋近于 零时,相应函数的改变量△y也趋近于零,则称y = f (x)在点 x0处连续

      

      也就是说,如函数y = f (x)在点x0出连续时满足下列条件:

        函数在该点处有定义;函数在该点出的极限存在且极限值等于函数值

    另一方面,激活函数的输入域应该是无限,你要保证对于任意的x值激活函数都由相对应的映射值。

    什么是一个好的激活函数?

    首先一个好的激活函数应该是单调的,如下图所示的激活函数就并非一个优秀的激活函数,因为在神经网络中绝大多数情况下不同的两个x值对应相同的y值是没有意义的。

    其次,一个好的激活函数应当是非线性的(不然我引入吔屎吗?)

    最后,一个好的激活函数及其派生函数应该是可以被有效计算的(这里的有效计算指计算的时间复杂度是多项式复杂度)

    常用的激活函数

    一、Sigmoid函数

      sigmoid函数即 S(x) = 1/(1+exp(-x))

      

     sigmoid函数的缺点在于:函数并非关于原点中心对称,同时可以很直观的看出,在|x|趋近于无穷时,会’杀死梯度‘。

    二、Tanh函数

      tanh函数即 T(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x))

      

      tanh函数解决了sigmoid函数不关于原点中心对称的问题,但是梯度消失的现象依然存在

    三、Relu函数

      relu函数即 R(x) = max(0,x)

      

     relu函数解决了梯度消失的问题,同时计算效率极高。

     其缺点在于relu函数会杀死部分神经元。这个问题可以被Leaky ReLU函数解决,Leaky ReLU函数为:LR(x) = max(0.01x,x)

  • 相关阅读:
    spark的做算子统计的Java代码(在Linux系统集群式运行)
    http协议面试题
    vue响应式原理
    vue-cli3搭建vue项目
    vscode中自定义代码片段
    vue中常用的全局配置
    tomcat安装配置
    Git相关
    nginx配置文件详解
    nginx源码安装
  • 原文地址:https://www.cnblogs.com/alan-W/p/13747658.html
Copyright © 2011-2022 走看看