机器学习---神经网络

神经元模型

M-P神经元模型:
在这里插入图片描述
当前的神经元负责处理输入信号 ∑ i = 1 n w i x i \sum_{i=1}^{n}w_ix_i i=1nwixi,其模拟了生物神经网络中的电位阈值激活,通过激活函数 f f f判断总输入是否大于阈值来决定输出 y y y:
y = f ( ∑ i = 1 n w i x i − θ ) y=f( \sum_{i=1}^{n}w_ix_i - \theta) y=f(i=1nwixiθ)
理想的 y y y是一个阶跃函数,但阶跃函数具有不光滑、不连续的性质,因此用连续光滑的sigmoid函数代替阶跃函数。
在这里插入图片描述

感知机与多层网络

感知机(perceptron)由两层神经元组成,其输出层通过激活函数处理,有点类似于逻辑回归下的二分类:
在这里插入图片描述
感知机能容易地实现线性可分的与或非运算,但对非线性可分的异或运算则无能为力。
在这里插入图片描述
要解决异或这样的非线性可分问题,两层神经元是不够的,多层神经元则可以解决,多层感知机也称为前馈神经网络、深层前馈网络,其目标都是近似某个函数(如这里的异或函数)。
在这里插入图片描述
权重 w i w_i wi是能自动学习的,感知机的学习规则为: w i ← w i + Δ w i Δ w i = η ( y − y ^ ) x i w_i \leftarrow w_i + \Delta w_i \\ \Delta w_i = \eta(y-\hat{y})x_i wiwi+ΔwiΔwi=η(yy^)xi
可以看出,其更新目标是就是近似 y = y ^ y=\hat{y} y=y^ y ^ \hat{y} y^代表网络预测出来的值, y y y则为理想的值(标签)。

误差逆传播算法—反向传播

一般我们叫做反向传播(Back Propagation)算法,但也许误差逆传播更能说明BP算法的本质。
神经网络的本质的训练是找出每一层感知机合适的权重 w i w_i wi,我们相信存在一个最合适的 w i w_i wi能保证我们的输出与真值(因为是监督学习)拟合的最好,也就是代价函数要尽可能的小。在逻辑回归中,我们用的是梯度下降的方法,或者用一些高级优化算法(如牛顿法、共轭梯度等)都会不可避免的用到梯度的信息,因为梯度在泰勒展开后能够做到一阶近似,能够衡量参数变化后的误差。
比如参数 w w w在函数 J J J w 0 w_0 w0增加了 δ \delta δ,那么J会产生 Δ J \Delta J ΔJ的误差:
J ( w 0 + δ ) − J ( w 0 ) = δ ∂ ∂ w J ( w ) Δ J = δ ∂ ∂ w J ( w ) J(w_0+\delta) - J(w_0) = \delta\dfrac{\partial }{\partial w} J(w)\\ \Delta J =\delta \dfrac{\partial }{\partial w} J(w) J(w0+δ)J(w0)=δwJ(w)ΔJ=δwJ(w)

神经网络是多个感知机的链接组合,输出层与真值的误差通过梯度反向传播给参数,参数再反向修正即可,同时神经网络的特点:数据特征太多,复合的网络结构导致直接单独逐个求导效率非常低,BP算法则是一种高性能计算导数的方法。
在这里插入图片描述
这里每个神经元的激活函数都是sigmoid激活函数。
假定神经网络的输出为 y k ^ = ( y 1 ^ , y 2 ^ , . . . , y l ^ ) \hat{y_k}=(\hat{y_1},\hat{y_2},...,\hat{y_l}) yk^=(y1^,y2^,...,yl^) l l l个输出
y j ^ = f ( β j − θ j ) = σ ( β j − θ j ) \hat{y_j}=f(\beta_j - \theta_j)=\sigma(\beta_j - \theta_j) yj^=f(βjθj)=σ(βjθj) β j = ∑ h = 1 q w h j b h \beta_j=\sum_{h=1}^{q}w_{hj}b_h βj=h=1qwhjbh是第j个神经元的输入, θ j \theta_j θj是输出层第j个神经元的阈值。
代价函数假设为均方误差,也就是误差反向传播中的误差,目的是为了尽可能近似目标:
J k = 1 / 2 ∑ j = 1 l ( y j ^ − y j ) 2 J_k=1/2\sum_{j=1}^{l} (\hat{y_j} - y_j)^2 Jk=1/2j=1l(yj^yj)2

