第5章 神经网络
1. 神经元模型
1.1. M-P神经元模型

神经元接收到来自n个其他神经元传递来的输入信号,这些输入信号通过带权重(连接权)的连接进行传递,神经元接收到的总输入值(输入信号的加权和)与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
- 激活函数
理想中的激活函数是阶跃函数(单位阶跃函数的变体),但它具有不连续、不光滑等不好的性质,因此实际常用Sigmoid函数作为激活函数。

2. 感知机与多层网络
2.1. 感知机
实战链接
(以下内容有参考李航老师的)是二分类的线性分类模型,感知机由两层神经元组成,输入层接收外接输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”。
- 有两个输入神经元的感知机网络结构示意图:

给定训练数据集,权重 w i w_i wi和阈值 θ \theta θ可以学习得到。感知机有n个输入神经元,则有n+1个参数(n个权重+1个阈值),把阈值看作是一个输入为-1的哑结点,对应的连接权重为 w n + 1 w_{n+1} wn+1,这样,权重和阈值就统一为权重的学习。 - 对于训练样例
(
x
,
y
)
(x,y)
(x,y),感知机的输出(预测值)为
y
^
\hat y
y^,则感知机权重重新调整为:
w i ← w i + Δ w i Δ w i = η ( y − y ^ ) x i w_i \gets w_i+\Delta w_i \\ \Delta w_i=\eta (y-\hat y)x_i wi←wi+ΔwiΔwi=η(y−y^)xi
公式推导
其中, η ∈ ( 0 , 1 ) \eta \in (0,1) η∈(0,1)称为学习率。感知机采用随机梯度下降法。
首先,随机选取初始权重,逐个的输入样本数据,若输出值与实际值相同,感知机不发生变化;如果不相同,就按上面方法调整权重,然后重新开始逐个点检验,直到所有点都预测正确。
感知机模型总是能将训练数据的每一个样本都预测正确,和决策树模型总是能将所有训练数据都分开一样,感知机模型很容易产生过拟合问题。感知机采取不同的初值或选取不同的误分类点,得到的结果可能不同。 - 注意:感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,所以学习能力有限。若两类模式是线性可分的,即存在一个线性超平面能将它们分开,此时,感知机的学习过程一定会收敛。对于线性不可分问题,感知机的学习过程会发生振荡,难以稳定下来,不能求得合适解。
感知机学习算法的原始形式

2.2. 多层网络
- 可以解决非线性可分问题。输入层与输出层之间的层称为隐含层或隐层,隐层和输出层的神经元都是拥有激活函数的功能神经元。包含隐层,即可称为多层网络。
- 多层前馈神经网络
- 每层神经元与下一层神经元完全互连
- 神经元之间不存在同层连接
- 神经元之间不存在跨层连接
注意:“前馈”不是说网络只能向前传播而不能向后传播,而是指网络拓扑结构上不存在环或回路。
- 神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个神经元的阈值。
2.3 sklearn 感知机
sklearn.linear_model.Perceptron(penalty=None, alpha=0.0001, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, eta0=1.0, n_jobs=None, random_state=0, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False)
3. 误差逆传播算法(BP)
实战链接
也叫反向传播算法,是迄今最为成功的神经网络学习算法。通常说的“BP网络”一般是指BP算法训练的多层前馈神经网络。不仅可以用于多层前馈神经网络,也可以用于其他类型的神经网络,如训练递归神经网络。
3.1. BP网络及算法

