西瓜书+南瓜书学习Task4——第五章

5.1神经元模型

(1)神经网络:是具有适应性的简单单元组成的广泛并行互连网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。(适应性表现为训练出的数学模型可以根据需求来自动的调整自己的参数)

(2)M-P神经元模型

1. 在生物神经网络中,每个神经元都与其他神经元相连,该神经元兴奋时,会向相邻神经元转递化学物质,如果含量超过了它相邻神经元的“阈值”,则表现为“兴奋”,否则处于“抑制”状态。

2. 数学表示:

其中x_{i}指对应神经元的输入w_{i}是第i个神经元连接的权重\theta为人为设定的“阈值”,如果该差值满足对应激活函数的条件,则输出y=f()

3. f(x)的选择:

  • 阶跃函数

\sum_{i=1}^{n}w_{i}x_{i}-\theta\geq 0,则表示对应神经元“兴奋”;若\sum_{i=1}^{n}w_{i}x_{i}-\theta\leq 0,则表示对应神经元“抑制”。然而,该函数是分段函数,不连续,不光滑,无法求导,不具备良好的数学运算性质,因此我们常采用Sigmoid函数作为激活函数。

  • Sigmoid函数

可以看出,该函数把较大范围内变化的输入值挤压到了(-1,1)范围内,具备良好的数学性质。

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

5.2感知机与多层网络

一、感知机——激活函数为阶跃函数的神经元

(1)组成:感知机由两层神经元组成,输入层(非M-P神经元)接受外界信号传递给输出层,输出层是“M-P神经元”。

