Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

陈天奇作者

陈天奇:机器学习科研的十年

陈天奇机器学习领域著名的青年华人学者之一,本科毕业于上海交通大学ACM班,博士毕业于华盛顿大学计算机系,研究方向为大规模机器学习。上个月,陈天奇在Twitter上宣布自己将于2020年秋季加入CMU任助理教授,成为加入CMU的年轻华人学者之一。在本文中,陈天奇回顾了自己做机器学习科研的十年。

十年前,MSRA 的夏天,刚开始尝试机器学习研究的我面对科研巨大的不确定性,感到最多的是困惑和迷茫。十年之后,即将跨出下一步的时候,未来依然是如此不确定,但是期待又更多了一些。这其中的变化也带着这十年经历的影子。

起始: 科研是什么

我从大三开始进入交大 APEX 实验室,有幸随着戴文渊学长做机器学习,当时的我觉得「机器学习」这个名字十分高大上然后选择了这个方向,但是做了一年之后依然摸不着头脑,心中十分向往可以做科研,独立写论文的生活,却总是不知道如何下手。文渊在我进实验室的一年后去了百度。当时还没有得到学长真传的我,开始了我科研的第一阶段,从大四到硕士的第二年,期间一直自己摸索,不断地问自己「科研是什么」。

和课程作业不同,学术研究没有具体的问题,具体的方法,具体的答案。文渊的离开让我一下子不知道该怎么做,当时的我的想法很简单,快点寻找一个具体的方向,完成一篇论文。因为 ACM 班的机会暑假在 MSRA 的短暂实习,虽然学会了很多东西,但并没有给我答案。MSRA 回来之后,在实验室薛老师的建议下,我选择了一个现在看来正确而又错误的方向 -- 深度学习。那是 AlexNet 出现之前两年,深度学习的主流热点是非监督学习和限制玻尔兹曼机。没有导师的指导,没有工具,当时我靠着实验室的两块显卡和自己写的 CUDA 代码开始了死磕深度学习的两年半。实验室的学长问我,你准备要干啥,我说:「我要用卷积 RBM 去提升 ImageNet 的分类效率。」这一个回答开启了图书馆和实验室的无数个日日夜夜,为了给实验室的老机器多带一块高功率的显卡,我们打开了一台机器的机箱,在外面多塞了一个外接电源。我的生活就持续在调参的循环中:可视化权重的图片, 看上去那么有点像人脸,但是精度却总是提不上来,再来一遍。从一开始 hack 显卡代码的兴奋,到一年之后的焦虑,再到时不时在树下踱步想如何加旋转不变的模型的尝试,在这个方向上,我花费了本科四年级到硕士一年半的所有时间,直到最后还是一无所获。现在看来,当时的我犯了一个非常明显的错误 -- 常见的科学研究要么是问题驱动,比如「如何解决 ImageNet 分类问题」;要么是方法驱动,如「RBM 可以用来干什么」。当时的我同时锁死了要解决的问题和用来解决问题的方案,成功的可能性自然不高。如果我在多看一看当时整个领域的各种思路,比如 Lecun 在很早的时候就已经做 end to end,或许结局会不那么一样吧。

当然没有如果,赌上了两年半的时间的我留下的只是何时能够发表论文的紧张心情。焦虑的我开始打算换一个方向,因为 RBM 当时有一个比较经典的文章应用在了推荐系统上,我开始接触推荐系统和 kddcup。比较幸运的是,这一次我并没有把 RBM 作为唯一的一个方法,而是更加广泛地去看了推荐系统中的矩阵分解类的算法,并且在实验室搭建了一个比较泛用的矩阵分解系统。推荐系统方向的耕耘逐渐有了收获,我们在两年 KDDCup11 中获得了不错的成绩。KDD12 在北京,放弃了一个过年的时间,我完成了第一篇关于基于特征的分布式矩阵分解论文,并且非常兴奋地投到了 KDD。四月底的时候,我们收到了 KDD 的提前拒搞通知 -- 论文连第一轮评审都没有过。收到拒搞通知时候的我的心情无比沮丧,因为这是第一篇自己大部分独立推动完成的文章。转折在五月,KDDCup12 封榜,我们拿到了第一个 track 的冠军,我依然还记得拿到 KDDCup12 冠军的那一个瞬间,我在状态里面中二地打了 excalibur,仿佛硕士期间的所有阴霾一扫而尽。那时候的我依然还不完全知道科研是什么,但是隐隐之中觉得似乎可以继续试试。

第零年: 可以做什么

