https://www.toutiao.com/a6694433329048977927/

这是专栏《AI初识境》的第4篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。

在神经网络中,有一个看似不起眼但是非常重要的概念,那就是激活函数。激活函数模型固然理解起来简单,但是也经历了从人工设计到自动探索的长足发展历程。

作者&编辑 | 言有三

01 无处不在的激活函数

我们都知道人工神经网络是用于模拟神经元的,那么提起激活函数,自然是要从那里去挖掘原因。

在正说深度学习中的激活函数之前,我想说其实激活函数无处不在。

(1) 上班需要激活函数。早上10点上班,你8点到也好,9点到也好都一样,但是10点零1分到不行,性质就变了,考勤系统留下迟到的记录,全勤奖再无希望。

它的激活函数应该是这样的,x是打卡时间。

这是一个阶跃函数,类似于如下:

(2) 最近看上了一个跳槽过来的喜欢吃甜品的女同事,不过听说有男朋友,不过又听说好像正在慢慢闹分手。

那么如果要追这个女同事,什么时候送甜品能带来友情的升华?假如预判她和对象第t天后拜拜。

它的激活函数可能是这样的,x是送甜品的日子。

在刚分手的时候(也就是第t天,对应曲线斜率最大的地方)送甜品带来的好感激增度是最高的,再往后虽然随着相互之间越来越熟友谊持续升温,但是增长率下降了啊。而且到后来可能被其他人追走了,这个函数还只在一定期限内有效。

(3) 最近项目要加班,不过好在加班费是按小时(可以有分数)算的,那么当天的工资,就应该是这样算的。它的激活函数可能是这样的,x是工作时长。

形状长这样,超过一个阈值后是线性增加的,低于阈值则是常量。

(4) 不是单身狗?OK你是有老婆的人,那么下班回家陪老婆看电视总需要吧。不过到底陪不陪看,是不是陪就一定能得到老婆大人喜欢,这个可能是个周期性质的东西。

假如x是当天日历,那么激活函数可能是这样。

这么想想,是不是感觉激活函数无处不在,上面的这几种都是有正儿八经对应的激活函数的。

回转正题,之所以需要激活函数,从生物学上来说,是因为人脑的细胞接受刺激从而产生活动,首先需要一定的阈值,没有达到阈值,几乎没用。而不同的刺激产生的输出也是不同的,达到一定值后就饱和了,再加大也没用。

作为模拟人脑的人工神经网络,自然是需要某种机制来模拟这一种活动,这便是激活函数根本性的由来。

02 激活函数到底有什么用

一个复杂的神经网络,是有许多层的,其中最基本的单位便是神经元。

一个线性神经元,输入x输出y的变换关系如下。

可以看到输出y与x是一个线性关系。如果再增加一层,把y作为中间层,输出为z呢?

如下:

可以看出,最终的输出z仍然与x是线性关系,也就是说这样堆叠下去,永远都是线性关系。

人们期望神经网络可以模拟任意的函数,怎么可能用一个线性函数来完成呢?所以才会在线性神经元的输出后添加非线性的函数,添加的越多,变换自然就越复杂了。

而不同的非线性映射函数的选择,就是激活函数的研究课题了。

03 各种激活函数

https://en.wikipedia.org/wiki/Activation_function

关于激活函数的种类,有三这一次就偷个懒,大家可以去wiki 百科上面看,非常的详细,下面摘录其中的一些。

这些人工设计的激活函数有这么多,那么什么激活函数最好,是ReLU吗?还是各类ReLU的变种(LReLU,PReLU,RReLU,ELU,SELU,GELU等等),Maxout,又或者是某大神自己在搞的很复杂的激活函数,这是没有答案的,只能说有一些通用的大家认可的结论,下面也只能覆盖到一些。

(1) sigmoid和tanh激活函数。

为什么最早的时候大家用sigmoid函数呢?因为它不管输入处于多大的范围,输出是处于0~1的,机器学习里要解决的问题很多都是概率,用sigmoid不是很自然吗?

就算它有所谓的饱和问题导致梯度很小,那也是在函数的尾部才会发生,或者是在多级连乘之后才明显。所以很早期的比较浅的神经网络,用sigmoid没毛病,现在在LSTM这一类需要计算开关概率的网络中,sigmoid仍然是很常见的。

那tanh函数又如何呢?它相比sigmoid来说,将输出映射到(-1,1)之间了,拓展了一倍的值域。激活有负值之后,网络的表达能力可以得到提升,但未必一定需要这么做的,因为权重本身是可以为负的,而在最早期的神经网络中,用模拟信号处理问题,甚至连权重都没有非负的,一样有效。不过一般来说tanh总不至于比sigmoid差的,它毕竟通过零点,输出期望不会漂移。

(2)ReLU激活函数。

好处是很明显的。首先它简单,这个简单不仅在于导数恒定,更在于它将低于一定阈值的信号丢弃了。深度学习要解决的是工程问题,工程问题很多时候都是稀疏性的,往往简单的解决方案是最有效和稳定的。不过ReLU输出没有负数的问题确实有一定负作用,这也是其他方法对ReLU的改进空间所在。

(3)ReLU的一大堆变种(LReLU,PReLU,RReLU,ELU,SELU,GELU等等)。

我相信这些变种是有用的,但是我没怎么用过。不用因为是首先它们还没有表现出一定比ReLU强,在如今有BN等技术以及好的初始化方法后,ReLU的缺点没有那么明显了。另一方面是,没时间去一个一个试,解决问题的过程中还有很多其他因素更加需要去探索。不过,还是建议大家去仔细了解一下的,用不用的着再说。