(2)数学模型:y=sgn(\boldsymbol{w^{T}x}-\theta )=\left\{\begin{matrix}1,\boldsymbol{w^{T}x}-\theta \geq 0 & \\ 0,\boldsymbol{w^{T}x}-\theta < 0 & \end{matrix}\right.

其中,\boldsymbol{x}\in R^{n}是样本的特征向量,是感知机模型的输入;\boldsymbol{w},\theta是感知机模型的参数,\boldsymbol{w}\in R^{n}为权重,\theta为阈值。

(3)学习策略:

随机初始化\boldsymbol{w},b,将全体训练样本代入模型找出误分类样本,假设此时误分类样本集合为M\subseteq T,对任意一个误分类样本(\boldsymbol{x},y)\in M来说,以下公式恒成立:

(\widehat{y}-y)(\boldsymbol{w^{T}x}-\theta )\geq 0

因此,给定数据集T,其损失函数可以定义为:

L(\boldsymbol{w},\theta )=(\widehat{y}-y)(\boldsymbol{w^{T}x}-\theta )

该损失函数非负,最小值为0,且误分类点越少离超平面越近,损失函数值越

若将阈值看作为一个固定值为-1的“哑节点”,即-\theta =-1\cdot w_{n+1}=x_{n+1}\cdot w_{n+1},则可将该问题进一步化简为:\underset{w}{min} L(\boldsymbol{w})=\underset{w}{min} \sum_{x_{i}\in M}^{}(\widehat{y}_{i}-y_{i})\boldsymbol{w^{T}x_{i}}

(4)学习算法:随机梯度下降法

用矩阵的求导公式可求得该损失函数的梯度为:

\triangledown _{w}L(\boldsymbol{w})=\sum_{x_{i}\in M}^{}(\widehat{y}_{i}-y_{i})\boldsymbol{x_{i}}

则权重\boldsymbol{w}的更新公式为:

\boldsymbol{w}\leftarrow \boldsymbol{w}+\boldsymbol{\Delta w}

\boldsymbol{\Delta w}=-\eta (\widehat{y}_{i}-y_{i})\boldsymbol{x_{i}}=\eta (y_{i}-\widehat{y}_{i})\boldsymbol{x_{i}}

\eta(学习率)通常设置为一个小正数,如0.1;若感知机对训练样例预测正确,即\widehat{y}_{i}=y_{i},则说明感知机预测正确,不变化,否则则根据“错误的程度”对参数进行调整

(5)适用范围:只拥有一层功能神经元,学习能力有限,只能解线性可分问题(存在一个线性超平面能将数据分割开),学习过程中会收敛而求得适当的权向量。

而诸如“异或”问题,是非线性可分的,感知机模型无法解决。

改进:增加感知机的层数,或每层神经元的个数,考虑多层神经元。

除输入层外,中间的“隐层”和输出层全部为M-P神经元,拥有激活函数。

二、多层网络

多层前馈神经网络:每层神经元与下一层全互连,神经元之间不存在同层连接,不存在跨层连接。

命名时,只需“包含隐层”,即可称为“多层网络”。(如包含两层隐层,则称为“双隐层网络”)

5.3误差逆传播算法(BP算法)

(1)概览:将神经网络(记为NN)看作一个特征加工函数,给定训练集D=\left \{ \boldsymbol{(x_{1},y_{1}}),\boldsymbol{(x_{2},y_{2}}),...,\boldsymbol{(x_{m},y_{m}}) \right \},即输入示例由d个属性描述,输出l维实值向量,有:

\boldsymbol{x}\in R^{d}\rightarrow NN(\boldsymbol{x})\rightarrow \boldsymbol{y}=\boldsymbol{x}^{*}\in R^{l}

假设隐层和输出层全使用Sigmoid函数,且要完成的任务为(多输出)回归任务,则其结构如下图:

对于某个训练样本(\boldsymbol{x_{k},y_{k}}),其中\boldsymbol{y_{k}}=(y_{1}^{k},y_{2}^{k},...,y_{l}^{k}),假定其多层前馈神经网络的输出为\widehat{\boldsymbol{y_{k}}}=(\widehat{y_{1}^{k}},\widehat{y_{2}^{k}},...\widehat{y_{l}^{k}}),则单个样本的均方误差为:

E_{k}=\frac{1}{2}\sum_{j=1}^{l}(\widehat{y_{j}^{k}}-y_{j}^{k})^{2}(1/2是为了求导后消去常数)

(2)参数确定:该网络中有(d+l+1)q+l个参数需要确定:
1. 输入层到隐层的d\times q个权值

2. 隐层到输出层的q\times d个权值

3. q个隐层神经元的阈值

4. l个输出层神经元的阈值

(3)梯度下降方法:该算法是一个梯度下降算法,以目标的负梯度方向对参数进行调整。如:

\boldsymbol{w}\leftarrow \boldsymbol{w}+\boldsymbol{\Delta w}

\Delta w=-\eta \triangledown _{w}E

此处举例输入层第i个神经元与隐层第h个神经元之间的连接权v_{ih}为例子进行推导:

E_{k}=\frac{1}{2}\sum_{j=1}^{l}(\widehat{y_{j}^{k}}-y_{j}^{k})^{2}\Delta v_{ih}=-\eta \frac{\partial E_{k}}{\partial v_{ih}}

\frac{\partial E_{k}}{\partial v_{ih}}=\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \widehat{y_{j}^{k}}}\cdot \frac{\partial \widehat{y_{j}^{k}}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial b_{h}}\cdot \frac{\partial b_{h}}{\partial \alpha _{h}}\cdot \frac{\partial \alpha _{h}}{\partial v_{ih}}

        =\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \widehat{y_{j}^{k}}}\cdot \frac{\partial \widehat{y_{j}^{k}}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial b_{h}}\cdot \frac{\partial b_{h}}{\partial \alpha _{h}}\cdot x_{i}

        =\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \widehat{y_{j}^{k}}}\cdot \frac{\partial \widehat{y_{j}^{k}}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial b_{h}}\cdot f'(\alpha _{h}-\gamma _{h})\cdot x_{i}

        =\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \widehat{y_{j}^{k}}}\cdot \frac{\partial \widehat{y_{j}^{k}}}{\partial \beta _{j}}\cdot w_{hj}\cdot f'(\alpha _{h}-\gamma _{h})\cdot x_{i}

