神经网络———笔记梳理


1,前言

:当我们所处理的问题越来越复杂,所涉及到的数据越来越多时,普通的算法已经显得有些捉襟见肘了,任务量也很大。为了满足大家的需要和社会的发展,人们从人类身上找到灵感,把人的神经元模型化,仿照人类神经的学习和工作模式,创建了神经网络,打开了人工智能的新大门。
神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。
话不多说,我们直接开始~

2,神经元

首先,先看看我们的神经元:

神经网络生存分析 神经网络总结_激活函数


相关知识我们中学已经学过了,这里就不再赘述。

下面是单个神经元的数学模型,可以看出它是生理结构的简化版:

神经网络生存分析 神经网络总结_神经网络_02


注:+1代表偏移值(偏置项, Bias Units);X1,X2,X2代表初始特征;w0,w1,w2,w3代表权重(Weight),即参数,是特征的缩放倍数;特征经过缩放和偏移后全部累加起来,此后还要经过一次激活运算然后再输出。激活函数有很多种,后面将会详细说明。

神经网络生存分析 神经网络总结_神经网络_03


X1* w1+X2* w2+…+Xn*wn这种计算方法称为加权求和(Weighted Sum)法,此方法在线性代数里极为常用。

一般直线拟合的精确度要比曲线差很多,所以我们使用非线性的激活函数去更好的达到拟合效果,最常见的激活函数是Sigmoid(S形曲线),Sigmoid有时也称为逻辑回归(Logistic Regression),简称logsig。logsig曲线的公式如下:

神经网络生存分析 神经网络总结_机器学习_04


还有一种S形曲线也很常见到,叫双曲正切函数(tanh),或称tansig,可以替代logsig。

神经网络生存分析 神经网络总结_激活函数_05


下面是它们的函数图形,从图中可以看出logsig的数值范围是0 ~ 1,而tansig的数值范围是-1 ~ 1。

神经网络生存分析 神经网络总结_神经网络_06


自然常数e公式中的e叫自然常数,也叫欧拉数,e=2.71828…。e是个很神秘的数字,它是“自然律”的精髓,其中暗藏着自然增长的奥秘,它的图形表达是旋涡形的螺线。

e是怎么来的?e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + 1/7! + … = 1 + 1 + 1/2 + 1/6 + 1/24 + 1/120+ … ≈ 2.71828 (!代表阶乘,3!=123=6)

e在微积分领域非常重要,e神经网络生存分析 神经网络总结_机器学习_07的导数依然是e神经网络生存分析 神经网络总结_机器学习_07,自己的导数恰好是它自己,这种巧合在实数范围内绝无仅有。

神经网络生存分析 神经网络总结_激活函数_09


一些不同的称呼:

神经网络生存分析 神经网络总结_神经网络生存分析_10


ex和e-x的图形是对称的;ln(x)是e^x的逆函数,它们呈45度对称。

神经网络生存分析 神经网络总结_神经网络生存分析_11

3,神经网络

前面花了不少篇幅来介绍激活函数中那个暗藏玄机的e,下面可以正式介绍神经元的网络形式了。

下面是不同的神经元的网络形式:

神经网络生存分析 神经网络总结_神经网络生存分析_12


左边蓝色的圆圈叫“输入层”,中间橙色的不管有多少层都叫“隐藏层”,右边绿色的是“输出层”。

每个圆圈,都代表一个神经元,也叫节点(Node)。

输出层可以有多个节点,多节点输出常常用于分类问题。

理论证明,任何多层网络可以用三层网络近似地表示。
一般凭经验来确定隐藏层到底应该有多少个节点,在测试的过程中也可以不断调整节点数以取得最佳效果。
在开始介绍前,有一些知识可以先记在心里:

神经网络生存分析 神经网络总结_权重_13设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可1自由指定;
神经网络生存分析 神经网络总结_权重_13神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;
神经网络生存分析 神经网络总结_权重_13结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。

4,计算方法