我对于科研看法的第一个转折,在于我硕士临近毕业的时候。李航老师来到我们实验室给了关于机器学习信息检索的报告,并且和我们座谈。在报告的过程中,我异常兴奋,甚至时不时地想要跳起来,因为发现我似乎已经知道如何可以解决这么多有趣问题的方法,但是之前却从来没有想过自己可以做这些问题。联系了李航老师之后,在同一年的夏天,我有幸到香港跟随李航杨强老师实习。实验室的不少学长们曾经去香港和杨强老师工作,他们回来之后都仿佛开了光似地在科研上面突飞猛进。去香港之后,我开始明白其中的原因 -- 研究视野。经过几年的磨练,那时候的我或许已经知道如何去解决一个已有的问题,但是却缺乏其他一些必要的技能 -- 如何选择一个新颖的研究问题,如何在结果不尽人意的时候转变方向寻找新的突破点,如何知道整个领域的问题之间的关系等等。「你香港回来以后升级了嘛。」-- 来自某大侠的评论。这也许是对于我三个月香港实习的最好概括的吧。香港实习结束的时候我收获了第一篇正式的一作会议论文 (在当年的 ICML)。因为 KDDCup 的缘故,我认识了我现在博士导师 Carlos 的 postdoc Danny,Danny 把我推荐给了 Carlos(UW) 和 Alex(CMU)。我在申请的时候幸运地拿到了 UW 和 CMU 的 offer。在 CMU visit 的时候我见到了传说中的大神学长李沐,他和我感叹,现在正是大数据大火的时候,但是等到我们毕业的时候,不知道时代会是如何,不过又反过来说总可以去做更重要的东西。现在想起这段对话依然依然唏嘘不已。我最后选择了 UW 开始了我六年的博士生活。

感谢博士之前在 APEX 实验室和香港的经历,在博士开始的时候我似乎已经不再担心自己可以做什么了。

第一年: 意外可以收获什么

如果给我在 UW 的第一年一个主题的话,或许是「意外」。在交大时候因为兴趣的关系一直去蹭系统生物研究员敖平老师的组会探讨随机过程马尔可夫链。到 UW 的第一个学期,我无意看到一篇探讨如何用 Lagevin 过程做采样的文章,我想这不就是之前组会上探讨过的东西么,原来这些方法也可以用到机器学习上。我直接借用了原来的交大学会的知识完成了第一篇高效采样 HMC 的文章。我后来并没有继续在这个方向上面耕耘下去,不过另外一位同在组会的学弟继续基于这个方向完成了他的博士论文。

同样的在这一年,我和导师开始「质疑深度学习」-- 如果别的的机器学习模型,有足够大的模型容量和数据,是否可以获得和深度学习一样的效果呢?当时 Carlos 看好 kernel methods,而我因为过去的一些经历决定尝试 Tree Boosting。虽然最后在 vision 领域依然被卷积网络打败而尝试挑战失败,但是为了挑战这一假说而实现高效 Tree boosting 的系统经过小伙伴建议开源成为了后来的 XGBoost

在第一年暑假结束的时候,因为偶然的原因,我开始对 quantile sketch 算法感兴趣。这里主要的问题是如何设计一个近似的可以合并的数据结构用来查找 quantile。这个方向有一个经典的方案 GK-sketch 的论文,但是只能够解决数据点没有权重的情况。经过一两天的推导,我在一次去爬山的路上终于把结论推广到了有权重的情况。有趣的是新的证明比起原来的证明看起来简单很多。这个结论没有单独发表,但是后来意想不到地被用到了分布式 XGBoost 算法中,证明也收录在了 XGboost 文章的附录中。

研究并不是一朝一夕,做想做的事情把它做好,开始的时候兴趣使然,而在几年之后意想不到的地方获得的收获,这样的感觉走非常不错。

第二年和第三年: 选择做什么

在新生聚会上,Carlos 对我说,你已经有论文的发表经历了,接下来要静下心来做发大的,「只做 best paper 水平的研究」。和很多 nice 的导师不同,Carlos 对于学生的要求非常严格,说话也是非常直白甚至于「尖刻「。很多的老师不论我们提出什么样的想法,总会先肯定一番,而 Carlos 则会非常直接地提出质疑。一开始的时候会非常不习惯,感觉到信心受到了打击,但是慢慢习惯之后开始习惯这样风格。到现在看来,诚实的反馈的确是我收益最大的东西。我进入博士的一年之后,主要在想的问题是做什么样的问题,可以值得自己深入付出,做扎实有影响力的工作。

