我是不同意这个说法的。机器学习,尤其是深度学习,进步的基础是算力。巧妇难为无米之炊,有了算力才能谈别的。
就拿象棋的例子来说,深蓝的算力是11 gflops,而现在的一个cpu就有几百gflops,一个显卡有几千gflops。表面看深蓝每秒算6亿个位置,比现在每秒两万个多,但实际上评价每个位置花费的算力大大提升了。
谷歌训练alphago用了5000个比gpu更猛的tpu。就算你带着alphago的全套代码穿越回20年前,也打败不了人类。
每一次算法突破就像浮在海面上的冰山,海面下是几十年一点一滴的算力积累。大家在为英雄欢呼的时候,也不要忘了广大挖沙子,炼晶圆,刻芯片,水paper的人的贡献。毕竟,历史是由人民群众书写的。
对于周老师这个评价,只能呵呵了。
表面看,周老师的说法没问题,但是对于科学来说,则不同。
因为对于科学家来说,他面临的是无数问题无数解决方案。一个问题会否有答案,
一个方案会否有解决方案,知道这两个结果,比求结果更加艰难。
逻辑上,混乱猴子打字机可以完成世界所有的名著,你会采用这种办法写小说吗?
谷歌TPU硬件的意义就在于你10倍100倍地加快了iteration的速度。这在科学上意义远大于工程
或者技术上的意义。
现在人工智能的核心基本上在于硬件+数据+算法。
谷歌团队deepmind 的AlphaZero 的效果特别好,一个原因是把数据转换为拼硬件。
谷歌才有5000TPU,所以它产生数据的速度是一般中等公司的100倍,它的硬件是100倍。
这表明它可以在同样时间内比他人测试多1万倍的参数组合。
最近看围棋游戏leela 的全球众筹模式的仿alphaZero,全球几百个终端帮助它。(这类似一个中等公司的大小了)。但是,谷歌1小时的进步大约等于leela 20天。
也就是说,在谷歌已经指明了道路的情形下,重现A0,至少需要1年多。
谷歌完成现在这个A0,我们可以肯定说,至少是百次的循环吧。也就是说一般公司要有100年才能实现的突破,三个月实现了,这就是硬件的功劳。(真实中,这家公司根本不会花100年去试)
正确的说法就是:
1,人工智能的飞跃是硬件的升级带来的结果。
2,但是,这个飞跃的体现是算法的飞跃。
3,这个原因,是因为有了硬件飞跃,我们才能大幅度地调参,才能有算法的飞跃。
当然,某一天,我们的DL变成了白盒子,我们不再是黑暗中摸索,而是像牛顿力学下公式求解,
我们会觉得之前的摸索是瞎摸索吗?
(所以,牛顿力学是更高精度望远镜带来的飞跃。)
ps:今天看到一个微博,太恰当地描述了科学的发展。
证明费马大定理的数学家怀尔斯,对做数学的感受有段精辟的论述。这段论述的意义也许远超数学之外,如果你精通某种技能、学问等等,也许能感受到一点共鸣。
进入一间黑暗的大宅。你走进第一间房,一片漆黑,伸手不见五指。你蹒跚地摸索着,时常会撞到家具。你也渐渐熟悉了每件家具的位置。终于,也许在六个月或更长时间后,你找到了房灯的开关,把它打开。刹那间,光芒四溢,一切清晰可见了,你精确地知道自己的位置。于是你进入下一间暗室...
所以,发明一种100倍速度摸索的办法,比打开一个房间的灯意义大多了。
今天深度学习这么火,然而它所基于的神经网络、反向传播、梯度下降法的理论基础都是在上世纪80年代就完备了的,至于CNN、RNN、以及它们构造的各种网络结构,只是在这个基础上的优化,其余的就是把这些网络应用于具体问题时的系统方法设计了。
从理论基础的提出到AlexNet第一次展现出DNN的潜力,直到今天深度学习这么火,中间有近30年的gap,仅仅是大家突然都开窍了吗?
毕竟深度神经网络的计算需求太大,在10年前这样的计算量都不敢想,直到近几年随着GPU的通用计算能力被发掘,突然发现训练深度神经网络变成可行的了,而在很多问题上效果又出奇的好——在AlexNet拿下2012 ImageNet图像分类的冠军后,深度学习方面的研究就发生了爆炸式的增长。
所以说,深度学习这几年的发展,是硬件计算能力的提升->具体问题性能效果的提升->网络结构的提升->更广泛的应用->算法的改进,等各方面相辅相成的,在基础理论完备的情况下,计算能力就成为了关键的门槛,一旦迈过了才有了今天的各种进步。
而硬件的问题,不能说是全部,但对于某些特定问题,那的确是硬门槛。
有很多工作,尤其是偏向理论以及具体细分场景的应用的,的确不需要很高的硬件,有一块1080Ti往往就足够了。
但在一些更大、更传统的问题上,在大家都在做的问题上,那十之八九就是硬件的比拼。
同一个算法,Google跑一遍要1天,我跑一遍要10年。需要100次迭代尝试才能找到结果,那么我需要1000年。
有人说,硬件是爆炸式增长的,等到5年后10年后也许谁都能1天完成。没错,如果用现在的硬件跑上10年才能出结果的问题,那么我还不如先等到10年后的硬件,用一天就能完成。
然而,别人10年前就做出来的结果,你到10年后去复现一遍,这又能说明什么呢?过了十年各种技术的发展也跟硬件一样快,那时候早就改用更新的方法了(计算力需求也更大)。
话说回来,也正因为深度学习的基础理论大都还是30年前的东西,使之成为了现阶段深度学习存在的瓶颈之一,也是Hinton老爷子最近反复强调的,让大家不要过度依赖反向传播。
基于梯度求导的反向传播适用于神经网络这样处处连续的模型,并且要求整个网络拥有良好的梯度性质,才能成功地优化——这也是为什么ReLU激活函数、模型参数的初始化、batch normalization、residual connection、dense connection等trick在今天的深度学习里扮演了那么重要的角色。
之前,我尝试用VAE的思想,做了个encoder网络和decoder网络,encoder网络对输入进行编码,decoder网络对编码后的数据进行解码还原。但不同于VAE做的降维,我的encoder尝试在维度不变的情况下,通过将数据编码成离散的整数数据并最小化熵实现压缩,然后用decoder还原。
于是问题就来了,将数据编码成离散的这个操作的映射,是阶梯跳跃式的,梯度为0,这会导致梯度的反向传播失效,而使encoder网络无法被训练。
在传统分类问题中使用的sigmoid、softmax等“软性”阈值操作在这里是行不通的。因为一旦你的编码数据使用soft阈值激活以使梯度能流通,就会导致学习得到的网络把大部分信息都编码进这些soft的部分,导致最终test时使用硬阈值得到的离散数据无法实现还原。
而且这个任务和Binarized NN这类利用离散weight、activation加速的情况也不大相同。因为BNN仅仅是把量化作为一个引入的误差噪声来看待,所以可以在训练时用连续的映射来近似,以使梯度流通。而在这个问题中,量化是对数据编码的硬性限制,当网络试图去最小化rate和distortion的时候,就会自然地学会把大量的信息存放在仅有的连续的部分中,从而得到一个和理想的目标截然不同的最小化loss的结果。
总之在尝试了诸多方法后我都没办法让连续的神经网络去“理解”离散量化的数据,而离散量化的数据在传统的计算机科学里却是再常见不过的东西了……
我不太清楚有没有人做过这方面的工作,如果有的话希望能学习一下。
今天的神经网络处理的数据,往往限制于特定的采样维度(例如图像分类经常使用的224x224),数据的维度在模型中的变换形式又过于单一(例如stride/pooling按整数倍降维、deconv按整数倍升维),但是这些数据的量化、映射又被限制为连续的。
就如同看到AlphaZero等等各种大公司的论文以后感叹贫穷限制了我的想象力,这些限制的客观存在同样极大地限制了我的想象力。
看到有人在质疑我的这篇回答,那我就继续补充一些吧。
首先,其实我并没有真正在回答这个提问的问题,只是看到了这个问题,结合最近所体会到的(包括各种DL方面的新闻以及自己做东西时遇到的问题),发表了一点自己的看法而已。
至于到底是计算能力重要还是算法重要这种问题,本来就是个陷阱,不论偏向哪一方面总是有无数的反例可以来反驳,试图在这个问题上争个高下只是一种愚蠢的行为,一定要回答那只能用中庸的说法——都很重要。所以我在我的回答中说到了计算能力的问题,也说到了理论、算法的问题,并没有说谁更重要,反而它们是相辅相成的。
从历史的进程来看,今天深度学习的进步的确不是一蹴而就的,是许许多多的小的改进一步步积累之后,最终量变形成质变达成突破。
30年前反向传播的优化办法被提出,使得训练深层神经网络成为了可能。而后LeNet利用CNN实现了手写字符的识别,RBM的提出,ReLU的引入以及参数初始化方面的研究,这些无疑都成为了构筑今天深度学习大厦的基础。
Hinton、Lecun、Bengio等人在那个神经网络不受待见的年代,坚持在这方面一步步累积起一砖一瓦,他们的毅力和坚持无疑令人敬佩。
而同一时间,计算机快速的发展,GPU从专为游戏图形设计到开始支持通用计算编程,也悄然埋下了种子。
算法设计上的积累,加上对GPU计算能力的应用,最终成为了敲门砖。AlexNet在ImageNet比赛上的大获成功,一下子让这30年来的积累都得到了回报,并开启了新时代的大门。
而这之后的故事大家也都知道了,这五年来机器学习的发展速度可以说远超以前任何时候,对人工智能方面的话题,社会、媒体与资本的关注也达到了空前的高度。
所以,与其说是因为理论的提出、算法的改进、硬件算力的提升,倒不如说,社会的关注度才是最重要的——先是研究者群体这个小社会开始大量涌入这个领域,接着是IT公司,硬件厂商们也开始集中注意力往这方面发展,等到搞出了大新闻,结果就是媒体、全社会、各大资本甚至政府都涌进来,并吹出了所谓的泡沫……
AlexNet的成功得益于算法技术的积累,得益于对GPU计算力的应用,但他最大的成功在于用一个足够大、足够好看的结果,吸引了足够多的眼球,让众人都看到了其中的潜力,让众人都开始参与其中的研究,从而大大加速了深度学习的发展——虽然这样的说法可能很多人看着都不舒服,包括我自己,但这却是现实——毕竟,在技术发展这个全人类级别的优化问题上,更多的人、更多的资本就等于更高的计算力。
这个4年前的问题选择在这个时间点突然出现在我今天的时间线上显得非常 亦可赛艇!
Android是2008年初才发布,而Oracle在2009年就以7.4B$收购了Sun,是Google不够睿智吗?
非也!
1)如果Android没有如此成功,Java对于Google而言就是一坨shit,Google从来没有想到自己会站在一坨翔上面取得空前的成功,如果有算命的告诉Google的命中贵人是阿翔,它就是穿越回去吃也要把它吃下去,可惜历史不能假设!
2)Google一直有python基因,很多系统都是基于python的,你知道工程师主导文化的可怕性吗?这帮pythonic的nerd出于情怀或者节操或者叫清高或者叫偏执或者叫真爱,它说什么都不会去买Java的,“老子看不上”!谁知造化弄人,09年你对我爱答不理,18年老子叫你高攀不起88亿!(注:今天的Google在各种收购之后,Java服务的比重占的也非常大了,变成了一个杂合的技术栈,而官司也很可能打到高院,尚未定论)
3)Google一直有跟开源保持共存共荣共襄盛举的传统,它跟Mozilla做生意,赞助开源项目,捐赠Wiki,主张“不作恶”,简直就是一副乌托邦理想主义者的化身,圈粉无数(包含答主),像Java这种项目,它更可能的方式是烧一笔钱给它花,然后来几句“希望Java明天会更好”之类的废话,它根本就不曾想过有一个家伙抄底了,因为那时候Android根本就没有火,Google从来就没有想过Java也T-M-D算哪门子“底”?
4)Sun的主手人也是个技术型的,就是技术牛掰业务做的稀烂,当时怎么看Sun都处在夕阳,SPARC也是逼格满满业务下滑被Intel捣的稀烂,那个价格没有几家觉得划算的,幸好是Oracle这种剑走偏锋的收购了它,要是换一家公司收购多半就把Sun雪藏甚至捣腾碎了,Java也就没有今日风光了,而Google在坊间也有创业公司杀手的美称,也许这就已经是历史发展的最好结果了。
什么,你问我对于Oracle收购Sun和MySQL怎么看?
还能怎么看?好白菜都让猪给拱呢呗!
但是作为吃瓜群众,我最喜欢看大佬们掐架,Google与Oracle的这场官司绝对酸爽,大家保持关注,各家都有千百号律师,吵起架来想想都 亦可赛艇!学知识产权法/专利法/法理学的同学们千万不要错过,说不定两年后就能进教材作案例呢!
什么,你又问我Google应该怎么做?
靠,我有不是劈柴!按我的观点,Google这次是违反了Java的使用协议的(无意引战,定论的事情留给专业法官),不能因为体量大就以为能压死人,那可是在美帝,万事全靠律师一张嘴,怎么讲都有理!
大家还记得微软以前有个skydrive吗?在英国被判败诉了,最后也得改名叫OneDrive呢!Google有钱了不起啊,过来领罚单!
而Java的坑早早就埋在那里了,所以苹果直接一刀切:老子不支持,免得搞一嘴毛!Flash一身毛病,一刀切,老子不支持!
所以,我对Google的建议是:
这TM不是关乎技术,不是关乎信仰,不是关乎生态,不是关乎用户体验!
这TM关系到命!
什么?要我预测结果?
法官中间调停,你们俩和解,google把赚的钱按每部手机给Oracle付钱?什么你说太扯了?你每买一部Android,都要给微软钱,你造吗?Oracle就想躺着就把钱收了!