综述篇
AI技术是关注高科技的投资者绝对无法回避的技术;供给侧的机器换人、自动化已经与需求侧的消费升级趋势一样不言而喻。我们从两个相对应的角度来看AI,一是人工智能(Artificial Intelligence),二是增强智能(Augmented Intelligence),前者旨在用机器代替人类进行劳动,后者旨在让机器辅助人类工作和生活;我们还把对AI的研究分为两部分,一是神经网络(Neural Network),二是机器人(Robots),前者代替或辅助目前只有人类能做的脑力劳动,后者用机器代替或辅助人类进行体力劳动。由此,AI技术主流的课题或细分领域可以划分为图1中的四个象限:
图1,出自爱就投研究
其中,左上的象限中的课题都属于机器学习(Machine Learning)的范畴,右上的象限则涉及到机器学习与大数据、分布式账本等其它算法方面的技术的结合,而左下和右下的象限涉及到机器学习与更多的人机交互、材料、能源,甚至生物方面的技术的结合。可见,机器人是技术外延最广的概念。
图2,出自艾瑞报告2015年中国人工智能应用市场[1]
图2概括了AI技术60年的发展历程,期间包括两起两落,以及2013年开始,由深度学习(Deep Learning)算法的成功带来的第三个黄金期[1]。
国内人口红利逐渐消失的社会现实,以进口替代、机器换人为导向的趋势化政策,以生产精密化、柔性化、全球化为突出特征的经济和产业要求,这些都是资本在当前引起对AI概念新一轮关注和追捧的原因。
图3,出自IDC报告THE DIGITAL UNIVERSE IN 2020: Big Data, Bigger Digital Shadows, and Biggest Growth in the Far East [2]
技术上,除了算法上的突破,数据资源和计算能力的增长也对AI的发展起着关键作用。IDC预测,到2020年末尾,全球数据总量将在2010年初的基础上增长50倍的规模[2]。其中,可能以物联网的发展,尤其是传感器的普及与数量增长为主要支柱。
图4,出自The AI Revolution: The Road to Superintelligence [3]
图4是20世纪和21世纪计算能力的历史增长和根据摩尔定律的预期增长,按照指数级增长速度,到2025年,1000美元就可以买到与人脑相当的计算能力[3]。其中,云计算、GPU和NPU进一步的发展可能是主要实现方式。
很多投资、咨询机构都从基础设施、技术、应用,三个层面来看整个AI产业。基础设施层主要是数据资源和计算能力提供,这一层中巨头垄断最为严重,因为网络效应和规模经济优势在这里作用最明显;技术层以机器学习的算法为中心,提供通用性较强的技术支持,这一层的市场集中度也很高,原因是AI有人才、技术、资源支持等方面的硬性门槛;应用层主要提供各种行业解决方案,这一层的创新机会相对多很多,越过门槛的创业团队有广阔的空间去寻求差异化。
AI技术层和应用层的初创公司普遍面对算法和数据的“鸡与蛋”问题,一方面,利用大数据优势可以训练和优化出更智能的解决方案;另一方面,只有在具体算法上不断提升,才能维持活跃用户数量与数据资源上的优势。更重要的是,如果综合利用不同细分领域的公司的数据资源,产生的价值可能是相对孤立的数据价值的平方。所以,战略合作、战略投资、兼并和收购在AI大领域可能是更加明显的常态与主题。
我们倡导通过联合投资,以资本为纽带将技术、数据、人才、市场等要素整合到一起,为独立公司打造依存系统的竞争优势;在团队优秀,有领先技术、清晰市场定位、可信商业模式的基础上,我们看好有大生态系统作为依托,或者有极强的众筹意识的企业。
技术篇
以下介绍神经网络与机器学习最基础的原理,这是AI技术的核心。爱就投尤其愿与更多关注AI的投资经理及各行业企业的战略负责人交流,寻求合作机会。创业公司CTO们就不需要复习基础知识了。
1. 神经元与前馈神经网络
人工神经网络是人类仿照生物神经网络的工作方式设计的计算模型。神经元(Neuron)是神经网络的基本单元,也称节点(Node),它从外部或其它节点收到输入(Input),并通过一个激活函数(Activation Function)来计算输出(Output);每一个输入都对应权重(Weight),即这个节点收到的每一个输入的相对重要性;偏置(Bias)可以理解为一种特殊的输入[4]。
图5,出自A Quick Introduction to Neural Networks [4]
图5是一个神经元,它有输入x1和x2,对应的权重值分别为w1和w2,以及值为1的偏置,对应的权重值为b;这个节点通过激活函数f计算出输出y[4]。常见的激活函数包括:阈值函数(Threshold Function)、S型函数(Sigmoid Function)、双曲正切函数(Hyperbolic Tangent Function)、修正线性单元(Rectified Linear Unit)、Maxout函数[5];可以通过本文的参考文献进一步了解。
逐层排列的节点构成前馈神经网络(Feedforward Neural Network),每一层中的每一个节点连接下一层中的每一个节点,同一层中的节点之间没有连接,并且初始来自外部世界的输入只会朝向输出层做单向传递,而不会构成循环;前馈神经网络分为单层感知器(Single Layer Perceptron)和多层感知器(Multi-Layer Perceptron)两种[6]。
单层感知器由一个输入层(Input Layer)和一个输出层(Output Layer)构成,输入层中的每一个输入节点将其从外部收到的输入提供给输出层中的每一个输出节点;输出节点在计算输出的过程中,对每一个收到的输入都会按照其对应的权重进行调整[4][6]。
图6,出自A Quick Introduction to Neural Networks [4]
多层感知器由一个输入层、一个输出层和中间的一个或多个隐藏层(Hidden Layer)构成;图6是只有一个隐藏层的多层感知器,其中偏置只能看做一种输入;隐藏层中的隐藏节点与外部世界没有直接联系[4]。传统的机器学习大多基于单层感知器,或者至多有一个隐藏层;而要实现深度架构,需要包含超过一个隐藏层[5][7]。
图7,出自Role of Bias in Neural Networks [8]
图7是只包含一个输入和一个输出的单层感知器,以S型函数为激活函数。这个前馈神经网络将输入x按照权重值w0进行调整,并通过S型函数计算出输出;图8描述了当权重值w0分别为0.5、1.0、2.0时,输入x和输出sig(w0×x)的关系[8]。
图8,出自Role of Bias in Neural Networks [8]
在图8中,调整权重值将改变S型函数的斜度,这是权重的作用[8]。
图9,出自Role of Bias in Neural Networks [8]
图9的网络包含一个输入、一个输出,以及偏置,同样以S型函数为激活函数。这个单层感知器将输入x按照权重值w0进行调整,同时将为1的偏置按照权重值w1进行调整,最后通过S型函数计算出输出;图10描述了当权重值w0为1.0不变,权重值w1分别为-5、0、5为时,输入x和输出sig(w0×x + w1×1.0)的关系[8]。
图10,出自Role of Bias in Neural Networks [8]
在图10中,调整偏置值将使S型曲线向左或向右移动,这是偏置的作用[8]。
2. 反向传播算法与梯度下降
训练人工神经网络,尤其是多层感知器的常用方法之一是反向传播算法(Backpropagation Algorithm),它属于机器学习中的监督式学习(Supervised Learning),即根据已知的输入变量和输出变量来学习从输入到输出的映射函数[9][10]。
根据给定的特征集合(x1, x2, …)和目标y,多层感知器可以学到特征与目标的关系,不论对监督式学习中求类别的分类(Classification)问题还是求实值的回归(Regression)问题都有效[4][10]。
反向传播算法是一种“从错误中学习”的训练方法,其过程中所用到的数据集被标定已知;在初始状态,一个前馈神经网络所有的输入和节点的权重都是随机分配的,网络对训练数据集给定的输入进行计算,得到相应的输出则被观察,并与已知的期望输出做比较,得出误差(Error);这一误差进而被传回上一层,分摊给上一层中所有的节点,使每一个节点可以调整其收到的每一个输入的权重,从而更新计算结果;这个过程将不断重复,直到实际输出与期望输出的误差低于预定门槛[9][11],人工神经网络就有了“举一反三”的能力,即实现泛化(Generalization)。
图11,出自A visual explanation for the back propagation algorithm for neural networks [12]
调整权重的常用方法之一是梯度下降(Gradient Descent),梯度即斜率,是总体网络误差与每一个权重的关系的描述,在前馈神经网络中表示为:
dError/dweight=dError/dactivation×dactivation/dweight [7]。
图11描述了误差被从输出层中的输出节点传回上一层中的节点的过程[12];可以略过图中的公式而简单将这个网络看做f(g(h(x)))形式的嵌套函数,并使用链式法则(Chain Rule)来求导这样的函数[13]。
梯度下降法的核心是,要计算权重变化对总体网络误差的变化的影响,可以先计算激活值变化对误差变化的影响,以及权重变化对激活值变化的影响;这个方法还有一个要点是,并不是一次性找到网络中所有的输入和节点的最佳权重组合,而只需要发现关键的权重及其与总体网络误差的关系[7]。
图12,出自Machine learning is fun for anyone curious about [14]
1986年,由David Rumelhart、Geoffrey Hinton和Ronald Williams联合发表的论文Learning representations by back-propagating errors阐述了反向传播算法相比其它训练方法的计算速度优势[15];反向传播算法使神经网络的适用范围得到了极大拓展[16],理论上,神经网络有点像乐高玩具,足够多的乐高方块可以构建出任何形状的物体[14]。
3. 自动编码器、受限玻尔兹曼机与深度学习
用反向传播算法来训练人工神经网络存在着局限[16],一方面,它只能实现监督式学习,无法通过非监督式学习(Unsupervised Learning)对数据中潜在的结构和分布进行建模[17];非监督式学习分为找类别的聚类(Clustering)问题和找联系的关联(Association)问题,总之,在没有已知与某个输出相对应的输入的情况下,算法要自主运行以发现和表达数据中的结构[10]。
另一方面,在2006年之前,除了卷积神经网络,对所有其它深度架构的训练从未成功过[18];由梯度扩散(Gradient Diffusion)和局部最小值(Poor Local Minima)问题,导致梯度下降法对包含多个隐藏层的神经网络训练效果不理想[19]。
2006年,多伦多大学教授Geoffrey Hinton和他的几位学生在论文Reducing the Dimensionality of Data with Neural Networks和A Fast Learning Algorithm for Deep Belief Nets中,提出了一种基于无标定数据,通过非监督式学习构建多层神经网络的有效方法,即深度神经网络的训练方法[20][21]。要了解深度学习,还需要知道自动编码器和受限玻尔兹曼机这两个概念。
自动编码器(Autoencoder)也称Autoassociator或Diabolo Network,它与多层感知器非常相似,不同之处是,自动编码器是针对非监督式学习的算法,它被训练用来重建自己的输入,而不是计算给定的输入以得到期望的输出;结构上,自动编码器输入层中输入节点的数量与输出层中输出节点的数量相等[22][23]。
图13,出自UFLDL Tutorial: Autoencoders [23]
图13是只有一个隐藏层的自动编码器,包含相等数量的输入节点和输出节点,以及值为1的偏置;可以将这个网络整体看做函数hW,b(x)=x^≈x,即对给定的输入x进行计算,得到与x相似的输出x^[23]。自动编码器还分为编码器(Encoder)和译码器(Decoder)两部分,前者寻找对给定输入的压缩表示,后者尽可能完整地重建初始输入[22][24]。
图14,出自Reducing the Dimensionality of Data with Neural Networks [20]
图14中,多层编码器网络(Multilayer Encoder Network)先将高维数据转换成低维代码,再由多层译码器网络(Multilayer Decoder Network)从低维代码恢复出高维数据;其中,编码器网络将2000个维度的输入压缩到了30个维度,而译码器网络是编码器网络的反射,它促使自动编码器在对给定的输入做压缩表示时,选择其中最丰富的特征,以使重建误差最小[20][24]。
图15,出自《深度学习》笔记[19]
图15是只有一个隐藏层的受限玻尔兹曼机(restricted Boltzmann machine, RBM),它是一个二部图(Bipartite graph)或二部结构(Bipartite Structure),只包含一个可见层,即输入层,和一个隐藏层,并且节点的可见变量(Visible Variable)或隐藏变量(Hidden Variable)都是二元变量,即取值为0或1;受限玻尔兹曼机与前馈神经网络重要的相同之处是,同一层中的节点之间不相连,这意味着在已知v的情况下,隐藏层中所有的节点条件独立,即p(h|v)=p(h1|v)…p(hn|v),在已知h的情况下,可见层中所有的节点同样条件独立,即p(v|h)=p(v1|h)…p(vn|h) [19][25][26]。如果从隐藏层得到的可见层的v1与可见层的v是一样的,那么得到的隐藏层就是可见层的另一种表达,这个隐藏层就学到了可见层的输入的特征。
由Geoffrey Hinton等人发明的深度神经网络训练方法包括两步,一是对每一单层中的节点进行逐层预训练(Layer-Wise Pre-Training),二是使用Wake-Sleep算法进行调优(Fine Tuning)[19][27]。
图16,出自Reducing the Dimensionality of Data with Neural Networks [20]
这里直接引用Hinton的原文:“预训练包含对多个堆叠的受限玻尔兹曼机(RBMs)进行学习,每一个只有一层特征探测器。一个RBM学到的特征被作为训练下一个RBM所使用的‘数据’。预处理完成后,堆叠的RBM被‘展开’,成为一个深度自动编码器,再使用误差求导的反向传播算法对其做调优(Pretraining consists of learning a stack of restricted Boltzmann machines (RBMs), each having only one layer of feature detectors. The learned feature activations of one RBM are used as the ‘data’ for training the next RBM in the stack. After the pretraining, the RBMs are ‘unrolled’ to create a deep autoencoder, which is then fine-tuned using backpropagation of error derivatives)”[20]。
图16中,最左边的部分描述非监督式的特征学习过程:多个堆叠的受限玻尔兹曼机逐层重建自己的输入,得到初始人脸图片的另一种表达;中间部分的深度自动编码器得出多次对初始输入的重建与初始人脸图片的误差;最右边的部分描述监督式的调优过程:将对初始人脸图片的重建作为输入,将初始的人脸图片作为已知的期望输出,然后使用反向传播算法不断调整节点收到的输入的权重,直到重建的输入与初始输入的误差低于预定门槛[20]。
调优所使用的算法分为醒(Wake)和睡(Sleep)两部分,前者是认知过程,期间反向对生成权重进行调整,后者是生成过程,期间调整前馈的认知权重;深度学习网络中所有的输入和节点的初始权重,并不像传统的机器学习那样是随机分配的,而是通过逐层预训练,即非监督式的特征学习来获得,所以初始权重分配更接近最佳解决方案[19][20][27]。
4. 卷积神经网络及其它
卷积神经网络(Convolutional Neural Network)是一种目前更容易训练并实现泛化的深度前馈神经网络,应用于图像识别和分类已经被证明非常有效[4][28]。AlphaGo的策略网络(Policy Networks)和价值网络(Policy Networks)用到的就是深度卷积神经网络[29]。
卷积神经网络还被应用于推荐系统和自然语言处理[30][31],其与循环神经网络(Recurrent Neural Network)结合可以做语音处理[28],以及自动生成如图17的文字描述[32]。
图17,出自Deep Visual-Semantic Alignments for Generating Image Descriptions [32]
最后,通过一个图像分类问题介绍卷积神经网络是如何工作的。限于篇幅,另外的深度信念网络(Deep Belief Network)、递归神经网络(Recursive Neural Network)、循环神经网络(Recurrent Neural Network)、LSTM网络等,放到以后的文章再说。
图18概括了卷积神经网络判断一个图片是否包含“儿童”的过程,包括四个步骤:图像输入(Input Image)→卷积(Convolution)→最大池化(Max Pooling)→全连接神经网络(Fully-Connected Neural Network)计算[14]。
图18,出自Machine learning is fun for anyone curious about [14]
首先将图片分割成如图19的重叠的独立小块;图19中,这张照片被分割成了77张大小相同的小图片[14]。
图19,出自Machine learning is fun for anyone curious about [14]
接下来将每一个独立小块输入小的神经网络;图20中,这个小的神经网络已经被训练用来判断一个图片是否属于“儿童”类别,它输出的是一个特征数组[14]。
图20,出自Machine learning is fun for anyone curious about [14]
标准的数码相机有红、绿、蓝三个通道(Channels),每一种颜色的像素值在0-255之间,构成三个堆叠的二维矩阵;灰度图像则只有一个通道,可以用一个二维矩阵来表示;图21描述了黑白的手写体数字“8”如何表示为二维矩阵[33]。
图21,出自An Intuitive Explanation of Convolutional Neural Networks [33]
将所有的独立小块输入小的神经网络后,再将每一个输出的特征数组按照第一步时77个独立小块的相对位置做排布,得到一个新数组,如图22 [14]。
图22,出自Machine learning is fun for anyone curious about [14]
第二步中,这个小的神经网络对这77张大小相同的小图片都进行同样的计算,也称权重共享(Shared Weights)[14]。这样做是因为,第一,对图像等数组数据来说,局部数组的值经常是高度相关的,可以形成容易被探测到的独特的局部特征;第二,图像和其它信号的局部统计特征与其位置是不太相关的,如果特征图能在图片的一个部分出现,也能出现在任何地方。所以不同位置的单元共享同样的权重,并在数组的不同部分探测相同的模式。数学上,这种由一个特征图执行的过滤操作是一个离散的卷积,卷积神经网络由此得名[28]。
卷积步骤完成后,再使用max pooling算法来缩减像素采样数组,将特征矩阵按照2×2进行分割,分出的每一个网格中只保留最大值数组,丢弃其它数组,得到最大池化数组(Max-Pooled Array),如图23 [14]。
图23,出自Machine learning is fun for anyone curious about [14]
接下来将最大池化数组作为另一个神经网络的输入,这个全连接神经网络会最终计算出此图是否符合预期的判断,如图24 [14]。
图24,出自Machine learning is fun for anyone curious about [14]
在实际应用时,卷积、最大池化和全连接神经网络计算,这几步中的每一步都可以多次重复进行,总思路是将大图片不断压缩,直到输出单一的值。使用更多卷积步骤,神经网络就可以处理和学习更多的特征[34]。
参考文献:
[1] 2015年中国人工智能应用市场. 艾瑞报告
[2] THE DIGITAL UNIVERSE IN 2020: Big Data, Bigger Digital Shadows, and Biggest Growth in the Far East. IDC报告
[3] The AI Revolution: The Road to Superintelligence 网址:http://waitbutwhy.com/2015/01/artificial-intelligence-revolution-1.html
[4] A Quick Introduction to Neural Networks 网址:https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks
[5] The Evolution and Core Concepts of Deep Learning & Neural Networks 网址:https://www.analyticsvidhya.com/blog/2016/08/evolution-core-concepts-deep-learning-neural-networks
[6] Wikipedia: Feedforward neural network 网址:https://en.wikipedia.org/wiki/Feedforward_neural_network
[7] 深度神经网络简介 网址:http://deeplearning4j.org/zh-neuralnet-overview
[8] Role of Bias in Neural Networks 网址: http://stackoverflow.com/questions/2480650/role-of-bias-in-neural-networks
[9] How do you explain back propagation algorithm to a beginner in neural network? 网址:https://www.quora.com/How-do-you-explain-back-propagation-algorithm-to-a-beginner-in-neural-network/answer/Hemanth-Kumar-Mantri
[10] Supervised and Unsupervised Machine Learning Algorithms 网址:http://machinelearningmastery.com/supervised-and-unsupervised-machine-learning-algorithms
[11] 神经网络与深度学习. 电子工业出版社
[12] A visual explanation for the back propagation algorithm for neural networks 网址:https://github.com/rasbt/python-machine-learning-book/blob/master/faq/visual-backpropagation.md
[13] Wikipedia: Chain rule 网址:https://en.wikipedia.org/wiki/Chain_rule
[15] 论文:Learning representations by back-propagating errors
[16] Neural Networks and Deep Learning. free online book
[14] Machine learning is fun for anyone curious about 网址:https://github.com/wxyyxc1992/datascience-practice-handbook/blob/master/machinelearning-is-fun-for-anyone-curious-about-ml.md
[17] AI Is Learning to See the World—But Not the Way Humans Do 网址:https://www.technologyreview.com/s/601819/ai-is-learning-to-see-the-world-but-not-the-way-humans-do
[18] Yoshua Bengio经典前瞻演讲(上) 网址:http://m.leiphone.com/news/201608/1FrzZKyDMXD3mA52.html
[19] 《深度学习》笔记 网址:http://www.leiphone.com/news/201608/7lwVZCXnScbQb6cJ.html
[20] 论文:Reducing the Dimensionality of Data with Neural Networks
[21] 论文:A Fast Learning Algorithm for Deep Belief Nets
[22] Wikipedia: Autoencoder 网址:https://en.wikipedia.org/wiki/Autoencoder
[23] UFLDL Tutorial: Autoencoders 网址:http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders
[24] Deep Learning, The Curse of Dimensionality, and Autoencoders 网址:http://www.kdnuggets.com/2015/03/deep-learning-curse-dimensionality-autoencoders.html
[25] Wikipedia: Bipartite graph 网址:https://en.wikipedia.org/wiki/Bipartite_graph
[26] Wikipedia: Restricted Boltzmann machine 网址:https://en.wikipedia.org/wiki/Restricted_Boltzmann_machine
[27] 论文:The Difficulty of Training Deep Architectures and the Effect of Unsupervised Pre-Training
[28] 论文:Deep learning doi:10.1038/nature14539
[29] 论文:Mastering the Game of Go with Deep Neural Networks and Tree Search
[30] 论文:Deep content-based music recommendation
[31] 论文:A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning
[32] Deep Visual-Semantic Alignments for Generating Image Descriptions 网址:http://cs.stanford.edu/people/karpathy/deepimagesent
[33] An Intuitive Explanation of Convolutional Neural Networks 网址:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets
[34] Machine Learning is Fun! Part 3: Deep Learning and Convolutional Neural Networks 网址:http://www.machinelearningisfun.com/articles/2016/7/9/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks