激活函数与Loss的梯度

目录

一、梯度

1、导数、偏微分、梯度的区别:

2、梯度的作用:

3、梯度的优化方法:

4、凸函数(convex function):

5、局部极小值(local minima):

6、鞍点(saddle point):

二、激活函数

1、激活函数的点

2、常用激活函数

  1)sigmoid

  * sigmoid导数(derivative):

  * sigmoid用处:

  * sigmoid函数的pytorch实现

  2)tanh

  * tanh的求导推导过程

  * tanh在pytorch中的实现

  3)relu(Rectified Liner Unit,调整的线性流单元)

  * 被大量的实验证明,relu函数很适合做deep learning。

三、Loss以及Loss的梯度

1、MSE(mean square error):均方差

  * MSE求导

  * 使用pytorch自动求导

  1)法一:

  2)法二:

  * 注意w.norm(),w.grad(),w.grad().norm()的区别:

2、Cross Entropy Loss:

  Softmax:

  * softmax特点:

  * softmax求导:

  1)当i=j时

  2)当i ≠ j时

  3)综合

  * softmax在pytorch中的实现


一、梯度

1、导数、偏微分、梯度的区别:

  1)导数:是标量,是在某一方向上变化的效率

  2)偏微分,partial derivate:特殊的导数,也是标量。函数的自变量的方向,函数的自变量越多,偏微分就越多。

  3)梯度,gradient:把所有的偏微分集合成向量,是向量。

  梯度向量的长度代表函数在当前点变化的速率。

2、梯度的作用:

  1)作用通过梯度来找到函数的极小值

  2)如何找到极小值,通过以下公式:

  学习步长就是学习率。

  不断更新自变量,当偏导(梯度)趋近于0的时候,函数值也就趋近于极小值。

  3)举例:

3、梯度的优化方法:

  不同的优化方法具有不同的效率、准确率。有的快,有的准确率高。主要通过以下几个方向优化:

  1)初始化数据(initialization)

    初始状态的不同,对结果的影响可能有很大区别

    如果不清楚的话,就使用目前主流的初始化方法。

  2)学习率(learning rate)

    过大会导致数据不收敛,过小会导致计算量的增加。

  3)动量(monument)

    给数据一个惯性,当惯性达到一定程度后,可以减少数据陷入局部极小值的情况。

4、凸函数(convex function):

向一个碗一样,两点中点处,均值大于实际值,如下图所示

5、局部极小值(local minima):

局部极小值较多的情况的解决办法:

6、鞍点(saddle point):

  一个点,在某一方向上是极小值,在另一方向上又是极大值。如下图中红点所示:

二、激活函数

1、激活函数的点

  1)作用

  当函数值达到某一阈值后,激活函数将函数值设置为特定值(根据激活函数公式而定),从而达到激活的目的

  2)激活函数均不可导

2、常用激活函数

  1)sigmoid

  * sigmoid导数(derivative):

  * sigmoid用处:

   a)因为sigmoid输出的值是在0~1之间,所以适用于概率问题;也适用于图像的RGB问题,因为RGB值是0~255之间

  b)sigmoid的缺点:因为sigmoid函数在处于+∞和-∞时候,导数趋近于0,会使得数据处于更新非常缓慢(长时间loss保持不变的情况),即:梯度弥散问题。

  * sigmoid函数的pytorch实现

  2)tanh

  输出值在[-1, 1]之间

  在RNN里面用得比较多

  * tanh的求导推导过程

  * tanh在pytorch中的实现

  3)relu(Rectified Liner Unit,调整的线性流单元)

  * 被大量的实验证明,relu函数很适合做deep learning。

  因为:z<0时,梯度是0,z>0时,梯度是1。因为在向后传播时候,因为梯度是1,所以对于搜索最优解,梯度计算时候非常方便,也不会被放大和缩小,很难出现梯度弥散和梯度爆炸的情况。所以在神经网络中优先使用此函数。

  * relu在pytorch中的实现

三、Loss以及Loss的梯度

1、MSE(mean square error):均方差

   pytorch中mse的求解方法:torch.norm().pow(2) # 要记得平方

  * MSE求导

  * 使用pytorch自动求导

  1)法一:

  使用torch.autograd.grad()

  2)法二:

  使用mse.backward()

  * 注意w.norm(),w.grad(),w.grad().norm()的区别:

  w.norm()是均方差的平方根

  w.grad()是导数

  w.grad().norm()是导数的均方差的平方根

2、Cross Entropy Loss:

  Softmax:

  * softmax特点:

  1)输出的所有值的范围是0~1

  2)所有概率之和等于1。(注:sigmoid函数,所有概率的和一般是不等于1的)

  输出概率最大值的 索引。

  3)会将原有值之间的差距拉大。

  * softmax求导:

  1)当i=j时

  2)当i ≠ j时

  3)综合

  * softmax在pytorch中的实现

  上图中最后4行,分别表示:δp1/δai ,δp2/δai (i∈[0, 2])求偏导

猜你喜欢

转载自blog.csdn.net/weixin_40582034/article/details/129367929