线性模型是机器学习中最基本也是最重要的工具,它们能高效可靠地拟合数据。然而在真实的情况下回遇到线性不可分的问题
我们不能用一条直线或者一个直面对数据进行分类,下面的数据就是线性不可分的
此时需要非线性变化对数据的分布进行重新的映射。对于深度神经网络,我们在每一层的线性变化之后叠加一个非线性的激活函数,从而获得更强大的学习与拟合能力
常用的激活函数
常用的激活函数有sigmoid函数,tanh函数和relu函数
Sigmoid激活函数的形式为 ,
对应的导数为
其中导数的推导过程如下:
Tanh的激活函数形式为
对应的导函数为
Relu激活函数的形式为
对应的导数为
Sigmoid和Tanh激活函数梯度消失的问题
sigmoid曲线图如下
Sigmoid激活函数的导数为
当x趋近于无穷小f(x)=0时 以及 当x趋近于无穷大f(x)=1时 它的导数的值都为0,造成梯度消失的问题
Tanh的曲线图如下
Tanh激活函数的导数为
当x趋近于无穷小f(x)=-1时 以及 当x趋近于无穷大f(x)=1时 它的导数的值都为0,造成梯度消失的问题
Relu和sigmoid和tanh的比较
优点
(1)sigmoid和tanh需要计算指数,relu只需要一个阈值就能得到激活值
(2)relu可以解决梯度消失的问题
(3)relu单侧抑制提供了网络的稀疏表达能力
局限性
relu的局限性在于在训练的过程中会导致神经元死亡的问题。这是由于函数导致负梯度在经过此relu单元的时候被置为0,而且此后不再被任何数据激活,流经该神经元的梯度永远为0,不对任何数据产生响应。
在实际训练中,如果学习率设置过大导致一定比例的神经元不可逆死亡,进而参数梯度无法进行更新,整个训练过程失败。
为了解决这个问题,人们设置了relu的变种LReLU
当x<=0的时候不为0 而是一个斜率为a的线性函数,a为很小的正常数,这样既实现了单侧抑制,又减少了负梯度置0的问题。
a的值需要较强的人工先验或多次重复训练以确定合适的参数值
prelu将a作为网络中一个可以学习的参数,进行反向传播训练,和其他参数一样参加优化。
rrelu(Random Relu)增加了随机化的机制,在训练的过程中作为满足某种分布的随机采样;测试时再固定下来。在一定程度上Random Relu可以起到正则化的作用。