PyTorch入门实战教程笔记(十):梯度相关操作1

PyTorch入门实战教程笔记(十):梯度相关操作1

梯度概念

梯度也就是所有自变量偏微分的向量(而不是标量),与导数不同,梯度有方向还有大小,反应朝某一方向梯度变化的大小,可用下式表示,例如,z = y2 - x2 ,其梯度为▽z = (-2x, 2y), 在(0,0)处的梯度为(0, 0), 在(1, 1)处的梯度为(-2,2)。
在这里插入图片描述

用梯度找极小值解

PyTorch入门实战教程笔记(二):简单回归问题中,我们讲过通过每次更新下式函数的参数,函数参数的当前值减去一个梯度的方向(前面乘以一个学习率),通过反复迭代更新,可以帮助函数找到一个比较合适的极小值的解,我们再来回顾一下,如下式:
在这里插入图片描述
我们看一个一维的可视化过程,函数f(x)= x2 sin(x), 其梯度仅与x有关,在2.5处,梯度为-10,如果2.5直接减去-10,那么就会到达12.5的位置,超过了局部最小值(x=5左右),这就有问题了,所以我们要乘以一个learning rate(学习率),假设为0.005,那么下一个x 为2.5 - (-100.005) = 2.6, 这样让它一点一点的更新,逐渐到5的位置(梯度为0,也就稳定了),具体如下图:
在这里插入图片描述

常见函数梯度

  1. y = xW + b ,其中x为感知机的输入,W, b 为参数,那么y对W的偏导数为x,y对b的偏导数为1,则梯度▽(W,b) = (x, 1)
  2. y = x W2 +b2 那么y对W的偏导数为2xW,y对b的偏导数为2b,则梯度▽(W,b) = (2xW, 2b)
  3. y = xeW + eb 那么y对W的偏导数为xeW,y对b的偏导数为eb ,则梯度▽(W,b) = (xeW, eb )
  4. f = [y - (xW + b)]2 ,线性感知机的输出和真实label之间的均方差,即单层感知机在使用均方差的度量的loss的梯度。计算如下:(即对初始值的(W0,b0),能够推出(▽W0,▽b0),然后乘以学习率,即可进行更新)。
    在这里插入图片描述
  5. f = ylog(xW+b), 求解梯度结果如下:
    在这里插入图片描述

激活函数及其梯度

  1. 激活函数Sigmoid
    最初的神经元,科学家根据青蛙的神经元做了深入研究,发现青蛙的神经元有多个输入(比如x0-x2),中间的结果为这几个输入的加权和,但是响应值并不是一个线性的输出,而是大于某一阈值才会输出一个固定的响应值,即阶梯函数,结构如下所示:
    在这里插入图片描述
    可以发现,这个激活函数,不可导,为了解决不可导,科学家提出一个连续可导的函数:Sigmoid/Logistic, f(x) = 1/(1+e-x), 可以将(-∞, +∞)压缩到(-1, 1), 图像如下所示:
    在这里插入图片描述
    该函数求导过程如下:
    在这里插入图片描述
    可以看到,δ已知,δ对w的导数已知,计算过程是非常方便的,并且该激活函数可以把结果压缩到[0, 1], 而概率也是[0, 1], 刚好对应,但是有致命的也有,比如当中间过程比较大时,那么其梯度为零,造成长时间不能更新,即梯度弥散。torch的sigmod函数,运算如下,可以将[-100, 100]压缩几乎[0, 1]。
    在这里插入图片描述
  2. 激活函数Tanh
    Tanh激活函数可以有sigmoid变化得到,是[-1, 1]的区间,具体形式如下:
    在这里插入图片描述
    导数推导及代码效果torch.tanh展示:
    在这里插入图片描述
    在这里插入图片描述
  3. 激活函数 ReLU(Rectified Linear Unit)
    在这里插入图片描述
    ReLU形式简单,性能优良,实验证明非常适合做现在的深度学习激活函数,在x<0时,梯度为0,在x>0时,梯度为1,能够克服梯度弥散的情况,在pytorch中操作如下所示:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值