前馈神经网络之自动梯度计算

计算机实现参数的自动梯度计算,方法可分为以下三类

- 数值微分
	- ∆x难以确定,太小会引起舍入误差,太大则增加截断误差,虽然实现非常简单,但实用性较差,计算复杂性高,因为需要为每个参数单独施加扰动,若参数数量为N ,则复杂度为 O(N^2)
- 符号微分
	- 一种基于符号计算(代数计算)的自动求导方法,用计算机来求解带变量的数学表达式,变量被看作符号,不需要代入具体的值,输入和输出都是数学表达式,包括基于规则的化简、因式分解、微分、积分、解代数方程、解常微分方程等运算
	- 编译时间长,需要专门的数学计算语言,很难调试,对于深层复合函数,输出的表达式非常冗长,形成表达式膨胀
- 自动微分
	- 一种介于数值微分和符号微分之间的方法
		-  数值微分强调一开始直接代入数值近似求解,而符号微分强调直接对表达式进行求解,最后才代入数值;自动微分将符号微分法应用于最基本的算子,比如常数、幂函数、指数函数、对数函数、三角函数等,将其代入数值,保留中间结果,最后再应用于整个函数
	- 灵活性高
		- 微分求解过程对用户是透明的,不需要专门的数学语言和编程,采用图的方式进行计算,可以做很多优化
- 计算图
	- 将复合函数分解为一系列基本操作,并以图的形式连接起来;是数学运算的图结构表示,每个非叶子节点代表一个基本操作,每个叶子节点代表一个输入变量或常量
  • 计算图图例:
    前馈神经网络之自动梯度计算_第1张图片
    前馈神经网络之自动梯度计算_第2张图片
  • 静态计算图
    • 在编译时构建计算图,构建好后在程序运行时不能改变;在构建时可以进行优化、并行能力强;灵活性较差
    • Theano和Tensorflow1.x
  • 动态计算图
    • 在程序运行时动态构建计算图;不容易优化,当不同输入所使用的网络结构不一样时,难以并行计算;灵活性比较高
    • DyNet,Chainer,PyTorch,Tensorflow2.x
  • 梯度消失
    • 误差在每一层传播时都要乘以该层激活函数的导数,当采用sigmoid型激活函数时,二者的导数的值域都小于或者等于1,在饱和区的导数更接近于0,这就会造成梯度的不算衰减甚至消失,使得整个网络很难训练

你可能感兴趣的:(深度学习,神经网络,pytorch,深度学习)