sunzhongkai588 / LearnDL

本项目为飞桨框架学习群的活动
23 stars 11 forks source link

Answers of DL_list #1

Open Liyulingyue opened 1 year ago

Liyulingyue commented 1 year ago

关于本Issue:

框架基础原理(必修)

方向 概念 参考资料
综合 深度学习框架 深度学习框架可以被看做是一个库,使用该库提供的API接口,可以快捷高效的构造、训练和使用神经网络。以numpy为例,使用numpy可以通过调用numpy中实现过的方法进行矩阵运算,如果不使用numpy,则需要写多个循环,以对两个矩阵的各个元素进行相乘或相加。深度学习框架对于神经网络的作用,与numpy对于矩阵的作用是类似的。
数据结构 Tensor 与数组这个概念没有差别。称呼的起源可能源于物理名词“张量”,对于一般开发者而言,只需要理解为数组在神经网络中的一种称呼即可。
算子(OP, Operater) 一个函数,例如卷积OP,调用卷积OP即可实现卷积计算。通常来说,可以认为OP是较为底层的实现,封装了一些通用性较高的函数;而API可以认为是较为上层的函数,调用OP
Kernel 比OP更小的函数单元,例如,一维卷积,二维卷积,三维卷积等
广播机制 矩阵的扩张策略。两个矩阵进行运算时需要保证两个矩阵具有符合要求的形状,如果两个矩阵的形状不同,广播机制可以将矩阵扩张为符合要求的形状。例如[1, 1]+[1, 2]=[2, 3],虽然[1]和[1, 2]形状不同,但[1]可以被扩张为[1, 1]从而使得[1]+[1,2]=[2,3]。
计算图 计算图(Computational Graph) 流程图
计算图控制流 -
计算图生成方式1:静态图 Unimportant - 对全部语句生成图
计算图生成方式2:动态图 Unimportant - 依赖于单一语句的算子优化/功能分发
静态图 声明式编程。即类似于C的一种编程方式:首先需要在代码中对变量和逻辑进行声明,然后编译并运行;静态图类似的,需要通过一些语句设定输入输出变量,然后统一地运行。
动态图 命令式编程。即更为贴合Python的一种编程方式。以x变量的赋值为例,在动态图中,可以通过x = paddle.uniform([1])创建变量,运行语句后,即可对x进行运算,并且实时获取运算结果;在静态图中,需要声明x,写入计算逻辑y = f(x),并通过run()或者其他api执行上述语句,才能得到运算结果。从最终来看,两者没有区分,但从计算的角度来说,动态图更加便于调试。
计算图调度 运筹规划,即对于给定的需求,适当的调整代码执行顺序,从而让程序运行的更快。
自动微分 数值微分 即记录相邻周期某一个神经网络中的元素的值,以差值作为该点的梯度
符号微分 类似于手动进行微分求导,参考matlab微分即可
自动微分 通过框架内部机制,将命令/代码进行拆解,并逐步求出结果
雅克比矩阵 unimportant,用于给出不同隐藏层之间的导数关系,除此之外似乎没啥用
飞桨自动微分机制 更适合称之为微分机制,而非自动微分机制。即计算时记录对应的结果,并计算对应的梯度
... ...

模型组网(待定)

工程实践(待定)

方向 概念 参考资料
Git git项目管理 -
CI流水线 -
优化 图优化
编译优化(硬件相关 & 硬件无关) 优化编译的过程/流程
混合精度训练 即部分参数精度16位,部分32位
Jit(just in time) 一种编译策略
部署 模型压缩 通过一些方式减小模型的大小,例如,将linear(8,4)减小为linear(8,2),但产生的效果非常接近,极为成功的压缩
模型推理(训练和推理的区别) 训练时需要进行梯度计算,推理则不需要
推理框架 类似于深度学习框架,一个简单好用的API库。通常,我们可以用相同的框架进行训练和推理,但出于更高程度的要求,例如需要推理速度非常快,则可以在训练和推理使用不同的框架。
... ...
分布式训练 分布式训练 即使用多个设备/CPU/GPU进行训练,用于提高训练效率。为什么分布式训练是个难点:以文档攥写为例,每个人都从头进行文档攥写,则过去了一段时间后,我们只能够获得一份文档,其他的文档都是重复性工作;因而神经网络在训练过程中,需要注重信息的交互,即梯度信息的反馈和综合。
Liyulingyue commented 1 year ago

@sunzhongkai588 孙师傅来看一下啦~我把一些感觉没啥必要&我不太懂的直接空着了哈哈哈哈

sunzhongkai588 commented 1 year ago

非常感谢张师傅的春节贡献~太猛了,是个很精简的概念介绍。 关于unimportant的部分,我个人感觉是需要斟酌一下。 雅可比矩阵我理解,在自己手动实现自动微分时,是需要实现相关运算的雅可比矩阵才能做反向(如乘法的雅可比矩阵) 另外计算图的生成方式1、2,我本意是侧重于静态图和动态图是啥,不过看你后面补充了静态图动态图的定义,问题不大。

a-strong-python commented 1 year ago

@Liyulingyue 张师傅把问题解答都写完了,那我们岂不是只能疯狂修文档,合入PR了

Liyulingyue commented 1 year ago

@Liyulingyue 张师傅把问题解答都写完了,那我们岂不是只能疯狂修文档,合入PR了

你可以解答一个你更喜欢的版本~

a-strong-python commented 1 year ago

@Liyulingyue 张师傅把问题解答都写完了,那我们岂不是只能疯狂修文档,合入PR了

你可以解答一个你更喜欢的版本~

不了不了,我还是乖乖修文档吧