神经网络需要**函数的原因:
数据的分布绝大多数的非线性的,而不加**函数的神经网络的计算是线性的,引入**函数,是为了在神经网络中加入非线性的因素,增强神经网络的学习能力,所以**函数的最大特点就是非线性。
为什么不加**函数的网络的计算是线性的?
单层感知机
在上图中的单层感知机中,y的表达式即为线性的,右图中的直线由 得到,可以看出单层的感知机只能进行线性的表达,对于非线性来说,单层感知机无法进行表示。
多感知器分类器
在上图中,我们想通过引入多层神经网络来解决非线性的问题,对于图中的出现的等式,我们对其进行变换处理,那么上述的等式等价于下面的等式:
从上图中可以看出,多层感知器的表达式仍然为线性的,仍旧无法表示非线性,可以预见,即使增添再多的隐藏层,也无法进行非线性的表示。
基于上述原因,我们通过引入**函数来为神经网络增加非线性因素,从而使神经网络能够进行非线性的表示,增强神经网络的表示能力。
饱和**函数介绍
右饱和: 当 x 趋近于正无穷时,函数的导数趋近于0,此时称为右饱和
左饱和: 当 x 趋近于负无穷时,函数的导数趋近于0,此时称为左饱和
饱和函数和非饱和函数: 当一个函数既满足左饱和、又满足右饱和,则称为饱和函数,否则,称函数为非饱和函数。
常见的饱和**函数: Sigmoid函数和tanh函数,饱和函数在神经网络中会出现“梯度消失”的现象,导致函数无法收敛。
常见的非饱和函数: ReLU函数,非饱和**函数会解决“梯度消失”问题,可以加快收敛。
Sigmoid**函数介绍
Sigmoid**函数如下图所示,可以看见,Sigmoid**函数已经引入了非线性
Sigmoid函数的输出结果范围为 (0,1),可以将网络的输入映射到这一范围内
Sigmoid公式以及导数:
Sigmoid曲线及其导数曲线:
Sigmoid**函数的特点:
优点:平滑、易于求导
缺点:
1. Sigmoid函数中存在 e 的计算(幂运算)和函数除法,会增大**函数的计算量
2. Sigmoid的导数如上述右图所示,导数的取值范围为[0,0.25],由于神经网络反向传播存在“链式反应”,非常容易出现梯度消失的情况,例如对于一个10层的网络来说,根据 ,第10层的误差相对第一层卷积的参数 的梯度将是一个非常小的值,这就是所谓的“梯度消失”。另外,Sigmoid函数非常容易进入饱和状态,当神经元的**在接近0或1时就会饱和,在这些区域中的梯度几乎为0,也会导致梯度消失。
3. Sigmoid的输出不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。
Tanh**函数介绍
Tanh**函数和Sigmoid**函数都属于饱和**函数,Tanh**函数的取值范围变为了(-1,1),也是一种非线性**函数。
Tanh函数公式以及导数:
Tanh函数曲线以及导数曲线
Tanh**函数的特点:
1. Tanh**函数的输出范围为(-1,1),相比Sigmoid函数而言解决了0均值问题(zero-center)
2. Tanh函数中仍然包含幂运算和除法运算,加大了计算量
3. Tanh函数仍然有饱和现象,仍旧会出现“梯度消失”的问题。
ReLU**函数介绍
ReLU**函数为非饱和**函数,也是一种非线性**函数
ReLU**函数公式: max(0,x)
ReLU函数图像以及导数图像:
ReLU**函数在 x 大于0时,导数数值为1,相比较 Sigmoid 和 Tanh **函数而言,解决了深层网络中出现的“梯度消失”问题,使得深层网络可训练。
ReLU**函数为非线性的原因:非线性即一阶导数不为常数,对ReLU求导,在输入值分别为正和负的情况下,导数是不同的,也就说明ReLU的导数不是常数,所以ReLU是非线性的。
ReLU在 x 大于 0 下,导数为1的特点:
导数为常数1的好处在于,在反向传播的“链式反应”中不会出现“梯度消失”的现象,梯度下降的强度完全取决于权值的乘积,但是在这种情况下可能会出现“梯度爆炸”的现象。解决方法(不太明白):一是控制权值,让它们在(0,1)范围内;二是做梯度裁剪,控制梯度下降强度,如ReLU(x)=min(6, max(0,x))
ReLU在 x 小于 0 下,输出为 0 的特点:
深度学习的目标:深度学习是根据大批量样本数据,从错从复杂的数据关系中,找出关键信息(关键特征)。换句话说,就是把密集矩阵转化为稀疏矩阵,保留数据的关键信息,去除噪音,这样的模型就有了鲁棒性。ReLU将x<0的输出置为0,就是一个去噪音,稀疏矩阵的过程。而且在训练过程中,这种稀疏性是动态调节的,网络会自动调整稀疏比例,保证矩阵有最优的有效特征。
ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大.
ReLU**函数的特点:
1. 相比 Sigmoid 和 Tanh **函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。
2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。
. 相比 Sigmoid 和 Tanh **函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。
2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。
3. ReLU的输出也不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。