这是我之前在实验室的机器学习讨论会上的分享。
Table of Contents
- 人脑的启示
- 感知器算法
- 双层感知器
- 反向传播算法
-
应用
人脑的启示
人的神经是由一个个神经元组成的,包括树突、轴突、胞体等。
人脑具有以下特征:
- 超过100亿个神经元
- 神经元响应时间:约1毫秒
- 人脸识别:约0.1secs
- 平均每个神经元与1000个神经元相连
- 计算高度并行
人脑擅长于模式识别、联想,并可以容忍噪声;电脑则擅长于计算,罗辑清晰。人脑的操作速度很慢,并且运算的结果不可靠,但其可以大规模地并行计算;而电脑的运算速度相当快,并且结果非常可靠。
模拟神经元的结构和工作方式,是感知器算法的主要机制。例如,刺激程度决定了这个神经元的兴奋程度,并且与其他神经元连接紧密时,信号强度大;连接疏松时,信号强度弱。
感知器算法
感知器算法的原理非常简单:
首先对输入信号的求和,当超过阈值时即使感知器兴奋。算法描述如下(from A Course in Machine Learning):
从算法描述可以看出,学习的意义在于向正确的结果靠拢。两组同样的数据,第一次分错了,第二次将会更加接近正确结果。
MaxIter是需要人工指定的参数,如果MaxItger 过大,容易发生过拟合;过小则容易学不到什么东西 。
同时,整个学习的过程就是在一个平面上寻找判别边界。为了简化问题,假设有一个线性可分问题,b=0,则感知器算法即在寻找分界面B:
B就是虚线,而由wd组成的向量w垂直于B:
由此也可以得出,w的绝对大小并不重要。
感知器算法的特点有:
-
在线学习,不需要一次性考虑整个数据集
-
错误驱动,当分类正确时,不进行学习操作
-
对训练集的输入顺序敏感。例如,有10000条训练数据,前9000条数据在默认的参数上就分类正确,则此次迭代只有最后1000条数据得到了训练。因此,不断地调整训练数据的顺序将有助于加快训练速度:
朴素的感知器算法仍然存在一定的缺陷,例如后训练的数据会更加重要。参考上面举得例子,如果有10000条训练数据,前100条数据已经训练出足够好的分类器,一直到最后一条之前全部分类正确。最后一条数据就会掉了一个在99.9%的数据上工作得都非常好的分类器。
从以上的分析也可以看出,单层的感知器算法只能用于解决线性可分的问题。
算法改进
投票感知器算法
投票感知器算法会在训练时记录每一个分类器的存活时间,在最终预测时根据权重进行投票。
但是由于需要保存每一个超平面,并且预测时需要使用每一个分类器进行预测,时空开销将非常大。
平均感知器算法
平均感知器算法仅记录加权平均后的分类器:
除此之外,还有像信任权感知器、被动主动感知器、权表决感知器等。信任权感知器通过对输入添加信任权重的概率分布,使得信任度大的输入会得到更大幅度的修正;被动主动感知器可以主动修正学习速率;权表决感知器会为每一维输入产生一个分类器,最终由虽有分类器结果汇总投票产生,并对错误的分类器予以惩罚。
双层感知器
在双层感知器中,将有两层感知器需要训练。除此之外,在单层感知器中,我们使用的是线性函数来计算感知器是否被激活;这种用于判断感知器是否激活的函数叫做激活函数(link function)。双层感知器中,隐含层通常采用非线性的sigmoid(tanh)函数来作激活函数。
对于双层感知器来说,它可以模拟任意连续函数;隐含层节点越多,函数越复杂。如果隐含层层数再增加,则可以模拟任意函数。
反向传播算法
对于感知器计算输出的过程来说,相当于正向传播;而通过计算结果反馈给隐含层和输出层来调整参数,则属于反向传播。例如:
我们可以通过输出结果与标准值的误差,来修正向量v和矩阵w。常用的方法是梯度下降法,目标函数为结果误差的几何均值。通过对目标函数f求w和v的偏导,就可以求出v和w的梯度。
目标函数:
计算结果:
总结
优势
- 数学基础 如果有线性解则可以找到(单层)
- 可以容忍噪声
- 可以处理任意连续/非连续函数(多层)
- 可以学到复杂的输入输出映射关系
劣势
- 知识表示不易解释
- 依赖于hidden层激励函数
- 输入输出的设计对结果具有影响
- 参数较多(神经元数目、层数、学习速率等)
- 可能需要使用者的经验
- 训练时间长
- 过拟合