什么是可微分编程?
- 深度学习本质上就是一种可微分编程方式;
- 可微分编程制定了编程可重用结构;
- 如:卷积、池化、LSTM、GAN、VAE、Memory单元、Routing单元等。
反向传播算法目前仍然是无坚不摧的原因:
- 大规模分布式训练效率极高;
- 优化困难问题正在被逐步解决。
框架需要学习什么?
- 定义输入变量;
- 推导输出变量;
- 编译函数求解。
如何推导输出变量?
- 符号仓库(operators)
- 自动求导(AutoGrad)
- 优化器(Optimizer)
推导输出与神经网络
- 符号仓库
前向传播 - 自动求导
反向传播 - 优化器
梯度更新
Dragon与符号仓库
1、Data(数据) 2、Initializer(初始化) 3、Vision(视觉) 4、Recurrent(递归) 5、Activation(激活函数) 6、Loss(损失函数) 7、Arithmetic(算术)8、Normalization(正则化) 9、NDArray(多维数组)10、Control Flow(控制流)11、Misc(杂项)12、Cast(转换) 13、MPI(分布式)
符号仓库——卷积实战
1 | import dragon as dg |
自动求导
一对一求导
1
dx = dg.grad(y, x)
一对多求导
1
dx1, dx2,dx3 = dg.grad(y, [x1, x2, x3])
多对多求导
1
2dx1_y1, dx2_y1,dx3_y1 = dg.grad(y1, [x1, x2, x3])
dx1_y2, dx2_y2,dx3_y2 = dg.grad(y2, [x1, x2, x3])
优化器
- SGDUpdater
- NesterovUpdater
- RMSPropUpdater
- AdamUpdater
优化器——SGD更新实战
1 | import dragon as dg |