ReLU激活函数:简单之美

ReLU激活函数:简单之美导语在深度神经网络中,通常使用一种叫修正线性单元(Rectifiedlinearunit,ReLU)作为神经元的激活函数。

大家好,又见面了,我是你们的朋友全栈君。


导语

在深度神经网络中,通常使用一种叫**修正线性单元(Rectified linear unit,ReLU)**作为神经元的激活函数。ReLU起源于神经科学的研究:2001年,Dayan、Abott从生物学角度模拟出了脑神经元接受信号更精确的激活模型,如下图:
fig1
其中横轴是时间(ms),纵轴是神经元的放电速率(Firing Rate)。同年,Attwell等神经科学家通过研究大脑的能量消耗过程,推测神经元的工作方式具有稀疏性和分布性;2003年Lennie等神经科学家估测大脑同时被激活的神经元只有1~4%,这进一步表明了神经元的工作稀疏性。而对于ReLU函数而言,类似表现是如何体现的?其相比于其他线性函数(如purlin)和非线性函数(如sigmoid、双曲正切)又有何优势?下面请各位看官容我慢慢道来。


简单之美

首先,我们来看一下ReLU激活函数的形式,如下图:
fig2

从上图不难看出,ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。可别小看这个简单的操作,正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。这里或许有童鞋会问:ReLU的函数图像为什么一定要长这样?反过来,或者朝下延伸行不行?其实还不一定要长这样。只要能起到单侧抑制的作用,无论是镜面翻转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。之所以这样定,或许是为了契合生物学角度,便于我们理解吧。

那么问题来了:这种稀疏性有何作用?换句话说,我们为什么需要让神经元稀疏?不妨举栗子来说明。当看名侦探柯南的时候,我们可以根据故事情节进行思考和推理,这时用到的是我们的大脑左半球;而当看蒙面唱将时,我们可以跟着歌手一起哼唱,这时用到的则是我们的右半球。左半球侧重理性思维,而右半球侧重感性思维。也就是说,当我们在进行运算或者欣赏时,都会有一部分神经元处于激活或是抑制状态,可以说是各司其职。再比如,生病了去医院看病,检查报告里面上百项指标,但跟病情相关的通常只有那么几个。与之类似,当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据

此外,相比于其它激活函数来说,ReLU有以下优势:对于线性函数而言,ReLU的表达能力更强,尤其体现在深度网络中;而对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。这里稍微描述一下什么是梯度消失问题:当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。


结语

以上便是我对ReLU激活函数的一些理解,在此感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注小斗公众号 对半独白



ReLU激活函数:简单之美

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 判断字符串是否正序倒序一致(判断回文字符串代码)

    判断字符串是否正序倒序一致(判断回文字符串代码)感觉部分朋友应该是在面试的过程中翻到了笔者的文章,笔者就不废话直接上代码了:判断是不是这种字符串:‘压力大力压’functionpalindrome(str){ letreg=/[\w\_]/g; letstr0=str.toLowerCase().replace(reg,””); letstr1=str0.split(“”).reverse().join(“”…

    2022年6月1日
    40
  • hi3516dv300芯片手册_Hi3516工艺

    hi3516dv300芯片手册_Hi3516工艺目前主流国产芯片为RV11XX、RK33XX、Hi35XX系列,本系列开启Hi3516系列的开发教程。

    2022年9月24日
    2
  • 循环移动数组元素

    循环移动数组元素//循环移动数组元素//一种大部分数据只移动一次的算法//方法://  将数据循环移动,可以直接计算出每个数据的最终位置,直接移动即可//分析://  这种算法基本可看做每个数据只需要移动一次//  但是每个数据移动的位置需要计算,算法

    2022年7月25日
    33
  • 百科知识题库_趣味知识竞赛题库及答案

    百科知识题库_趣味知识竞赛题库及答案.西印度群岛位于哪个大洋的西岸?大西洋2.七大洲中面积第二大的是哪个洲?非洲3.“知之为知之,不知为不知,是知也。”是古代的哪位大教育家对学生讲的话?孔子4.“不以规矩,不能成方圆”是出自古代哪位著名儒家思想家之口?孟子5.我国法律规定年满多少周岁就有选举权和被选举权?18岁6.我国民航法规定,乘坐民航班机年满多少周岁的人不能购买儿童票?12岁7.演唱《桃花朵朵开》的马来西

    2025年8月28日
    9
  • 软件开发-快递来了-开发第一天「建议收藏」

    软件开发-快递来了-开发第一天「建议收藏」今天是“快递来了”软件开发的第一天,大家大体上分配了今明两天的计划,这几天主要以安装配置安卓开发环境,学习安卓特性组件为主。今天,安装调试了AndroidStudio,深刻体会到了集成开发环境的优

    2022年7月1日
    46
  • java链表数据结构是什么_java 链表数据结构

    java链表数据结构是什么_java 链表数据结构首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了。下面直接进入正题:先要定义一个结点类,如下:Java代码publicclassNode{Nodenext;//下一个结点的引用Objectobj;//结点元素publicNode(Objectobj){this.obj=obj;…

    2022年5月27日
    34

发表回复

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

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