3D机器学习(5):梯度下降法学习

跟風遠走 提交于 2019-11-29 16:28:15

1.三种激活函数

  • torch.sigmoi=F.sigmoid

    函数
  • torch.tannh=F.tanh

    在这里插入图片描述
  • torch.relu=Frelu

    在这里插入图片描述

2.典型的loss函数:mean squire error

  • MSE=mean squire error=均方差:∑(y-y预测 )^2,这里norm会开根号,所以需要平方回去。F.mse_loss(y,y预测)函数可建立此类loss函数。

    在这里插入图片描述
  • 当需要求导时,需要提前对变量申明,因为默认是无需求导的,否则会报错:reuqire_gred=true

    在这里插入图片描述
    上图表示对loss函数mse求w的偏导,输出结果是一个数:2
    在这里插入图片描述

3.梯度下降法公式推倒

  • Softmax激活函数,归一化,适用于多分类问题。并不是按比例缩放,而是会把原来大的放的更大,
    在这里插入图片描述
    对softmax函数求导
    在这里插入图片描述

  • 1层单输出感知机的梯度推倒
    其中E=error=loss函数,使用的均方差方法计算。
    σ表示sigma激活函数,求和输出的x需要乘上σ才表示预测值,这里把x*σ=O。
    t表示target,是实际值,因此E=(o-t)^2,这里的1/2可以忽略,仅仅是为了消去求导后增加的2倍。
    对E求单个权值w的梯度,结果=(o-t)O(1-o)x,可以看出,求出的梯度形式非常简单。
    在这里插入图片描述
    推导出梯度后,使用更新公式,就可以更新w权值了。

  • N输出单层感知机的梯度推倒
    E=error=loss函数,继续使用的均方差方法计算。
    对E求单个权值wi的梯度,用函数autograd.grad(E,[wi])表示,仅Ok包含w,t不包含w,所以对Ok=x*σ求导,这里再分解成先对σ求导,再对x求导。
    在这里插入图片描述

  • 单输出多层的链式法则求导,梯度推倒:
    这里为了求得grad(E,[w1]),即中间插入了一个w2,则可分解为三个求导:grad(E,[w1])= grad(E,[O2]) *grad(O2,[O1]) *grad(O1,[x])。灰色的点表示x。
    在这里插入图片描述

  • 多输出多层梯度推倒:
    在这里插入图片描述
    先算倒数第一层的倒数,答案如下所示,并其中很长的多项式把简写为δ。
    在这里插入图片描述
    计算结果如下红色框
    在这里插入图片描述
    进一步缩写为最下行公式。可以看出,结果由三个部分组成。也可以简写为:梯度=Oi*δj
    在这里插入图片描述
    在这里插入图片描述

Torch.Optim.Adam([x],lr=0,001)可直接调用迭代函数

  • 到了这里,我们对DeepLearning就有了一个非常深刻的认识,而不是停留在函数拟合,函数拟合仅仅是非常肤浅的视角,从反向传播角度看,这其实是一个函数优化的问题。尽管实际做的时候不需要自己推到而是直接用封装好的函数,但是你会觉得心里有底,有信心看一些原理性的paper。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!