感知神经网络


1. 感知器

感知器:用于线性可分模式分类的最简单的神经网络模型。其由一个具有可调树突权值和偏置的神经元组成。

单层神经网络模型

  • 本质是一个非线性前馈网络。
  • 同层内无互连,不同层间无反馈,由上层向下层传递。
  • 其输入输出均为离散值,神经元对输入加权求和后,由阈值函数决定其输出。
  • 感知器实际上是一个简单的单层神经网络模型,单节点感知器就是MP模型。

在这里插入图片描述

学习过程:给定一个有输入输出实例的训练集,感知机(学习)一个函数:对每个例子,若感知机的输出值比实例低太多,则增加他的权重;反之则减少权重。 感知器是整个神经网络的基础,神经元通过响应函数确定输出,神经元之间通过权值进行传递信息,权重的确定是根据误差来进行调节的。


2. 单层感知器:线性分类

单层感知器:通过计算权重和输入的成绩的和f(x)=sigm(∑(w*x)),其根据和的正负值来判断分类。

感知器的分类逻辑

  • 计算各输入变脸加权后的和∑。
  • 根据和∑是否大于0得到分类结果。

对于任一个训练样本Xi,其输入的特征为(Xi1,Xi2)
求和:sum = X1 * W1 + X2 * W2 + b

当sum>0时,即为正类,当sum≤0时即为负类。其中sum = 0,为正负类的分界超平面。

将直线方程X1 * W1 + X2 * W2 + b = 0整理成习惯的公式:

在这里插入图片描述
其结果如下图所示:(黄色线即为分界超平面)
在这里插入图片描述

单层感知器的学习算法

此算法采用的是离散感知器的算法

离散感知器在这里插入图片描述
具体步骤

  1. 初始化权值,赋予较小的非零随机数。如果输入样本线性可分,无论初始化值如何取们都会稳定收敛。

  2. 输入样本{X,Y},其中:
    输入为 k条n+1个分量的向量:
    在这里插入图片描述
    输出为k条m个分量的向量:在这里插入图片描述

  3. 计算各输出节点的实际输出:
    在这里插入图片描述

  4. 按照实际输出值和期望值之间的差更新权重:在这里插入图片描述

  5. 返回第②步,处理下一组输入样本。

  6. 循环上述过程,直到感知器对所有样本的实际输出和期望输出一致。

单层感知器的例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此训练结果对应的分界超平面是:

在这里插入图片描述
其结果如图:

与超平面的锤子的视角:在这里插入图片描述
灰色为超平面:红色点为超平面分割的一类在这里插入图片描述
灰色为超平面:蓝色色点为超平面分割的另一类在这里插入图片描述


3. 线性与非线性

线性:是一种映射关系,其映射关系满足可加性和齐次性。

通俗理解即为:两个变量之间存在一次仿函数关系,在平面坐标系中表现为一条直线。不满足线性即为非线性。

线性可分:可以用一个超平面将正负样本分开。

分类器算法)也分为线性和非线性两类。

  • 线性分类使用超平面类型的边界,非线性分类器使用超曲面型的边界。
  • 线性分类器简单、容易理解。非线性分类器能解决更复杂的分类问题。

在这里插入图片描述


4. 多层感知器

多层感知器

首先实现逻辑异或运算的逻辑:在这里插入图片描述
其次实现逻辑如下图所示:
在这里插入图片描述
在这里插入图片描述
因为单层感知器无法实现异或逻辑运算,若要实现,则需要引入多层感知器进行实现。

多层感知器(Multi Layer Perception,即MLP):是一种前馈人工神经网络模型,包括至少一个隐藏层,将输入的多个数据集映射到单易的输出的数据集上。

  • 单和多是指有计算功能的节点所在的层数,输入层无计算功能,不计算在内。单层即只有输入层和输出层,多层至少包含一个隐藏层。
  • 单层只能学习线性函数,多层可以学习非线性函数,适用于模式识别,图形处理,函数逼近等领域。
  • 给出一系列特征X = (x1,x2…)和目标Y,一个多层感知器可以以分类或者回归为目的,学习到特征和目标之间的关系。