\frac{\partial E_{k}}{\partial \widehat{y_{j}^{k}}}\cdot \frac{\partial \widehat{y_{j}^{k}}}{\partial \beta _{j}}=(\widehat{y_{j}^{k}}-y_{j}^{k})f'(\beta _{j}-\theta _{j})

                     =\widehat{y_{j}^{k}}(1-\widehat{y_{j}^{k}})(y_{j}^{k}-\widehat{y_{j}^{k}})

所以原式=\sum_{j=1}^{l}(-g_{j})\cdot w_{hj}\cdot f'(\alpha _{h}-\gamma _{h})\cdot x_{i}

               =-f(\alpha _{h}-\gamma _{h})\cdot \sum_{j=1}^{l}g_{j}\cdot w_{hj}\cdot x_{i}

               =-b_{h}(1-b_{h}) \sum_{j=1}^{l}g_{j}\cdot w_{hj}\cdot x_{i}

               =-e_{h}\cdot x_{i}

以此类推,最终得到的更新公式为:

\Delta w_{hj}=\eta\cdot g_{j}\cdot b_{n}

\Delta \theta _{j}=-\eta\cdot g_{j}

\Delta v_{ih}=\eta \cdot e_{h}\cdot x_{i}

\Delta \gamma _{h}=-\eta\cdot e_{h}

其中:

g_{j}=-(\widehat{y}_{j}^{k}-y_{j}^{k})\cdot \widehat{y_{j}^{k}}\times (1-\widehat{y_{j}^{k}})

e_{h}=b_{n}(1-b_{n})\cdot \sum_{j=1}^{l}w_{hj}\cdot g_{j}

(4)工作流程:

1. 将所有参数随机初始化

2. 将输入数据提供给输入层神经元

3. 逐层将信号前传,直到产生输出层的结果

4. 计算输出层的误差

5. 将误差逆向传播至隐层神经元

6. 根据隐层神经元的误差对连接权和阈值进行调整

7. 循环迭代2-6过程,直至误差达到一个很小的值

(5)标准BP算法和累计BP算法:

  • 标准BP算法是针对“单个样例”的误差E_{k}来更新连接权和阈值,更新次数非常频繁,需要多次迭代
  • 累积BP算法是针对“整个数据集D的“累积误差” E=\frac{1}{m}\sum_{k=1}^{m}E_{k},再根据“累积误差”对参数进行更新

标准BP算法每次更新参数只针对单个样例,参数更新频繁,不同样例之间会出现“抵消”现象,因此需要消耗更多的迭代次数达到累计误差极小值点。

累计BP算法读取整个训练集之后才进行一次参数更新,因此更新参数频率更低,但若数据集D数据量过大,当累计误差下降到某一程度时,进一步下降来达到极小值点的速度会更缓慢。

 (6)通用近似定理:只需要一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。

然而,如何设置隐层神经元的个数是未知问题。实际应用中采取“试错法”遍历调整。

(7)如何预防过拟合:由于BP神经网络强大的表现力,因此常常出现过拟合的问题——训练误差持续降低,但测试误差持续上升。

解决方法:

  • 早停

时刻关注训练误差和测试误差,若训练集误差降低但验证集误差升高,则停止训练,并返回具有最小验证集误差的连接值和阈值。

  • 正则化

在误差目标函数中增加一个描述网络复杂度的部分,如连接权与阈值的平方和。则误差目标函数改变为:

E=\lambda \frac{1}{m}\sum_{k=1}^{m}E_{k}+(1-\lambda )\sum_{i}^{}w_{i}^{2}\lambda \in (0,1)

\lambda用于对“经验误差”和“网络复杂度”这两项进行折中,常通过交叉验证法进行估计。

本文参考资料:

《机器学习》周志华著,清华大学出版社。

第5章-神经网络_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值