ML03-神经网络
西瓜书学习笔记
James
2019-05-23
神经网络
神经元模型
神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对之恩是世界物体做出的交互反应。
神经网络中最基本的成分是神经元(neuron)模型。
神经元接受一系列神经元传来的输入信号,这些信号通过带权重的连接进行传递,神经元将接收到的总输入与神经元的"阈值"(threshold)进行比较,然后通过"激活函数"(activation function)处理产生神经元的输出。
激活函数
理想中的激活函数能够将输入值映射为${0,1}$。
Sigmoid函数能够把较大范围内变化的输入值挤压到 $(0,1)$ 之间,因其连续且光滑,实际中经常被用作激活函数。
$$sigmoid(x) = \frac{1}{1+e^{-x}}$$
感知机
感知机(Perceptron)由两层神经元组成。一个简单的感知机如下图所示:
对于线性可分的问题,即存在一个线性超平面能将问题分开,感知机的学习一定会收敛(converge)。要解决非线性可分的问题,我们可以使用多层功能神经元。
神经网络学到的东西,蕴含在链接权与阈值之中。
误差逆传播算法(Back Propagation,BP)
对于每个训练样例,BP算法执行以下的操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差(损失函数/目标函数,Loss function/Object function),再将误差逆向传播至隐层神经元(反向传播,链式求导),最后根据隐层神经元的误差来对链接权和阈值进行调整。
标准BP算法针对于一个训练样本更新连接权和阈值,更新非常频繁。累计BP算法针对累计误差最小化,他在读取整个训练集一遍后才对参数进行更新,更新频率低。
Hornik等证明,只许一个包含足够多神经元的隐层,多层前馈网络能以任意精度逼近任意复杂度的连续函数。如何设置隐层神经元的个数,在实际应用中通常靠“试错法”调整。
BP神经网络经常遭遇过拟合,常用的两种缓解过拟合的方法为:
早停(early stopping)
将数据划分为训练集和验证集(validation set),训练集用来计算梯度,更新参数,验证集用来计算误差。若训练集误差降低,但验证集误差上升,则停止进一步的训练。
正则化(regularization)
在误差目标函数中增加一个用于描述网络复杂度的部分。