之前碰到的一个笔试题,当时做答时总感觉不太全面,现总结记录如下:
题目:画出relu函数和sigmoid函数的曲线以及一阶导数图像,并进行对比。在此记录:
(1)sigmoid函数:
(a) sigmoid函数公式:y = 1 / (1+e^(-x)) 一阶导数:y' = y(1-y)
(b) 曲线图像可自行查阅,网上有很多
(c) 从三方面解释sigmoid函数:
》图像本身:sigmoid函数值域为(0,1),当x逼近+∞或者-∞也即在饱和区域时,导数接近于零。只有在合适的区域,导数才具有一定明显的值;图像不是奇函数,即关于原点不对称。
》Forward Propagation :sigmoid函数引入了非线性因素,使得隐藏层的效果开始凸显,即不是简单的线性输入和输出,即区别于原始的感知机。
》Back Propagation:sigmoid的导数涉及到了除法,不可避免的会出现计算量较大的情况;sigmoid函数的导数在饱和区域时,导数较小,容易出现梯度消失(梯度弥散)的情况:即如果在一个DNN中,靠近输出层的梯度较大,参数更新快,会快速收敛,而靠近输入层时,由于梯度会慢慢变小,参数会更新较慢。
(2)tanh函数:
(a)tanh函数公式:y = (e^x - e^(-x)) / (e^x + e^(-x)) 一阶导数 y' = (1+y)(1-y)
(b)曲线图像同上所述:请自行查阅
(c)从和sigmoid函数对比的角度解释tanh函数:
》图像本身:tanh函数关于原点对称(与sigmoid的区别就是值域不同(-1,1)),tanh可是使得a的取值( z = wx +b, a = tanh(z) )有正有负,而sigmoid使得取值只能为正,这样是不好的,参见知乎:
https://www.zhihu.com/question/50396271?from=profile_question_card
》Back Propagation:并未解决sigmoid函数中的梯度消失的问题,计算量大的问题同样存在
(3)relu函数:
(a)relu函数公式:y = max(0,x) 一阶导数:x>0: y' = 1; x<0: y' = 0
(b)曲线图像同上所述:请自行查阅
(c)从和sigmoid函数以及tanh函数做对比的角度解释relu函数:
》图像本身:relu函数只有在自变量大于0的情况下,才会有值
》Forward Propagation & Back Propagation:正是由于relu函数简单,relu函数在进行计算时会比较快;而且relu函数使得一部分输入直接为0,这样使得一些输入神经元直接失效,就会造成网络的稀疏性,可以在一定程度上缓解过拟合;同时由于导数为常量,在一定程度上解决了梯度消失的问题。
注1:梯度爆炸:即权值W设置初始值不合适(或者是误差梯度积累),导致权值愈来愈大,造成网络的不稳定。
注2:relu函数如何实现非线性的:参考:
https://blog.csdn.net/tianguiyuyu/article/details/79875641
以后会多多增加图片的。
慢慢来-jony j