周六下午,陈一然隨便找了把枪塞进后腰的枪套,开车去了斯坦福。
    coupa cafe就在斯坦福计算机科学楼的东侧,门面不大,里面挤满了拿macbook的学生,墙上贴满了各种学术海报和讲座通知。
    咖啡机蒸汽的声音和键盘声混在一起,颇具浪漫主义色彩。
    现在还没有网红打卡点的说法,但是毫无疑问coupa cafe已经有了这个潜质。
    陈一然推门进去扫了一圈,先看到了亚当·考特斯,和网上的照片一样。一头深棕色捲髮,整体穿著非常刻板印象,就差一个格子衫就可以完成硅谷的默认形象。
    令人惊讶的是,他身边坐了个四十岁左右的男人,是一个戴著无框眼镜的华裔面孔,正是学术泰斗吴恩达。陈一然本以为这次只会见到考特斯,交流几次之后才会见到吴恩达。
    毕竟先让下面的科研民工小博士去找人探路,看看好不好交流才学术圈常规。
    陈一然一边过去打招呼,一边在脑中和茉莉调侃了一句:茉莉,你的老师来了,甚至可以说是启蒙老师吧。
    【严格来说,我是基於你的大脑模型运行的,各种记忆也储存在你的大脑中,他不是我的老师,是你的。】
    这边吴恩达却是很热情,和陈一然確认了身份之后,主动开始自我介绍。
    “嘰里咕嚕咕嚕嘰里,咕咕嘎嘎,咕呱咕呱,嘎嘎噠噠,嘻嘻呼呼。”
    陈一然感觉自己头都大了,他能隱约中感觉出吴恩达说的是中文,但是吧,这奇怪的声调,这猥琐的腔调,这莫名其妙的转音,堪称灾难啊。
    陈一然大概愣了十秒钟,实在是不知道怎么回话,直接骂教授抹黑中国文化,会不会不太好?
    对面的吴恩达看了出来他的无奈,只好有点不情愿的切换回英文说:“抱歉啊抱歉啊,我这不是最近偶尔也自己练练中文,我考虑之后有机会可以去中国发展一下的,看样子不怎么成功啊。你有什么建议,哪里不好需要改?”
    陈一然麻瓜了,这怎么改,这整段都是乱码啊。但是,也不能驳了教授的面子啊,只能绞尽脑汁,硬著头皮夸了几句。
    “哪里哪里,还可以的,至少我听出来了是中文,声调上至少没有破音,再练练再练练肯定行的。”
    考特斯在边上有点无奈,非常想假装不认识自己导师,但是又怕再过十年也毕不了业,只好死命的憋著笑。
    吴恩达开始把话题转到正事:“感谢你周末还跑一趟,考特斯给我看了你的deepflow,我们组试跑了三个实验,gpumat的瓶颈全消失了。所以我直接跟过来了,有几个事想当面跟你聊。”
    “能帮上忙也是我的荣幸,我之前在网上看过您的课的,严格来说您也是我的老师。”
    吴恩达没有废话,直接从书包里掏出一个thinkpad,屏幕上打开了一份代码文件,准確地说,是好几千行matlab代码,中间嵌著零星的cuda kernel。陈一然看了两眼,基本上看不明白,全是各种矩阵操作的英文注释。
    “这是我们过去两年写的无监督特徵学习代码,quoc le和adam从2008年开始搭的框架。简单说就是,多层稀疏自编码器,局部感受野,一层自定义的归一化层。在gpumat上跑的。”
    他换了张图,是一个模型结构图。输入层从stl-10读图像块,往上叠了四层自编码器,每层有自己的稀疏约束,不是全连接的。
    “我想把这些全部移植到deepflow框架上。gpumat已经撑不住了,我们想赶neurips的截稿日,大概是九月初,现在七月中,按gpumat的速度,论文肯定赶不上。”
    “所以需要我帮您改什么?”
    “不是改什么,是你的框架里还缺三样东西。没有这三样,我们的模型移植不过去。”
    吴恩达拿了张纸,把缺的东西一个一个列了出来。
    “第一个,稀疏约束算子。我们的自编码器中间层有稀疏激活约束,反向传播的梯度计算跟普通全连接层不一样。deepflow现在只有基础的dense,卷积和池化这三个算子,没有这个。
    第二个,自定义感受野。我们的模型用的不是標准卷积。不是3x3的核在图上滑窗,是每个输出神经元固定连输入层的一块局部区域,而且不共享权重。
    第三个,白化归一化。我们对每层激活值做零相位成分分析白化,梯度要通过奇异值分解回传,这个跟现在任何框架里的都不一样。”
    吴恩达把thinkpad合上,非常期待的看著陈一然。
    “你如果能给deepflow加上这三个算子,我们整个组就能在两周之內把代码栈全部切过来。如果你加不了,我也不怪你,毕竟是开源框架,没义务给我们定製。
    但我们可能就得用gpumat硬撑过九月了嘍,可怜我们这些人的心血了,居然没有人帮忙,唉不帮忙的人真的是太无情了呢……”
    …………
    陈一然有点无语,但还是在心里问了一句:茉莉,这三个东西你搞得定吗。
    茉莉的回答很快:【稀疏约束的反向传播是一层自定义梯度的链式求导,十几行cuda加几十行python包装。感受野是个特殊矩阵乘法,本质上是个分块矩阵乘的变体。白化复杂一点,奇异值分解回传梯度需要数值稳定性处理,但也就是多写两百行的事。】
    陈一然明白了:懂了,你的意思是你都能搞定是吧,你这语气真够凡尔赛的。
    【並没有凡尔赛,不过確实不难。半小时。测试和跑分调参需要半天,但单纯把算子写出来,半小时就够了。】
    吴恩达和考特斯两个人看著他沉默的那几秒,大概以为他在评估工作量。
    吴恩达作为学术泰斗,脸皮也是足够厚的,开启了各种花式捧杀。
    陈一然赶紧抬起头说:“大致想了一下,应该没问题,今天晚上我就能给你。”
    “今晚?”
    “对,三个算子的cuda实现加python接口,今晚发到你邮箱。”
    “你確定吗?”
    吴恩达查了查眼睛一会的问:“我不是怀疑你的能力。但我们自己评估过,这三个算子如果让一个人写,从学习deepflow的扩展api到调试完,至少两周。加上白化的数值稳定性问题,保守一个月吧。”
    “哈哈,天才,总是异於常人的。”
    这句话说出来之后,他自己都觉得有点囂张。但问题不大,以后他还会震惊世界很多次,天才人设已经是必然的了。
    吴恩达把thinkpad的盖子合上了,想了下,做了个保证
    “如果你今晚能搞定,我们下周三的组会上你做一次demo。就在gates楼,我们实验室有四块特斯拉c2050。你带著新版本的deepflow过来,现场移植我们的模型,你的框架成功跑通。在neurips论文的工具段会被引用。”
    “好的,我回去儘快搞定。”
    陈一然回家路上很是开心,吴恩达可不是一般的学者,他的很多课程可以说已经成为了这个方向的基础课程。
    deepflow框架在他这里被引用进论文,几乎意味著马上就会被所有企业关注,很多企业会直接找人尝试运用。
    甚至,这应该也算吴恩达欠了他一个小人情,別的不说,以后招人的时候都容易很多。斯坦福相关专业的学生,哪个没听过他的课。甚至不是斯坦福的,又有哪个学过他的课呢。
    陈一然甚至刚才一度想,更深入的参与进实验,来博取一个署名。毕竟,按照学术惯例,工具和基础公选都会单独感谢和註明。做了工具,你只能说修了路,不能把比赛的成果也占据一部分。
    但是最后陈一然犯懒了,都已经財富自由了,哪还有那么大的动力奋斗,陈一然现在还坚持创业已经是顶级毅力了,换別的穿越者没准已经躺平享受人生了。
    到家中,还是固定的流程,冰可乐冰淇凌准备好,让茉莉全力出击。
    【第一个算子,稀疏约束。梯度链式求导的cuda实现,我们开始吧。】
    写了大概七八十行cuda,茉莉让他切到python文件,写了一层包装。然后第二个算子,局部感受野的矩阵乘法。茉莉说这个本质上是个分块矩阵乘,但要绕开標准卷积的核滑窗机制。
    最后四单个是最费时间的,白化归一化的奇异值分解回传,茉莉想了一会,设计了一个对角线小量正则化,用来防止梯度爆炸。
    茉莉確实没吹牛,这些工作在他这確实不算难。加上陈一然经过多次磨练,现在打字速度已经可以笔尖专业速记,不到半个小时,就搞定全部修改要求,陈一然发到了吴恩达留给他的邮箱。
    陈一然感觉,再过一两周,他的floweda应该就不是籍籍无名的小公司了。