5.1 神经元模型
神经网络 neural networks:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。
神经元模型 neuron:神经网络中最基本的单元。
M-P神经元模型:神经元接收到n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接传递给细胞体,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过激活函数处理产生神经元的输出。M-P神经元模型如下图所示:
激活函数 activation function:神经元模型理想的激活函数是阶跃函数,但阶跃函数不连续,不光滑,实际常用Sigmoid函数,它将较大范围内变化的输入值挤压到 (0,1) 输出值范围内,所以也称为挤压函数(squashing function)。
5.2 感知机与多层网络
感知机 Perceptron:由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称阈值逻辑单元(threshold logic unit)。感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron)。
线性可分 linearly separable:存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛(converge);否则感知机学习过程就会发生振荡(fluctuation)。
隐层/隐含层 hidden layer:输入层与输出层之间的层,隐层和输出层的神经元都是具有激活函数的功能神经元。只需包含一个隐层便可以称为多层网络。
多层前馈神经网络 multi-layer feedforward neural network:每层神经元与下一层神经元之间完全互连,神经元之间不存在同层连接,也不存在跨层连接。
前馈 feedforward:网络拓扑结构中不存在环或回路,并不意味着网络中信号不能向后传。
5.3 误差逆传播算法
误差逆传播算法 error BackPropagation:迄今最成功的的神经网络学习算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练。通常说的BP网络一般是指BP算法训练的多层前馈神经网络。
BP算法基于**梯度下降(gradient descent)**策略,以目标的负梯度方向对参数进行调整。
学习率 learning rate: η∈(0,1)控制着算法每一轮迭代中的更新步长,若步长太大则下降太快容易产生振荡,若步长太小则收敛速度太慢,一般地常把η设置为0.1。
BP算法的基本流程如下所示:
BP算法的目标:最小化训练集D上的累积误差。
BP算法的更新规则:基于每个样本的预测值与真实类标的均方误差来进行权值调节,即BP算法每次更新只针对于单个样例。
基于累积误差最小化的更新规则,则得到了累积误差逆传播算法(accumulated error backpropagation),即每次读取全部的数据集一遍,进行一轮学习,从而基于当前的累积误差进行权值调整,因此参数更新的频率相比标准BP算法低了很多,但在很多任务中,尤其是在数据量很大的时候,往往标准BP算法会获得较好的结果。
如何设置隐层神经元个数?至今仍然没有好的解决方案,常使用 试错法(trial-by-error) 进行调整。
BP神经网络强大的学习能力常常容易造成过拟合问题,有以下两种策略来缓解BP网络的过拟合问题:
- 早停 early stopping:将数据分为训练集与验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
- 正则化 regularization:基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。其中 λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。
5.4 全局最小与局部最小
神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得E最小。
局部极小 local minimum:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。
全局最小 global minimum:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。
基于梯度的搜索是使用最为广泛的参数寻优方法。由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。
在现实任务中,通常使用以下策略跳出局部极小,尽可能地去接近全局最小。
- 以多组不同参数值初始化多个神经网络,按标准方法训练,迭代停止后,取其中误差最小的解作为最终参数。
- 模拟退火 simulated annealing,每一步都以一定的概率接受比当前解更差的结果。
- 随机梯度下降,即在计算梯度时加入了随机因素,使得在局部最小时,计算的梯度仍可能不为0,从而迭代可以继续进行。
- 遗传算法 genetic algorithms。
5.5 其他常见神经网络
略
5.6 深度学习
理论上,参数越多,模型复杂度就越高,容量(capability)就越大,从而能完成更复杂的学习任务。
怎么增大模型复杂度?
- 增加隐层的数目
- 增加隐层神经元的数目
前者更有效一些,因为它不仅增加了功能神经元的数量,还增加了激活函数嵌套的层数。但是对于多隐层神经网络,经典算法如标准BP算法往往会在误差逆传播时发散(diverge),无法收敛达到稳定状态。
怎么有效地训练多隐层神经网络?
- 无监督逐层训练 unsupervised layer-wise training:每次训练一层隐节点,把上一层隐节点的输出当作输入来训练,本层隐结点训练好后,输出再作为下一层的输入来训练,这称为预训练(pre-training)。全部预训练完成后,再对整个网络进行微调(fine-tuning)训练。一个典型例子就是深度信念网络(deep belief network,简称DBN)。这种做法其实可以视为把大量的参数进行分组,先找出每组较好的设置,再基于这些局部最优的结果来训练全局最优。
- 权共享 weight sharing:令同一层神经元使用完全相同的连接权,典型的例子是卷积神经网络(Convolutional Neural Network,简称CNN)。这样做可以大大减少需要训练的参数数目。
深度学习可以理解为一种特征学习(feature learning)或者表示学习(representation learning)。
传统任务中,样本的特征需要人类专家来设计,这称为特征工程(feature engineering)。特征好坏对泛化性能有至关重要的影响。而深度学习为全自动数据分析带来了可能,可以自动产生更好的特征。
参考资料
- 机器学习,周志华,清华大学出版社
- 【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集