一、引例

在介绍前馈神经网络之前先介绍感知机的概念:

x1,x2是输入信号,y是输出信号,w1,w2是权重。输入信号被送往神经元时,会被乘以固定的权重,权重越大,对应的权重的信号的重要性越高,神经元会计算传送过来的信号的总和,只有当这个总和超过某个有限值时,才会输出1,这是称为“神经元被激活”,将这个界限值称为阈值。

w1,w2是控制输入信号的重要性参数,b叫偏置,调整神经元被激活的容易程度的参数。 使用感知机可以实现与门、与非门、或门三种逻辑电路,现在考虑异或门(XOR gate)。

可以发现,无论重要性参数和偏置取值多少,都无法完成异或门的实现。(这就促使在当时,人们认为感知机连最基本的异或门逻辑电路都无法实现,认为 感知机并没有很大的作用),接下来看看为什么感知机无法实现最基本的异或门。

首先我们试着将或门的动作形象化,权重参数(b,w1,w2)=(-0.5 ,1,1)时,可以构造或门,此时感知机可以用下面的表达式写出:

感知机会生成由直线-0.5+x1+x2=0分割开的两个空间,其中一个空间输出为1,另一个空间输出为0,如图:

与门、非门、与非门都可以用一条直线将样本空间分成两部分,一部分取1另一部分取0 。但是异或门是无法用一条直线进行分割的。如图:

感知机的局限性就在于它只能表示由一条直线分割的空间,如上图的曲线,感知机无法表示。但异或门可以通过组合与门、与非门、或门来实现。如图:

如上图,用感知机的表示方法来表示异或门,如图:

如图,异或门是一种多层结构的神经网络,这里将最左边的一列称为第0层,中间的一列称为第1层,最右边的1列称为第2层。实际上与门、或门是单层感知机,异或门是2层感知机,叠加了多层的感知机就被称为多层感知机(MLP)。

二、神经网络模型

首先考虑多个输出结果的感知机,如图:

(由于公式太难打了,就用以前做的ppt,直接截图过来啦)

画出最一般的情况:

以上是基本的神经网络的结构,这种标准的结构称为前馈神经网络,因为输入从左向右不断前馈,也称为全连接网络,因为相邻层的所有神经元都相互连接。

三、激活函数

值得注意的是,线性的激活函数无论叠加或嵌套多少次,所得到的结果一定还是线性函数,所以激活函数大多选择非线性的,可以得到非线性的决策边界。常见的激活函数如下:

1.S形函数(sigmoid function):

可以视为一种挤压函数,即把输入的任何实数都挤压在(0,1)区间,当输入值z在0附近时,S函数近似为线性函数,输入越小,输出越接近于0,输入越大,输出越接近于1,取值位于(0,1),可将其解释为概率分布。

2.双曲正切函数(hyperbolic tangent function):是一种广义的S形函数:

以上两个激活函数,可能会面临着梯度消失,“两端饱和”的问题。

3.修正线性单元(rectified linear unit,ReLU)。也称线性整流函数:

ReLU函数的导数在z>0的时候恒等于1,这在一定程度上缓解神经网络中的梯度消失问题,加快梯度下降的收敛速度。

由于ReLU的特殊结构,当z<0的时候,可能会导致神经元在训练时死亡,故无法更新其权重。

4.泄露ReLU(leaky ReLU,简记为LReLU):为了解决死亡ReLU问题,当z<0时,依然保持一个很小的梯度,这样使得当神经元处于非激活状态时,也能有一个非0的梯度可以更新参数,定义为: 

5.软加函数(softplus function),软加函数可以视为ReLU的光滑版本,定义为:

,softplus函数也具有单侧抑制的特性,但没有ReLU函数的稀疏激活性。

四、损失函数

训练网络意味着估计神经网络的诸多参数,神经网络的通常训练方法为,在参数空间使用梯度下降法,使损失函数最小化,神经网络的损失函数的一般形式可以写为:

五、算法(反向传播)

