1、神经网络技术发展
2、那么感知器怎么样能训练出权重呢?
首先,所有的权重参数都是随机的;然后根据一个标准【代价函数】,使用一些方法【梯度下降】更新权重,直到这个标准【代价函数】的值足够好;或者权重每次更新的值足够小。
3、梯度下降
梯度下降中的梯度指的是代价函数对各个参数的偏导数,偏导数的方向决定了在学习过程中参数下降的方向,学习率(通常用α表示)决定了每步变化的步长,有了导数和学习率就可以使用梯度下降算法(Gradient Descent Algorithm)更新参数了。
☞我们目标是求这个损失函数(误差函数)最小值时候对应自变量的值,也就是求曲线最低点自变量x的取值
步骤:想更新谁就对谁求导
例如均方差代价函数
1)对w求导:【省略系数】
得到的就是 w 的梯度;
2)更新w(a为学习率)(w需要增大的话梯度是为负的,-a*导数正好是正数达到增大的效果)
如果每次只走1cm,然后再停下来找方向,那么太耗时;如果沿着一个方向 奔太远,可能会错过最小点,这就是学习率(学习步长)。
4、反向传播
5、代价函数/损失函数
- Sigmoid
缺点:
容易梯度消失
在初始化的时候,系数不能取太大的值
收敛速度就会慢上不少了
-
(1)
在上图中容易看出,当中较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0(2)
Sigmoid导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4,通过两层后被变为1/16。不同的层次计算出来的梯度的大小不同,越靠前的层的学习速度就越慢。也就是,梯度消失的问题。 -
如果计算出来的wx+b的值太大,那么经过sigmoid函数处理的值接近于1,而会导致导数接近于0。所以,在初始化的时候,系数不能取太大的值。
因此,对于具体的参数 wi 而言,
因此,参数的更新变为:
所以,模型参数走绿色箭头能够最快收敛,但由于输入值的符号总是为正,所以模型参数可能走类似红色折线的箭头。如此一来,使用 Sigmoid 函数作为激活函数的神经网络,收敛速度就会慢上不少了。
- Softmax
- Tanh
- ReLU
- leaky relu