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

激活函数的作用「建议收藏」激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题首先我们有这个需求,就是二分类问题,如我要将下面的三角形和圆形点进行正确的分类,如下图:利用我们单层的感知机,用它可以划出一条线,把平面分割开:上图直线是由得到,那么该感知器实现预测的功能步骤如下,就是我已经训练好了一个感知器模型,后面对于要预测的样本点,带入模型中,如果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,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

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

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

(0)
上一篇 2022年6月29日 下午6:00
下一篇 2022年6月29日 下午6:16


相关推荐

  • contig N50—小脚本

    contig N50—小脚本基因组 N50 GC 含量计算

    2026年3月17日
    2
  • PID控制的MATLAB仿真(1)

    PID控制的MATLAB仿真(1)PID控制应用广泛,说起来PID特别的简单,在比例负反馈的基础上加入微分项实现快速调节,加入积分项实现无静差。MATLAB强大的功能让学习变得非常简单。在学习智能控制这门课的时候,老师推荐了刘金琨老师的先进PID控制一书,边看边学边调程序。下文程序选自此书。首先从模拟PID开始,被控系统一般是下图这种结构:其中PID控制器:一种用模拟PID控制的磁悬浮:电路图左侧是霍尔传

    2022年5月24日
    38
  • Windows下Qt 5.2 for Android开发入门

    Windows下Qt 5.2 for Android开发入门QtonAndroidW 开发环境搭建全过程 还有更多系列专题文章链接

    2026年3月18日
    1
  • Qt多线程:使用互斥锁

    1、官方文档:QMutex类提供线程间的访问序列化。QMutex的目的是保护一个对象、数据结构或代码片段,这样每次只有一个线程可以访问它(这类似于Javasynchronized关键字)。通常最好将互斥对象与QMutexLocker一起使用,因为这样可以很容易地确保一致地执行锁定和解锁。2、官方示例:QMutexmutex;intnumber=6;v…

    2022年4月8日
    447
  • python关机程序代码_python实现的重启关机程序实例

    python关机程序代码_python实现的重启关机程序实例本文实例讲述了Python实现的重启关机程序的方法,对Python程序设计有一定的参考价值。具体方法如下:实例代码如下:#!/usr/bin/python#coding=utf-8importtimefromosimportsystemruning=Truewhileruning:input=raw_input(‘关机(s)OR重启(r)?(q退出)‘)input=input…

    2022年7月22日
    11
  • 计算机存储器分类

    计算机存储器分类摘要 本文主要介绍存储器的分类及各类存储器的优缺点 存储器 是电脑硬件的重要组成部分 是计算机系统中的记忆设备 用来存放数据和程序 存储器的分类 一 按存储介质分类存储介质指的是寄存 0 1 两种代码并能区分两种不同状态的物质或元器件 有半导体器件 磁性材料 光盘等 半导体存储器半导体存储器根据其材料的不同 分为双极型 TTL 半导体存储器和 MOS 半导体存储器 前者具有高速的

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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