第82章 教授VS猛男(爆梗1.5w 1/3求首订)(1/2)
第82章 教授vs猛男(爆梗1.5w 1/3求首订)
漆昊得出这个结论后,心跳加速。
为了验证他的想法,他假设一个標准的神经网络全连接层,其前向传播与反向传播的核心,本质上都是大规模的通用矩阵乘法,设输入矩阵————
经过半个小时的推导,漆昊发现整套训练流程里,超过90%的算力开销全部集中在毫无技术含量的矩阵乘加这种稠密线性运算中,而剩下10%左右的资源,才用於那些看似复杂的控制流操作。
“这简直是离谱他妈给离谱开门,离谱到家了。”
漆昊看著纸上的数据,忍不住低笑了起来。
cpu为什么要设计那么复杂的算术逻辑单元?
为什么要用上超过70%的电晶体面积去堆砌一级二级三级缓存?
为什么要有复杂的分支预测和乱序执行机构?
因为cpu是为了应对日常电脑使用中那些复杂控制流而生的!
它追求的是低延迟。
在半导体和计算机体系结构中,有一个不可违背的物理铁律,那就是单颗晶片的硅片面积和功耗是有限的。
在有限的硅片空间里,cpu为了追求更复杂的单线程处理能力,將绝大部分电晶体面积都让渡给了庞大的多级缓存,分支预测和复杂的乱序执行控制单元。
这就直接导致了一个物理上的致命局限cpu的计算核心数量极少。
哪怕此时市面上单颗顶级的伺服器级cpu,主流物理核心最多也只有8个,用cpu去跑神经网络,就像是面对一个需要搬运上亿块砖块的大型工地,手上却只雇了8个会微积分的教授一样。
这8个教授不管有多擅长微积分,他们本质只是8个体力没那么好的人,面对几乎望不到边的砖块,他们只能一砖一瓦慢慢挪动。
这就是最基础的物理问题,核心数量太少,並行吞吐量低得令人髮指!
可神经网络的训练,真的需要这些教授吗?
不需要!
矩阵乘法不需要做任何复杂的逻辑跳转,也不需要精细的条件判断,它从头到尾只存在一种简单重复的运算规则。
既然如此,那就不应该去请8个会微积分教授,而是应该去请更多会简单运算的肌肉猛男!
教授虽好,但让他们在这里发挥作用,就太大材小用了。
“大力才能出奇蹟啊,达瓦里氏。”漆昊不由得哑然失笑。
这种以绝对数量碾压一切的逻辑,不正是卡尔采夫在《计算系统与同步算术》中推崇的苏式暴力美学吗?
用一个统一的控制器,发出一条指令,让成百上千个微型算术单元在同一时刻,同步执行一模一样的乘加操作!
为了验证自己的想法,漆昊在网络上开始找文献来验证。
遇上没什么用文献,漆昊基本上看个重点就把它关了,然后继续看下一篇,这时一篇顶会论文进入了他的视线。
那是发表於2009年icml(国际机器学习大会)上的一篇经典之作,而一作和通讯作者的署名里,赫然写著史丹福大学教授机器学习领域大牛吴恩达的名字。
漆昊眼睛一亮,迅速点开文档,开始看这篇在当下还略显冷门的学术文献。
论文里详尽的数据和严谨的实验,正如一块完美的拼图,严丝合缝地印证了他刚才的所有数学推导。
按照吴恩达团队在论文中的阐述,cpu复杂的架构註定了其电晶体的大头被分配给了缓存和分支预测,这使得它用於实际计算的物理核心极少,在面对海量矩阵运算时並行的上限极低。
而gpu则是另一条完全不同的进化路线,它內部塞满了成百上千个轻量级的计算单元,这些单元可以在统一的时钟信號下,以同步算术的模式同时执行一模一样的矩阵乘加操作,在同等功耗下,其提供的单精度浮点算力对cpu堪称是碾压级別的。
论文里给出了一个重要的实验数据:
在训练一个拥有四层结构,上亿参数规模的深度网络时,如果老老实实地使用cpu组成的计算集群,整个训练周期长达数周,耗费的电费和时间成本令人窒息,然而当他们將代码重构,移植到单张英伟达gtx280显卡上后,gpu直接將这几周的训练时间,暴力压缩到了区区1天以內!整整实现了近70倍的效率跃升!
“70倍的提速啊————”
在当下,学术界为了把算法的精確度提升个百分之一,都能敲键盘把键盘敲出火星子,而这种直接在物理效率上拉开70倍差距的物理开掛,简直让人兴奋。
漆昊高兴过后,隨之而来的却是一个巨大的疑惑。
既然吴恩达教授早在2009年就用这篇顶会论文向全世界展示了gpu的威力,那为什么时至今日,陈工他们这些一线的工程技术人员,依然把用cpu训练神经网络当成约定俗成的標准答案?
为什么这项能让效率起飞的技术,如今依然只是停留在少数顶尖高校的实验室里,並没有在工业界和学术界得到大规模的认同与落地?
如果真的有用,不是应该早就商业化了吗?
总不能说资本眼瞎吧?
这样不合常理,不对,有坑!
漆昊脑子冷静了下来。
他现在得知道坑在哪儿。
有了方向的漆昊,搜索信息变得有目的了,很快他就梳理一些关键点。
如今的计算机视觉圈子,大家普遍崇拜的是手工特徵算子,像是sift、hog、lbp,然后再搭配一个数学上的支持向量机svm或者隨机森林。
在主流学者眼里,神经网络本身就是容易过擬合还需要人肉调参的黑箱子,没有海量的標註数据支撑,大家觉得神马深层模型都是浮云,自然也就没人愿意为了这个非主流方向去专门花时间折腾显卡了。
毕竟,gpu它目前只认识游戏画面,要它去训练神经网络,你必须教它,光是这一步,都要人老命了。
更重要的是,现在最好的gtx580显存才1.5gb。
所以,想要在1.5gb的显存限制下,既避开重新写原生cuda训练代码的坑,又要实现一定的机载视觉的实时计算,所有人都在这里卡住了。
如果全连接网络会导致参数爆炸,那就必须从数学上限制参数的连接方式。
空间局部性和权重共享,漆昊想了下,这不就是卷积神经网络嘛!
通过局部感受野和卷积核復用,可以將需要存储的参数量大量压缩到只有数万的级別,几个g的大小也同时被压缩,1.5g的显存好像也能装下!
可是,卷积计算在gpu里怎么高效率跑起来?
二维卷积需要在一个滑动窗口里不断做局部的乘加,如果用传统的c循环思路去gpu里写多重嵌套循环,gpu的线程束会发生严重的访存衝突,最后跑出来的速度可能连cpu都不如。
漆昊想到这里有些卡住了,他又只能在网上找神经网络和图像卷积相关的文献来看。
实验室里面的其他人此时其实因为课题快要结束的事,都鬆了一口气,坐在漆昊斜对面的李杰正悄悄把手移向滑鼠,准备点开刚刚更新的游戏,而隔壁工位的同门则在用手机刷著天涯论坛,嘴角掛著摸鱼人特有的安详微笑。
然而,他们很快就注意到了漆昊这边写草稿的动静。
李杰一慌,游戏图標硬是没敢点下去。
他偏过头,和旁边的同门师弟交换了一个惊恐的眼神。
“哎,漆神这是怎么了,不是已经解决问题了吗?”师弟努力小声问道。
“不知道啊?”李杰心里咯噔一下,他突然不敢继续心安理得地摸鱼了。
在科研狗的世界里,最让人胆寒的现象莫过於,大家都在玩,只有学神在疯狂看文献。
这种恐慌感一旦蔓延,杀伤力堪比一觉醒来,错过高考时间。
为了打探敌情,李杰悄悄站起身,假装拿著水杯去饮水机接水,在路过漆昊身后时,他偷感十足地飞快瞅了一眼。
只见那张草稿纸上,写满了各种推导公式,嗯,那些公式重重叠叠的,他看不出写的是什么,也怀疑漆昊是否也看得清楚。
回到座位上,李杰感觉杯里的白开水都变苦了。
他默默关掉了游戏窗口,从电脑里翻出一个马了很久英文文献pdf,开始尝试著看。
本章未完,点击下一页继续阅读。