在博士的第三年,Carlos 在建议我把 XGBoost 写成论文,用他的话说:「写一篇让读者可以学到东西的文章」。和传统的写法不同,我们在文章的每一个章节插入了实验结果验证当章节提出的观点。而他对于做图的处理也成为了我现在的习惯,直接在图里面插入箭头注释,减少读者的阅读负担。经过几次打磨论文终于成为了我们想要的模样。

博士前对于深度学习遗憾让我又逐渐把目光转回到深度学习。这个时候,我选择了不再一个人作战,在博士的第二年和第三年,我和兴趣使然的小伙伴们合作,一起开始了 MXNet 的项目。项目从零开始,在短短的一年时间里面做出完整的架构。我第一次看到集合了大家的力量齐心协力可以创造出什么样的东西。研究的乐趣不光是发表论文,更多还是可以给别人带来什么,或者更加大胆地说 -- 如何一起改变世界。

博士第二年暑假,我在小伙伴的介绍下进入 Google Brain 跟随 Ian Goodfellow 实习。当时 GAN 的论文刚刚发表,我也有幸在成为 Ian 的第一个实习生。实习的开始,我们讨论需要做的问题,Ian 和我把可能要做的项目画在一个风险和回报的曲线上,让我选择。到最后我选择了自己提出的一个课题,在这个曲线里面风险最高,回报也最高。我一直有一个理想,希望可以构建一个终身学习的机器学习系统,并且解决其中可能出现的问题。这个理想过于模糊,但是我们想办法拿出其中的一个可能小的目标 -- 知识迁移。如果一个机器学习系统要终生学习,那么在不断收集数据之后必然需要扩充模型的规模来学习更广或者更深,按照现在的做法我们在模型改变之后只能抛弃原来的模型重新训练,这显然是不够高效的。是否有一个方法可以从已经训练好的网络上面进行知识迁移也就成为了一个重要的问题。我先花了一个半月的时间尝试了比较显然的 Knowledge distillation 的方法一直没有得到正面的结果。在最后的一个月,我改变了思路。实习结束的前一个星期,我打开 Tensorborard 上最近一组实验的结果:实验表明新的思路正面的效果。这最后几步的幸运也让我的这一个冒险之旅有了一个相对圆满的结果。这篇论文最后被发表在了 ICLR 上,也是我最喜欢的结果之一。

博士的第三年,我和小伙伴们开发了一种可以用低于线性复杂度就可以训练更深模型的内存优化算法。当时我非常兴奋地把这一结果写下来然后把稿子后给导师看。他和我说:Hmm, 这个结果如果投到 NeurIPS 的话或许可以中一篇 poster,但是这并不是特别有意思。在我沉默之后他又补充了一句:论文并非越多越好,相反你可能要尝试优化你的论文里面最低质量的那一篇。最后我们只是把这篇论文挂在了 Arxiv 上。Carlos 的说法或许比较极端(这篇论文依然影响了不少后面的工作),但也的确是对的,用李沐之前说过的一句话概括,保证每一篇论文的质量接近单调提升,已经是一件难以做到但是又值得最求的事情。

选择做什么眼光和做出好结果的能力一样重要,眼界决定了工作影响力的上界,能力决定了到底是否到达那个上界。交大时敖平老师曾经和我说过,一个人做一件简单的事情和困难的事情其实是要花费一样多的时间。因为即使再简单的问题也有很多琐碎的地方。要想拿到一些东西,就必然意味着要放弃一些其他东西,既然如此,为什么不一直选择跳出舒适区,选一个最让自己兴奋的问题呢。

第四年之后: 坚持做什么

博士第三年,我和小伙伴们参加 GTC,结束后老黄 party 的角落里,我一个人在发呆。深度学习的框架发展已经铺开,可接下来应该做什么,我一下子感到迷茫。第三年的暑假我没有去实习,而是决定一个人在学校尝试开发脑海中显现的抽象概念 -- 深度学习中间表示。暑假结束之后,我完成了第一个版本,可以比较灵活地支持深度学习系统里面的计算图内存优化。但是总是觉得还缺少着什么 -- 系统的瓶颈依然在更接近底层的算子实现上。暑假之后在去加州的飞机上,我尝试在纸上画出为了优化矩阵乘法可能的循环变换,回来之后,我们决定推动一个更加大胆的项目 -- 尝试用自动编译生成的方式优化机器学习的底层代码。

