When in doubt, use brute force.
"如果遇到困惑(的问题), 就使用蛮力. "
此话出自当年 UNIX 系统的发明人之一 Ken Thompson. 他的本意是, 程序设计中,简单粗暴的计算方法, 虽然可能计算量大, 但是便于实现和维护, 长期看, 还是优于一些精巧但是复杂的计算手段.
这句话常令我遐想起 1943年七月, 苏联和德国在库尔斯克的坦克大决战. 苏军八千多辆傻大黑粗的T-34 坦克, 以损失三倍于对手的惨重代价, 最终挫败德军三千多辆质量精良的虎式坦克集群.
有哲人对蛮力有另外一个诠释: "Quantity is Quality".
数量就是质量. 向数量要质量.
九十年代, 一个简单的神经网络数据培训的计算, 往往至少要花几天, 甚至几周的时间.
这对于算法的改进调整, 和应用开发, 都是一个巨大的瓶颈.
神经网络的研究, 呼唤着蛮力, 呼唤着来自计算速度,网络速度, 内存容量,数据规模各个方面的, 更强大的, 指数增长的蛮力.
(2)
这个蛮力的基础,其实在1993年就埋下了种子.
黄仁勋, 1963年出生于台湾. 1993年从斯坦福大学硕士毕业后不久,创立了 Nvidia.
Nvidia 起家时,做的是图像处理的芯片,主要面对电脑游戏市场. 1999 年Nvidia推销自己的 Geforce 256 芯片时, 发明了 GPU (Graphics Processing Unit, 图像处理器)这个名词.
GPU 的主要任务, 是要在最短时间内显示上百万,千万甚至更多的像素.这在电脑游戏中是最核心的需求. 这个计算工作的核心特点, 是要同时并行处理海量的数据.
GPU 在芯片层面的设计时, 专门优化系统, 用于处理大规模并行计算.
传统的 CPU (中央处理器) 芯片架构, 关注点不在并行处理, 一次只能同时做一两个加减法运算. 而GPU 在最底层的算术逻辑单元 (ALU, Arithmetic Logic Unit), 是基于所谓的 Single Instruction Multiple Data ( 单指令多数据流)的架构,擅长对于大批量数据并行处理.
打个最简单的比方, 如果有 1, 2, 3, .. 32 个数字, 你需要对它们进行计算处理. 传统的 CPU , 32 个数字要一个个按顺序依次计算.
但是 GPU 在最低层的ALU, 允许同时对 32个数字做批量处理.
一个 GPU, 往往包含几百个 ALU, 并行计算能力极高. 所以尽管 GPU 内核的时钟速度往往比 CPU的还要慢, 但对大规模并行处理的计算工作, 速度比 CPU 快许多.
而神经网络的计算工作, 本质上就是大量的矩阵计算的操作, 因此特别适合于使用 GPU.
(3)
这个速度有多快呢? Nvidia 480 GPU, 2010年的时候, 一秒钟可以显示十六亿个三角形, 一秒钟计算速度达 1.3 TFLOPS (万亿次浮点计算).
而2015年出品的 Nvidia Titan X GPU, 一秒钟可以达到 6.1 TFLOPS , 接近2010年的五倍. 其二手货的市价不到一千美元.
作为参照,人类的超级计算机,真正第一次突破一个 TFLOPS 的计算速度, 实际上也就是1996年底, 但其价格是几百万美元量级的.
2007年 Nvidia 推出名叫 CUDA 的并行计算软件开发接口, 使开发者可以更方便的使用其 GPU开发应用软件. 多家大学的研究者撰文表示, 对于特定工作, NVIDIA GPU带来的相对于 Intel 的CPU 的计算速度提高, 达到 100-300 倍.
Intel 技术人员2010年专门发表文章驳斥,大意是 Nvidia 实际上只比 intel 快 14倍,而不是传说中的 100 倍.
Nvidia 的 Andy Keane 评论: "老夫在芯片行业混了 26年了, 从没见过一个竞争对手, 在重要的行业会议上站起来宣布, 你的技术 *** 只是 *** 比他们快14 倍".
一个蛮力, 一个来自 GPU 的计算蛮力, 要在深度学习的应用中爆发了.
网友评论