机器学习——神经网络

一、神经网络

  神经网络是由具有适应性的简单单元组成的广泛并行互连的网络。神经网络中最基本的成分是神经元模型。以下图常见的“M-P神经元模型”为例,在这个模型中,神经元接收到来自 n n n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元收到的总输入值将与神经元的阈值进行比较,然后通过激活函数处理以产生神经元的输出。
神经元模型

  理想中的激活函数是左下图所示的阶跃函数,但是阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数,典型代表是对数几率函数,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”。

激活函数
  把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。

二、多层网络

  常见的神经网络是如下图所示的层级结构,每层神经元与下一层的神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”。

“前馈”并不意味着网络中信号不能向后传,而是指网络拓扑结构中不存在环或回路。

在这里插入图片描述
  多层前馈神经网络中,输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含函数功能神经元。
  神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值。神经网络学到的东西,蕴涵在连接权与阈值中。

多层前馈网络有强大的表示能力(万有逼近性)
仅需一个包含足够多神经元的隐层,多层前馈神经网络就能以任意精度逼近任意复杂度的函数。
但是,如何设置隐层神经元是未解决问题,实际上常用“试错法”。

三、误差逆传播算法(BP算法)

BP算法
  对训练样例 ( x k , y k ) (x_k,y_k) (xk,yk),假定神经网络的输出为 y ^ k = ( y ^ 1 k , y ^ 2 k , ⋯   , y ^ l k ) \hat {y}_k=(\hat y_1^k,\hat y_2^k,\cdots,\hat y_l^k) y^k=(y^1k,y^2k,,y^lk),即 y ^ j k = f ( β j − θ j ) \hat y_j^k=f(\beta_j-\theta_j) y^jk=f(βjθj)(表示的是第j个神经元关于第k个样例的输出)。神经网络在 ( x k , y k ) (x_k,y_k) (xk,yk)上的均方误差为
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac 1 2\sum_{j=1}^l (\hat y_j^k -y_j^k)^2 Ek=21j=1l(y^jkyjk)2
  BP神经网络中有(d+l+1)q+l个参数需要确定:输入层到隐层的dq个权值、隐层到输出层的ql个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为 v ← v + Δ v v \leftarrow v+\Delta v vv+Δv
  BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,给定学习率 η \eta η
在这里插入图片描述
  BP算法的工作流程:对于每个训练样例,BP算法先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已经达到一个很小的值。
在这里插入图片描述
  神经网络就有强大的表示能力,BP神经网络经常出现“过拟合”的情况,其训练误差持续降低,但是测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合。方法一,“早停”:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。方法二,“正则化”:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和,仍令 E k E_k Ek表示第 k k k个训练样例上的误差, w i w_i wi表示连接权和阈值,则目标函数改变为:
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\lambda \frac 1 m \sum_{k=1}^m E_k+(1-\lambda)\sum_i w_i^2 E=λm1k=1mEk+(1λ)iwi2

偏好比较小的连接权和阈值,这样会使网络输出更光滑

其中 λ ∈ ( 0 , 1 ) \lambda \in(0,1) λ(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酱香编程,风雨兼程

你一打赏我就写得更来劲儿了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值