携手创作,共同成长!这是我参加「日新计划 8 月更文应战」的第21天,点击查看活动概况


在上几篇的文章,咱们介绍了Tensor的创立,Tensor的特点和算术运算,in-place操作和播送机制和运算,统计学办法、散布函数、随机抽样、矩阵分化,张量裁剪、索引与数据挑选、组合与拼接、切片,变形、填充&傅里叶变换和pytorch的简单编程技巧。

今天咱们来介绍autograd的办法,包含梯度与机器学习中的最优解,Variable is Tensor,怎么核算梯度


前言

Variable & autograd

autograd:自动核算梯度

也正是有了变量,也便是所谓的参数,咱们才可以进行求导的这样一个运算,在介绍Pytorch中的自动求导的机制之前,咱们先来回忆一下在高数中咱们之前学过的关于导数的根本的简单的概念。

  • 1.1 导数、方向导数、偏导数、梯度的概念

  • 什么是导数?

    • 导数(一元函数)是改变率、是切线的斜率、是瞬时速度
    • 在物理学中:
      Pytorch——autograd的介绍(上)
  • 什么是方向导数?

    • 函数在A点的无线个切线的斜率的界说。每一个切线都代表一个改变的方向。
    • 通常描绘为超平面或者曲面
  • 什么是偏导数?

    • 多元函数降维的时分的改变,比如:二元函数固定y,只让x单独改变,从而看成是关于x的一元函数的改变来研究
    • Pytorch——autograd的介绍(上)
  • 什么是梯度?

    • 函数在A点无数个改变方向中改变最快的那个方向
    • Pytorch——autograd的介绍(上)
    • 每一个谷底对应的点都是极值点,咱们在求最优解的时分,经常会堕入一个部分最优的问题,便是咱们并没有找到实在的最低点,找到了一个部分来说相对较低的一个点,这种便是一个部分最优解,也就极小值中的某一个值
  • 那么咱们在去找最大或者最小值的时分,怎么快速的使咱们的解快速的去收敛呢?

    • 这个时分咱们通常会沿着梯度下降的方向去寻觅最优解,所谓梯度,便是指在当时的点上回存在无数个方向,而改变最快的方向就界说为梯度
    • 所谓梯度下降法便是沿着梯度下降最快的方向去寻觅最优解的办法,而梯度在核算的时分通常会选用偏导数的方式,
    • 其间关于当时的函数,存在三个方向,这三个方向就对应这三个变量,在每个变量上改变最快的方向便是导数的方向,所以分别对x,y,z求导,假如有更多的变量,再对更多的变量依次求导,将这些偏导数放到一同,就构成了咱们在寻觅最优解的时分改变最快的方向,也便是所谓的梯度
  • 1.2 梯度与机器学习中的最优解

  • 梯度是在处理机器学习中经常用到的概念,梯度下降法也是在处理机器学习问题中经常会用到的手法。

  • 梯度描绘了函数曲线中某一点下降最快的方向,那么在机器学习中,咱们就期望沿着这些下降最快的方向去进行迭代和收敛找到算法的最优解

  • 在机器学习中,每一个算法的树立,都有相应的理论基础和优化函数,作为这个办法的优化目标,在机器学习中,对这些办法进行分类的话,可以分红:

    • 有监督学习:
      • 拿到的样本不仅包含了样本的特点,还有所谓的标签,标签便是想要猜测的成果,
      • 关于有监督学习便是,根据有标签的数据来处理构建出来的优化函数,它的参数使得最终咱们可以用这组参数以及咱们构建出来的优化函数来根据输入样本x来猜测出最终的标签y
      • 常见的算法LDA、SVM、deep learning
    • 无监督学习:
      • 咱们在学习的时分是没有标签y的,只要样本x,常见的算法便是聚类、PCA
    • 半监督学习
      • 弱标签(标签是不准确的)
      • 伪标签(有可能有错误的标签或者是通过聚类获取的标签)
      • 一部分有标签,一部分没有标签
      • 介于有监督和无监督之间
      • 在大数据的环境下,去获取有标签的数据本钱是非常高的,假如通过一些半监督的手法,将大数据使用起来,假如可以达到一个比较好的效果,那么不管是在学术界仍是在工业界,奉献都是非常大的
  • 优化的目标:

    • 找到参数w,通过f(w,x)猜测出的成果,使得它和标签y尽可能的挨近,
    • 咱们很难保证它是百分百挨近的,由于咱们在采集样本的时分,本身就会有一些偏差,
    • 或者它最实质的特征有可能是拿不到,那么咱们就很难保证猜测出来的y和实在的y百分百共同。
    • 这种共同性在数学上就描绘为loss
    • loss = |f(w,x)-y|
    • 最优解的方位便是loss最低的方位
    • 咱们沿着下降最快的方向不停的调整咱们的点,最后就可以最快的找到loss的最低点。这个点便是导数为0的点。假如这个函数是没有办法求导的,那么咱们就可以用到梯度下降
  • 1.3 Variable is Tensor

  • 每个tensor通过requires_grad来设置是否核算梯度

    • 默认是False,True是核算
    • 用来冻住某些层的参数
  • 1.4 怎么核算梯度

  • 链式法则:两个函数组合起来的复合函数,导数等于里边函数带入外函数值的导数乘以里边函数之导数

下一篇文章将介绍autograd中的几个重要概念

Pytorch——autograd的介绍(上)