深度学习框架中的计算图和自动求导
之前一直都没有了解过底层的实现
在ai方面,如果每天都只是git clone 然后在本地跑通,这是远远不够的,正好最近在复习整理之前的知识于是把我认为重要的做了一个笔记
我们只要知道了原理才能走得更远
这里主要探讨pytorch
计算图
如上图,左边是我们需要求导的式子
右边是我们拿来求导的计算图
我们可以发现每一步都能由当前的一个新的字母替代原式中的表达式
于是我们只需要在每个黄色的节点求导乘然后都乘起来就可以求出最后对应我们所需要的导数了
(依据链式法则)
反向累计(当我们的模型需要更新参数的时候需要反向传递梯度)
在反向传播中我们从最后一层根据得到的最后一个值求前一层的导数
随后依次类推,再求前一层的导数,依次每一层的参数都能够得到更新
我们观察一下(正向传播,反向传播的复杂度)复杂度
这也是为什么需要显存大的GPU来训练,因为要存下来每层正向传播的值,来进行后续的反向传播
代码实现(pytorch)
import torch
'''
任务
对y=2*x的转置*x求导
'''
#创建一个tensor张量
x=torch.arange(4.0)
x