61

AI初识:激活函数-从人工设计到自动搜索

 4 years ago
source link: https://www.tuicool.com/articles/B7fY32v
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师 等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流 点击文末“ 阅读原文 ”立刻申请入群~

作者:全能言有三

授权转载自公众号: 有三AI

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

无处不在的激活函数

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

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

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

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

ZJBjuy2.png!web

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

iqAvIfA.png!web

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

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

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

reYvAru.png!web

ziABFjb.jpg!web

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

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

2a6vymr.png!web

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

uIFnuyq.png!web

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

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

BVZz2in.png!web

BR3myai.jpg!web

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

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

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

激活函数到底有什么用

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

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

yYNR7jE.png!web

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

如下:

qARvMnY.png!web

fimIzqn.jpg!web

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

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

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

各种激活函数

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

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

r6Jb6jj.jpg!web

这些人工设计的激活函数有这么多,那么什么激活函数最好,是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改进的差不多之后,激活函数的人工设计就没有这么多热情了。

自动搜索

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

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

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

BZBnyiz.jpg!web

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

vQRnAzE.jpg!web

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

类似地也有其他的研究人员通过遗传算法学习到一些新的激活函数,包括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.

-完-

点击左下角 阅读原文 ”, 即可申请加入极市 目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群, 更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流, 一起来让思想之光照的更远吧~

Yjqyyiq.jpg!web

△长按关注极市平台

觉得有用麻烦给个在看啦~    uE7RJjy.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK