我们的机器学习有一个输入层和一个输出层,在输入层和输出层之间,还可以有若干个隐藏层。对于没有隐藏层或者只有一个隐藏层的情况,我们称之为浅层学习。对于具有两个以上隐藏层的情况,我们称之为深度学习(图一)。
图一:深度神经网络
根据机器学习的应用情况,我们又把机器学习分为三类:监督学习(SupervisedLearning,SL),非监督学习(Unsupervisedlearning,UL),和强化学习(ReinforcementLearning,RL)。本文主要介绍这三类机器学习。
根据输出层标签的数目(输出层神经元的数目),我们把监督学习(SL)要解决的问题分成两类:回归(Regression)和分类(Classification)。如果输出层只有一个神经元,而且输出值是连续变量,这样的问题就叫回归,比如估算房子价格,估算一个电子邮件是垃圾邮件的概率等等。如果输出层神经元有多个,输出值是不连续的离散值,这样的问题就叫分类,比如手写数字的识别问题,输出层有10个神经元,即0到9十种可能;再比如某种癌症的判定可以有“是”和“非”两种可能。实际应用中,有些问题既可以看成是分类,也可以看成回归,比如垃圾邮件判断。譬如先用回归计算出一个电子邮件是垃圾邮件的概率,然后从概率再转化成“是”与“非”。这样就变成了分类问题。
监督学习的算法有很多,而且很多算法已经被收集到成熟的算法库中,使用者可以直接调用。常用的经典算法有:
1.邻近算法(K-NearestNeighbors,KNN)
2.线形回归(LinearRegression)
3.逻辑回归(LogisticRegression)
4.支持向量机(SupportVectorMachine,SVM)
5.朴素贝叶斯分类器(NaiveBayes)
6.决策树(DecisionTree)
7.RandomForests1
8.神经网络(NeuralNetwork)
另外还有一些比较新的算法,比如卷积神经网络(ConvolutionalNeuralNetworks,CNN)和深信度网络(DeepBeliefNetworks,DBN)。
有时候我们的原始数据只有输入值,却没有已知的输出值标签(Label)。这样的问题就成为非监督学习(UL)了。这可能有点不好理解:没有输出值就不能计算误差,没有误差就无法找到最佳参数,那机器怎么学习呢?
非监督学习(UL)要解决的是另外一种问题。我们喂给机器很多特征数据(输入值),是希望机器通过学习找到输入数据中是不是存在某种共性特征,结构(比如都像猫),或者数据特征值之间是不是存在某种关联。而不是像监督学习那样希望预测输出结果。非监督学习要解决的问题也可以分成两大类:输入数据聚类(Clustering)和输入特征变量关联(Correlation)。
非监督学习怎么学习呢?我们这里也是有模型(分组就是模型),模型里也有参数,比如每一组的中心位置。学习过程也是通过多次迭代找到最佳参数,比如最开始随机选择每组的中心位置,然后通过迭代找到最佳中心位置。图二所示的是一个二维数据(只有两个输入变量)的聚类。我们人眼就可以判断,输入数据可以分成三个组(红、绿、蓝)。每一个组的组员离本组的中心(图二中带X的黑色圆)是最近的(最佳中心位置)。而在多维空间中(比如10维),我们就只能靠想象了,非监督学习就可以比人更有优势把数据分组。
分成组有啥用呢?在现实中用处可就大了。比如你有大量明星照片,非监督学习(UL)的分组技术就可以帮你自动按照明星分类。或者你拍了张不认识花的照片,你想知道是什么花,你可以用非监督学习技术找到类似的花。商业上你可以把客户分组,然后根据客户类型推荐相应产品或评价客户风险。
常用的非监督学习算法有:
1.K均值聚类(K-MeansClustering)
2.具有噪声的基于密度的聚类方法(Density-basedSpatialClusteringofApplicationswithNoise:DBSCAN)
3.主成分分析算法(PrincipalComponentAnalysis,PCA)
4.自组织映射神经网络(Self-OrganizingMap,SOM)
5.受限玻尔兹曼机(RestrictedBoltzmannMachine,RBM)
另外还有一些利用量子理论发展的算法,比如量子系综算法等等。
除了上面讲的三大机器学习类型,随着机器学习的应用越来越广泛,也出现了混合型的应用。比如部分原始数据有输出值,部分没有,称为半监督学习(Semi-SupervisedLearning)。这就需要把监督学习和非监督学习结合起来。常用的半监督学习算法包括协同训练(Co-Training)和转导支持向量机(TransductiveSupportVectorMachine,TSVM)等等。
监督学习(SL)中有已知的输入数据和输出数据,相当于看着样本学习。非监督学习中没有输出数据,相当于自己学习。其学习目的是找到输入数据中存在的结构(Structure)和模式(Pattern)。强化学习即没有输入数据也没有输出数据,只有某种规则,相当于试错学习。其目的是在大量可能路径中寻找最佳决策或者路径。