【数学建模】神经网络笔记

神经网络笔记 by Zk

模拟人脑神经细胞的工作特点

  • 单元间的广泛连接
  • 并行分布式的信息存储和处理
  • 自适应学习能力

基本特点

  • 可以处理非线性。(网,图之类的数据可以进行处理)
  • 并行结构,这样的结构最便于计算机并行处理(想一想电脑CPU是多核的,可以同时处理多个任务)
  • 具有学习记忆能力(越来越逼近真实,越来越强)

神经元

神经元的基本介绍

神经元是神经网络的基本单位,相当于盖高楼大厦的砖块。

神经元接受输入,对其做一些数据操作,然后产生输出。

权值1
权值2
权值3
输入1
求和
输入2
输入3
非线性函数
输出

神经元的运行过程

神经元。神经元接受输入,对其做一些数据操作,然后产生输出。例如,这是一个2-输入神经元:

[外链图片转存失败(img-DJFeuDib-1565186559806)(C:\Users\10310\Documents\我的坚果云\数学建模暑假培训\assets\1564835210406.png)]

这里发生了三个事情。首先,每个输入都跟一个权重相乘(红色):
x 1 ← x 1 × w 1 x 2 ← x 2 × w 2 \begin{array}{l}{x_{1} \leftarrow x_{1} \times w_{1}} \\ {x_{2} \leftarrow x_{2} \times w_{2}}\end{array} x1x1×w1x2x2×w2
然后,为了保证可靠性,加权后的输入求和,加上一个偏差b(绿色)用来修饰调整输出
( x 1 × w 1 ) + ( x 2 × w 2 ) + b (x_1×w_1)+(x_2×w_2)+b (x1×w1)+(x2×w2)+b
最后,这个结果传递给一个激活函数f:
y = f ( x 1 × w 1 + x 2 × w 2 + b ) y=f\left(x_{1} \times w_{1}+x_{2} \times w_{2}+b\right) y=f(x1×w1+x2×w2+b)
激活函数的用途是将一个无边界的输入,转变成一个可预测的形式。常用的激活函数就就是S型函数:

[外链图片转存失败(img-Y4XWkaBW-1565186559808)(C:\Users\10310\Documents\我的坚果云\数学建模暑假培训\assets\1564833500173.png)]

它的用处嘛…简单来说,就是把(−∞, +∞)压缩到(0, 1) ,很大的负数约等于0,很大的正数约等于1。

常用传递函数

在这里插入图片描述

计算公式

输入值求和: S j = ∑ i = 1 n w j i ∗ x i + b j S_{j}=\sum_{i=1}^{n} w_{j i} * x_{i}+b_{j} Sj=i=1nwjixi+bj

输出值计算: y j = f ( S j ) y_j = f(S_j) yj=f(Sj)

X为输入,W为权值,y为输出,b为阈值,f(*)为激活函数

BP神经网络定义

​ BP(Back Propagation)是一种按误差逆传播算法训练的多层前馈网络。是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。

核心思想

将传递函数变为非线性可微函数

​ BP算法由数据流的前向计算(正向传播)误差信号的反向传播两个过程构成。

  1. 前向计算(正向传播)

    用来计算用现在的网络和输入数值得到的结果,将结果与真实值比较

  2. 误差信号的反向传播

    用来调整神经网络的权值,也就是学习纠正的过程

这玩意儿的用途

  • 函数逼近:用输入向量和相应的输出向量训练网络逼近函数
  • 模式识别:用特定的输出向量将它与输入向量联系起来
  • 分类:输入向量分类
  • 数据压缩:减少输入向量维数

在这里插入图片描述

神经元组装成网络

把砖块盖成大楼

所谓的神经网络就是一堆神经元。这就是一个简单的神经网络:

在这里插入图片描述

这个网络有两个输入,一个有两个神经元( h 1 h_1 h1 h 2 h_2 h2 )的隐藏层,以及一个有一个神经元( o 1 o_1 o1)的输出层。要注意, o 1 o_1 o1 的输入就是 h 1 h_1 h1 h 2 h_2 h2 的输出,这样就组成了一个网络。

BP神经网络的学习

前馈/前向计算(正向传播)

给神经元输入数据和权值,得到神经元的输出结果。

某层任意一神经元 j j j的输入为 w w w,输出为 y j y_j yj

相邻低一层中任一神经元 i i i的输出为 y i y_i yi