任意参数 w , v , θ , γ w,v,\theta,\gamma w,v,θ,γ的更新估计式为:
μ = u + Δ u \mu=u+\Delta u μ=u+Δu

下面我们用连接权 w h j w_{hj} whj作为参数 u u u的例子:
BP算法基于梯度下降的策略,以目标的负梯度方向对参数进行调整,对误差 J J J,给定学习率 η \eta η,有:
Δ w h j = − η ∂ J ∂ w h j \Delta w_{hj}=-\eta \dfrac{\partial J}{\partial w_{hj}} Δwhj=ηwhjJ

由上面的图5.7可以看出 w h j w_{hj} whj先影响到第 j j j个输出层神经元的输入值 β j \beta_j βj,再影响到其输出值 y j k ^ \hat{y_j^k} yjk^,然后影响到 J k J_k Jk,故:
∂ J ∂ w h j = ∂ J ∂ y j k ^ . ∂ y j k ^ ∂ β j . ∂ β j ∂ w h j \frac{\partial J}{\partial w_{hj}}=\frac{\partial J}{\partial \hat{y_j^k} }.\frac{\partial \hat{y_j^k} }{\partial \beta_j}.\frac{\partial \beta_j}{\partial w_{hj}} whjJ=yjk^J.βjyjk^.whjβj

所以 Δ w h j \Delta w_{hj} Δwhj的更新公式为:
Δ w h j = η y j k ^ ( 1 − y j k ^ ) ( y j k − y j k ^ ) b h \Delta w_{hj}=\eta \hat{y_j^k}(1-\hat{y_j^k})(y_j^k - \hat{y_j^k})b_h Δwhj=ηyjk^(1yjk^)(yjkyjk^)bh

同理也可推出其它参数的更新式,权重的更新直到训练误差达到一个很小的值。
上面的推导只考虑了单个训练样本,称为“标准BP算法”,如果是考虑了所有的训练样本,则代价函数为:
J = 1 m ∑ k = 1 m J k J=\frac{1}{m}\sum_{k=1}^{m}J_k J=m1k=1mJk

基于此推出的更新则成为“累计BP算法”,“累计BP算法”在面临训练集非常大时更新缓慢,这时“标准BP算法”迭代次数虽然较多,但往往会更快的获得更好的解。

过拟合解决方案

由于其强大的表示能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升,有两种策略常用来缓解BP网络的过拟合。

1. 早停

将数据集分成训练集和验证集,训练集用于计算梯度、阈值和权重,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回就有最小验证集误差的连接权重和阈值。

2. 正则化

在误差函数中加入一个正则项,
J = 1 m ∑ k = 1 m ( y k ^ − y k ) 2 + λ ∑ i w i 2 J=\frac{1}{m}\sum_{k=1}^{m} (\hat{y_k} - y_k)^2+\lambda \sum_{i}w_{i}^2 J=m1k=1m(yk^yk)2+λiwi2

正则项对大的连接权重进行惩罚,因为有些权重过高会导致高阶项占主导,从而过拟合,因为我们的目的是 min ⁡ w J ( w ) \underset{w}{ \operatorname{min} }J(w) wminJ(w),正则项保证了 w i w_i wi不会过大。

参考

主要来源于周志华的西瓜书和吴恩达的公开课视频,知乎上关于反向传播的直观解释也非常好。

  1. 周志华—机器学习(西瓜书)
  2. 吴恩达-机器学习
  3. 如何直观地解释 backpropagation 算法? https://www.zhihu.com/question/27239198
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值