正因如此,在对ReLU改进的差不多之后,激活函数的人工设计就没有这么多热情了。

04 自动搜索

不过坑还没有填完,还是有人没有忘记这个问题的,比如谷歌。谷歌开了许多深度学习领域的自动化的工作,比如自动设计网络NASNet,自动数据增强AutoAugment等工作,也做了自动搜索最优的激活函数的工作。

文[1]就在一系列一元函数和二元函数组成的搜索空间中,进行了比较细致的组合搜索实验。

结论是好用的激活函数都比较简单,不会超过两个基本函数的乘的组合。搜到了一些比Relu表现更好的函数,最好的是一个这样的函数:x · σ(βx),被称为Swish,它在某个特定的参数下也和ReLU及其变种类似,看看图就知道了。

顺便说一下该方法做实验时的一元函数和二元函数的搜索空间:

已经覆盖我们能想到的一些简单的函数了。

类似地也有其他的研究人员通过遗传算法学习到一些新的激活函数,包括EliSH,HardEliSH[2],感兴趣的可以去看论文。

这个坑就挖给你了,还可以填。

[1] Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprint arXiv:1710.05941, 2017.

[2] Basirat M , Roth P M . The Quest for the Golden Activation Function[J]. 2018.

[3] Nwankpa C , Ijomah W , Gachagan A , et al. Activation Functions: Comparison of trends in Practice and Research for Deep Learning[J]. 2018.

深度学习各个维度的理论正处于全面被研究中,如果你想有所建树,那么必须要深入思考以前那些看似习以为常的东西,激活函数就是一个例子。

「AI初识境」激活函数:从人工设计到自动搜索相关推荐

  1. 「AI初识境」近20年深度学习在图像领域的重要进展节点

    https://www.toutiao.com/i6694432730714735117/ 这是专栏<AI初识境>的第3篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  2. 「AI初识境」从头理解神经网络-内行与外行的分水岭

    https://www.toutiao.com/i6694431849566962184/ 这是专栏<AI初识境>的第2篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  3. 「AI初识境」深度学习模型中的Normalization,你懂了多少?

    https://www.toutiao.com/a6694436118189834765/ 这是<AI初识境>第6篇,这次我们说说Normalization.所谓初识,就是对相关技术有基本 ...

  4. 「AI初识境」被Hinton,DeepMind和斯坦福嫌弃的池化到底是什么?

    https://www.toutiao.com/a6694763453334159880/ 这是专栏<AI初识境>的第8篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  5. 「AI初识境」什么是深度学习成功的开始?参数初始化

    https://www.toutiao.com/a6694435439375286797/ 这是<AI初识境>第5篇,这次我们说说初始化.所谓初识,就是对相关技术有基本了解,掌握了基本的使 ...

  6. 「AI初识境」为了围剿SGD大家这些年想过的那十几招

    https://www.toutiao.com/i6694762854970556935/ 这是<AI初识境>第7篇,这次我们说说常用的优化算法.所谓初识,就是对相关技术有基本了解,掌握了 ...

  7. 「AI初识境」深度学习中常用的损失函数有哪些?

    https://www.toutiao.com/a6695152940425937411/ 这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  8. 「AI初识境」给深度学习新手做项目的10个建议

    https://www.toutiao.com/i6695505977921241604/ 这是专栏<AI初识境>的第12篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  9. 「AI不惑境」数据压榨有多狠,人工智能就有多成功

    https://www.toutiao.com/a6703348023008690701/ 大家好,今天开始就进入了专栏<AI不惑境>的更新了,这是第一篇文章,讲述数据如何驱动深度学习. ...

最新文章

  1. GPUImage简单说明
  2. android 网络时区 错误,React native 安卓机器上调试代码报错:网络请求出错TypeError: Network request failed...
  3. 【深度学习】Batch Normalization(BN)超详细解析
  4. AndroidManifest.xml中Activity ConfigChanges属性的用法
  5. 缓存依赖中cachedependency对象
  6. C语言满分代码:L1-059 敲笨钟 (20分)
  7. USB Camera摄像头(UVC 与 gspca)
  8. RTSP摄像机为什么还保留MJPEG编码格式
  9. iPhone应用中APNS推送通知流程代码实现案例
  10. echart 迁徙图
  11. snort:Packet结构体详解(留坑)
  12. 内网渗透之——域渗透中利用ms-14-068漏洞进行票据伪装获取域管账号密码
  13. 云蹦迪云广场舞软件开源源码
  14. 拼音检索VS五笔检索---Javascript实现
  15. (附源码)计算机毕业设计SSM基于大数据的汽车流量监控
  16. 计算机程序创始人阿达洛芙莱斯
  17. Berkeley DB介绍
  18. 拒绝盲目自学!完整Java学习路线图,全面对标阿里P5-P8职级实现弯道超车
  19. delmia机器人模型调入
  20. PMP证书有没有必要续证?

热门文章

  1. JAVA C++ 左花括号{该另起一行写还是写在行尾的思考
  2. java学习路线导航【教学视频+博客+书籍整理】
  3. 程序员能力矩阵 你属于哪一层?
  4. 阿里云数据库专家白宸:Redis带你尽享丝滑!(图灵访谈)
  5. 产品经理一定要懂得“借力”
  6. Python3 MySQL 数据库连接 - PyMySQL 驱动
  7. VS2010 + Qt5.3.2配置教程
  8. Matlab图形绘制经典案例 (1)
  9. Spark运行模式(local standalond,yarn-client,yarn-cluster,mesos-client,mesos-cluster)
  10. ​2012年至今,细数深度学习领域这些年取得的经典成果