![外链图片转存失败(img-L5G8hDVK-1565186559812)(C:\Users\10310\Documents\我的坚果云\数学建模暑假培训\assets\1564836387045.png)]
n e t j = ∑ i w i j y i y j = f ( n e t j ) \begin{array}{l}{n e t_{j}=\sum_{i} w_{i j} y_{i}} \\ {y_{j}=f\left(n e t_{j}\right)}\end{array} netj=iwijyiyj=f(netj)
w i j w_{ij} wij:神经元i和j之间的连接权

f ( ⋅ ) f(·) f():神经元的输出函数


y j = f ( n e t j ) = 1 1 + e − ( n e t j + θ j ) / h 0 y_{j}=f\left(n e t_{j}\right)=\frac{1}{1+e^{-\left(n e t_{j}+\theta_{j}\right) / h_{0}}} yj=f(netj)=1+e(netj+θj)/h01
θ j \theta_{j} θj:神经元阈值;

h 0 h_0 h0:修改输出函数形状的参数;

误差信号的反向传播(损失反馈调整权值)

在训练网络之前,我们需要量化当前的网络是 好 还是 坏 ,从而可以寻找更好的网络。这就是定义损失的目的。

衡量损失的方法:采用均方差,是所有方差的平均值。均方差越小,预测效果越好,损失就越少。

输入n组数据,系统的均方差为
E = 1 N ∑ i = 1 N ( d p k − y p k ) 2 = 1 N ∑ p E p E=\frac{1}{N}\sum_{i=1}^{N}\left(d_{p k}-y_{p k}\right)^{2}\\=\frac{1}{N} \sum_{p} E_{p} E=N1i=1N(dpkypk)2=N1pEp

  • N N N是你喂给神经网络的数据的数目。

  • d p k d_{pk} dpk代表变量的真实值,也就是正确答案(训练的时候需要你喂给它)。

  • y p k y_{pk} ypk代表变量的预测值,是通过现在的网络计算得出来的

  • ( d p k − y p k ) 2 (d_{p k}-y_{p k})^{2} (dpkypk)2被称为方差,我们的损失函数就是所有方差的平均值。预测效果越好,损失就越少。

  • 更好的预测 = 更少的损失!

    训练网络 = 最小化它的损失!

现在我们有了一个明确的目标:最小化神经网络的损失。通过调整网络的权重和截距项,我们可以改变其预测结果,但如何才能逐步地减少损失?

根据变量的损失,计算出对于 w w w的修正增量,对权值进行修正

我们可以把整体神经网络的损失(均方差)看成是关于各权值和截距项常数的函数。

E ( w 1 , w 2 , . . . , w n , b 1 , b 2 , . . . , b n ) E\left(w_{1}, w_{2}, ...,w_{n}, b_{1}, b_{2}, ...,b_{n}\right) E(w1,w2,...,wn,b1,b2,...,bn)

假如我们要优化权值 w 1 w_1 w1,当我们改变 w 1 w_1 w1时,损失 E E E会怎么变化。

我们可以通过 ∂ L ∂ w 1 \frac{\partial L}{\partial w_{1}} w1L来表示修正量,偏导数也就是高数里面学过的梯度向量(可能…忘光了,不过有点印象就行)。因为沿梯度方向时,方向导数取得最大值,计算速度最快。因此,在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数。当梯度向量为零,说明到达一个极值点,这也是梯度下降算法迭代计算的终止条件。

推导步骤(嫌麻烦或高数忘光了可以不看,直接看结论部分)

首先,让我们用 ∂ y p k ∂ w 1 \frac{\partial y_{pk}}{\partial w_{1}} w1ypk来改写这个偏导数:
∂ E ∂ w 1 = ∂ E ∂ y p k × ∂ y p k ∂ w 1 \frac{\partial E}{\partial w_{1}}=\frac{\partial E}{\partial y_{pk}} × \frac{\partial y_{pk}}{\partial w_{1}} w1E=ypkE×w1ypk
而我们知道,对于单个数据 E = ( d p k − y p k ) 2 E = \left(d_{p k}-y_{p k}\right)^{2} E=(dpkypk)2,因此我们可以计算 ∂ E ∂ p k \frac{\partial E}{\partial_{pk}} pkE
∂ E ∂ y p k = ∂ ( 1 − y p k ) 2 ∂ y p k = − 2 ( 1 − y p k ) \frac{\partial E}{\partial y_{pk}}=\frac{\partial\left(1-y_{pk}\right)^{2}}{\partial y_{pk}}=-2\left(1-y_{pk}\right) ypkE=ypk(1ypk)2=2(1ypk)
接下来我们来搞定 ∂ y p k ∂ w 1 \frac{\partial y_{pk}}{\partial w_{1}} w1ypk

