机器学习发展简史
神经网络技术起源与上世纪50年代。当时叫做感知机。拥有输入层,输出层和一个隐含层。这种感知机被称为单层感知机
1959, 机器学习被定义为不直接编程的情况下赋予计算机学习能力。
1974年哈佛大学的Paul Werbos发明BP算法。BP算法正是用来求解这种多层复合函数的所有变量的偏导数的利器。
上世纪八十年代人类发明了多层感知机(指包含多个隐含层)。在训练算法上使用BP算法,多层感知机改名叫做NN(神经网络)。多层感知机(神经网络)的效果远远好于单层感知机。科学家们都相信层数越高,预测效果越好。可惜事与愿违。层数越高,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25,层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。这被称为梯度消失现象。梯度消失导致神经网络容易陷入局部最优解。导致深层的神经网络还不如浅层的神经网络的预测效果。
1995年,支持向量机(SVM)被提出。
1998年,机器学习更科学的被定义为如下:计算机通过处理任务T,并被P进行测量,从而产生了经验E。如果E最终改善了任务T的结果,就成为机器在经验E中进行了学习。
2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层。从而开启了“深度神经网络(DNN)“的研究热潮。注意,DNN没有具体的定义,在不同的场景下,可以被认为“深“的层数都不相同。
机器学习分类
监督学习:
我们为算法提供了标准输入和标准答案。然后让让程序对其他情况作出预测。
回归问题
首先要给出训练集
然后给出假设,假设函数中有一些可变参量。如假设函数设置为一个一次函数(线性假设类),可变参量设置为斜率和截距。这就是学习算法的参数
然后利用假设来将通过输入产生输出。
下一步,设定评价函数。比如在线性拟合问题中,评价函数可以设置为实际值和预测值的平方差之和最小。
下一步,开始学习过程,首先将参数向量设置为零向量
梯度下降算法(Gradient Descent):初始点向周围遍历,检查哪一个方向为上述的评价函数取值最小。然后向该方向移动。
最后等待算法收敛。出现的结果可能会有
牛顿方法
通过迭代算法寻找位置方程的解。预估一个解,计算解处的斜率和值,然后推测下一个预估解。
分类问题
对于目标数据库中存在哪些类是知道的,要做的就是将每一条记录分别属于哪一类标记出来。与此相似但又不同的是,聚类是在预先不知道目标数据库到底有多少类的情况下,希望将所有的记录组成不同的类或者说“聚类”。常用logistics回归算法(判别学习算法)。
生成学习算法:对不同的类型进行建模,然后对输入的新数据进行分析,分析他更符合哪一类。例如高斯判别分析。假设两个类别的分布都属于高斯分布,然后拟合出各自高斯分布的参数,利用该模型分析新数据究竟属于哪一个集
朴素贝叶斯算法
最广泛应用的两种分类算法是朴素贝叶斯模型和决策树模型。朴素贝叶斯模型是基于贝叶斯定理的。数据样本有几个属性。根据每个属性对分类的影响进行判定。(每个属性对于每个类别的条件概率)
支持向量机算法(SVM)
一些学者认为支持向量机算法是最好的机器学习算法。也可以用来产生非线性分类器。
神经网络算法
支持向量机之前最好的机器学习算法 相对复杂。输入层–>隐藏层(可以有多个)–>输出层,可以用来产生非线性分类器
无监督学习
不会提供任何标准答案。而是让算法自动寻找输入的相关性。最常见的用法是发现隐藏数据下面 的相关性。
聚类问题
聚类问题可以自动判定图片中像素进行分组,这对计算机视觉研究很有用。比如用于将图片进行分块,然后依据这个结果去重构3D视觉。还有社会网络分析等。
鸡尾酒会问题
在嘈杂的背景噪音中将所需要的人的声音提取出来。
ICA matlab svd((repmat)
强化学习
长时间最连续决策
回报函数:类似区训练一只狗。只需要告诉机器做的决定是会得到奖励还是会得到惩罚。常用于对无人车的训练。这样就可以不用写一些非常复杂的控制程序了。
重要概念
欠拟合:所拟合出的规律明显不符合数据集
过拟合:所拟合出的规律虽然符合数据集,但是明显不符合常识,只是体现了数据集中的巧合
BP算法:
损失函数可以表示为如下
其梯度向量为:
复习下链式求导法则:
好的,那我们就可以依据该法则计算梯度向量了。
在这样的计算中,就产生许多冗余路径,比如说上图中z对u的偏导数被计算了两次。BP算法就是用于简化这种计算冗余的