AI 框架基础技术之自动求导机制 (Autograd)

搜搜小姐姐 搜搜小姐姐
来源:互联网

0 前言

可以把神经网络看作一个复合数学函数,网络结构设计决定了多个基础函数如何复合成复合函数,网络的训练过程确定了复合函数的所有参数。为了获得一个“优秀”的函数,训练过程中会基于给定的数据集合,对该函数参数进行多次迭代修正,重复如下几个步骤:

1. 前向传播

2. 计算损失

3. 反向传播(计算参数的梯度)

4. 更新参数

这里第 3 步反向传播过程会根据输出的梯度推导出参数的梯度,第 4 步会根据这些梯度更新神经网络的参数,这两步是神经网络可以不断优化的核心。反向传播过程中需要计算出所有参数的梯度,这当然可以由网络设计者自己计算并且通过硬编码的方式实现,但是网络模型复杂多样,为每个网络都硬编码去实现参数梯度计算将会耗费大量精力。因此,AI 框架中往往会实现自动求导机制,以自动完成参数的梯度计算,并在每个 iter 中自动更新梯度,使得网络设计者可以将注意力放到网络结构的设计中,而不必关心梯度是如何计算的。

本文的内容基于我们自研的 AI 框架 SenseParrots,介绍框架自动求导的实现方式。本次分享将分为如下两部分:

● 自动求导机制介绍

● SenseParrots 自动求导实现

1自动求导机制介绍

从数学层面上看求导这个问题,又包括一阶导和高阶导,求导方式主要有:数值求导、符号求导、自动求导;其中自动求导又分为 forward mode 和 reverse mode,AI 框架中的自动求导通常基于 reverse mode。

reverse mode,即依据链式法则的反向模式,指在进行梯度计算过程中,从最后一个节点开始,依次向前计算得到每个输入的梯度。基于 reverse mode 进行梯度计算,可以有效地把各个节点的梯度计算解耦开,每次只需要计算图中当前节点的梯度计算。

基于 reverse mode 进行梯度计算的过程可以分为三步,以下列复合函数计算为例:

y=x1+x2

z=y*x3

1. 首先创建前向的计算图:

2. 然后计算前向传播的值,即y、z。

3. 基于该前向计算图,相应的得到反向计算图,在进行反向传播时,基于给定的输出z的梯度dz,依次计算:

● 以

●以

●需要注意的是,最后一个计算 "+=" 是一个 inplace 的计算,即以

由此得到了完整的计算图,并且完成了相关信息的关联,完整的计算图如下:

2.4 基于输出的梯度信息对输入自动求导

z.backward(torch.ones_like(z))

在基于动态图的 AI 框架中,反向求导过程通常是由上述的 .backward (梯度)函数触发的。SenseParrots 的反向求导过程,首先根据给定的输出梯度,更新最终输出的梯度值;然后对计算图中节点进行拓扑排序,获得满足依赖关系的 GradFn 的执行顺序;依次执行 GradFn 中所记录 Function 的反向计算函数,根据输出的梯度,计算并更新输入的梯度。

首先看一下上述例子,其中

4. 执行 GF2,以 GF3 计算之后的

5. 执行GF1,以

6. 依次执行 LeafGF1、LeafGF2。

7. 执行队列为空,反向求导过程结束,默认情况下计算图会被清空,非叶子节点的梯度信息清空。由此得到了需要的计算梯度。

3 招聘信息

SenseParrots 是商汤自研的面向工业级应用的通用人工智能训练框架,旨在解决业务模型生产过程中的实际问题,助力人工智能技术赋能产业,实现算法落地应用,有效衔接生产环境。

在 SenseParrots 团队里,你可以提升开发技术、探索前沿方向、认识一群优秀可爱的小伙伴儿~这里有值得探索又充满挑战的前沿技术,这里有耐心指导你的 Mentor,这里有志同道合、迎接挑战、力求突破的小伙伴儿,这里有支持鼓励你向前的 PM 小姐姐们!

来小 P 家吧,做最值得探索又充满挑战的前沿技术!

目前深度学习编译开发、大规模训练技术突破、深度学习框架开发、深度学习技术应用、模型部署(量化转换)、前后端、项目、产品、运营等等岗位的实习/校招/全职均在招募!

简历投递:parrotshr@sensetime.com

注:本文转载自知乎文章,已由作者授权转载,未经允许,不得二次转载。

原文链接:

https://zhuanlan.zhihu.com/p/347385418

相邻资料

阅读 下载数 0
栏目专题
user-avatar
人力资源
人力资源即人事,最广泛定义是指人力资源管理工作。
user-avatar
两性健康
两性是人类自身和繁衍的需要。
user-avatar
销售
销售是指实现企业生产成果的活动,是服务于客户的一场活动。
user-avatar
化学同步
化学(chemistry)是自然科学的一种。
user-avatar
JAVA
Java是一门面向对象编程语言。
名人专题
user-avatar
刘一秒
广受认可的中小企业家创业导师。
user-avatar
林伟贤
著名成功学励志教育专家。
user-avatar
周鸿祎
360公司创始人、董事长兼CEO。
user-avatar
梁凯恩
梁凯恩是来自中国台湾省的演说家。
user-avatar
雷军
小米科技创始人、董事长。