![a73f367f072a5a045d7749e9c1354844.png](https://i-blog.csdnimg.cn/blog_migrate/a2f78c26718ce2eb63960f08959c688f.jpeg)
这是专栏《AI初识境》的第4篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。
在神经网络中,有一个看似不起眼但是非常重要的概念,那就是激活函数。激活函数模型固然理解起来简单,但是也经历了从人工设计到自动探索的长足发展历程。
作者&编辑 | 言有三
01 无处不在的激活函数
我们都知道人工神经网络是用于模拟神经元的,那么提起激活函数,自然是要从那里去挖掘原因。
在正说深度学习中的激活函数之前,我想说其实激活函数无处不在。
(1) 上班需要激活函数。早上10点上班,你8点到也好,9点到也好都一样,但是10点零1分到不行,性质就变了,考勤系统留下迟到的记录,全勤奖再无希望。
它的激活函数应该是这样的,x是打卡时间。
![5b2de89ad47a8e25f74c1114f8ca34b2.png](https://i-blog.csdnimg.cn/blog_migrate/577bf7ecab9c4f9f430df99930886bf9.jpeg)
这是一个阶跃函数,类似于如下:
![1e9adb05f68493c6bc6ca42f9655c307.png](https://i-blog.csdnimg.cn/blog_migrate/35bc523ece92757d24c7fe222465e897.jpeg)
(2) 最近看上了一个跳槽过来的喜欢吃甜品的女同事,不过听说有男朋友,不过又听说好像正在慢慢闹分手。
那么如果要追这个女同事,什么时候送甜品能带来友情的升华?假如预判她和对象第t天后拜拜。
它的激活函数可能是这样的,x是送甜品的日子。
![dd2e708776c0699ca75d2e4f9147ae43.png](https://i-blog.csdnimg.cn/blog_migrate/a01eedfb83558e5a166bdfbb01575bb4.jpeg)
![74d9e4ff6e61b402c2ff822b1096b94b.png](https://i-blog.csdnimg.cn/blog_migrate/a5b2f6fd50ecb8613eb4b0ffe8cab0a5.jpeg)
在刚分手的时候(也就是第t天,对应曲线斜率最大的地方)送甜品带来的好感激增度是最高的,再往后虽然随着相互之间越来越熟友谊持续升温,但是增长率下降了啊。而且到后来可能被其他人追走了,这个函数还只在一定期限内有效。
(3) 最近项目要加班,不过好在加班费是按小时(可以有分数)算的,那么当天的工资,就应该是这样算的。它的激活函数可能是这样的,x是工作时长。
![4e5cce6f336224f0aebdf03c8f5c6ea7.png](https://i-blog.csdnimg.cn/blog_migrate/e9d6f9639ebe0c0f15eaa34f7e100570.jpeg)
形状长这样,超过一个阈值后是线性增加的,低于阈值则是常量。
![da46bddb8285ea2a684898c3a1f45c2a.png](https://i-blog.csdnimg.cn/blog_migrate/dccf67b683090a8f332cc19ad181af0f.jpeg)
(4) 不是单身狗?OK你是有老婆的人,那么下班回家陪老婆看电视总需要吧。不过到底陪不陪看,是不是陪就一定能得到老婆大人喜欢,这个可能是个周期性质的东西。
假如x是当天日历,那么激活函数可能是这样。
![39d2e8937ee7a248984a5f7c5bbbffb1.png](https://i-blog.csdnimg.cn/blog_migrate/dcf1d7944fcfb20a6071656f59cae1db.jpeg)
![5cb458c1a32f40482405398084fe95b8.png](https://i-blog.csdnimg.cn/blog_migrate/bb31114c7ea5e12d1390325f7f8a4e66.jpeg)
这么想想,是不是感觉激活函数无处不在,上面的这几种都是有正儿八经对应的激活函数的。
回转正题,之所以需要激活函数,从生物学上来说,是因为人脑的细胞接受刺激从而产生活动,首先需要一定的阈值,没有达到阈值,几乎没用。而不同的刺激产生的输出也是不同的,达到一定值后就饱和了,再加大也没用。
作为模拟人脑的人工神经网络,自然是需要某种机制来模拟这一种活动,这便是激活函数根本性的由来。
02 激活函数到底有什么用
一个复杂的神经网络,是有许多层的,其中最基本的单位便是神经元。
一个线性神经元,输入x输出y的变换关系如下。
![f1aa101d0ac4184f06da82d7ad80ecc9.png](https://i-blog.csdnimg.cn/blog_migrate/8a3f0ae2dbd8ff5f9d5d17c8d6ac9325.jpeg)
可以看到输出y与x是一个线性关系。如果再增加一层,把y作为中间层,输出为z呢?
如下:
![898db55a94a6fd83d7502b41d6bed833.png](https://i-blog.csdnimg.cn/blog_migrate/3065a6957a093088eb784306dac49c58.jpeg)
![d46112aa08574734d0396dc58fa0ab7c.png](https://i-blog.csdnimg.cn/blog_migrate/15b044b7df0b323552dd29e3c1698864.jpeg)
可以看出,最终的输出z仍然与x是线性关系,也就是说这样堆叠下去,永远都是线性关系。
人们期望神经网络可以模拟任意的函数,怎么可能用一个线性函数来完成呢?所以才会在线性神经元的输出后添加非线性的函数,添加的越多,变换自然就越复杂了。
而不同的非线性映射函数的选择,就是激活函数的研究课题了。
03 各种激活函数
https://en.wikipedia.org/wiki/Activation_function
关于激活函数的种类,有三这一次就偷个懒,大家可以去wiki 百科上面看,非常的详细,下面摘录其中的一些。
![80bf85052298cb582042b25a7718f815.png](https://i-blog.csdnimg.cn/blog_migrate/0f6d720580cd7c3681fb0fb4ccc88950.jpeg)
这些人工设计的激活函数有这么多,那么什么激活函数最好,是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及其变种类似,看看图就知道了。
![22b6218243c49227a80f97d80506e875.png](https://i-blog.csdnimg.cn/blog_migrate/44388cd22b293a54d4854ef93375cab4.jpeg)
顺便说一下该方法做实验时的一元函数和二元函数的搜索空间:
![cc7be3e89f517fdc14b12a6bc9efb8d0.png](https://i-blog.csdnimg.cn/blog_migrate/6cd47debc076ddea29a9848df9b396f0.jpeg)
已经覆盖我们能想到的一些简单的函数了。
类似地也有其他的研究人员通过遗传算法学习到一些新的激活函数,包括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.
深度学习各个维度的理论正处于全面被研究中,如果你想有所建树,那么必须要深入思考以前那些看似习以为常的东西,激活函数就是一个例子。
![57cbf7077cadb192c9dab616f4429e39.png](https://i-blog.csdnimg.cn/blog_migrate/c9d48851e8d1197018feea5f0417cb9e.jpeg)
AI白身境系列完整阅读:
第一期:【AI白身境】深度学习从弃用windows开始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】学AI必备的python基础
第四期:【AI白身境】深度学习必备图像基础
第五期:【AI白身境】搞计算机视觉必备的OpenCV入门基础
第六期:【AI白身境】只会用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】学深度学习你不得不知的爬虫基础
第八期: 【AI白身境】深度学习中的数据可视化
第九期:【AI白身境】入行AI需要什么数学基础:左手矩阵论,右手微积分
第十期:【AI白身境】一文览尽计算机视觉研究方向
第十一期:【AI白身境】AI+,都加在哪些应用领域了
第十二期:【AI白身境】究竟谁是paper之王,全球前10的计算机科学家
AI初识境系列完整阅读
第一期:【AI初识境】从3次人工智能潮起潮落说起
第二期:【AI初识境】从头理解神经网络-内行与外行的分水岭
第三期:【AI初识境】近20年深度学习在图像领域的重要进展节点
第四期:【AI初识境】激活函数:从人工设计到自动搜索
第五期:【AI初识境】什么是深度学习成功的开始?参数初始化
第六期:【AI初识境】深度学习模型中的Normalization,你懂了多少?
第七期:【AI初识境】为了围剿SGD大家这些年想过的那十几招
第八期:【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?
第九期:【AI初识境】如何增加深度学习模型的泛化能力
第十期:【AI初识境】深度学习模型评估,从图像分类到生成模型
第十一期:【AI初识境】深度学习中常用的损失函数有哪些?
第十二期:【AI初识境】给深度学习新手开始项目时的10条建议
AI不惑境系列完整阅读:
第一期:【AI不惑境】数据压榨有多狠,人工智能就有多成功
第二期:【AI不惑境】网络深度对深度学习模型性能有什么影响?
第三期:【AI不惑境】网络的宽度如何影响深度学习模型的性能?
第四期:【AI不惑境】学习率和batchsize如何影响模型的性能?
第五期:【AI不惑境】残差网络的前世今生与原理
第六期:【AI不惑境】移动端高效网络,卷积拆分和分组的精髓
第七期:【AI不惑境】深度学习中的多尺度模型设计
第八期:【AI不惑境】计算机视觉中注意力机制原理及其模型发展和应用
第九期:【AI不惑境】模型剪枝技术原理及其发展现状和展望
第十期:【AI不惑境】模型量化技术原理及其发展现状和展望
第十一期:【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
第十二期:【AI不惑境】AutoML在深度学习模型设计和优化中有哪些用处?
----------------------------更多相关内容,请阅读以下资料----------------------------
模型解读系列目录:
【模型解读】从LeNet到VGG,看卷积+池化串联的网络结构
【模型解读】network in network中的1*1卷积,你懂了吗
【模型解读】GoogLeNet中的inception结构,你看懂了吗
【模型解读】说说移动端基准模型MobileNets
【模型解读】pooling去哪儿了?
【模型解读】resnet中的残差连接,你确定真的看懂了?
【模型解读】“不正经”的卷积神经网络
【模型解读】“全连接”的卷积网络,有什么好?
【模型解读】从“局部连接”回到“全连接”的神经网络
【模型解读】深度学习网络只能有一个输入吗
【模型解读】从2D卷积到3D卷积,都有什么不一样
【模型解读】浅析RNN到LSTM
【模型解读】历数GAN的5大基本结构
阿里天池模型结构设计与优化直播:
![95f1e3fd6231196b133b6a992df230e7.png](https://i-blog.csdnimg.cn/blog_migrate/b14c3035981bcc7982b9da2726bbd925.jpeg)
![5674235b6bcc197c4504cecf80471ec8.png](https://i-blog.csdnimg.cn/blog_migrate/f148bea6016169e92c120aad69ac3fd6.jpeg)
有三AI知识星球中网络结构1000变,每日更新【杂谈】有三AI知识星球一周年了!为什么公众号+星球才是完整的?mp.weixin.qq.com
![311a37c6a804714125ba4ba28e254fe1.png](https://i-blog.csdnimg.cn/blog_migrate/1c98a531c43333dac9110c3673428837.jpeg)
![ce350b6dc9e5c177f0a5e303c38f7e6f.png](https://i-blog.csdnimg.cn/blog_migrate/d7d2dbbd854596dcbc7738b9413271b9.jpeg)
![72e50fd81efb63d1284e0b65008033f2.png](https://i-blog.csdnimg.cn/blog_migrate/74013adcfaad286dcb49859de7960747.jpeg)
![5578cd32d7e968b6e47e2cd2f18ad3e1.png](https://i-blog.csdnimg.cn/blog_migrate/52eb15a702cdeee34e2d05683920411a.jpeg)
![c847c3cd007bc87601685c65a88ff119.png](https://i-blog.csdnimg.cn/blog_migrate/a7adcffc06fdbe9fa444bac4e4128fe4.png)
有三AI秋季划模型优化组【通知】如何让你的2020年秋招CV项目经历更加硬核,可深入学习有三秋季划4大领域32个方向mp.weixin.qq.com
![de2ccbdcee89babe8592173a1e4c044c.png](https://i-blog.csdnimg.cn/blog_migrate/2c1c7993b82408974cbda4b09b9c60e0.jpeg)
![183825ff4bf22e6d65dc6695701a79bc.png](https://i-blog.csdnimg.cn/blog_migrate/2959401123593d77dd526dc875197bad.jpeg)