分享
Deep Learning 的专家如此急缺,它难在何处?
不可否认,人工神经网络中有一些思想是很巧妙的。但正如SVM, Linear Regression, Decision Tree, Boosting Tree 一样,他们都有各自巧妙的思想,但数学并不复杂。通过具象来深入理解其原理和调参也并不复杂。常用的技巧有,train, predict,feature engineering,bootstrap 等等。机器学习作为一种计算机科学分支,其数学概念的复杂度低于统计学。机器学习用的是比较直观的想法。有许多trick,例如loss function, kernel,activation function, back propagation。那么,机器学习,或者深度学习,难点究竟在哪里呢?1 是数学基础的严格化?2 是代码结构的优化?3 还是在于发现一些新的trick呢?4 针对具体问题设计合适的模型,决定合适的参数?5 是否人工神经网络过于复杂,难以用传统手段分析,以至于我们还无法把握它工作的核心机制?求指教。–注:这个问题本身不错,但是原版的补充说明容易把讨论引向歧途。故稍作修改。
回复 ( 10 )
题主修改了问题的用语,因此我也附加一点正面答案。
修改之前的问题描述中的体现了一种理论至上的思维,然而这种思维恰恰导致了九十年代神经网络之冬。
科学是一个不断发展的过程。深度学习在现阶段对于其适用性的实践工作还没有走到尽头,正是需要由实验出发去寻找其适用性边界的阶段。等到足够的实验结果能够说明其适用范围,届时理论工作自然会逐渐出现和完善。这个规律在别的学科中也存在,例如物理在18-19世纪也经历过这么一个阶段,并且一定程度上天体物理、高能物理等在现在依旧处于这样的阶段。这一阶段性特点导致了深度学习研究和应用大致两方面的不同:
这两方面共同导致了目前深度学习人才出产率较低的现实。
偏离传统数学导向的、保守化的研究方法,培养人才变得困难
机器学习的传统理论主要围绕学习过程的泛化(Generalization)能力展开,然而有关泛化能力的理论都是以集中不等式(Concentration Inequality)为基础的寻求”上界的上界”的一个过程,其结果是一种保守统计学的结果。这种保守的统计学结果对于验证传统科学实验来提供可信区间也许是非常合理的,然而用于描述机器学习本身却往往因过于保守而失去了对于模型可行性的合理探索。这种思路导致很长时间(90年代和00年代)机器学习停留在线性分类器的研究中。在这个过程中虽然有例如Boosting算法、核(Kernel)方法等数学上非常漂亮的结果,然而不可避免地机器学习的应用性其实受到了不合理的限制。
深度学习在这方面有着截然不同的思路。尽管泛化能力是一个不可避开的话题,从事深度学习的人大多认为现有的泛化理论不足以描述模型实际应用时的平均状况。在符合科学方法论实验、观察、假设、验证、结论的过程前提下,深度学习的研究以追求实际测试数据集效果为核心,更为大胆探索可行的模型,并且从以神经科学、认知科学为代表的其它学科中寻求启发。这一特点使得深度学习的建模过程成为一个“勇敢者的游戏”,在许多可行的模型中寻找并验证某个有效模型需要一定的创造性,这并不是每个人都做得到的。同时,泛化理论也需要进一步发展来更加贴切地解释实际的应用。
深度学习更加关注“表达”的理论,即什么样的问题需要什么样结构的模型,以及什么结构的问题适合什么样的问题。这一点的理论目前基本处于几乎空白且初步开始的状态。到目前为止从数学和哲学上我们对于表达的基本理解受制于对现有智能体(人类)的模仿中,并没有什么更好的启发知识。这种困难可能最终同逻辑中的哥德尔不完备性定理(Gödel’s incompleteness theorems)以及物理中的拉普拉斯幽灵(Laplace’s Demon)带来的问题类似。如何在这样的条件下敏锐地发现适合表达某些问题的模型因此成为一项十分考验智力的工作。
理论的无效性和缺乏导致了在现有的教育体系下培养深度学习人才的困难。除了一些基本研究原则之外,我们没有办法确切定义和预测这个学科需要什么样的知识,以及这些方法能够通过什么方式应用到什么样的领域。并不是所有的人都适合在这种条件下进行研究和学习的。
实践中对资源的需求变大,工程量不可同日而语
尽管深度学习的研究哲学弱化了对泛化能力可证明性的追求,但泛化能力终究是一个不可绕开的话题。机器学习的实践在一定程度上是表达和泛化互相寻求平衡的过程。由于深度学习的建模更加倾向于对表达能力的探索上,因此我们需要更大的数据量使得泛化能力不成为问题。然而,“大数据”并不是一句空话。获取百万级别的样本数量是一个非常巨大的工程挑战,这在传统理论为导向的研究过程中是无法想象的。这些挑战即包括获取大量的数据量对于自动化的要求,也包括处理实际数据过程中繁琐的数据清理过程,更可能涉及缓存和分块等优化方法的应用。这无一不对从业人员的工程能力提出了更高的要求。这一点的重要性曾经被理论学派所忽略,然而随着研究的进展越来越多的人开始认识到它的必要性。
建模自由性的增强必然导致代码自由度增加,其结果是对现有代码重用能力的下降和对从业者更高的工程要求。为了实现一些崭新的模型,我们可能需要从底层的数值计算出发去一步步把模型构建起来。在这个过程中又有许多的工程问题需要解决,例如数值稳定性(由于计算机表达实数是有限精度导致的各种问题,这是专门的学科)、优化参数的调整(由于优化往往是非凸的,实践中并没有足够的理论指导)以及最终模型是否能够在有效时间内完成运行。这些过程中任何一个环节出错都会导致模型无法训练。理论学者可能往往以一句“调参”来调侃这一过程,但是我相信没有实践过的人是无权评价这个过程中需要的数值知识、对问题的敏锐理解以及解决实际问题的耐心的。
由于数据规模大和模型的自由度较大两方面的问题,训练和寻找最佳模型可能是一个非常耗时的过程。这就导致深度学习的研究往往需要巨大的计算能力。科学发展的另一个基本规律是新的方法和理论往往需要在之前无法实现的规模中才能发现。例如狭义相对论的实验需要物质运行超出常规的速度才能验证,以及发现极度微观粒子的运动不符合经典力学才导致了量子力学的出现。这种实际上需要不断挑战极限的过程体现在计算机学科中就是能够在之前无法想象的计算能力和数据规模下完成任务。可惜现实中并不是所有的人都能够有机会接触到这种规模的计算力。
总之,如果把深度学习的研究过程比作模拟退火的优化过程,假设从业人员是一个随机的初始值,这个目标函数的特点是只有缓慢的温度下降才能得到有效结果。也许退火过程只是一个简易的晶体理论,而实际的退火怎样有效只有炼过钢打过铁的人才真正知道。
上来先亮明我的观点:实际缺乏的不是Deep Learning的人才,而是可以实际解决问题的人才。而实际可以解决问题的人才不管在什么时代都是稀缺资源。
看题主这问法,潜意识里的一个概念就是数学不难的东西都是小儿科。我是一直鲜明反对这样的观点的。我一贯坚持的哲学是混哪个圈子请先用心体会这个圈子的研究逻辑,而不是拿着自己的逻辑到处judge。Deep Learning本质上是工程学科,而不是自然学科。这个性质天生决定这个圈子的人更加关注的是解决问题,或者换句话说如果必须要二选一,理论要为实践让路。这种研究的哲学和做统计等等看上去很相关的学科有着本质区别:一个理论再优美,bound证明得再漂亮然而实际不work在这些人眼里并没有太大价值。这背后本质的区别在于,统计或者理论机器学习这些学科为了有漂亮的理论不得不对现实世界做出大量简化,而真正做问题的人,是不可能对现实世界做出任何妥协的。对于工程学科而言,只有很少数的方法,是可以在理论和实践上高度统一的。
关于不同research这些的问题,可以参见我之前的两个回答吧:
参加kaggle竞赛是怎样一种体验? – Naiyan Wang 的回答
导师实验室对学生影响有多大? – Naiyan Wang 的回答
另外一个方面,工程学科的本质使得Deep Learning更在意实际动手的实现。你说RCNN有什么难的吗?不就是生成个proposal再分类下嘛。Fast RCNN又有啥呢?不就是个可以BP的SPP嘛。我很不想说Idea is cheap这句话,但是Show me the results的重要性不言而喻。RCNN不是第一个用CNN做detection的paper,而是第一个用CNN把detection做work的paper,第一个证明CNN的feature不仅仅可以做分类的paper。单就这一点就足可以奠定这个工作在整个CV发展史上的地位。记得当初Ross在CMU给talk的时候,我当时的老板做介绍的时候打趣了一句:He is the only man can make things work in computer vision. 这个评价在我看来,已经是顶级的了。以至于后来有人问我说你对自己期待是什么样子,我的回答就是做啥啥work。 XD
说了这么多,最后来回答下问题:Deep Learning本身并不难,难的是你吃透问题,可以用Deep Learning的逻辑去思考你自己的问题,有针对性地设计模型;难的是你有分析问题和结果的能力,遇到负面结果不是抓瞎。另外说Deep Learning就是调参数的,那也是不会调参,调参也是要按照基本法的啊!
最后,如果你觉得可以达到上面的要求,欢迎私信轰炸哦~ 大量实习和全职岗位等着你~
做为前深度学习相关研究工作者,以第一人称视角做个回答。
上面的回答大都是从技术的角度来回答的,这样讲都没错,但是我觉得另一个角度,即心理的角度可能才是更为深层次的原因。
我12年开始在T大进行深度学习相关研究,主要是做语音识别应用方向的研究。硕士阶段满打满算好好做了两年的研究工作,曾在语音信号处理领域国际顶会发了三篇文章。这个水平相对于业界活跃的大牛肯定是不值一提的,我讲这个只是为了说明我对这个东西是有足够了解的。
首先必须要澄清的一点是,深度学习专家急缺可能是事实,然而它难,并不是事实。就像题主说到的,相对于从前的许多机器学习方法,深度学习确实不需要什么高深的数学内容,这一点是没错的。那么如果是这样,那么为什么研究的人(暂时)看起来没有想象的多呢?
深度学习是一个学术概念,要搞清楚这个问题,就需要了解这个东西的学术背景。如同大家可能在其它新闻稿之类的地方能看到的,神经网络的概念几十年前就有了,那个时候就已经火了一阵了,然而后来又被其它方法(比如SVM)超越,之后沉寂了一段时间,到大约11年左右开始爆发,到现在算是受到各界注意力汇聚的顶点了。
做为语音领域研究的工作者,对于上面描述的这些变化其实是非常敏感的。正是因为11年微软在大规模连续语音识别上的突破性进展,(参见语音识别技术突飞猛进)拉开了国际上各家在深度学习上面军备竞赛的序幕,比如百度IDL的成立,谷歌收购Deepmind,DNNReserch等。当然这也是导致我毅然决然向导师要求从事这个方向研究的原因。
实际上现在深度学习的几乎所有最重要理论早在八十年代就确定下来了,那么为什么这么多的进展最近几年才出现?现在我们已经知道,因为那个时候计算机速度太慢,无法支持足够大规模的神经网络,而由于摩尔定律在一段时间内的作用,已经在几十年内使得计算速度得到了数百万倍的提升,而这数百万倍的提升本身其实是一个持续而漫长的过程,所以计算速度方面的原因只能回的的是“为什么它出现了”,而不能回答“为什么它在最近几年以如此密集的方式出现”。
如同理解经济现象不要只讲大道理,必须回到每个人实际面临的选择情景一样,要回答这个问题就必须回到每个研究者所面临的实际情景中。
假设在另一个时空中,我依然是我,依然阴差阳错以语音研究开始了我的研究生生涯,只不过这时是20世纪90年代。经过充分的调研后,我发现大体上有两种研究思路值得注意:一种叫做A,比较主流,效果很好,有一些现成的工具使用;另一种叫做神经网络,本身想法很有意思,但是受关注较少。这个时候看似有两种选择,其实我在这个情景中是没有选择的。
这是因为每个做研究的都是实实在在的人,他们有毕业,评职称,评教授,生活的压力。如果那个时空里的我坚定的选择了进行神经网络的研究,当我们现在回过头来看的时候,可能用1-2年时间,坚持跑完一个足够大规模的试验,也许能发现不一样的东西。但是这又怎么可能呢?导师会给你压力,同行会给你压力,学校会给你压力,而且在这1-2年没有任何结果的过程中,你不可能不怀疑自己,因为研究就是一个在黑暗中摸索的阶段,现在回头看认为曾经需要1-2年,在那样的情景中是根本无法知道的,完全有可能1-2年搭进去什么都没有,3-4年还是什么都没有。这就好像男生追女生,女生奇怪男生追了一半为啥不追了,男生却会觉得连十分之一都不到一样。相比于坚持,放弃换一个方向才是更理性的选择。
所以能够撑过神经网络最黑暗时光的人,一定是极少数抱有绝对信仰的人,比如Hinton, Lecun, Bengio,他们凭借已经取得的成就,在没有来自其它方面压力的时候,才能走下去。这就是为什么这样的人一定很少的原因。
然而回答到这里只是事情的前一半部分。
一件需要意识到的事情是,神经网络,做为一种研究方向,有过这样一种跌宕起伏的发展过程,为什么其它理论就不能有呢?所以很有可能其它机器学习派别在未来再度超越的,这是完全有可能的,这就是科学。
所以,这就是为什么即使到今天,深度学习依然只是一个机器学习分支的原因。依然有人不喜欢它,依然有人愿意坚持自己的方向。这是完全值得尊敬的,也是合理的,因为搞神经网络的人曾经就是这样的一帮人,才有了现在我们看到的深度学习的繁荣。
1. 没有理论支撑。关于深度神经网络为什么收敛,怎么收敛,如何控制等等内容,都没有成熟的理论证明,所有的结果都是停留在实验阶段,尽管有时候结果很好,然而糟糕的时候是真糟糕。
2. 计算资源。个人(土豪除外)很难负担DL硬件的所有费用,至少需要一个配置不太差的workstation吧,如果做大一点,至少需要十台吧,然而并买不起。说白了就是没钱。信科有钱,然而他们数学不好。。。
3. 时间成本。服务器上训练一个简单的网络时间以天为单位,然后再调参数,结果没出来,先把自己急死了。
4. 数据集。很难有能够填充一个DNN信息量的数据集。不管从数据集质量还是规模来看,能用的数据集太少了,同时很少有人愿意做这方面的工作。很多号称是大数据、深度学习的东西其实都是炒作,好骗投资人的钱。
Details are devils. DL真的把这句话用到极致。Debug起来非常耗时。来盘点下最近几天我这个小白踩过的坑:
1. 深度学习开源框架非常多,然而各有各的bug,用的同时还要改bug。那感觉就像买了一个猪蹄,边啃猪蹄边拔上面的毛。
2.Debug非常麻烦,比如我脑残的把batch_size/=2写到data generator的while 1里面了,于是每次epoch开始batch_size都在变。而发现这个bug要多久呢?反正我是第一次epoch之后才发现的,彼时模型已经跑了1个多小时了,于是改了bug从头再开始train。
3. training过程非常揪心,感觉就像养了个孩纸,到哪都要把电脑带着,随时看一眼,万一又blow up呢╮(╯▽╰)╭
还有各种diverge,各种wired loss graph都不想提了。像我这种小白千万不要跳坑,从来都是被模型玩o(╯□╰)o
在回答这个问题前我希望大家不要掉到此问题的逻辑陷阱里。BoBo你这提问的逻辑实在是挖坑让人跳的节奏。我建议你把“为何DL专家这么急缺”和“DL难在何处”拆成两个问题。因为DL专家数量跟DL本身难度如何相关性并不高,而且也没有因果关系。DL比理论物理简单,不代表做DL的人会比做理论物理的人多。某个学科方向人才的多少,更多的是与其热门的程度,应用的广度,兴起发展的时间长短有关。
你也知道,跟research类似,热门话题总是容易发paper拿funding招到更多PhD。
几个答案看到BoBo说DL没什么难度,就在那撕逼DL的理论到底难不难是不是足够高大上……看得人心好累。工业界首先还是看应用效果的吧,理论之美什么的不能转化为实际应用也闲的,即便是不那么美理论只要好用照样会应用。从AlphaGo就能看出,其用的算法方法基本都是比较成熟的,并没有发明出多么高大上的新理论。工业界因为需要保证可靠与稳定,所以会更多选择已经被反复验证的成熟方法,所以最新的东西反而不会轻易使用。因为这个鄙视工业界用的东西不够高大上,我觉得还是陷在科研的思维里了。即便是再完备的理论,在应用的时候很多细节还是要靠经验和理论之外的东西。从理论到实际应用总是要有个过程。
就我个人的观点,machine learning本身就是个toolbox,了解这些工具并不难,难的是如何用好这些工具做出漂亮的应用。现在缺的是能用好DL解决问题的专家。这类人不仅要懂DL,还要了解需要使用DL的这个领域。了解理论,并不代表一定会理论的应用,一如Dirac造不出量子计算机。
最后想说,个人真的是非常不喜欢学术圈里唯新颖和难度最高的态度,鄙视应用和工程根本不利于理论发展。没有工业进步,做理论照样瓶颈。我bf做高性能计算,给我讲了一个例子:当年一群人搞出一类并行算法觉得高端的不得了,结果出来了GPU把他们算法全秒了……今天我们在这里愉快地玩machine learning而不用像早期程序员那样小心分配内存节约算力,真的是工业发展的功劳。
学科之间的断层,基础数学/应用数学/物理学/大科学计算/计算机系/业界程序员之间长期积累的断层迎来了总爆发,造成了现在的AIA(AI Administrator,类似DBA)紧缺。
当数学系退化到基础数学/应用数学老死不相往来、物理系退化到Mathematica和Matlab、统计系退化到Python和R、CFD退化到FORTRAN和ANSYS,各自方言不通的时候,计算机系和业界程序员除了调参还能得到多少理论支持?现在这一天迟早会发生,没想到这么快就发生了。
不仅Google有新玩具,SpaceX也有新玩具
欧拉方程求解是否比N-S方程更加困难?如果是,为什么? – 浪客的回答
而且与以往情况不同,深度学习需要大工业级别的物质基础才能良好运行。物理系转行程序员通过选修双学位和自学,进行工匠和游侠式单打独斗的历史结束了。
火药和机床发明之后,中世纪经院哲学和小作坊过时了、搞科举的王朝被彻底击溃。深度学习这一代兼具软件复杂度和数学高深度的的大型算法发明之后,现有大学制度(和App小公司?)也过时了。
这是真正的第四次工业革命,人类却接受不了,像当年最后的工匠和武士一样把它当妖魔鬼怪。一面拼命找“第四次工业革命”、“工业4.0”的项目投资,一面担心被AI淘汰,而不能利用其机遇。
现在怎么办?估计在大学反应过来之前,各个互联网巨头会像十几年前DBA紧缺的时候搞MCSE、CCNA一样搞出一套认证和教材,再结合数学物理的MOOC课程搞出一套商业模式,连服务器算力和课程一起打包收费。当年的名牌大学可以不鸟这些技校生的认证,这次做不到了。
人类根本的竞争力要靠自己、靠教育。
无论AI的挑战还是中产阶级生养不起、民族出生率不平衡之类社会问题,都属于这个问题的衍生物。至于把教育当作阶层划分和流动的工具而牺牲教育本身的效率,更加在作死。解决了教育效率问题的社会,冲出地球开垦太阳系。解决不了教育问题的社会,在停滞中走向半封建半殖民地、族群撕裂和战乱。
深度学习是一门综合性的偏工程的学科,除了扎实的基础知识之外,更多的是需要极强的工程能力,对问题理解、抽象和建模的能力,以及综合运用多种工具把问题解决掉的执行力。同时,深度学习兴起的时间比较短,很多人才刚刚热门,成为专家还需要一段时间,从而导致当前深度学习 人才紧缺的现状。
首先是数学基础,虽然这块的要求并不需要学的很深入,但基本的了解还是要的,如果能够较为深入的学习,在真正做分析和工程时的帮助也会比较大。如果是在校生,并且有志于深度学习方向,多花点时间在这上面是十分值得的。
1. 线性代数,矩阵和张量的计算
了解标量、矢量、矩阵和张量,对相关的运算(比如加法、乘法、转置等)比较熟悉,知道特征分解和奇异值分解是怎么回事等等。如果有时间,啃点书总没有坏处,比如Linear Algebra (豆瓣) ,和矩阵计算 (豆瓣) 。这两个公开课 可汗学院公开课:线性代数 和 麻省理工公开课:线性代数 ,有空看看也没啥坏处
2. 微积分
微积分应该是大学理工科必须的课程吧,求导是微积分里面最基本的概念了吧,在深度学习里也是基础之一,对其了解是必要的。如果有时间,还是啃书,柯朗的两卷本微积分和数学分析引论(第一卷) (豆瓣) 和 微积分和数学分析引论(第二卷) (豆瓣) 貌似是很经典的,有兴趣的可以啃啃。 麻省理工学院公开课:单变量微积分 和 麻省理工学院公开课:多变量微积分 这两个公开课讲的不错的,偶当年在地铁上看下来的,也是不容易啊。
3. 概率,统计和随机过程
几个基本的分布(如高斯分布,指数分布等)是需要了解的,条件概率之类的也得知道吧,贝叶斯是谁还是得认识一下的,大数定律和中心极限定理能够熟悉熟悉也是有帮助的,如果能够认识下马尔科夫,想来也是有帮助的。手头的书翻了下,貌似有 概率论沉思录 (豆瓣), 还有 随机过程 (豆瓣) 。网易公开课这类课程比较少啊,搜索了下,只有 可汗学院公开课:统计学 这个看起来有点意思(没看过,找个时间瞧瞧去)。
第二块是机器学习的基础知识。深度学习是机器学习的一个分支,由于在图像识别语音识别机器翻译等多个地方的效果卓越而流行起来的。总体上,线性回归是机器学习里最基本也是最常用的算法,直至2015年的时候,Google,百度等互联网公司在广告及其相关项目中所使用的最多的算法依然是线性回归,简单,可解释和高效率是它的最大的优点。其他诸如过拟合和泛化,training,validation和testing等机器学习中最基本的概念也同时是深度学习所必须的。其他诸如贝叶斯网络,svm,nn,k-means,mcmc,sgd,熵,分类和聚类,监督和无监督等算法和概念在大部分机器学习的书籍中都或多或少涉及到。大部头书籍Pattern Recognition And Machine Learning (豆瓣)是最经典的书籍(没有)之一,斯坦福的经典教程UFLDL教程 – Ufldl 涉及到无监督学习和深度学习(与时俱进的比较快), 另外,公开课加州理工学院公开课:机器学习与数据挖掘 看看也会有所收获的。
1. 数据,training, validation和testing
2. 线性模型,classification和regression
3. 贝叶斯网络,SVM,马尔科夫随机场
4. cluster,k-means
5. 神经网络
第三块是编程。纸上得来终觉浅,绝知此事要编程。在一个美帝总统奥巴马都学习编程,美帝监狱都开编程客的年代,一个搞深度学习的编程水平太差,也说不过去吧。同时,深度学习在目前阶段,还是需要很大的计算力来支持的,对于稍微有点规模有点实用的场景,分布式和GPU都是需要涉及到的,编程语言的话,C/C++肯定会涉及,Python估计也无法避免会遇到,java和lua等其他语言会一些则更好,至于世界上最好的语言PHP不会倒无关紧要。这本书 深入理解计算机系统 (豆瓣) 有助于从各方面了解计算机,(特别是非计算机专业的)啃完后会受益匪浅。C和C++的书籍多如牛毛,C程序设计语言 (豆瓣) 和 C++ Primer 中文版(第 5 版) (豆瓣) 这两本书是我的偏好(想当年啃下后一本的时候,还是有点成就感的)。如果能够把 Learning Python (豆瓣) 和 SciPy and NumPy (豆瓣) 啃完,用起Python应该是能够得心应手的。至于cuda(进行GPU计算的),官方资料(https://developer.nvidia.com/cuda-zone )十分丰富,有需要就去看看好了。
第四块是深度学习(这个名字有点奇怪就是,不过都这么叫了,熟了就好了)。在不熟之前还生着的时候,深度学习有另外一个名称叫神经网络(不是神经病网络
哦),貌似上个世纪后期的时候就火过一阵,奈何先驱约等于先去的意思,那个时候由于计算机的能力问题,没搞出啥好的效果,让位于一堆其他的机器学习算法。
直到201×年,突然间,Hinton,Bengio,LeCun等人依靠强大的计算力让多层神经网络能够很好的运行,并且效果好的令人发指,于是乎大家
才想起,原来神经病还能这么玩,然后大家就high起来了。wikipedia上dl的条目Deep learning 编辑的挺不错的,很适合作为入门材料,了解一下基本概念。LeCun,Bengio和Hinton合作的Nature的Review: Deep learning(https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf)应该是必读的文献之一吧,另外Bengio的Learning Deep Architectures for AI(http://sanghv.com/download/soft/machine%20learning,%20artificial%20intelligence,%20mathematics%20ebooks/ML/learning%20deep%20architectures%20for%20AI%20(2009).pdf ) 和Schmidhuber的Deep Learning in Neural Networks:An Overview()也是了解这个领域的好文。不想看论文的,可以看看这个 (基础+框架介绍)和 这个 (牛津大学的课程,国外大学的课程真是与时俱进,不知道国内大学是否有开课?)
接下来是不同领域的应用,印象中,深度学习首先是在图像识别和计算机视觉中火起来的,这篇ImageNet Classification with Deep Convolutional Neural Networks()是dl在计算机视觉中应用的经典文章之一。自然语言处理方面,当年word2vec(,)刚出来的时候,让一小撮土鳖大吃一惊,原来nlp还能这么玩。而这次alphaGo(Mastering the game of Go with deep neural networks and tree search: http://willamette.edu/~levenick/cs448/goNature.pdf)则让超越了码农群体之外的一大撮人大吃一惊,原来,围棋也有另一种玩法。
了解完了之后,就开始写代码。早些年呢,需要从0开始一把鼻涕一把泪的搬很多砖才能搞出一个能够work的东西。后来,不知道何年何月为了啥目的,各种开源框架纷纷冒出,现在随便花店心思,就能过搞出一个忽悠人的东西出来。这么些个 GitHub – BVLC/caffe: Caffe: a fast open framework for deep learning. GitHub – tensorflow/tensorflow: Computation using data flow graphs for scalable machine learning GitHub
– Theano/Theano: Theano is a Python library that allows you to define,
optimize, and evaluate mathematical expressions involving
multi-dimensional arrays efficiently. It can use GPUs and perform
efficient symbolic differentiation. 和 GitHub – torch/torch7: http://torch.ch 以及更多的各种框架,就任君选择了。至于哪个好用,谁用谁知道。号称码神的jeff dean在韩国汉城的演讲中(),穿着那件TensorFlow的t恤,看起来还是蛮不错的。其实我蛮想知道的,AlphaGo是不是用tersorflow的?如果不是,为嘛不用?
第五块是领域知识,随便列举,有空的时候整理一下我自己做过的一些内容。
比如alphago,aja huang是业余6段的水平;
比如之前有个同事做色情图像识别,貌似天天看图片看到吐啊;
比如想在金融领域玩玩的,对金融也是得有所了解的
其他内容,貌似只能写写段子的部分了
问题的理解、抽象和建模
执行力
勤奋
上述几个方面要(都)做的好的,算算人数也不会太多。而能够都做的好的,还不一定去干深度学习这事,比如有些人抱着白富美去做人生赢家去了,有些人游山玩水到处自拍显摆去了,剩下的也就寥寥无几了。
看到这里的,数学还不错,编程水平又比较高,人也聪明并且勤奋的,如果还闲着的话,欢迎私信我啊。
写着写着变成一个教程了
理论上的恰当解释需要高级的数学工具(我听说有人在用代数几何搞的),而且到现在也没有好的成果,所以大家发明新的网络结构或者 trick 的时候,最开始其实是有点随机和盲目的,不够痛快。不过这并不妨碍应用,只是经验的获取变得更加困难了。面对具体问题的各种特征,选择正确的网络结构,合理切入,科学调参,以最快达到最佳效果,这就是 DL 里的学问,是有科学规律的,需要去领悟并形成相应思维。
工程上,由于庞大的硬件资源需求,可以搞大新闻的应用被大公司和高校垄断。另外,开发一个好的 DL 库既需要对算法的理解,又往往需要丰富的分布式系统、GPU 和软件工程方面的经验,门槛不低。现在大家可以随便调个库跑一下完全是他们的功劳。
================================================
下面我要批判曾老师一下:
kernel 和希尔伯特空间相比?曾老师你真不是来钓鱼的,还是不小心暴露自己的浅薄了解了?
kernel 可是和 reproducing kernel Hilbert space 一一对应的。
而 Moore–Aronszajn 定理和 representer 定理则说明了 kernel 在什么样的问题里可以用,为何可以这样用。
有你要的数学吧,这已经是最简单的证明了,learning theory 里面精彩的东西多得是。
你还是要学习一个,不要想搞个大新闻。
–
是时候放出这张图了。
「Talk is cheap. Show me the code」
–