激活函数的作用「建议收藏」

激活函数的作用「建议收藏」激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题首先我们有这个需求,就是二分类问题,如我要将下面的三角形和圆形点进行正确的分类,如下图:利用我们单层的感知机,用它可以划出一条线,把平面分割开:上图直线是由得到,那么该感知器实现预测的功能步骤如下,就是我已经训练好了一个感知器模型,后面对于要预测的样本点,带入模型中,如果y>0,那么就说明是直线的右侧,也就…

大家好,又见面了,我是你们的朋友全栈君。

激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题

首先我们有这个需求,就是二分类问题,如我要将下面的三角形和圆形点进行正确的分类,如下图:

激活函数的作用「建议收藏」

利用我们单层的感知机, 用它可以划出一条线, 把平面分割开:

激活函数的作用「建议收藏」

上图直线是由得到,那么该感知器实现预测的功能步骤如下,就是我已经训练好了一个感知器模型,后面对于要预测的样本点,带入模型中,如果y>0,那么就说明是直线的右侧,也就是正类(我们这里是三角形),如果,那么就说明是直线的左侧,也就是负类(我们这里是圆形),虽然这和我们的题目关系不大,但是还是提一下~
好吧,很容易能够看出,我给出的样本点根本不是线性可分的,一个感知器无论得到的直线怎么动,都不可能完全正确的将三角形与圆形区分出来,那么我们很容易想到用多个感知器来进行组合,以便获得更大的分类问题,好的,下面我们上图,看是否可行:

激活函数的作用「建议收藏」

好的,我们已经得到了多感知器分类器了,那么它的分类能力是否强大到能将非线性数据点正确分类开呢~我们来分析一下:
我们能够得到

y=w_{2-1}(w_{1-11}x_{1}+ w_{1-21}x_{2}+b_{1-1} )+ w_{2-2}(w_{1-12}x_{1}+ w_{1-22}x_{2}+b_{1-2} )+w_{2-3}(w_{1-13}x_{1}+ w_{1-23}x_{2}+b_{1-3} )

哎呀呀,不得了,这个式子看起来非常复杂,估计应该可以处理我上面的情况了吧,哈哈哈哈~不一定额,我们来给它变个形.上面公式合并同类项后等价于下面公式:

y=x_{1}(w_{2-1}w_{1-11}+w_{2-2}w_{1-12} +w_{2-3}w_{1-13} )+x_{2} (w_{2-1}w_{1-21}+w_{2-2}w_{1-22} +w_{2-3}w_{1-23} )+w_{2-1} b_{1-1} +w_{2-2} b_{1-2}+w_{2-3} b_{1-3}

啧啧,估计大家都看出了,不管它怎么组合,最多就是线性方程的组合,最后得到的分类器本质还是一个线性方程,该处理不了的非线性问题,它还是处理不了。
就好像下图,直线无论在平面上如果旋转,都不可能完全正确的分开三角形和圆形点:

激活函数的作用「建议收藏」

既然是非线性问题,总有线性方程不能正确分类的地方~
那么抛开神经网络中神经元需不需要激活函数这点不说,如果没有激活函数,仅仅是线性函数的组合解决的问题太有限了,碰到非线性问题就束手无策了.那么加入激活函数是否可能能够解决呢?
在上面线性方程的组合过程中,我们其实类似在做三条直线的组合,如下图:

激活函数的作用「建议收藏」
下面我们来讲一下激活函数,我们都知道,每一层叠加完了之后,我们需要加入一个激活函数(激活函数的种类也很多,如sigmod等等~)这里就给出sigmod例子,如下图:

激活函数的作用「建议收藏」

通过这个激活函数映射之后,输出很明显就是一个非线性函数!能不能解决一开始的非线性分类问题不清楚,但是至少说明有可能啊,上面不加入激活函数神经网络压根就不可能解决这个问题~
同理,扩展到多个神经元组合的情况时候,表达能力就会更强~对应的组合图如下:(现在已经升级为三个非线性感知器在组合了)

激活函数的作用「建议收藏」

跟上面线性组合相对应的非线性组合如下:

激活函数的作用「建议收藏」

 

这看起来厉害多了,是不是~最后再通过最优化损失函数的做法,我们能够学习到不断学习靠近能够正确分类三角形和圆形点的曲线,到底会学到什么曲线,不知道到底具体的样子,也许是下面这个~

激活函数的作用「建议收藏」
那么随着不断训练优化,我们也就能够解决非线性的问题了


1.为何引入非线性的激活函数?

如果不用激活函数,在这种情况下每一层输出都是上层输入的线性函数。容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。因此引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。

2.引入ReLu的原因

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现 梯度消失 的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。

第三,ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147956.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • IDEA汉化版踩坑

    IDEA汉化版踩坑IDEA汉化版踩坑之前下的汉化版踩了一些坑,最后还是用回了英文版……①无法在项目中打开setting首先确保IntellijIDEA关闭,然后打开IDEA安装位置的文件夹,将lib文件夹下的resources_cn.jar文件用压缩软件打开、将其messages文件夹内的①IdeBundle.properties(系统设置(setting)外观选项加载不出来)②VcsBundle….

  • jsoncpp官方教程_jsoncpp用法

    jsoncpp官方教程_jsoncpp用法本文主要介绍使用JsonCpp库,通过C++编程语言实现JSON文件读写操作的具体方法。1写入JSON文件这里编写一个示例程序,该程序将JSON字符串写入到JSON文件中。示例代码(json_file_oper_write.cpp)的内容如下:#include<jsoncpp/json/json.h>#include<fstream>usingnamespacestd;intmain(){Json::Value

    2022年10月10日
  • 六个主要的社会网络分析软件的比较

    六个主要的社会网络分析软件的比较
    UCINET简介  
        UCINET为菜单驱动的Windows程序,可能是最知名和最经常被使用的处理社会网络数据和其他相似性数据的综合性分析程序。与UCINET捆绑在一起的还有Pajek、Mage和NetDraw等三个软件。UCINET能够处理的原始数据为矩阵格式,提供了大量数据管理和转化工具。该程序本身不包含网络可视化的图形程序,但可将数据和处理结果输出至NetDraw、Pajek、Mage和KrackPlot等软件作图。UCINET包含大量包括探测凝聚子群(cliq

  • java全局变量和局部变量的区别_全局变量和局部变量的定义

    java全局变量和局部变量的区别_全局变量和局部变量的定义全局变量是一个运行时刻实体,它在程序的整个执行过程中都存在。全局变量生命周期为程序开始到程序结束。全局变量显示初始化时,或者未初始化时,在程序映像中有不同的分区:已初始化的全局变量是可执行模块的一部分。未初始化的全局变量则不是可执行模块的一部分,只有当定义它们的程序被调用时(即执行时),才分配空间,声明或定义时并不分配。未初始化的全局变量在运行时被初始化为0或null。

  • Android代码混淆及反编译

    Android代码混淆及反编译如果你目前还是一名学生或是没有在应用商店中上传过应用,恐怕对此的感受不深。而在企业中对Java代码的混淆却是一步很重要的步骤,从安全的角度来说,代码混淆,防止居心不良的人对代码进行恶意篡改非常重要。下面就是对Android项目进行的代码混淆和加密签名过程。

  • C语言例题:输入两个正整数m和n,求其最大公约数和最小公倍数。

    C语言例题:输入两个正整数m和n,求其最大公约数和最小公倍数。题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号