y p k = f ( ⋅ ) y_{pk} = f(·) ypk=f(),即输入变量经过神经元输出函数得到的输出

由于我们要计算的权值 w 1 w_1 w1仅仅与对应的输入 x 1 x_1 x1有关,所以
∂ y p k ∂ w 1 = ∂ y p k ∂ x 1 ∗ ∂ x 1 ∂ w 1 ∂ y p k ∂ x 1 = w ⋅ ∗ f ′ ( ⋅ ) \begin{array}{c}{\frac{\partial y_{pk}}{\partial w_{1}}=\frac{\partial y_{pk}}{\partial x_{1}} * \frac{\partial x_{1}}{\partial w_{1}}} \\ {\frac{\partial y_{pk}}{\partial x_{1}}=w_{·} * f^{\prime}\left(·\right)}\end{array} w1ypk=x1ypkw1x1x1ypk=wf()
对输出函数求导得到
f ( x ) = 1 1 − e − x f ′ ( x ) = e x ( 1 + e − x ) 2 = f ( x ) ∗ ( 1 − f ( x ) ) \begin{array}{c}{f(x)=\frac{1}{1-e^{-x}}} \\ {f^{\prime}(x)=\frac{e^{x}}{\left(1+e^{-x}\right)^{2}}=f(x) *(1-f(x))}\end{array} f(x)=1ex1f(x)=(1+ex)2ex=f(x)(1f(x))

结论

输出单元的误差:

∂ E ∂ w 1 = ∂ E ∂ y p k ∂ y p k ∂ x 1 ∂ x 1 ∂ w 1 \frac{\partial E}{\partial w_{1}}=\frac{\partial E}{\partial y_{pk}} \frac{\partial y_{pk}}{\partial x_{1}} \frac{\partial x_{1}}{\partial w_{1}} w1E=ypkEx1ypkw1x1

输出单元的修正增量:

η ∂ E ∂ w 1 \eta\frac{\partial E}{\partial w_{1}} ηw1E

使用名为随机梯度下降法的优化算法来优化网络的权重和截距项,实现损失的最小化。
w 1 ← w 1 − η ∂ E ∂ w 1 w_{1} \leftarrow w_{1}-\eta \frac{\partial E}{\partial w_{1}} w1w1ηw1E
通过梯度向量求得修正增量来修正权值 w 1 w_1 w1,优化权重和截距向量

η \eta η是一个常数,被称为学习率,用于调整训练的速度。

我们要做的就是用 w 1 w_1 w1减去 η ∂ E ∂ w 1 \eta\frac{\partial E}{\partial w_{1}} ηw1E

  • 如果 ∂ E ∂ w 1 \frac{\partial E}{\partial w_{1}} w1E是正数, w 1 w_1 w1会变小, L L L会下降
  • 如果 ∂ E ∂ w 1 \frac{\partial E}{\partial w_{1}} w1E是负数, w 1 w_1 w1会变大, L L L会上升

训练算法流程

  1. 从我们的数据集中选择一个样本,用随机梯度下降法进行优化——每次我们都只针对一个样本进行优化;
  2. 计算每个权重或截距项对损失的偏导;
  3. 用更新等式更新每个权重和截距项;
  4. 重复第一步;

BP算法建模步骤

  1. 对权值和神经元阈值初始化:(0,1)上分布的随机数。
  2. 输入样本,指定输出层各神经元的希望输出值。
  3. 依次计算每层神经元的实际输出。
  4. 从输出层开始修正每个权值,直到第一隐层。
  5. 转到第2步,循环至权值稳定或者达到循环次数为止。

参考:

知乎·陈钢·用Python从头实现一个神经网络 https://zhuanlan.zhihu.com/p/58964140(推荐食用)

Machine Learning for Beginners: An Introduction to Neural Networks https://victorzhou.com/blog/intro-to-neural-networks/

河南科技大学·张瑞民·神经网络讲解与实例.ppt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值