有监督学习的目的,是通过将已有的输入数据和输出数据,输入计算机,让计算机学到某种规则,使得大多数的输入数据通过这种规则得到的预测数据,与预先告知机器的输出数据尽量匹配。在面对新的输入数据但不知道输出数据时,机器通过学到的规则给出较为合理预测数据。 每个输入数据样本通常是多维的,用以描述这个样本,每个维度又称为特征。特征可以用很多个,如人有身高、体重、国籍、身份证号等特征,但是不是每个特征都是有用的,对于不同的问题所要考虑的特征不同。这也是我目前对机器学习的看法,那就是数据比算法更重要,数据决定了算法性能的下限。如果在处理某些问题时,已有的数据样本量足够大,对预测结果有影响的特征都被充分考虑到,特征收集的过程中噪声很小,并且每个特征取值的分布都符合客观事实,那么即使用最简单的算法,也能得到非常好的结果。反之如果数据量太小,不足以使计算机能够发现特征与标签的规律,或者有某些特征由于客观或主观的原因没有被考虑到,或者数据中夹杂着大量的噪声,使得计算机反而更难学得特征与标签的规律,那么不管用多么精妙的算法,都不会得到太好的结果。 在得到数据之后,不同的算法对数据有不同的处理。Fisher线性判别的思想非常简单,就是将多维特征映射为一维,每一维特征在映射的过程中的重要程度不同,经过WTX+b的线性映射之后得到一个标量,然后直接利用这个标量进行判断。决策树在充分考虑每个类别的特征数据的分布之后,将特征空间划分为若干区域,并对每个区域分别进行判断,当然划分的标准有很多。随机森林是基决策器为决策树的集成算法,简单来说就是单独训练多个决策树之后进行投票,这样可以在一定程度上减少单个决策树的失误。SVM的思想与Fisher相反,将特征映射到更高的维度上,使得在原始特征空间无法线性可分的数据,在高维特征空间中可以线性可分。尤其是核技巧的提出,将两个原始数据输入核函数,可以直接得到它们在高维特征空间进行运算的结果,大大简化了求解的运算量。在高维空间中,SVM试图找到一个决策面,可以把所有同类的样本分到同侧,不同类的样本分到两侧,并且决策面距离两类样本的距离(边际)要尽可能大,这样可以使出现在决策面附近的样本尽可能分类正确,从而提高泛化性能。 神经网络其实是在求解一个高维方程组,只不过它的提出者声称受神经元细胞的工作机制的启发,便将这个方法命名为神经网络,事实上并没有确切的生物学依据。
人类约有40万亿个细胞,其中神经元细胞大约为500亿个,如果让每个神经元细胞在某一秒同时向大脑报告它获取的信息,那么大脑需要多久才能接收、整理这些信息呢?更不要说再分别告诉每个细胞接下来要怎么做。我们每个人在日常生活中,都没必要去管这些事,这些工作都依赖于生物的本能,通过经验去形成神经元之间的链接,而人脑只是负责最顶层的工作。每一个神经元细胞在接受到某些信息后,加工处理发送给下一个神经元细胞,但是它对信息所做的处理可能微乎其微,只不过在经过数量足够多的传递之后,才会形成某些有意义的信息。这也是我对人工智能的看法,那就是目前的技术还远不能实现真正的人工智能。AlphaGo会下围棋,但是它不能和人类下跳棋象棋,不会唱歌跳舞,不会做除了人类教给它的围棋以外的任何事。如果一个人从出生开始就只下围棋,学习各种棋谱,不必考虑衣食住行等任何事,他未必下不过AlphaGo。没有意识的机器之于生命,再高效也只是工具,而实现人工智能,必须去探索隐藏在意识背后的生物本能。(不知不觉写跑偏了,不过本着多歧为贵的学术态度,把这段无关的内容引起来,表达一下自己的看法。)
传统的神经网络的每一层,将从上一层得到的数据x=(x1,x2,…,xn)经过WTx+b的线性映射后,再经过激活函数进行非线性变换,这就是一个神经元内部的操作。而多层的神经网络,我们可以想象为数据从网络的头部一层一层传输到尾部,但实际上就是将σ(WTx+b)进行多次的嵌套,最终得到一个预测值y*。接下来根据y*与标签的误差,进行反向传播,不断地调整网络内部的W和b,使得更多的y *能够接近标签。其中可能会涉及在高维空间困于局部最优值,或学习率太大导致在最优值附近波动等问题。三层神经网络可以模拟任意决策面,第一层表示足够多的直线,第二层表示这些直线一侧区域的交集,第三层表示不同区域的并集。神经网络是一个粗暴的算法,它可以把不规则决策面分割为足够多的小段,通过不断调节网络内部参数,不断逼近真实的决策面。而由于局部最优解问题,它的性能依赖于参数随机初始化的取值,超参数的选择,并且需要一定的算力。