引言

在学习机器学习的时候,我就一直有着一个疑惑。为什么神经网络需要激活函数(Activation Function)?可能有的人会说,引入激活函数是为了给网络引进非线性。但是有没有仔细思考过,引入非线性的原因呢,下面我简单谈谈自己的看法(纯属个人胡说,有不同见解评论区见)


什么是激活函数

简单地说,激活函数是添加到人工神经网络中的一个函数,目的是帮助网络学习数据中的复杂模式。与我们大脑中基于神经元的模型相比,激活函数最终决定向下一个神经元的连接情况。这正是激活函数在ANN中的作用。它接收上一个单元的输出信号,并将其转换成某种形式,作为下一个单元的输入。

如上图所示,若没有激活函数的作用,该网络传递表达式可写为:

t=w@a+b

激活函数fun的加入相当于把原始关系改写为:

t=fun(w@a+b)

我们最常听到的sigmod函数就是上面fun的一种,在原始关系的基础上引入这样的操作的意义是什么呢?


为什么要引入激活函数?

1.模拟人类神经元的传递规则

首先,考虑一下人类神经元的传递规则。某一神经元也只是在特定的刺激下才会传递相应的信号。我们假定,各层之间的输出越接近1说明该神经元越兴奋,越接近0说明该神经元越不活跃。那么激活函数的功能就像是控制神经元活跃度的控制伐,模拟真实人类神经的传递规则。

2.限制每层之间的输出值范围

除了前面讨论过的生物学相似性之外,它们还有助于将神经元输出的值限制在我们要求的某个限制内。 因为激活函数的输入是W * x + b,其中W是单元的权重(Weight),x是输入,然后在其上加上b偏差(Bias)。 如果不限制在某个值上,则此值的幅度可能会非常高,尤其是在具有数百万个参数的非常深的神经网络的情况下。 这将导致计算问题。 例如,有些激活函数(如softmax)针对不同的输入值(0或1)列出了特定的值。

3.为神经网络引入非线性的能力

然而除去上述的两个功能以外,激活函数最重要的功能莫不过为神经网络引入了非线性的能力。为什么神经网络需要非线性的能力?我们举个最简单的分类问题当例子,可以知道机器学习就是用大量的数据去不断更新各网络层之间连接参数的weight和bias。来使之后对不同的输入数据,经过网络的处理之后都可以给出正确的分类。

向量角度理解

我们知道每一层的参数操作对应的函数表达式为y=w@x+b。
运用大学的线性代数的知识,把网络的输入x看成是一个向量(Vector)。可以理解成参数矩阵w(Matrix)乘以输入vector,其相当于是矩阵w列向量的线性组合。

运算的规则如上图所示,相当于用输入的vector对参数w的列向量进行线性组合,这样的话,会导致的问题如下:

1.各层级之间的线性操作可以直接等价于一层线性操作

为什么会这样子呢?简单的推导过程如下:

其中a[1]a[2]代表两级网络层的输出。经过计算我们可知,a[2]的输出可以直接等价为一组新参数w‘、b’对原始输入的操作。

那么其实整个网络其实就当于是一个从输入到输出的变化,中间隐藏层的线性变化完全通过更改输入层的参数矩阵就可以实现。

也就是说缺失了每层之间的非线性激活函数,所有隐藏层失去了原始的作用因为多层线性操作等价于一层线性操作

2.其次由于线性组合相当于是对原始参数矩阵张成的空间进行伸缩,旋转和剪切

但是可能真实世界有些原始数据本身就是线性不可分的,必须要对原始空间进行一定的非线性操作(对原空间进行一定的扭曲?)

对于回归问题也可以同样运用高数的思维,把回归看成分类问题的无限细分,当极限存在时,分类也就成为了回归问题。


激活函数应该具有的特征

  • 避免梯度消失的特性,造成网络更新过慢
  • 输出最好关于0对称,这样就不会造成梯度向特定方向移动
  • 激活函数应该为神经网络引入非线性
  • 激活函数应该是可微的,使得满足各层之间梯度下降的计算(至少部分可微)
  • 梯度的计算不应该太复杂,影响网络性能

常见的激活函数及主要优缺点

1.Sigmod函数

Sigmoid函数是传统的神经网络和深度学习领域开始时使用频率最高的激活函数。
其优点主要是==连续平滑便于求导==;
但是其的缺点也很致命:
1.梯度消失问题(Vanishing Gradient problem):观看图像可知当x>2或x<2时Sigmod输出趋于平滑,导致梯度减小,权重和偏置更新过慢导致网络不更新
2.非零均值特性(none-zero-centered):会使训练震荡达不到最优解,使收敛变慢
3.导数计算复杂,影响速度


2.Tanh 函数

Tanh主要解决了Sigmod非零均值特性的问题,但是其还是存在计算复杂和梯度消失的问题。


3. ReLU

Relu的主要优点有:
1.大于0时,其导数恒为1,不会存在梯度消失的问题
2.计算速度非常快,只需要判断 x 是大于0还是小于0
3.收敛速度远远快于前面的 Sigmoid 和 Tanh函数
但是ReLu也是有着缺陷的:
1.非零均值特性
2.x<0时,输出恒为0.会使某些神经元永远不会被激活,进而导致参数永远不会更新