由于神经网络包含很多参数,且涉及较多的非线性的激活函数,故一般不便于求二阶导数,无法使用牛顿法,因此,常使用梯度下降法训练神经网络,但仍需要计算神经网络的梯度向量,最常用的计算梯度向量的方法是反向传播算法(back propagation,简记BP)。反向传播算法就是使用微积分的“链式法则”,将靠左边的参数的导数递归地表示为靠右边的参数的导数的函数。

 

初始值的选定其实也是有一些其他的方法,比如He初始值,感兴趣的可以自己搜索一下。

六、实战

1.利用神经网络完成一个简单的回归模型,采用的数据集是自带的波士顿数据集。但是这个数据集要注意,scikitlearn包的版本不能太高,太高就用不了啦!

其中参数“solver=lbfgs”表示使用L-BFGS算法,是一种准牛顿算法,使用近似的二阶黑塞矩阵,适用于较小的数据集。默认solver=adam,表示使用adam算法,是一种基于随机梯度下降的优化算法,适用于较大的数据集。另一种solver=sqd,表示使用标准的随机梯度下降法。 参数hidden_layer_sizes=(5,)表示只有单一隐藏层,其中包含五个神经元。 参数max_iter=10000,表示最大迭代次数设置为10000。 结果显示测试集R方达到0.85。

sklearn不提供针对神经网络结构的可视化画图方法。

对于神经网络,无法像基于决策树的模型那样计算各变量的重要性。一种替代方法是,计算每个特征变量的置换重要性,步骤如下。给定训练集和基准模型,计算 测试集的拟合优度,其次对于某个特征变量,将次变量在训练集的观测值排序随机打乱,变成一个噪声变量,即所谓的随机置换,重估模型并计算测试集的拟合优度,这两个拟合优度的差值就是该变量的置换重要性。

根据重要置换性,最重要的两个变量是LSTAT与RM。进一步想知道特征变量对于响应变量的具体作用,可画偏依赖图:

使用for循环,考察神经元数目与测试集拟合优度的影响:

2.利用神经网络完成一个简单的多分类任务

使用垃圾邮件进行演示: 该数据框包含4601个观测值 和58个变量,最后一个变量 为响应变量。在这里只展示部分的数据:

默认使用Adam算法,模型准确率为94%,迭代次数为1013次。 为防止模型过拟合,我们采用早停的方式进行正则化:

early_stopping=True表示使用早停方法。validation_fraction=0.25表示使用25%的训练集作为验证集。 得到模型准确率为0.948,迭代次数为53。

(在此介绍一下早停的概念)

为防止过拟合,神经网络提出了多种正则化方法,包括:早停,丢包,惩罚等 介绍早停:意味着提前停止训练,而不必等到神经网络达到损失函数或者训练误差的最小值。建议把样本分成三部分,训练集,验证集和测试集,首先在训练集上进行训练,并同时将学到的神经网络模型在验证集上做预测,并计算验证误差(validation error),其次,当验证误差开始上升时,即停止训练。讲所得到的模型在测试集上进行预测即可。

sklearn这个包做前馈神经网络是非常方便的,但是我们无法看到其中的诸多信息,更深层的网络我们可以采用Keras等其他的包。厉害的小伙伴也可以自己手动构建网络。有任何问题欢迎评论哦!