这个项目早在之前我也有一些想法,但是一直没有敢去吃这个螃蟹。原因是它的两个特点:从零开始,横跨多领域。因为要做底层代码生成和想要支持新的硬件,我们需要重新重新搞清楚很多在之前被现有的操作系统和驱动隐藏掉的问题,这就好象是在一个荒岛上一无所有重新搭建起一个城堡一样。而这里面也涉及了系统,程序语言,体系结构和机器学习等领域。这让我想起之前在 ACM 班时候重头搭建编译器和 MIPS 处理器并且连接起来的经历。也是那段经历让我觉得为了解决问题去吃多个领域的螃蟹是个让人兴奋的事情。那段经历给我留下的第二个印记是理解了合作和传承的重要性。这门课程设计有一个传统,每一门课程的老师都由上一届学长担任。每一届的同学都会在之前的基础上有所改进。我也曾经为这门课做过一些微小的贡献。演化到现在,这门课程已经从只做简单的答辩,到现在已经有在线评测的 OJ。大家一起的合作塑造了这个课程。推动新的机器学习系统和塑造这门课程一行,需要各个团队的同学合作,足够时间的耐心关注和不断地改进。

我的合作者们也被「卷入」到了这个项目中。我的体系结构合作者一直想要设计新的 AI 硬件,我在雏形完成之后花了大量的时间讨论如何协同设计新的硬件的问题。我们开始讨论怎么管理片上内存,怎么可以比较容易地生成指令集,甚至怎么调度内存读写和计算并行的问题都暴露出来。有一天,我和合作者说我们需要引入虚拟线程的概念来隐藏内存读写开销,然后他很快和我说,这是体系结构里面经典的超线程技术,发明人正是我们的系主任 Hank。我们也在不断地重新发现经典的问题的解决方法在新场景的应用,让我觉得上了一堂最好的体系结构课程。

两年间的不少关键技术问题的突破都是在有趣的时候发生的。我在排队参观西雅图艺术博物馆的 infinity mirror 展览的途中把加速器内存拷贝支持的第一个方案写在了一张星巴克的餐巾纸上。到后来是程序语言方向的同学们也继续参与进来。我们争论最多的是如何如何平衡函数式语言和经典计算图做让大家都可以搞懂的中间表达,这一讨论还在不断继续。经过大家的努力,TVM 的第一篇论文在项目开始的两年之后终于发表。两年间参与项目的同学也从两个人,到一个团队,再到一个新的 lab 和一个社区,这两年也是我博士期间最充实的两年。

因为做了不少「跨界」的工作,我常被问起你到底属于哪个领域。过去半年一直在各地给报告,报告这样开头:算法突破,数据的爆发,计算硬件的提升三者支撑了机器学习的变革,而整合这三者的,则是机器学习系统。这也是为什么我要做机器学习系统的原因。曾经一个教授问我这样的问题,如果明天有一样新的化学反应过程可能带来机器学习的变革,你会怎么做。我答道:「我投入会去学习研究这个化学过程」。虽然我不知道遥远的未来会需要什么,到底是系统,算法,还是化学,从问题出发,用尽所有可能的方法去最好地解决机器学习问题,应该这就是我想要坚持的研究风格吧。

总结

在写这篇总结的时候,心中有不少感叹。我常想,如果我在焦虑死磕深度学习的时候我多开窍一些会发生什么,如果我并没有在实习结束的时候完成当时的实验,又会是什么。但现在看来,很多困难和无助都是随机的涨落的一部分,付出足够多的时间和耐心,随机过程总会收敛到和付出相对的稳态。

每个人的研究道路都各不相同,我的经历应该也是千万条道路中其中一条罢了。博士的经历就好像是用五年多时间作为筹码投资给自己,去突破自己做自己原来想不到的事情。中不管坎坷曲折都是无可替代的一部分。

科研从来不是一个人的事情,对于我来说特别是如此。我在交大的时候和一群年轻的同学一起摸索推荐系统的算法,而在博士期间搭建的每一个系统都包含了很多合作者一起的努力。也正是大家一起的努力才带来了现在的成果。我个人在这十年间受到了不少老师,同学,家人的鼓励和帮助,感谢他们他们给予了我这无比珍贵的十年时光。

原文链接:https://zhuanlan.zhihu.com/p/74249758?utm_source=wechat_session&utm_medium=social&utm_oi=36286488379392&from=timeline&s_s_i=0Adl1SNt%2FB3gEe0APUZZYAVRCRw%2F801frkyc0v%2BsfIo%3D&s_r=1

入门陈天奇机器学习智能科研
71
相关数据
李航人物

李航,毕业于日本京都大学电气电子工程系,日本东京大学获得计算机科学博士学位。北京大学、南京大学兼职教授。曾任日本NEC公司中央研究所研究员,微软亚洲研究院高级研究员与主任研究员、华为技术有限公司诺亚方舟实验室主任,是《统计学习方法》作者。

