This repository has been archived on 2020-04-25. You can view files and clone it, but cannot push or open issues or pull requests.
ml/nn/README.md
2020-02-23 22:14:06 +08:00

129 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 神经网络
一直沿用至今的“M-P神经元模型”正是对这一结构进行了抽象也称“阈值逻辑单元“其中树突对应于输入部分每个神经元收到n个其他
神经元传递过来的输入信号这些信号通过带权重的连接传递给细胞体这些权重又称为连接权connection weight。细胞体分为两
部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元阈值的差值,然后通过
激活函数activation function的处理产生输出从轴突传送给其它神经元。M-P神经元模型如下图所示
![pic](http://index.zeekling.cn/gogsPics/ml/nn/1.png)<br>
与线性分类十分相似神经元模型最理想的激活函数也是阶跃函数即将神经元输入值与阈值的差值映射为输出值1或0若差值大于零输
出1对应兴奋若差值小于零则输出0对应抑制。但阶跃函数不连续不光滑故在M-P神经元模型中也采用Sigmoid函数来近似
Sigmoid函数将较大范围内变化的输入值挤压到 (0,1) 输出值范围内所以也称为挤压函数squashing function
![pic](http://index.zeekling.cn/gogsPics/ml/nn/2.png)<br>
将多个神经元按一定的层次结构连接起来就得到了神经网络。它是一种包含多个参数的模型比方说10个神经元两两连接则有100个
参数需要学习每个神经元有9个连接权以及1个阈值若将每个神经元都看作一个函数则整个神经网络就是由这些函数相互嵌套而成。
## 感知机与多层网络
感知机Perceptron是由两层神经元组成的一个简单模型但只有输出层是M-P神经元即只有输出层神经元进行激活函数处理也称
为功能神经元functional neuron输入层只是接受外界信号样本属性并传递给输出层输入层的神经元个数等于样本的属性数
目),而没有激活函数。这样一来,感知机与之前线性模型中的对数几率回归的思想基本是一样的,都是通过对属性加权与另一个常数求
再使用sigmoid函数将这个输出值压缩到0-1之间从而解决分类问题。不同的是感知机的输出层应该可以有多个神经元从而可以实
现多分类问题,同时两个模型所用的参数估计方法十分不同。
给定训练集则感知机的n+1个参数n个权重+1个阈值都可以通过学习得到。阈值Θ可以看作一个输入值固定为-1的哑结点的权重ωn+1
即假设有一个固定输入xn+1=-1的输入层神经元其对应的权重为ωn+1这样就把权重和阈值统一为权重的学习了。简单感知机的结构如
下图所示:
![pic](http://index.zeekling.cn/gogsPics/ml/nn/3.png)<br>
感知机权重的学习规则如下对于训练样本xy当该样本进入感知机学习后会产生一个输出值若该输出值与样本的真实标记
不一致,则感知机会对权重进行调整,若激活函数为阶跃函数,则调整的方法为(基于梯度下降法):(看不懂)
![pic](http://index.zeekling.cn/gogsPics/ml/nn/4.png)<br>
其中 η∈01称为学习率可以看出感知机是通过逐个样本输入来更新权重首先设定好初始权重一般为随机逐个地输入样本
数据,若输出值与真实标记相同则继续输入下一个样本,若不一致则更新权重,然后再重新逐个检验,直到每个样本数据的输出值都与真
实标记相同。容易看出:感知机模型总是能将训练数据的每一个样本都预测正确,和决策树模型总是能将所有训练数据都分开一样,感
知机模型很容易产生过拟合问题。
由于感知机模型只有一层功能神经元,因此其功能十分有限,只能处理线性可分的问题,对于这类问题,感知机的学习过程一定会收敛
converge因此总是可以求出适当的权值。但是对于像书上提到的异或问题只通过一层功能神经元往往不能解决因此要解决非线
性可分问题,需要考虑使用多层功能神经元,即神经网络。多层神经网络的拓扑结构如下图所示:
![pic](http://index.zeekling.cn/gogsPics/ml/nn/4.png)<br>
在神经网络中输入层与输出层之间的层称为隐含层或隐层hidden layer隐层和输出层的神经元都是具有激活函数的功能神经元。
只需包含一个隐层便可以称为多层神经网络常用的神经网络称为“多层前馈神经网络”multi-layer feedforward neural network
该结构满足以下几个特点:
* 每层神经元与下一层神经元之间完全互连
* 神经元之间不存在同层连接
* 神经元之间不存在跨层连接
![pic](http://index.zeekling.cn/gogsPics/ml/nn/6.png)<br>
根据上面的特点可以得知:这里的“前馈”指的是网络拓扑结构中不存在环或回路,而不是指该网络只能向前传播而不能向后传播(下节中
的BP神经网络正是基于前馈神经网络而增加了反馈调节机制。神经网络的学习过程就是根据训练数据来调整神经元之间的“连接权”以及
每个神经元的阈值,换句话说:神经网络所学习到的东西都蕴含在网络的连接权与阈值中。
## BP神经网络算法
一般而言,只需包含一个足够多神经元的隐层,就能以任意精度逼近任意复杂度的连续函数[Hornik et al.,1989],故下面以训练单隐
层的前馈神经网络为例介绍BP神经网络的算法思想。
![pic](http://index.zeekling.cn/gogsPics/ml/nn/7.png)<br>
上图为一个单隐层前馈神经网络的拓扑结构BP神经网络算法也使用梯度下降法gradient descent以单个样本的均方误差的负梯度
方向对权重进行调节。可以看出BP算法首先将误差反向传播给隐层神经元调节隐层到输出层的连接权重与输出层神经元的阈值接着
根据隐含层神经元的均方误差来调节输入层到隐含层的连接权值与隐含层神经元的阈值。BP算法基本的推导过程与感知机的推导过程原
理是相同的,下面给出调整隐含层到输出层的权重调整规则的推导过程:
![pic](http://index.zeekling.cn/gogsPics/ml/nn/8.png)<br>
学习率η∈01控制着沿反梯度方向下降的步长若步长太大则下降太快容易产生震荡若步长太小则收敛速度太慢一般地常把η设
置为0.1有时更新权重时会将输出层与隐含层设置为不同的学习率。BP算法的基本流程如下所示
![pic](http://index.zeekling.cn/gogsPics/ml/nn/9.png)<br>
BP算法的更新规则是基于每个样本的预测值与真实类标的均方误差来进行权值调节即BP算法每次更新只针对于单个样例。需要注意的是
BP算法的最终目标是要最小化整个训练集D上的累积误差
![pic](http://index.zeekling.cn/gogsPics/ml/nn/10.png)<br>
如果基于累积误差最小化的更新规则则得到了累积误差逆传播算法accumulated error backpropagation即每次读取全部的数据
集一遍进行一轮学习从而基于当前的累积误差进行权值调整因此参数更新的频率相比标准BP算法低了很多但在很多任务中尤其
是在数据量很大的时候往往标准BP算法会获得较好的结果。另外对于如何设置隐层神经元个数的问题至今仍然没有好的解决方案
常使用“试错法”进行调整。
- 早停:将数据分为训练集与测试集,训练集用于学习,测试集用于评估性能,若在训练过程中,训练集的累积误差降低,而测试集的
累积误差升高,则停止训练。
- 引入正则化regularization基本思想是在累积误差函数中增加一个用于描述网络复杂度的部分例如所有权值与阈值的平方和
其中λ∈0,1用于对累积经验误差与网络复杂度这两项进行折中常通过交叉验证法来估计。
![pic](http://index.zeekling.cn/gogsPics/ml/nn/11.png)<br>
### 全局最小与局部最小
模型学习的过程实质上就是一个寻找最优参数的过程例如BP算法试图通过最速下降来寻找使得累积经验误差最小的权值与阈值在谈到
最优时一般会提到局部极小local minimum和全局最小global minimum
> * 局部极小解:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。
> * 全局最小解:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。
<br>![pic](http://index.zeekling.cn/gogsPics/ml/nn/12.png)<br>
要成为局部极小点,只要满足该点在参数空间中的梯度为零。局部极小可以有多个,而全局最小只有一个。全局最小一定是局部极小,但
局部最小却不一定是全局最小。显然在很多机器学习算法中,都试图找到目标函数的全局最小。梯度下降法的主要思想就是沿着负梯度方
向去搜索最优解负梯度方向是函数值下降最快的方向若迭代到某处的梯度为0则表示达到一个局部最小参数更新停止。因此在现
实任务中,通常使用以下策略尽可能地去接近全局最小。
> * 以多组不同参数值初始化多个神经网络,按标准方法训练,迭代停止后,取其中误差最小的解作为最终参数。
> * 使用“模拟退火”技术,这里不做具体介绍。
> * 使用随机梯度下降即在计算梯度时加入了随机因素使得在局部最小时计算的梯度仍可能不为0从而迭代可以继续进行。
不太懂
## 其他神经网络
### RBF网络
### ART网络
### SOM网络
### 级联相关网络
### Elman网络
### Bolttzmann网络