多层感知器实现异或运算

在这里插入图片描述
初始化权值如下图所示:
在这里插入图片描述
由上图则有:
f1(x) = sign(-x1 + x2 - 0.5)
f2(x) = sign(x1 - x2 - 0.5)
f(x) = sign(f1(x) + f2(x))

则:
f1(x) = 0, f2(x) = 0, f(x) =0
f1(x) = 1, f2(x) = 0, f(x) =1
f1(x) = 0, f2(x) = 1, f(x) =1
f1(x) = 0, f2(x) = 0, f(x) =0

以上便实现了多层感知器实现异或逻辑运算

不同隐藏层的MLP的分类能力如下图所示

在这里插入图片描述


5. 自适应线性单元

自适应线性单元(ADALINE):主要作用是线性逼近一个函数式而进行模式联想
在这里插入图片描述
感知器
在这里插入图片描述
ADALINE&感知器区别

  • 激活函数:ADALINE的激活函数为线性函数;感知器的为阈值函数。
  • 误差更新:ADALINE在输出最终结果前根据误差更新权重;感知器在输出最终结果后更新。
  • 损失函数:ADALINE使用均方误差SSE作为损失函数,可最小化损失函数;感知器没有损失函数。
  • 计算方便:凸函数,可微,有多种夸快速求解的方法。如梯度下降算法等
  • 输出结果:ADALINE可以输出连续值或者分类值;感知器智能输出分类值。

自适应线性单元(ADALINE)例子
在这里插入图片描述


6. 多层自适应线性网络(MADALINE)

MADALINE:将多个ADALINE神经元互相连接形成一个多层网络,实际上是由ADALINE和AND逻辑器组成。可以对非线性数据进行划分。

多层感知器训练依照离散感知器学习规则或δ学习规则,对于一组输入有一个预期输出,通过比较感知器输出结果和预期输出结果,调整感知器的权重和阈值,即可完成模型训练。

单层感知器学习规则的逻辑如下:

  • 定义一个包含感知器参数的损失函数,用来衡量当前模型优劣
  • 调整参数的值,让损失函数逐步减少
  • 损失函数小到一定程度,使得输出结果和预期结果的差可以接受
  • 学习得到合乎要求的模型

多层感知器的学习规则同样使用该逻辑,只是由于多层感知器的隐藏层的神经元,没有直接的预期输出结果,其预期输出体现在下一层(单隐藏层)或者下N层(多个隐藏层)的输出中,需要从整体考虑具体的损失函数。

多层感知器前向和反向的特点

  • 前向的“分母”一样,返乡的“分子”一样
  • 前想强调的是输入对某个神经元的影响
  • 前向求导方式是“路劲加和”,逐条路径求解
  • 反向采用的是“合并同类路径”分阶段按层次求解
  • 前方会导致路径中的部分冗余遍历,反向不会
  • 反向中某一阶段计算时可以直接使用上一阶段的结果
  • 前向计算量比反向计算量大很多

7. 误差反向传播算法(BP算法)

BP算法:是目前用来训练人工神经网络(ANN)最常用、最有效的算法。

其大致过程如下图所示:
在这里插入图片描述

损失函数优化:梯度下降法

确定了损失函数,就需要对损失函数进行优化,求最小值,以平方损失函数(Quadratic LF)为例:
在这里插入图片描述
求L的梯度
在这里插入图片描述
假设激活函数选用了sigmoid函数
在这里插入图片描述
求出此时L的梯度在这里插入图片描述

BP网络训练步骤

BP神经网络的一般训练步骤如下:
在这里插入图片描述
初始化:网络结构(网络层数,输入输出及隐藏层节点)、权值矩阵、阈值
选择某个样本k参加训练

  • 计算样本对应的各层的输入和输出
  • 利用期望输出与实际输出,计算误差函数对输出层的各神经元的偏导
  • 利用期望输出与实际输出,计算误差函数对隐藏层的各神经元的偏导
  • 利用公式修正隐藏层到输出层的权重:在这里插入图片描述
  • 利用公式修正输入层到隐藏层的权重:在这里插入图片描述
  • 判断是否需要继续训练:
    ①是否达到最大循环次数
    ②全局误差是否满足期望:
    在这里插入图片描述
    结束训练,得到神经网络模型。