陈天奇人物

陈天奇,华盛顿大学计算机系博士生,此前毕业于上海交通大学ACM班,研究方向为大规模机器学习。陈天奇曾获得KDD CUP 2012 Track 1第一名,并开发了SVDFeature,XGBoost,cxxnet等著名机器学习工具,是最大开源分布式机器学习项目DMLC的发起人之一。

李沐人物

李沐,2008年毕业于上海交通大学计算机系,大学期间,曾在微软亚洲研究院担任实习生。2017年博士毕业后,李沐加入亚马逊任AI主任科学家。

杨强人物

杨强现任香港科技大学新明工程学讲席教授、计算机科学和工程学系主任,大数据研究所所长 。他是人工智能研究的国际专家和领军人物,在学术界和工业界做出了杰出的服务和贡献,尤其近些年为中国人工智能(AI)和数据挖掘(KDD)的发展起了重要引导和推动作用。

Ian Goodfellow人物

Ian Goodfellow 是机器学习领域备受关注的年轻学者之一,他在本科与硕士就读于斯坦福大学,师从吴恩达,博士阶段则跟随蒙特利尔大学的著名学者Yoshua Bengio研究机器学习。Goodfellow 最引人注目的成就是在2014年6月提出了生成对抗网络(GAN)。这一技术近年来已成为机器学习界最火热的讨论话题,特别是在最近几个月里,与GAN有关的论文不断涌现。GAN已成为众多学者的研究方向。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

非监督学习技术

非监督式学习是一种机器学习的方式,并不需要人力来输入标签。它是监督式学习和强化学习等策略之外的一种选择。在监督式学习中,典型的任务是分类和回归分析,且需要使用到人工预先准备好的范例(base)。一个常见的非监督式学习是数据聚类。在人工神经网络中,自组织映射(SOM)和适应性共振理论(ART)则是最常用的非监督式学习。

信息检索技术

信息检索(IR)是基于用于查询检索信息的任务。流行的信息检索模型包括布尔模型、向量空间模型、概率模型和语言模型。信息检索最典型和最常见的应用是搜索引擎。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

随机过程技术

在概率论概念中,随机过程是随机变量的集合。若一随机系统的样本点是随机函数,则称此函数为样本函数,这一随机系统全部样本函数的集合是一个随机过程。实际应用中,样本函数的一般定义在时间域或者空间域。随机过程的实例如股票和汇率的波动、语音信号、视频信号、体温的变化,反对法随机运动如布朗运动、随机徘徊等等。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

玻尔兹曼机技术

玻尔兹曼机(Boltzmann machine)是随机神经网络和递归神经网络的一种,由杰弗里·辛顿(Geoffrey Hinton)和特里·谢泽诺斯基(Terry Sejnowski)在1985年发明。玻尔兹曼机可被视作随机过程的,可生成的相应的Hopfield神经网络。它是最早能够学习内部表达,并能表达和(给定充足的时间)解决复杂的组合优化问题的神经网络。但是,没有特定限制连接方式的玻尔兹曼机目前为止并未被证明对机器学习的实际问题有什么用。所以它目前只在理论上显得有趣。然而,由于局部性和训练算法的赫布性质(Hebbian nature),以及它们和简单物理过程相似的并行性,如果连接方式是受约束的(即受限玻尔兹曼机),学习方式在解决实际问题上将会足够高效。它由玻尔兹曼分布得名。该分布用于玻尔兹曼机的抽样函数。

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

XGBoost技术

XGBoost是一个开源软件库,为C ++,Java,Python,R,和Julia提供了渐变增强框架。 它适用于Linux,Windows,MacOS。从项目描述来看,它旨在提供一个“可扩展,便携式和分布式的梯度提升(GBM,GBRT,GBDT)库”。 除了在一台机器上运行,它还支持分布式处理框架Apache Hadoop,Apache Spark和Apache Flink。 由于它是许多机器学习大赛中获胜团队的首选算法,因此它已经赢得了很多人的关注。

马尔可夫链技术

马尔可夫链,又称离散时间马尔可夫链,因俄国数学家安德烈·马尔可夫得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
矩阵分解技术

矩阵分解是一种将矩阵简化为其组成部分的方法。这种方法可以简化更复杂的矩阵运算,这些运算可以在分解的矩阵上执行,而不是在原始矩阵本身上执行。它的衍生Non-negative matrix factorization也被用于降维等操作上。