2014年4月的雅安,大渡河的水声日夜不停,从山谷底部翻涌上来,和机房里几千台设备的嗡鸣混在一起,变成一种单调的、永不消歇的白噪音。
任少卿已经习惯了这种声音。
他甚至觉得,没有这个声音他反而睡不著。
九章基地的ai训练区设在主机房东侧,是去年底新开闢出来的独立区域。
顾屿当初承诺的两千张顶级计算卡早已全部到位。
其中一千六百多张卡正在日夜不休地爬取、清洗著西红柿小说、今日热点以及引力app的海量中文语料,那是为未来某个庞大计划储备的底层基建。
而任少卿面前的,是划给他视觉组专属的攻坚主堡。
三百二十张英伟达k40计算卡,整整齐齐码在定製的液冷机柜里,指示灯密密麻麻,绿光闪烁,远看像一面会呼吸的墙。
任少卿在这面墙前面蹲了快五个月。
他的皮肤晒黑了不止一圈,因为基地的食堂在另一栋楼,每天来回要走一段露天的山路。
雅安的紫外线不讲道理,尤其三四月份,太阳出来的时候毒辣得很。
他现在的肤色已经跟刚从中科大出来时判若两人。
更新不易,记得分享101看书网
但他顾不上这些。
此刻是凌晨两点四十七分。
训练区的值班间里,三台显示器同时亮著。
任少卿坐在中间那台前面,两个师弟一左一右。
左边的叫郑宇航,右边的叫陈立秋,都是他从西安交大挖过来的博士生。
准確说不是挖的,是他跟两个人分別打了四个小时电话,把雅安基地的算力配置报了一遍,对面就自己来了。
这年头搞深度学习的人,算力就是命。
“跑完了。”
郑宇航的声音有点抖。
任少卿没动。他盯著屏幕上那组数字,瞳孔里映著绿莹莹的光標。
imagenet验证集。top-5错误率。
5.08%。
五十层。五十层卷积神经网络。top-5错误率,5.08%。
他反覆確认了三遍训练日誌,又让陈立秋重新跑了一次验证脚本。数字没有变。
郑宇航从椅子上站起来,双手撑著桌沿,呼吸急促。
陈立秋摘下眼镜,用衣角反覆擦了三遍镜片,又戴上,又摘下来。
“少卿哥。”
郑宇航转过头看他,嘴唇哆嗦了一下,
“这个精度……人类標註员在imagenet上的平均错误率是5.1%。”
任少卿知道。
他当然知道。
他闭上眼睛,靠上椅背。五个月。
从去年十一月他正式入驻雅安基地开始算,到今天,一百五十三天。
事情要从头说起。
去年夏天在西安交大走廊里被那个顶著黄毛的少年截住之后,任少卿回北京犹豫了整整一周。
不是犹豫要不要去,是犹豫这件事到底是不是真的。
一个高中毕业生说自己手里有几千张gpu,说算力管够。
这种话放在2013年的中国,听起来荒诞得离谱。
然后他拨了名片上那个电话。接电话的是个叫林溪的女人,声音乾脆利落。
三天后他就收到了一份正式的offer,薪资是他在微软亚研院兼职收入的四倍,不含绩效和期权。
他坐火车到了雅安,下了站,一辆黑色比亚迪s6把他接进山里。
第一次走进机房的时候,他站在门口愣了將近两分钟。
几千张gpu。
那个黄毛少年没有骗他。
入职一个月后,他把之前在微软亚研院的那套改进型卷积网络搬了过来,在这边的算力下重新训练。
效果立竿见影。之前四张gtx780跑十二天的任务量,在这边不到两天就能收敛完毕。
算力充裕之后,他开始做一件以前想都不敢想的事。
加深网络。
卷积神经网络的层数越深,理论上能提取的特徵就越抽象、越高级。
但实际操作中,网络超过二十层就会出现一个要命的问题:梯度消失。
简单来说,训练信號从输出层往回传的时候,经过太多层的连乘运算,到了前面几层就衰减成了几乎为零的数字。
前面的层学不到东西,整个网络等於白深。
这个问题卡死了全世界所有试图做深层网络的研究者。
任少卿也被卡住了。
他试过各种补救办法。换激活函数,调学习率,加batch normalization。
有些有用,但都治標不治本,网络超过三十层之后精度就开始往下掉,跟没加深是一个样。
在连续失败了將近两个月之后,某天凌晨三点,他趴在键盘上半睡半醒。脑子里突然蹦出来一个念头。
如果不让梯度穿过所有层呢?
如果给它开一条捷径呢?
他一下子坐直了。
思路很简单。
假设网络有两层,输入是x,经过两层运算之后的输出是f(x)。正常做法是直接用f(x)往下传。
但他的想法是,不要让网络去学习f(x)这个完整的映射,而是让它只学习f(x)和x之间的差值,也就是f(x)-x。最终输出变成f(x)+x。
这个“+x”就是捷径。
就是残差连接。
它的意义在於,哪怕f(x)学废了,输出至少还有一个x兜底,不会比什么都没学更差。
更关键的是,梯度可以沿著这条捷径直接回传到前面的层,不用再经过所有中间层的连乘衰减。
梯度消失的问题,被这条捷径绕过去了。
他当天晚上就写了代码。
第二天跑了一个二十层的测试。
然后是三十层。四十层。精度不仅没有下降,还在持续攀升。