前馈神经网络FNN(原理及实现)相关推荐

  1. 【FNN预测】基于Jaya优化JAYA前馈神经网络FNN研究附Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  2. 【FNN回归预测】基于matlab蝙蝠算法优化前馈神经网络数据回归预测【含Matlab源码 2070期】

    一.粒子群优化前馈神经网络简介 1 前馈神经网络FNN 前馈神经网络FNN是解决非线性问题的很好模型,它通过梯度下降算法进行网络训练.FNN与时间序列法等传统方法相比,能够更好地来描述问题的非线性特性 ...

  3. 【FNN回归预测】基于matlab粒子群优化前馈神经网络婚姻和离婚数据回归预测【含Matlab源码 2069期】

    一.粒子群优化前馈神经网络简介 1 前馈神经网络FNN 前馈神经网络FNN是解决非线性问题的很好模型,它通过梯度下降算法进行网络训练.FNN与时间序列法等传统方法相比,能够更好地来描述问题的非线性特性 ...

  4. 机器学习与高维信息检索 - Note 5 - (深度)前馈神经网络((Deep) Feedforward Neural Networks)及基于CVXOPT的相关实例

    Note 5 - (深度)前馈神经网络((Deep) Feedforward Neural Networks)及相关实例 5.1 FNN的定义和动机 粗略地说,前馈神经网络(FNN)是一种特殊的函数类 ...

  5. [2022-10-13]神经网络与深度学习第3章-前馈神经网络(part3)

    contents 前馈神经网络(part 3) 写在开头 鸢尾花数据集介绍 Iris数据集背景和内容 Iris数据集数据 Iris数据集使用 PCA降维呈现数据 选取前两个特征绘制 实践:基于前馈神经 ...

  6. (菜鸟入门)使用pytorch框架实现前馈神经网络

    前馈神经网络 常见的前馈神经网络有感知机(Perceptrons).BP(Back Propagation)网络等.前馈神经网络(FNN)是人工智能领域中最早发明的简单人工神经网络类型.各神经元分层排 ...

  7. 深度学习1:神经网络基础前馈神经网络Feedforward Neural Network(基于Python MXNet.Gluon框架)

    目录 神经网络背景 常用的深度学习框架 机器学习的三个基本要素 模型 学习准则 损失函数 0-1损失函数 0-1 Loss Function 平方损失函数 Quadratic Loss Functio ...

  8. 【深度学习原理第1篇】前馈神经网络,感知机,BP神经网络

    前馈神经网络(FNN) 前馈神经网路是一种单向多层的网络结构,信息从输入层开始,逐层向一个方向传递,即单向传递,一直到输出层结束.前馈的意思就是指传播方向指的是前向.前馈神经网络由三部分组成:输入层( ...

  9. Pytorch深度学习(一):前馈神经网络(FNN)

    Pytorch深度学习(一):前馈神经网络(FNN) 参考B站课程:<PyTorch深度学习实践>完结合集 传送门:<PyTorch深度学习实践>完结合集 一.线性模型: 已知 ...

最新文章

  1. phonegap 2.7 ios配置安装详细教程(2.9通用)
  2. select poll使用
  3. React学习笔记2---生命周期
  4. 函数指针和函数指针数组及其应用
  5. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
  6. 探讨.NET Core数据进行3DES加密和解密问题
  7. 25组新鲜出炉的有用图标集
  8. linux C 获取日期时间
  9. 数据库 连接池、缓冲池(定义、原理)
  10. Flink流式处理百万数据量CSV文件
  11. gnome boxes_如何使用GNOME Boxes的快照功能
  12. Java 枚举类转换List
  13. 扑克洗牌java_java扑克牌洗牌发牌问题
  14. Mac苹果键盘多个按键没响应该如何解决呢
  15. 基于微软 SAPI 的 TTS 程序实现
  16. OpenAI API及ChatGPT系列教程1:快速入门
  17. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
  18. 旅游流的概念_旅游流的概念界定与理论内涵新论
  19. STC51-Keil使用及流水灯设计
  20. 【Java应用程序开发】【期末复习题】【2022秋】【答案仅供参考】

热门文章

  1. 键入一个整数,判断是否是质数(两种方法)
  2. 太阳能板最大面积js
  3. PL/SQL-procedure-function-package创建
  4. 图像处理之opencv库使用小结
  5. 真Unity3d_人物摇杆操作(2022年重写)
  6. c语言基础 —— 程序结构
  7. 全网最全持续集成接口自动化-jmeter+ant+jenkins
  8. 免费资源和IT常用链接
  9. Python list 常见用法
  10. 机构能否通过做空A50来拉下A股市场?#每天来点真金融#