内容简介:国庆在家闲不住想干活系列……本篇的内容是陈天奇大佬今年春季大佬是上交 ACM 班的本硕,虽然目前还在 UW 读博中,但是在机器学习圈子里面已经有了很高的名望了,他的 MXNet 和 XGBoost 相信很多人就算没用过也肯定听说过(额,我就没用过…)。前段时间他发布的 TVM 也算是开启了深度学习和系统方面探索的一条新道路。
国庆在家闲不住想干活系列……
本篇的内容是陈天奇大佬今年春季 在华盛顿大学开的一门课 。
大佬是上交 ACM 班的本硕,虽然目前还在 UW 读博中,但是在机器学习圈子里面已经有了很高的名望了,他的 MXNet 和 XGBoost 相信很多人就算没用过也肯定听说过(额,我就没用过…)。前段时间他发布的 TVM 也算是开启了深度学习和系统方面探索的一条新道路。
课程介绍上讲的是这门课的目标是填上深度学习算法和系统的实现以及优化之间的 gap,粗略地翻了一下 PPT,后面也有比较多的篇幅是介绍 TVM 的,正是我想了解的!
没找到课程的视频,但是 PPT 可以在上面的课程链接或者 这里 找到。
下面的内容主要按照每篇 PPT 的整理:
Lecture 1: Introduction to Deep Learning
回顾了一下基本原理和发展历史。
机器学习的过程基本上就是 数学模型+评价指标+参数训练,深度学习则是模型特指各种神经网络。
具体主要涉及到各种不同的模型架构(CNN、RNN、各种变种),目标函数的选择和训练技巧,正则化初始化等等。
这些就不多记了。
Lecture 2 是个实验课,实践怎么搭网络。
Lecture 3: Overview of Deep Learning System
这一章差不多是大纲的性质,每一个小点后面都会分章细讲。
基本上所有的深度学习框架都是差不多这个结构,首先来看 User API 层:
这里举了个线性回归的例子来对比手写 Numpy 和框架代码的差别。基本上网络模型都可以比较方便地用一个计算图的结构来表达,节点表示运算操作,边代表数据依赖。
那为了方便用户写代码,一个框架也是一定要有自动求导的功能的(如果反向计算还需要手写那就太瓜皮了)。
然后是 System Components 层:
这里涉及到了首先是计算图的优化,比如一次运行的时候直接过滤掉用不到的图节点(Deadcode Elimination),内存分配方面的优化,图节点和实际计算设备的对应等等。
实际跑图的时候如果有多个设备或者多个工作线程,如何调度以及发挥出计算设备的并行性也是一个需要考虑的问题。
最下面的 Architecture 层:
目前用来支持 DL 的设备也有很多,典型的如 GPU,其他的加速芯片也是越来越多,不同的设备可能要写对应不同的代码,这部分要怎么优化?
现在最常规的做法是每一种不同的计算设备会有开发厂商自己提供支持库,但是这个对框架的开发者来说还是有一个要整合的过程。另外,如果系统中存在多种不同的计算设备,计算任务在多设备上要怎么分配和调度也会是一个很大的麻烦。
为了解决最后的这个问题,目前有一种 Compiler Based Approach,即整个 Architecture 层由一个 High Level Operator Description 加上 Tensor Compiler Stack 来统一解决。这就是之后要提到的 TVM 的设计思路了。
Lecture 4: Backpropagation and Automatic Differentiation
详细解释第三章中的自动求导。
计算机中实现求导这个操作主要有两种方式:基于符号的算术求导和直接用数值进行求导。
算术求导需要构建一棵符号表示树,然后根据各种算术上的求导规则来写公式。缺点在于:如果遇到特别复杂的函数,则需要推导的符号表示树也会很大;然后如果目标只是想要一个导数值,则保存一棵符号表示树就很浪费了;再然后就是这样做容易有误差(?为什么…按公式算不应该误差更小吗)。
数值求导则是按导数的定义做,直接对方程取极限:
$$ \frac{\partial f(x)}{\partial x_i} \approx \lim \limits_{h \to 0} \frac{f(x+he_i)-f(x)}{h}$$
实现起来特别简单,h 取个 1e-6 就差不多了,但是一般只用来检验求导结果用。
然后对于网络中每一层的反向部分,其实求导涉及到的都只是跟本层运算相关的内容:
上一层传下来的是 $\frac{\partial Error}{\partial z}$,再往下可以通过链式求导法则一直推导下去,而其他需要的则只是与本层运算有关的$\frac{\partial z}{\partial x}$ 和 $\frac{\partial z}{\partial y}$。
更详细的推导可见这里。
因此自动求导则是根据以上的规则来创建反向计算图的过程,伪代码以及结果如下:
自动求导构建完成反向计算图之后,完整的计算图可以接下来一起用作整体的图优化。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java遗传算法编程
Lee Jacobson、Burak Kanber / 王海鹏 / 人民邮电出版社 / 2016-12-6 / 49元
本书简单、直接地介绍了遗传算法,并且针对所讨论的示例问题,给出了Java代码的算法实现。全书共分灾6章。第1章简单介绍了人工智能和生物进化的知识背景,这也是遗传算法的历史知识背景。第2章给出了一个基本遗传算法的实现;第4章和第5章,分别针对机器人控制器、旅行商问题、排课问题展开分析和讨论,并给出了算法实现。在这些章的末尾,还给出了一些练习供读者深入学习和实践。第6章专门讨论了各种算法的优化问题。 ......一起来看看 《Java遗传算法编程》 这本书的介绍吧!