深度学习:随机梯度下降(pytorch框架)

一、梯度

1.1 什么是梯度?

梯度不同于导数(标量),梯度为矢量,既有大小又有方向
梯度的长度:反映了函数的趋势
梯度的方向:反映了增长的方向
如图所示,箭头表明了梯度的长度和方向
在这里插入图片描述

1.2 怎么求梯度?

在高中我们学过导数,对于大家应该能很轻松能算出函数的导数。上了大学后我们学到了偏微分。于是通过偏微分所组成的向量,我们便获得了梯度。如图所示
注:此图为马鞍面,很难找到全局最小值点
在这里插入图片描述
举个例子:如图所示的函数求它的梯度,我们将其组成公式后分别求偏微分和梯度
在这里插入图片描述

1.3 梯度的API

函数中第一个为自动求梯度,第二个为反向传播为了得到梯度信息
在这里插入图片描述

二、基本公式

如何找到极小值(最优解)?
公式: 极小值 = 当前值 - 学习率 * 梯度
左侧就是极小值公式

三、各类参数

3.1 initialization status

首先是将其初始化选择合适的初始点,由图中可以看出由不同的初始点去寻找最值点,以便于后续分类(类似于一个水滴从哪点最快的下落到达最低点)
初始化在这里插入图片描述
通过初始化,我们可以看到,不同的初始点利用梯度下降方法寻找到的可能不是最值点而是极值点,所以初始值的选择对于求得最值点是第一步重要的一个因素。可能利用后面的参数也会找到最值点,但是,选择合适的初始点会提升相应效率。

3.2 learning rate

学习率如果越小的话,所获得的最优解越好,这里面的学习率我们可以理解为步伐。通过在最优点左右徘徊,我们可以知道最优解的位置。所需的条件就是步伐要尽量小,才能做到在点的左右进行徘徊。一般步伐要取0.001为好
在这里插入图片描述

3.3 momentum

动量,作为第三个参数,可以理解为惯性。如果没有动量的话,一个点很有可能落到局部极小点,而不是最小点。如图所示:
一个点从第一列中初始点下滑,很有可能动量不足,变为第二列第一行中所示:在局部极小值附近徘徊。增加了动量后,则变为了第三列中下降到最优点的情形
在这里插入图片描述

四、激活函数

4.1 历史

曾经的激活函数,通过青蛙身上的神经元找到的灵感。激活函数并不是所有输入的累加和,而是找到一个阈值,得到一个阈值响应,通过大于阈值得到神经元的输出。
在这里插入图片描述

4.2 sigmoid函数

为了解决单层感知机激活函数不可导的情况,科学家提出了一个函数sigmoid/logistic(最大值接近于1,最小值接近于0),也就是说,纵轴响应比较小,慢慢接近小的状态。区域无穷的时候,慢慢接近1.。也就是将纵轴负无穷到正无穷压缩到(0,1)区间,如果长时间梯度保持不变,无穷的时候称为梯度弥散(长时间loss保持不变,因为导数趋于0)。
在这里插入图片描述

4.3 Tanh激活函数

这个函数在RNN循环神经网络中应用较多,不做过多叙述
在这里插入图片描述

4.4 Relu激活函数

解决了梯度弥散问题,作为现在主流的激活函数,大量的实验已经证明了Relu函数可以作为激活函数用来使用
在这里插入图片描述

五、损失

5.1 MSE(均方误差)损失

如图,第一行为MSE的损失函数,实际值减输出值的平方和。第二行为二范数
在这里插入图片描述
求MSE的梯度,如图:后面的f(x)求梯度主要和网络结构有关
在这里插入图片描述

5.2 交叉熵损失

交叉熵损失主要在类别的预测上有应用,我们将在logistics的文章中做详细的讲解,下图值给出了softmax激活函数的求导方法作为理论支撑
为什么要提到softmax?因为softmax激活主要在交叉熵损失中应用,将输出的结果通过公式表达成0~1的概率的形式,以便于更好的判断所属类别
在这里插入图片描述
在这里插入图片描述

六、总结

本文从梯度的概念引出了梯度的求得方法,pytorch中自动求梯度的API,利用梯度求极值的公式,公式中参数的意义。以及近些年文献中用的较多的激活函数sigmoid、Relu,同时介绍了相对应的损失函数,以及损失函数用在对应的位置。初次写稿,希望大家多多指出意见,共同进步,以后会经常更博。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值