离散属性需先进行处理:属性值间存在“序”关系可以进行连续化;否则通常转化为k维向量,k为属性值数。
假设隐层和输出层神经元都使用Sigmoid函数。
3.1.1 标准BP算法
使用单个样本的均方误差,基于梯度下降策略,以目标的负梯度方向对参数进行调整。
- BP算法的工作流程
1.输入示例提供给输入神经元,然后逐层将信号前传,直到产生输出层的结果;
2.计算输出层的误差,再将误差逆向传播到隐层神经元;
3.根据隐层神经元的误差来对连接权和阈值进行调整;
4.该迭代过程循环进行,直到达到某些停止条件为止。
- 注意:
学习率 η ∈ ( 0 , 1 ) η\in (0,1) η∈(0,1) 控制着每一轮迭代的更新步长,太大则容易振荡,太小则收敛速度又会太慢。有时为了精细调节,输出层和隐含层更新参数时会使用不同的学习率。常把 η η η设置为0.1。
标准BP算法,每次更新只针对单个样例,参数更新的非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。需要更多次数的迭代才能达到同样的累计误差极小点。
3.1.2 累积BP算法
BP算法的目标是最小化训练集
D
D
D上的累积误差:
E
=
1
m
∑
k
=
1
m
E
k
E=\frac{1}{m}\sum_{k=1}^mE_k
E=m1k=1∑mEk
- 直接对累积误差最小化。它在读取整个训练集 D D D一遍后,即进行了一轮(one epoch)学习之后,才对参数进行更新,参数更新的频率低得多。但是,在很多任务中,累积误差在下降到一定程度后,进一步下降会非常缓慢。这时标准BP算法能更快地获得较好的解,尤其是训练集 D D D非常大的时候。
- 标准BP算法和累积BP算法的区别类似于随机梯度下降和标准梯度下降的区别。
3.1.3 如何设置隐层神经元的个数
常用“试错法”调整
3.1.4 缓解过拟合的方法
BP神经网络强大的表示能力,常常容易造成过拟合问题,有以下两种策略来缓解BP网络的过拟合。
- 早停:将数据分为训练集与校验集,训练集用于学习,计算梯度、更新连接权和阈值;验证集用来估计误差,若训练集误差降低但校验集误差升高,则停止训练,同时返回具有最小校验集误差的连接权和阈值。
- 正则化:基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\lambda \frac{1}{m}\sum_{k=1}^mE_k + (1-\lambda)\sum_iw_i^2 E=λm1k=1∑mEk+(1−λ)i∑wi2
其中 λ ∈ ( 0 , 1 ) \lambda \in(0,1) λ∈(0,1)用于对累积经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。
4. 全局最小与局部极小
4.1. 全局最小与局部极小
- 局部极小解:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。
- 全局最小解:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。
这两个解对应的误差函数值分别称为局部极小值和全局最小值。
局部极小可以有多个,而全局最小只有一个。全局最小一定是局部极小,但局部最小却不一定是全局最小。我们在参数寻优的过程就是希望找到全局最小。 - 梯度下降法就是沿着负梯度方向搜索最优解,负梯度方向是函数值下降最快的方向,若迭代到某处的梯度为0,则表示达到一个局部极小,参数更新停止,但不能保证找到的就是全局最小。要想办法“跳出”局部极小。
4.2. “跳出”局部极小的策略
- 以多组不同参数值初始化多个神经网络,按标准方法训练迭代停止后,取其中误差最小的解作为最终参数。
- 使用随机梯度下降。在计算梯度时加入了随机因素,即便陷入局部极小点,它计算出的梯度仍可能不为0,这样就有机会跳出局部极小继续搜索。
- “模拟退火”技术:在每一步都以一定的概率接受比当前解差的结果,从而有助于跳出局部极小(当然也有可能跳出全局最小),每次接受“次优解”的概率会随着时间推移逐渐减小,从而保证了算法的稳定。
- 遗传算法
5. 其他常见神经网络
略
知识点补充:
增量学习
是指在学的模型后,再接收到训练样例时,仅需根据新样例对模型进行更新,不必重新训练整个模型,并且先前学得的有效信息不会被“冲掉”。
在线学习
是指每次获得一个新样本就进行一次模型更新。显然,在线学习是增量学习的特例,增量学习可以看做是“批模式”的在线学习。
6. 深度学习
理论上来说,参数越多的模型复杂度就越高,容量就越大,从而能完成更复杂的学习任务。深度学习正是一种极其复杂而强大的模型。
6.1. 如何增加模型复杂度
- 增加隐层的数目
- 增加隐层神经元的数目
增加隐层数更有效一些,因为它不仅增加了功能神经元的数目,还增加了激活函数嵌套的层数。
然而,多隐层神经网络难以用经典算法如标准BP算法进行训练,因为误差在多隐层内逆传播时,往往会发散,而不能收敛到稳定状态。
6.2. 如何有效训练多隐层网络
- 无监督逐层训练
每次训练一层隐节点,把上一层隐节点的输出当作输入,而本层隐结点的输出作为下一层隐结点的输入,这称为预训练(pre-training)。
预训练全部完成后,再对整个网络进行微调(fine-tuning)。例如深度信念网络(deep belief network,简称DBN)。
“预训练+微调”的做法可视为把大量的参数进行分组,先找出每组较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优。 - 权共享:让一组(同一层)神经元使用相同的连接权。大大减少了需要训练的参数数目。例如CNN(常用激活函数是修正线性函数ReLU)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
记录自己的学习过程,,如有不对的地方还请指教!如果你喜欢欢迎点赞、评论O(∩_∩)O
机器学习(周志华)第5章 神经网络&spm=1001.2101.3001.5002&articleId=100106854&d=1&t=3&u=c219e03da10d41e5b8e3d92f3d6f780f)

被折叠的 条评论
为什么被折叠?