激活函数的特点

一个好的激活函数通常会具有如下一些特点:

  • 非线性:导数不能是常数,否则网络会退化成单层网络
  • 处处可微:或者说几乎处处可微,保证能计算梯度,从而进行参数优化
  • 计算简单:降低计算难度和复杂程度
  • 非饱和性:饱和指在某些区间内,梯度接近于零(梯度消失),使得参数无法继续更新,即无法收敛
  • 单调性:导数符号不变(朝一个方向变化),避免梯度方向经常变化导致的不易收敛
  • 有限的输出范围:面对不同范围的输入也会保持输出的稳定性,但有时会导致梯度消失

误差曲面存在的问题

误差曲面E = F(Xᵖ,W,V,dᵖ)(E为误差函数或损失函数)通常为数比较多,形状相当复杂,当存在以下两种情况时,对梯度法最小化损失函数有比较大的影响:

  • 存在平坦区域:即在这里插入图片描述当oₖ或者1-oₖ趋近于0时,无论E的取值或者变化如何,梯度基本不变,即权值更新变慢,也称作激活函数的饱和区,饱和区如下图红色框所示:
    在这里插入图片描述

  • 存在多个局部最小值:其特点是梯度为0,使得限于局部最小值不能自拔。如下图所示:在这里插入图片描述

标准BP算法存在的问题

  • 容易陷入局部最小,得不到全局最优值
  • 饱和区导致训练次数多,收敛缓慢
  • 设计网络时,关键信息选取无明确依据(隐层数,隐层节点数,学习速率)
  • 训练顺序队训练有影响,有‘遗忘’的节点

标准BP算法改进:增加动量项

标准BP算法在更新权重时,只考虑了当前状态下的误差梯度,而未考虑之前的梯度变化情况,导致训练过程震荡,收敛过慢,为了提高训练速度,在权值调整公式中增加一项,用来保留之前的权重更新的信息,权重更新公式变为:在这里插入图片描述
其中,αW(t - 1)被称作动量项,从前一次的权重更新的量中取一部分叠加到当前的更新量中,从而增加了之前梯度变化的影响。(动量系数α∈(0,1))

动量项反映了以前累积的权重调整经验,是权重调整有了“记忆”。且动量项对当前调整起到了阻尼的作用,当误差变化起伏剧烈时,动量项可以减少震荡趋势,提高训练速度

标准BP算法改进:自适应调节学习率

标准BP算法中的η称作学习率、学习速率、步长等,通常定为常数,在权重更新中起到了较大的作用,该值选择不合适,会严重影响学习过程和学习结果。

  • 结合误差曲面,当在平坦区时,希望学习率大一些,达到同样的训练效果的同时,可以减少训练次数
  • 当在误差变化剧烈的区域,希望学习率小一些,以免步子过大,迈过理想值,从而引|起不合理的震荡

调整学习率的办法

  • 设置初始学习率η
  • 经过一批权值调整步骤后:
    如果总误差上升,说明学习率大了,需要减小,则:η(t + 1) = βn(t)
    如果总误差下降,说明学习率小了,可以增加,则:η(t + 1) = θn(t)

标准BP算法改进:陡度因子

进入误差曲面的平坦区,通常是因为神经元进入了激活函数的饱和区,如果能设法在饱和区内对激活函数进行调整,比如压缩神经元的净输入,使其输出退出饱和区,就可以脱离当前的平坦区。可以在原激活函数中引入陡度因子λ :

在这里插入图片描述
当有ΔE接近0,而dₖ-oₖ较大时,进入平坦区,此时,令λ > 1,netₖ坐标被压缩λ倍,激活函数的敏感区变长,一些绝对值较大的netₖ退出饱和区,当λ = 1时,恢复原状,当λ < 1时,更快进入饱和区。
如下图所示:
在这里插入图片描述


以上为本人的机器学习课程的学习笔记,如有错误或建议,请大方提出,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_41171409/article/details/117885014