4. Leaky ReLU

Leaky ReLU 的提出主要是为了解决前面提到的Dead ReLu问题。因为当 x 小于 0 时,其输出不再是 0。虽然同时 Leaky ReLU 具有 ReLU 的所有优点。但是在实际操作中并没有完全证明好于 ReLU 函数。

etc…


机器学习-神经网络为什么需要非线性(激活函数)相关推荐

  1. 【神经网络量化】——非线性激活函数sigmoid,tanh的量化推理

    sigmoid, tanh, 量化推理 简介 在嵌入式设备,ARM的M系列,或者存硬件实现网络的推理,这时就需要所有的运算都需要用int型(int8,int15)或者自定义的数据类型.这里包括常见的c ...

  2. 【Deep Learning 三】神经网络中的非线性激活函数之间的优缺点:sigmoid、tanh、ReLu、Leaky ReLu...

    1 什么是激活函数? 激活函数,并不是去激活什么,而是指如何把"激活的神经元的特征"通过函数把特征保留并映射出来(保留特征,去除一些数据中是的冗余),这是神经网络能解决非线性问题关 ...

  3. 常用激活函数--小白角度 TensorFlow 机器学习 神经网络 选取

    常用激活函数--小白角度TensorFlow 机器学习 神经网络 选取 先简单介绍一下激活函数 常用激活函数review 1.阶跃函数 2.Sigmoid函数(logistic函数) 3.Hyperb ...

  4. 3.7 为什么需要非线性激活函数-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.6 激活函数 回到目录 3.8 激活函数的导数 为什么需要非线性激活函数 (Why do you need non-linear activation function? ...

  5. 吴恩达深度学习 —— 3.7 为什么需要非线性激活函数

    事实证明,要让神经网络能够计算出有趣的函数,必须使用非线性激活函数. 如下图所示是神经网络正向传播的方程,为什么不能直接去掉a[1]=g[1](z[1])a^{[1]}=g^{[1]}(z^{[1]} ...

  6. 为什么使用非线性激活函数?常见的非线性激活函数及优缺点对比

    为何使用非线性激活函数? ​ 如上图的神经网络,在正向传播过程中,若使用线性激活函数(恒等激励函数),即令,则隐藏层的输出为 即 可以看到使用线性激活函数神经网络只是把输入线性组合再输出,所以当有很多 ...

  7. 神经网络中常见的激活函数

    深度学习中已经成为了人工智能领域的必备工具,源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构.寻找隐藏层的权重参数和偏置的过程,就是常说的"学习"过程,其遵循的 ...

  8. 一篇文章理解深度神经网络5个常用激活函数

    一篇文章理解深度神经网络5个常用激活函数 1.Sigmoid 2.Tanh 3.ReLU 4.Leaky ReLU 5.Maxout 小结 1.Sigmoid Sigmoid非线性激活函数的数学表达式 ...

  9. 神经网络中常用的激活函数

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...

最新文章

  1. 【UE5教程】影棚拍摄于虚拟场景合成制作流程学习
  2. JAVA 8 新日期和时间API 学习总结
  3. 一招修复内存不能read_read文件一个字节实际会发生多大的磁盘IO?
  4. [学习笔记] 乱世之神杀疯了 —— K-D tree
  5. php反序列化漏洞 freebuf,最全的PHP反序列化漏洞的理解和应用
  6. 模型如何京东培训6万人
  7. 教程视图Android教程(十三)-- Activity间的切换
  8. 《电子DIY》之《单片机实践项目》之proteus中电源配置问题,keil常见错误总结一(九十)
  9. 如何使用project制定项目计划?(附详细步骤截图)
  10. 基于最大最小思想优化拉丁超立方采样
  11. [汇编] 汇编语言实现简易文本编辑器(光标移动、上卷和退格删除)
  12. synchronized锁升级那点事
  13. Java 笔记-抽象类,接口
  14. jquery实现锚点动画效果
  15. 关于Visual Studio订阅(原MSDN订阅)中无法激活Office 365权益的解决方法(仅适用于MVP)
  16. 爱情日记(2005年3月)
  17. ToString数据如何反序列化
  18. 计算机音乐安顺学院教务网络管理系统,安顺学院教务网络管理系统jwxt.asu.edu.cn/jwweb/...
  19. 高中信息技术会考学业水平考试合格考刷题平台知识点平台易会考
  20. JAVA连接FTP报530,FTP 登陆提示 530 Please login with USER and PASS

热门文章

  1. VBScript脚本运用(脚本程序与宿主程序的交互)
  2. C语言中逗号运算符和逗号表达式
  3. python实验六到十二作业(待完善)
  4. 条件概率,乘法定理 (概统1)
  5. 与世无争的非编程语言,却成为程序员们的心头爱
  6. LBP特征学习及实现
  7. 走出 scipy 的深坑:用 numpy 实现散列数据网格化
  8. python ‘//’ 取整,‘%’ 取余
  9. python - 求商和余数“/“ “//“ “%“运算符的区别
  10. 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能