美国麻省理工学院(Massachusetts Institute of Technology)是世界著名的私立研究型大学,拥有多个在工程学、计算机科学和人工智能领域的重点实验室,是全球人工智能研究的前沿阵地。共产生了97位诺贝尔奖得主、8位菲尔兹奖得主以及26位图灵奖得主。麻省理工学院在2020-21年度QS世界大学排行榜排名第一、软科世界大学学术排名第四、THE世界大学排名第五、U.S. News世界大学排名第二。
项目课程分为【机器学习与商业分析】、【深度学习应用于计算机视觉】和【深度学习与无人驾驶】三个核心方向,以直播与录播相结合的方式展开。整个学习过程由麻省理工学院教学团队全程监督,学生通过课前预习、观看录播/直播课程、直播答疑和线上分享等教学模块学习数据理论、算法结构并进行编程实践,考核成绩达标后可获麻省理工学院官方出具的项目证书。在教学团队的带领下,学生能够无差别体验世界顶尖高校的教学模式,并与来自国内外高校的同学组成小组,共同完成研究项目。
课程表示例
直播课堂
<学生感言>
杨潇可-计算机学院(国家示范性软件学院)-计算机科学与技术专业本科生
今年寒假,我有幸通过学校筛选,参加了学校组织的美国麻省理工学院Machine Learning Plus项目。本次课程与MIT的实际课程教学形式一致,通过长达五周时间的专业课程学习,我受益良多——我不仅对深度学习(Deep Learning)有了深入的认识,理解了其工作原理并实现了自己的示例,还了解到美国顶尖大学的教学模式,拓展了学习思维。感谢学校能够给予我这次机会,我会利用从本项目获得的知识经验,助力未来的学习研究。
麻省理工学院(MIT)成立于1861年,是一所历史悠久的大学,且具有深厚的计算机科学背景。颇负盛名的GNU项目就是发源于MIT,每名计算机从业人员都会使用的gcc编译器,就是来源于GNU。该项目与自由软件运动(free software movement)共同奠定了计算机学界开源、共享的基调,不仅使我们能够使用到免费的优质软件,更激励全世界的程序员们共同协作,自愿为开源社区做出贡献,计算机历史上最为庞大的项目Linux便是出自于此。目前,MIT在计算机科学与技术专业在全球所有大学中排名第一,本次项目所教学的课程,也是MIT教授本校本科生的一门重要的基础课程,它带领我了解了深度学习这一集中了业界绝大多数资源,代表着计算机业界前沿的研究领域,为我将来在深度学习的探索打开大门。
图:GNU-GCC标志
在参加Machine Learning Plus项目前,我对深度学习缺乏足够的了解。那时,由于所能够查找到的资料有限并且不完整,我苦于无法找到入门的路径,想要自学深度学习却因为没有系统性的学习资料而止步不前,只能在Github上浏览着现有的项目而不知如何去入手使用。通过本次项目的教学,我对深度学习的原理及应用有了深入的理解。我明白了神经网络包含输入层、隐藏层和输出层,是通过训练层间神经元之间的线性方程的参数,实现从输入到输出的映射。我们所熟知的“训练”过程,就是通过参数优化,调整神经元之间的参数大小,使得神经网络的输出更加接近正确结果。参数优化一般使用两种方法:梯度下降法和反向传播法。因为网络中的参数需要依靠训练集进行调整,所以训练集中数据的完整性与正确性就显得异常重要。这也是现在人工智能领域研究中作为技术壁垒的一个方面,拥有更优质数据集的研究者显然能够比其它竞争者有着更大的训练优势,可以训练出交叉熵损失更小的神经网络,与正确结果更加接近。此外,若隐藏层间没有对数据进行额外处理,那么隐藏层间的线性方程最终可以使用一个线性方程表示,这样就失去了设置多层神经元的意义,所以需要加入激活层为前一层的运算结果添加非线性变化,通常使用的激活函数包含阶跃函数、Sigmod函数和ReLU函数,其中ReLU函数较为常见。最后,输出层的结果需要进行正规化以实现输出的规范,并使用标准化的衡量标准来判断结果的正确性,前一层被称为Softmax层,后一层使用“交叉熵损失”表示正确性。通过设计神经网络的层间结构和层内结构,可以对神经网络的性能进行进一步的优化,例如卷积神经网络(CNN)、递归神经网络(RNN)、生成对抗网络(GAN)。这些网络各有特点与常用领域,CNN多用于影像数据的分析处理,RNN多用于文本分析或自然语言处理,GAN则多用于数据生成和非监督式学习应用。在本次项目的最后,我们使用MINIST数据集,进行了一次CNN的实践作为课程的大作业,这一过程使我将之前学习的理论知识实践化了,使我更加深入地掌握了神经网络的知识,有能力实现Github上的一部分开源项目。
图:Lecture课件
在本次课程项目中,我亲身感受到MIT的教学方式与我们平日上课模式的不同之处。教授会在开课前提前发布课程所需的参考资料,要求我们进行预习,完成课程所需知识的储备;在课堂上的教学中,教授的讲解,相比于包含大量知识细节的传授方式,更像是整个知识框架的介绍——除了少部分最为重要的知识点在课堂上被详细解释之外,其余部分的知识更多是通俗的简要描述;但是,与课堂上的简单讲解形成鲜明对比,课后作业的难度与深度都很高,需要我自行从教授所给的参考书或者网络上寻找课堂上所介绍知识的严格理论解释和实现原理,进行更深入的学习和理解。每个学习阶段中,教授都会安排答疑环节,对我们自学过程中遇到的难点进行讲解。我发现这种教学方式提高了课堂效率,每次lecture中,教授都能够比较快速而有计划性地完成一个新知识点的介绍,从而在整个项目后较为完整地为我们搭建一个知识框架,让我们充分享受学习的乐趣。我认为,对于探索能力和思维能力较强,有足够强的学习欲望的学生而言,这种教学方法可能更加合适,能够帮助学生快速建立对知识点的全面掌控,防止陷入对繁杂细节的机械式记忆。
图:项目课程作业示例
感谢学校能够给予我参与到项目中的机会,本次项目为我的人工智能探索之路开启了大门。通过参加这次项目,我学习到深度学习的相关知识,掌握了更加适合自己的学习方法,相信这些收获会对我将来的学习生活大有裨益。
图:项目证书
周子扬-国际学院-电信工程及管理专业本科生
本次寒假,得益于学校提供的宝贵机会,我有幸参加了美国麻省理工学院的Machine Learning Plus(商业分析方向)项目,进行了系统学习。我不仅学到了许多机器学习与商业分析方面的知识与方法,还体验到了海外名校的教学氛围与环境。在一个多月的时间里,我仔细听取教授在课堂讲授的知识,积极参与与教授的互动,并认真完成教授布置的作业及研究项目,切实感受到了自己能力的提高,受益匪浅。
项目开始前两周,我自学并掌握了Python语言的基本编程方法,并开始预习机器学习的基础知识,为正式课程顺利进行打下基础。在Python语言方面,我在阿里云天池大数据平台的实训课程中,学习了Python的一些常用包,比如Numpy,Pandas,Scipy,Matplotlib等等,我还学习了跟机器学习有关的Python编程方法,让自己在掌握知识的同时也能动手编程实践。在机器学习课程方面,我预习的是Marc Peter Deisenroth, A.Aldo Faisal, Cheng Soon Ong 三位教授编写的《Mathematics for Machine Learning》一书。这本书非常适合机器学习的初学者阅读,其中详细介绍了机器学习领域会用到的数学基本公式和理论,比如:基础的线性代数、微积分、概率分布和优化理论;还介绍了机器学习的一些核心算法,比如:线性回归,维数约简,概率密度估计,支撑向量机分类,等等。虽然我在大学课程中学过前面的一些基本数学方法,但对于后面的机器学习算法,我也是刚刚开始接触。在仔细学习这本书之后,我对机器学习有了一定初步了解,这让我在项目正式开始后更好地听懂教授的一些术语,跟上教授的讲课节奏。
在项目最初,我学习的是MIT的Suvrit Sra教授讲授的机器学习基础课程。Prof.Sra的讲解非常生动,深入浅出,在有限的课时内把机器学习最重要最核心的知识点都教给了学生。在他的课程中,我首先学习了最基本的线性分类器:感知机。感知机的实现比较简单,但是应用比较局限,只能应用于线性可分的数据集。之后我学习了逻辑回归、多项式回归等更有效的分类算法。为了应对非线性的数据特征,Prof.Sra还讲授了核方法,可以通过转换特征纬度将低维的不可分的数据集转换成高维度的简单可分的数据集。除了分类算法,我还学习了聚类算法,Prof.Sra讲授的聚类算法有K聚类、K近邻,等等。他的课程最后,还介绍了一些简单的深度学习网络:卷积神经网络,全连接网络等等,它们是比机器学习更加强大的算法网络,但是相应需要更多的计算资源。在学习完Prof.Sra的课程后,我为了巩固自己学到的知识,用Python语言编写了不同的机器学习模型,从中选择合适的模型对具有不同特征的数据集进行训练,并对测试数据集进行预测,产生尽可能准确的结果。因为是刚接触,在写代码的过程中也遇到了一些问题,不过经过与教授的交流,我对于机器学习的算法有了更深刻的了解,编写的过程也越来越得心应手,算法模型的准确度也有了不小的提升。
学习完机器学习的基础课程,项目进入商业分析应用层面的课程。这部分由MIT Sloan管理学院的Chen Hui教授和Shimon Kogan教授讲解,内容主要是金融、股票的一些基础知识,以及如何将机器学习的算法模型应用到股票的收益预测中。在这部分,我独立完成了一项个人作业:使用R语言,建立LASSO模型学习美股回报率与Fama-French 49个行业投资组合回报率的关系,预测购买美股的日回报率,决定买入或卖出,并构建PnL曲线使回报率可视化。完成作业的过程中,我自学了R语言,一边温习老师在课程中讲过的LASSO模型和股票组合的知识,一边编写相应的代码,最终完成了教授布置的任务,模型也达到了较好的收益效果。
项目的最后一部分课程由MIT Sloan管理学院的Zhu Yuting博士讲授,是有关机器学习在Marketing中的应用。在这部分,我主要学习了机器学习在个性化营销中的可行方法,通过静态、动态算法模型,更加快速有效地计算出贴合不同消费者的市场营销策略。
要顺利从项目结业,不仅需要完成平时的课程,还需要以小组形式完成一个研究项目。我们小组选择的研究课题是用机器学习模型找出能使投资组合收益最大化的一系列投资组合权重,并预测模型收益。我担任了我们小组的组长,在完成项目的过程中,我需要根据每一个成员的专业和特长,给组员分配相应的任务;在项目推进的过程中,我还需要根据完成度,按时组织会议,与组员一起讨论下一步该做什么部分,如何完善我们的报告。同时因为我之前学习Python语言打下的基础,我完成了组内大部分的代码编写工作,而其他成员也在代码实现过程中提出了建议,撰写了报告。我们小组使用Python语言,运用Monte-Carlo模拟方法,建立了Markowitz风险收益模型,找出了能使投资组合收益最大化的一系列投资组合权重。经过两周的完善,最后形成了一份较为完善的项目汇报(代码+报告)。
项目接近尾声时,为顺利完成期末测试,我用一周时间复习了之前几位教授讲授的重要知识点。因为自己确实还是机器学习方向的初学者,虽然复习到了大部分考试中的题目,但还有一部分知识是我之前从未了解过的,比如Prof.Sra在之前的机器学习课程中讲到的核方法的基本原理,考试中就考到了一些核方法的数学特性及限制范围。在今后的学习中,我应该继续深入了解这些更深层次的知识。
经过一个多月的充实的学习,我对机器学习的各种算法以及模型已经有了不错的掌握,也能编写出相应的代码去实现模型。同时我对于股票、营销等商业分析方面的知识也有了更深的了解,也学会了如何把机器学习方法应用到这些领域中。项目结束后,我顺利拿到了结业证书。通过这次项目,我发现自己在机器学习领域的兴趣,并更加明确了自己今后的发展方向。感谢北京邮电大学国际处的老师们提供的这次宝贵机会,让我成为了更好的自己!
肖汉-信息与通信工程学院-通信工程专业本科生
当下,AI已经成为一个炙手可热的话题与领域。在报名此项目之前,我已经了解过一些AI方面的皮毛,不过大多是概念上、而非原理上的内容。抱着想要“硬核”入门此领域、拓展视野,从而更好地为个人未来发展做计划的想法,我选择了美国麻省理工学院Machine Learning Plus项目中的Deep Learning方向。
项目之前,我认真预习了Python及其中Numpy库的使用、安装了相关的应用软件,并了解了AI及DL+CV领域相关的基础知识。项目一开始,我便充满自驱动力,主动地去学习和探索。这种自驱动力的来源有二,主要的来源是我对于入门DL+CV领域的强烈渴望、对于在此项目中取得好成绩的期望和对于自我的高标准、严要求。为了更积极地参与到项目中去,也为了更好的成绩,我报名成为了小组组长。
项目首先是机器学习(ML)方面的课程。对于一个只是略懂皮毛的“小白”而言,第一课中作为数学基础讲授的线性代数就已经具有相当难度。另提一句,在AI领域的数学基础范围内,在前,我的线性代数掌握得不够好;在后,我还没有学概率论。这种“前不着村、后不着店”的尴尬处境促使我努力自学、积极翻阅材料并与同学交流。例如,为了弄清向量间的计算及表示方法,我查阅了海量的论文与资料,最后才确定了点积、向量积的两种不同的表示方法,并从概念上辨清了它们。如此耗费了大约整整三天,我认真地完成了第一课作业,结束了第一课的学习。之后的四五课我亦是如此认真:在论坛里,经常能看到我发布的提问帖子;我也曾在直播课中向教授提出过问题;我还经常“缠着”其它同样报名此项目的同校的同学,“追在屁股后面”探讨问题——我认为,这是我最主动、也是最“豁出去”的一次学习经历。值得纪念的是,在第二课作业之中,我写出了人生中的第一个AI算法:一个简单的感知机。于我来说,这就是我对于AI领域的“hello world”。到第六课时,我们被通知第一次作业只用提交第八次课的课后作业。我生出一种无名的失望,因为我的所有课后作业都是很认真地做的、且自认为做得很完美的,但教授只能看到其中的十分之一。本着认真负责的态度和“不要骗自己”的信条,我依然高质量地完成了余下的所有作业,结束了ML部分的学习。在此部分内:作为学生,我系统而全面地了解了机器学习领域的一些基本算法及其背后的数学原理,虽然遗憾的是,我没有弄懂所有的细节,且编程实践的强度还远远不够,但总体上,我想方设法克服了困难,并认真地完成了学习。作为小组组长,我尽职尽责,在每次直播课程及截止日前主动提醒组员,展现了良好的领导力与统筹力。
图1 我的第一个感知机模型
之后,项目进入到DL+CV的部分。相较于前一部分基础而系统的知识,这部分的知识更加贴近实际应用,但也更高级、更独立、更无迹可循——这部分的十节课,每一节课都对应着一个实际的应用场景与领域,且都是一门学问,有着一定的入门门槛,故难度也大幅提升。另一项改变是,这一部分没有随堂练习,而是要求我们提交个人项目与小组项目,这对于我的时间管理和自制力提出了一定的要求。在这一部分,在学习完课内知识后,我会在网络上进一步搜索并学习相关方面的内容,包括:首先,该模型的工作原理及此方面的最新进展;其次,该模型在现实之中的应用领域;然后,该模型的代码及实现;最后,该模型还有哪些可以创新及改进的地方。通过这样的学习,我了解了RNN、Auto Encoder和GAN等著名的模型及其实际应用。但遗憾的是:由于时间及个人水平的限制,我不能亲自运行或编写所有的模型;对于每个领域内的了解也仅限于最著名、最普遍的模型,而没有能够了解它们的一些变例。我选择在进行完这十次课之后再开始进行个人项目及小组项目。个人项目是关于手写数字识别的,所使用的数据集是大名鼎鼎的MNIST数据集。这个项目的难度不大,我对其早有耳闻、且代码通过tensorflow官网上的例程就能获得——既然难度不大,那就做到最好。我编写并运行了代码,且利用控制变量法观察了各种参数对于神经网络性能的改变,并观察了不同卷积层内卷积核的参数情况,得出了卷积特征从低级到高级、从局部到整体的与已知一致的结论。
进入小组项目后,由于组内没有同校同学,陌生的人际关系无形中增加了障碍,且大家的年级有高有低、水平参差不齐,我在经过调查之后合理地安排了各成员的工作。我与另一名同学负责搭建FCN类中的U-Net模型,但实际上整个模型都几乎由我一人完成。我经历了:自己搭建-遭遇失败-归纳问题-借鉴他人-查询资料-重建模型-调试参数-撰写报告的过程,连续两天熬夜到两三点,只为调试模型、等待测试的结果(PC性能有限);最后的报告也是由我整合并润色。那段时间我确实很累,但我觉得在学习过程中能者多劳、多劳多得,是累并快乐着。
图2 我的MNIST项目报告
图3 我所负责的小组的FCN项目报告
提交了两份项目报告及程序,我终于安下心来,面对项目的最终考核。但这次考核对于我来说却是一次挫折:虽然我自认为已经扎实地学到了一些东西,但面对从未见过的题目还是慌了阵脚,考试成绩最终也不甚理想。不过,得益于我出色的过程性发挥,我依然取得了89.25分的好成绩。我还作为该项目代表发言、登上信息门户报道,受到老师和同学们的一致好评。
图4 我在北京邮电大学信息门户上发表的学习感想
截至2021年2月21日,我在平台上记录的学习时长已达7676分钟,实际时长已过万分钟。经历此次学习交流,我对ML原理及DL+CV领域有了初步、广泛的了解,能够简单应用pytorch及tensorflow等工具。最重要的是,我学会了如何主动而深入地探索一个崭新的领域,并以此为基础规划自己的未来。
图5 平台学习记录,学习时长达7676分钟
周子琦-国际学院-电信工程及管理专业本科生
在参加这个项目之前,我曾经参与过一个关于深度学习加速芯片的实习项目。在那段实习经历中,我虽然只进行了最基本的工作,但是依然可以窥见神经网络在运行时壮阔而美好的动态。很难想象是怎样的天才将脑神经的连接方式运用到计算机中,让计算机有了不断逼近人类学习能力的基本技能。
抱着这种简单的兴趣和爱好,我参与到本项目中。一开始总是十分困难的,作为一个只在假期随便在mooc上学习过一星半点的python知识的小白,最开始在python上进行各种classification运算已经让我感到十分费力,更别提一天一更新的课仿佛一节高速前进的列车,而我仿佛骑着一辆自行车拼命追赶。教授给予我们的资料复杂而多样,从外网blog上大神的代码,到GitHub上丰富的电子版教材,我陷入其中,一时之间手忙脚乱。不过感谢我之前的某个暑假随手学的python基础以及过去的实习经历,让我上手逐渐容易了起来。我逐渐适应了教授讲课的速度和结构,前半部分的ML课程包含众多基础的数学算法,一边学习,一边回忆在之前的课内课程中,哪一门课程讲了对应的知识,讲授的方式和这位教授有哪些不同,这样的思考逐渐形成了有意义的输出,成为了一种学习乐趣。
随后的DL课程是我更加感兴趣的部分。结合之前ML部分的知识,两位教授深入浅出地解释了更多精妙的算法,并且讲授了其应用场景。同时,教授也向我们提供了大量的使用数据,比如mnist数据集。虽然只是比较浅显的介绍,但教授通俗的讲解确实让我体会到了这些算法的精妙和前辈的智慧。比如通过convolution和deconvolution进行的重构算法,3D渲染等等,我们在生活中经常能见到这些技术的应用场景,而了解其背后算法让我对这些技术更加赞叹和欣赏。在DL课程中,让我印象最深刻的是实践环节。在获得适当的数据后,我们被要求进行一些基于tensorflow的简单的网络搭建。这也让教授讲述的算法由比较空泛的理论知识落实到了实践,让我有一种终于彻底“入门”了的感觉。同时,小组作业的难度则更上一层楼,我们被要求合作训练一个语义分割的网络。小组是由主办方任意分配的,我们在合作中不断的磨合,也简单地互相认识了彼此,我们组中有电脑发烧友组长,努力推动小组作业的进度,也有像我一样的初学者,懵懵懂懂地为小组作业添砖加瓦。好在我们最终顺利完成了一个基于U-net的简单的网络,且准确度达到了80%左右,虽然不是最优的结果,但至少我们的尝试是有意义的。
图:小组作业
课程结束后,我时常反思在这次课程中学到了什么。首先,在本次项目中,我更加结构化地了解了关于机器学习的数理知识,在对知识体系中详细的推导以及上层的应用场景有了深刻的认识,完善了我在机器学习方面的知识体系。在课程中,老师提供了大量的资料,供我们进行自学和实操,这些资料也成为我本次学习的收获之一。对于我来说,更有意义的是在DL课程中,我了解到更多精妙的算法以及对应的应用场景,更在大作业和个人作业中对所学知识在进行了实践。这些当下最先进的技术不但让我对DL部分讲述的理论知识有了更深入的了解,更让我对CV方向的研究充满了兴趣,进而激发了我参与更多有关学习活动的愿望,也让我对自己未来的进修方向有了新的想法。
另外,还有一件事情让我印象深刻。这其实和我所学习的知识没有任何关系,却让我时常回想起来。在DL课程中,一位女教授提到有关bias的问题。机器学习虽然表面上看是机器在学习,但实际上学习的根基还是人类提供的数据。教授曾经通过这样一个问题启发我们“什么是看见?”我曾以为看见就是看到和接受物体反射的光线,而这门课程让我意识到,或许看见还包含着另一种意义,那就是理解。我们在看到事物的同时,也在试图理解事物。然而,如果我们将人类的偏见带入机器,机器又是否真的能“看见”呢?对于边缘人群如女性或有色人种,机器识别的准确率大幅下降。面临这样的问题,我们的“机器”是否还可以被视为“没有偏见”“公正”“无私”的呢?
最后,我想感谢自己选择了这一项目。我为这些课程花费了大量假期时间,但这些光阴没有白费,这次项目是一次非常有意义的探索与发现。我认为它对于我以后的职业选择、深造方向,乃至价值观都有或深或浅的影响。另外我也想感谢学校给予我这次学习机会,让我认识了厉害而友好的其他学校的同学,让我见识到了课内知识到达不了的更加艰深的领域。