2018年体验硅谷:人工智能、大数据和创新思维挑战营报道(三)

发布日期:2018-09-10 04:23    来源:北京大学国家发展研究院

1

 

       7月28-29日,“2018年体验硅谷:人工智能、大数据和创新思维挑战营”的师生们来到中关村硅谷创新中心,参加为期两天的人工智能workshop。

       本次挑战营的业界导师是Google高级软件工程师、Gmail智能研究组Tech Lead、机器学习专家尤思宇,曾任Facebook研究科学家、LinkedIn主任工程师。尤思宇导师在人工智能自然语言处理等方面造诣颇深,在他的指导下,同学们通过密集的训练,不仅在两天时间内完成了从上手到写出一个手写识别人工智能的过程,还领略到了硅谷工程师文化的魅力。

 

人工智能:从入门到精通

 

       首先,尤思宇导师用言简意赅的slides向同学们介绍了人工智能的各大流派、各个分支及其应用场景。五大流派包括:符号主义(symbolism)、进化主义(evolutionarism)、连接主义(connectionism)、贝叶斯主义(bayesianism)和类比主义(analogism)。广义的人工智能与机器学习同义,而从狭义的角度说,人工智能特指连接主义、贝叶斯主义和类比主义的内容——三者的共同点在于都是基于大量标注数据的操作。

       尤思宇导师还详细介绍了深度学习(deep learning)的应用范畴,包括search, advertising and recommendation(搜索引擎,广告和推荐)、computer vision(计算机视觉,如人脸识别、动图识别等)、natural language processing(自然语言处理)、Speech、Gaming和Fin Tech等等。

 

Math Refresher

 

       在系统翔实的介绍之后,尤思宇导师帮助同学们进行了数学知识的补充。

       我们首先了解到一些重要概念,如张量(Tensor)、模型(Model)和损失函数(Loss function)等,其中最常见的损失函数为交叉熵(cross entropy),预处理的归一化函数称为softmax函数。

       随后,同学们学习了模型训练(Model training and inference)的内容。模型训练是通过调整模型参数来最小化训练数据上的经验损失测量的过程,而大多数训练算法是使用反向传播来实现的,该反向传播通过计算目标函数相对于参量的梯度来实现。

       此后,尤思宇导师通过较为简单的线性回归模型介绍了标量输出的单层神经网络,并指出了线性模型下表达能力的不足,由此引出了能够添加更多非线性因素的激活函数(Activation function),比较常见的有Sigmoid和Relu函数。激活函数主要被置于多层感知的输入层、输出层和隐藏层之间,用来进行较为复杂的函数迭代。

最后是卷积层(Convolutional layer)和最大池化层(Max pooling layer)的讲解,这两种特殊的神经网络结构在图像数据处理中有着广泛的应用。

2

 

 

导师尤思宇为同学们讲解三维卷积

 

AI coding lab

 

       7月28日下午,营员们终于进入了此次夏令营最硬核的部分——人工智能workshop的上机操作模块。导师尤思宇师兄向同学们介绍了Tensorflow在机器学习中的应用,并从理论和实践两个角度带领同学们对Tensorflow的设计机制进行了学习。

       在调试好编程环境后,同学们共进行了4道题目的练习。从最基础的计算,到较为复杂的对数求和,再到对目标函数进行优化的最速梯度下降法(gradient descent),同学们都使用Juypter Notebook进行了Python普通环境与Tensorflow环境两种情境下的体验。尤师兄着重强调了Tensorflow自身对变量的symbol设计,并使用草稿纸与名称这种形象的比喻帮助同学们从无到有理解Tensorflow的含义。

3

 

 

同学们在Juypter Notebook中进行编程

       Tensloflow将变量看作符号而非具体的数值。通过这种不同于Python普通环境的变量设计,Tensorflow中的变量在实际的设定中保留了其中每个变量之间的关系而非简单的数值,进而具有了搭建模型所必备的良好性质。使用者在编程时可以先行搭建模型公式,写好依赖关系,最后向可以输入数据的所有节点输入数据,运行这个模型,tensor就像flow一样在这些节点之间流通,最后在需要的节点输出对应的结果。这个过程可以类比为在草稿纸上先推倒公式再将数值代入计算。由于各个节点之的依赖关系是固定的,变换输入节点的数值可以迅速得到依赖该节点的任意节点的数值。

4

 

Tensorflow

       Coding lab的前三道题目都较为简单,第四道题目则相对有些难度,需要使用最速梯度下降法对二次目标函数进行优化。虽然多数同学们都具备所需的编程和数学基础,但在实际动手的过程中仍然不可避免地会遇到各种各样的bug。导师尤思宇则耐心并高效地帮助同学们克服了这些困难。第一天结束时,同学们已经实现了从写简易函数到搭建tensorflow的转变。晚间,各组同学就人工智能当前的应用和局限性进行了热烈的讨论,同学们纷纷从各自的领域和自身经历出发进行思考和交流,气氛活跃。

 

 

 

5

 

导师尤思宇正在帮助同学们debug

       7月29日上午,尤思宇老师继续领导大家进行编程训练。在昨天的Python编程基础课程打下的基础上,同学们继续有条不紊地进行实战学习。首先是直接利用python语言实现函数最优化,再到利用机器学习开源软件库tensorflow实现相同功能与多元线性回归。同学们在快节奏的学习中逐渐找到编程的手感与技巧,也为下午的深度学习编程铺平道路。

6

 

导师尤思宇正在演示mnist手写数据集的下载与使用

       在上午对昨日编程入门的温习和用tensorflow实现多元线性回归的介绍之后,尤老师领导大家进行真正的手写数字识别机器学习project演练。尤老师首先带领大家下载了手写数字识别图片数据集,并对此数据集的数据结构进行介绍。接着大家尝试构建最为简单的线性训练模型对训练数据集进行模型训练,大家发现简单线性模型的识别精确度在90%左右。进而,在尤老师的引导下,大家结合昨天学过的知识,重新构建有4层hidden layer并带有relu激活函数的多层非线性模型进行训练,该模型识别精度可达到97%。最后,尤老师为我们介绍了更为高效的卷积网络训练模型,并对其代码进行了讲解,该模型识别精度可达99%。在尤老师的循循善诱下,大家上手实战,对机器学习有了更加深刻的理解。

7

 

loss curve

       晚上七点,晚间讨论照例举行。同学们对这两天code lab写代码的心得体会作出了充分交流,并对尤思宇老师“工程师”思维的实用课堂教学高度赞赏。最后,黄卓老师向大家分享了自己当年博士生涯学习写代码的心路历程,强调系统高效地学习编程的重要性,阐述了机器学习在经济学和金融学的应用前景,以“每日精彩一课”的形式对今日活动做出了总结。