最近读到一篇来自慕尼黑工业大学的论文”A Tour of TensorFlow” , 内容比Tensorflow官方文档更全面深刻, 所以把自己的一些读后心得分享给大家. 做成两次博客. 下一讲会在不久后更新.
首先TensorFlow框架大名鼎鼎大家一定听说过,第一, 比较新,第二,是Google开源的大项目,来看看TensorFlow在历史上机器学习时间线:
TensorFlow是不是挺年轻?但是它的名气自发布以来没有下降的态势,相反,很多人把它称作机器学习界的“Android”。可见这个框架多么受人爱戴。
切入正题,TensorFlow是一个全面的可扩展框架,它试图能够支持任何机器学习,建模算法,而且它现在已经支持分布式计算模型。当然,想象空间还不仅这些,怪不得那些人叫它机器学习界的“Android”。
TensorFlow最大的亮点之一是它的抽象编程模型。它使用的流图计算框架是其他机器学习框架中很少见的。因而,执行模型,优化方式等等都和其他框架有所不同:
1. 流图计算框架
先上一张TensorFlow官网gif图,感受下:
机器模型在训练时,会有很多次迭代(比如10000次)。而每一次迭代,上图的演示就是一次迭代的过程。训练10000次,这个流图就要“流动”10000次。
接下来介绍流图中的重要部件:
操作节点
TensorFlow用流图表示一个训练过程不是拍脑袋凭直觉想出来的,很大一部分是因为性能考虑。记住:流图中的每个节点都代表一个操作。 这样做的好处是:任何计算都能表示成若干个节点的组合。如下面论文中图片:
如图,z节点就可以用在多个流图中重用, 而且,节点操作的抽象方便TensorFlow代码编写。节点操作一定会通过操作的内核代码,落实到指定的CPU或者GPU上的。
Tensors
官网中对“Tensors”的解释是可以看做一个数组。其实Tensor就是流图中的边,数据要“流”过边,就需要适合这个”边”, 或者说”管道”大小. 比如这个边只能有维数为5的数据通过, 那么这个Tensor就是5维度固定. 这样设计的好处是, 维数固定, 运行效率就高. 而且, 在整个流图中, 也有复用的可能.
变量 Variables
同一个值在流图的训练过程中会不断地更新, 这个值就应该作为变量. 比如, 梯度下降中的步长, 集成学习中的权重, 等等… 经常要处理的变量, 在Tensorflow内部结构也比较特殊. 看下图:
当一个变量定义时, 其实有三个节点生成. v: 内存中一块自由的缓存变量, i: 用来初始化v的初始值, v’: 一个assign操作把i的值赋给v. 这样, v的值就不封闭在内存中, 而是通过v’提供给流图使用了.
会话 Sessions
会话中运行一些流图, 一个会话中流图变量和另一个会话中流图变量是隔离的. 这种通过对话跑流图的方式, 清晰地隔离变量, 利用已有的CPU, GPU等资源(Tensorflow内部有一套placement算法, 安排哪些节点操作应该跑在哪些CPU或GPU上).
2. 流图执行模型
Tensorflow在执行时需要考虑到效率问题, 特别是多机器, 多CPU,GPU设备的情况.
当我们写程序在一个Session中run一个流图. Tensorflow做的是, 从客户端client发一个run的请求给master端, 最后master端发送告诉哪些worker应该跑那些cpu和gpu. 这里的组件: client, master, worker 都是软件层面的. cpu, gpu是硬件层面的.
在实际的硬件传输值的过程中, TensorFlow内部还会自动添加一些节点操作:
实际场景中TensorFlow会添加send和recv操作节点. 用来在设备间加一层缓存机制. 当然, (a)是最原始的流图, 也可以使用, 但是不如(b)和(c)来的高效.
3. 流图优化
TensorFlow内部还会对节点计算操作做优化, 如下图把相乘操作简化为平方操作.
对于梯度下降求导, TensorFlow也有自己的一套, 用符号的方法增加操作节点去一步步链接中间值. 大家都记得高数中的复函数求导数吧 ? 就是一个个求下去, 还有许多中间值, 无论如何最后能求出最终值dz/dw:
第一讲的内容抽象编程模型就讲到这里了, 别忘了下次还有更精彩的第二讲: TensorFlow编程接口和TensorFlow可视化的深度理解, 不要错过哦~
参考文献:
https://arxiv.org/pdf/1610.01178v1.pdf
附论文下载:
David 9
Latest posts by David 9 (see all)
- 修订特征已经变得切实可行, “特征矫正工程”是否会成为潮流? - 27 3 月, 2024
- 量子计算系列#2 : 量子机器学习与量子深度学习补充资料,QML,QeML,QaML - 29 2 月, 2024
- “现象意识”#2:用白盒的视角研究意识和大脑,会是什么景象?微意识,主体感,超心智,意识中层理论 - 16 2 月, 2024