激活函数
饱和函数 sigmoid
当我们在做分类问题的时候输出的y应该是一个[0,1]之间的概率,而不是一个实数
例如 y= w * x +b 当 y>某一值时,它属于哪一类,概率为xx
所以我们需要把一个实数集映射到概率[0,1]中,这个时候我们引入了sigmoid
这里引用了logistic function(这是最具代表性的sigmoid,所以调用时候的sigmoid一般指它)
y = 1 / (1+e**x);

激活函数
以线性函数为例 y = w * x +b
假设有2层即可以化简为 y = w2 * w1 * x + w2 * b1+b2 ,这与一层的神经网络没有本质区别,所以我们加上了一个非线性的激活函数(relu,sigmoid)
,对张量中每一个值都进行非线性变换,使其不可展开(化简为与原相同形式),达到了我们增加神经网络层数的目的
理解: 没有激活函数的话,线性多少层都没用,因为化简后还是线性
这里又产生一个问题:为什么要把线性函数的神经网络层数增加呢?
目的:
- 1.神经网络深度增加是把线性的变为非线性的从而去拟合一些非线性的函数
- 2.神层次网络结构 权值更多,预测结果更精准
激活函数的特征(理解)
0x01非线性
即导数不是常数,这是为了多层神经网络不退化为单层神经网络,具有拟合更复杂网络结构的能力(参考线性层)
0x02几乎处处可微
可微性保证了优化中梯度的可计算性
0x03计算简单
0x04非饱和性
sigmoid,tanh在x足够大时接近饱和,所以会产生一些问题
阶跃函数所有位置梯度都为0,所以不适合作为激活函数,relu在x大于0时导数恒为1,不会饱和,在x<0时导数为0会饱和
(饱和即导数为0,梯度几乎无变化,会产生梯度消失的问题,也称为神经元死亡)
0x05单调性
导数符号不变。单调性使得激活函数梯度方向不会经常改变,让训练收敛更快(前一次加后一次减少,虽然也能慢慢逼近我们所想要的更优结构,但是会使训练次数极大增加,时间成本提高,这对于大规模数据来讲是极其不友好的)
0x06 接近恒等变换
即经过激活函数后约等于x,这样使得输出幅值不会产生显著变化,让网络结构更加稳定
(其实就是激活函数接近y=x但是不是非线性的,例如relu,其他激活函数在0-1之间与y=x极其接近,所以图片处理我们进行归一化操作,一方面是简化运算,一方面也可以使用更多的激活函数作为选择)
- 原因:
在深层次网络结构中如果激活后约等于1.01x会造成几万倍的结果差距(迭代几千轮数)
0x07参数少(无参数)
大多数激活函数都无参数,参数会让神经网络结构增加

浙公网安备 33010602011771号