神经网络生存分析 神经网络总结_激活函数_16


神经网络生存分析 神经网络总结_权重_13

神经网络生存分析 神经网络总结_权重_13

神经网络生存分析 神经网络总结_权重_13

神经网络生存分析 神经网络总结_权重_13

神经网络生存分析 神经网络总结_权重_13

网络的每条连接线上都有一个权重参数,如何有效的修改这些参数,使误差最小化,成为一个很棘手的问题。从人工神经网络诞生的60年代,人们就一直在不断尝试各种方法来解决这个问题。直到80年代,误差反向传播算法(BP算法)的提出,才提供了真正有效的解决方案,使神经网络的研究绝处逢生。

神经网络生存分析 神经网络总结_神经网络生存分析_22


BP算法是一种计算偏导数的有效方法,它的基本原理是:利用前向传播最后输出的结果来计算误差的偏导数,再用这个偏导数和前面的隐藏层进行加权求和,如此一层一层的向后传下去,直到输入层(不计算输入层),最后利用每个节点求出的偏导数来更新权重。

神经网络生存分析 神经网络总结_权重_23


为了便于理解,后面我一律用“残差(error term)”这个词来表示误差的偏导数。

输出层→隐藏层:残差 = -(输出值-样本值) * 激活函数的导数
隐藏层→隐藏层:残差 = (右层每个节点的残差加权求和)* 激活函数的导数

如果输出层用Purelin作激活函数,Purelin的导数是1,输出层→隐藏层:残差 = -(输出值-样本值)

如果用Sigmoid(logsig)作激活函数,那么:Sigmoid导数 = Sigmoid*(1-Sigmoid)
输出层→隐藏层:残差 = -(Sigmoid输出值-样本值) * Sigmoid*(1-Sigmoid) = -(输出值-样本值)输出值(1-输出值)
隐藏层→隐藏层:残差 = (右层每个节点的残差加权求和)* 当前节点的Sigmoid*(1-当前节点的Sigmoid)

如果用tansig作激活函数,那么:tansig导数 = 1 - tansig^2

神经网络生存分析 神经网络总结_权重_24


残差全部计算好后,就可以更新权重了:

输入层:权重增加 = 当前节点的Sigmoid * 右层对应节点的残差 * 学习率

隐藏层:权重增加 = 输入值 * 右层对应节点的残差 * 学习率

偏移值的权重增加 = 右层对应节点的残差 * 学习率

学习率前面介绍过,学习率是一个预先设置好的参数,用于控制每次更新的幅度。

此后,对全部数据都反复进行这样的计算,直到输出的误差达到一个很小的值为止。

以上介绍的是目前最常见的神经网络类型,称为前馈神经网络(FeedForward Neural Network),由于它一般是要向后传递误差的,所以也叫BP神经网络(Back Propagation Neural Network)。

更新权重图像表示

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210714192725883.png

神经网络生存分析 神经网络总结_机器学习_25

神经网络生存分析 神经网络总结_权重_26

神经网络生存分析 神经网络总结_神经网络_27


神经网络生存分析 神经网络总结_机器学习_28

神经网络生存分析 神经网络总结_机器学习_29


神经网络生存分析 神经网络总结_权重_30


BP神经网络的特点和局限:

  • BP神经网络可以用作分类、聚类、预测等。需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。
  • BP神经网络主要是在实践的基础上逐步完善起来的系统,并不完全是建立在仿生学上的。从这个角度讲,实用性 > 生理相似性。
  • BP神经网络中的某些算法,例如如何选择初始值、如何确定隐藏层的节点个数、使用何种激活函数等问题,并没有确凿的理论依据,只有一些根据实践经验总结出的有效方法或经验公式。
  • BP神经网络虽然是一种非常有效的计算方法,但它也以计算超复杂、计算速度超慢、容易陷入局部最优解等多项弱点著称,因此人们提出了大量有效的改进方案,一些新的神经网络形式也层出不穷。