深度学习 -- 神经网络

1、神经网络的历史

2、 M-P模型

M-P模型是首个通过模仿神经元而形成的模型。在M-P模型中,多个输入节点x_i | i=1,2....,n对应一个输出节点y。每个输入x,乘以相应的连接权重w,然后相加得到输出y。结果之和如果大于阈值h,则输出1,否则输出0。输入和输出均是0或1。

公式2.1:    y = f( \sum_{i=1}^{n}w_ix_i-h)       

M-P模型可以表示AND和OR等逻辑运算。M-P模型在表示各种逻辑运算时,可以转化为单输入单输出或双输入单输出的模型。

取反运算符(NOT运算符)可以使用的单输入单输出的M-P模型来表示。使用取反运算符时,如果输入0则输出1,输入1则输出0,把它们代人M-P模型的公式(2.1),可以得到w_i=-2h = -1

逻辑或(OR运算符)和逻辑与(AND运算符)可以使用双输入单输出M-P模型来表示。各运算符的输人与输出的关系如下表所示。根据表中关系,以OR运算为例时,公式(2.1)中的w,和h分别为w1=1,w2=1,h=0.5,把它们代人公式(2.1)可以得到下式:

公式2.2:y = f(x_1 + x_2 -0.5)

以AND运算为例时,w1=1,w2=1,h=1.5,把它们代人公式(2.1)可以得到下式。
公式2.3:y = f(x_1 + x_2 -1.5)

输入x1输入x2OR运算符的输出AND运算符的输出
0000
0110
1010
1111

由此可见,使用M-P模型可以进行逻辑运算。但是,上述的w,和h是如何确定的呢?当时还没有通过对训练样本进行训练来确定参数的方法,只能人为事先计算后确定。此外,M-P模型已通过电阻得到了物理实现。
 

3、感知器

上节中的逻辑运算符比较简单,还可以人为事先确定参数,但且逻辑运算符w,和h的组合并不仅仅限于前面提到的这几种。罗森布拉特提出的感知器能够根据训练样本自动获取样本的组合。与M-P模型
需要人为确定参数不同,感知器能够通过训练自动确定参数。训练方式为有监督学习,即需要设定训练样本和期望输出,然后调整实际输出和期望输出之差的方式(误差修正学习)。误差修正学习可用公式(3.1)和(3.2)表示。

公式3.1:w_i \leftarrow w_i + a(r-y)x_i

公式3.2:h \leftarrow h - a(r-y)

a是确定连接权重调整值的参数。a增大则误差修正速度增加,a减小则误差修正速度降低。


感知器中调整权重的基本思路如下所示。

  • 实际输出y与期望输出r相等时,w和h不变
  • 实际输出y与期望输出r不相等时,调整w,和h的值

参数w和h的调整包括下面这两种情况。

1:实际输出y=0、期望输出r=1时(未激活)

  • 减小h
  • 增大x7=1的连接权重w
  • x=0的连接权重不变

2:实际输出y=1、期望输出r=0时(激活过度)

  • 增大h
  • 降低x=1的连接权重w
  • x=0的连接权重不变

使用误差修正学习,我们可以自动获取参数,这是感知器引发的一场巨大变革。但是,感知器训练只能解决如下(a)图所示的线性可分问题,不能解决如下(b)图所示的线性不可分问题。为了解决线性不可分问题,我们需要使用多层感知器。

4、多层感知器

为了解决线性不可分等更复杂的问题,人们提出了多层感器印(multilayer perceptron)模型。多层感知器指的是由多多层结构的感知器递阶组成的输入值向前传播的网络,也被称为前馈网络或正向传播网络。

多层感知器通常采用三层结构,由输入层、中间层及输出层组成与公式(2.1)中的M-P模型相同,中间层的感知器通过权重与输入层的各单元(unit)相连接,通过阈值函数计算中间层各单元的输出值。中
间层与输出层之间同样是通过权重相连接。那么,如何确定各层之间的连接权重呢?单层感知器是通过误差修正学习确定输入层与输出层之间的连接权重的。同样地,多层感知器也可以通过误差修正学习确定两层之间的连接权重。误差修正学习是根据输入数据的期望输出和实际输出之间的误差来调整连接权重,但是不能跨层调整,所以无法进行多层训练。因此,初期的多层感知器使用随机数确定输入层与中间层之间的连接权重,只对中间层与输出层之间的连接权重进行误差修正学习。所以,就会出现输入数据虽然不同,但是中间层的输出值却相同,以至于无法准确分类的情况。那么,多层网络中应该如何训练连接权重呢?人们提出了误差反向传播算法。

5、误差反向传播算法

多层感知器中,输入数据从输入层输入,经过中间层,最终从输出层输出。因此,误差反向传播算法就是通过比较实际输出利期望输出得到误差信号,把误差信号从输出层逐层向前传播得到各层的的误差信号,再通过调整各层的连接权重以减小误差。权重的调整主要用梯度下降法(gradient descent method)。如图所示,通过实际输出和期望输出之间的误差E和梯度,确定连接权重w的调整值,得到新的连接权重w'。然后像这样不断地调整权重以使误差达到最小,从中学习得到最优的连接权重w^{opt}。这就是梯度下降法。

下面我们就来看看误差和权重调整值的计算方法。计算误差可以使用最小二乘误差函数(公式6.3)。通过期望输出r和网络的实际输出y计算最小二乘误差函数E。E趋近于0,表示实际输出与期望里输出更加接近。所以,多层感知器的训练过程就是不断调整连接权重w,以使最小二乘误差函数趋近于0。


接着再来看一下权重调整值。根据上述说明,权重需要进行调整以使最小二乘误差函数趋近于0。对误差函数求导就能得到上图中给定点的梯度,即可在误差大时增大调整值,误差小时减小调整值,所以连接权重调整值\Delta w 可以用公式(5.1)表示。

公式5.1:\Delta w = -\eta \frac{\partial E}{\partial w}

\eta 表示学习率,这个值用于根据误差的程度进行权重调整。

通过误差反向传播算法调整多层感知器的连接权重时,一个瓶颈问题就是激活函数。M-P模型中使用step函数作为激活函数,只能输出0或1,不连续所以不可导。为了使误差能够传播,鲁梅尔哈特等人提出使用可导函数sigmoid作为激活函数f(u)。

为了让大家更好地理解误差反向传播算法的过程,下面我们首先以单层感知器为例进行说明。根据复合函数求导法则,误差函数求导如下所示。

公式5.2:\frac{\partial E}{\partial w_i} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial w_i}

设y=f(u),求误差函数E对w的导数。

公式5.3:\frac{\partial E}{\partial w_i} = -(r-y) \frac{\partial y}{\partial w_i} = -(r-y) \frac{\partial f(u)}{\partial w_i}

f(u)的导数就是对复合函数求导。

公式5.4:\frac{\partial E}{\partial w_i} = -(r-y) \frac{\partial f(u)}{\partial u}\frac{\partial u}{\partial w_i}

u对w,求导的结果只和x,相关,如下所示。
公式5.5:\frac{\partial u}{\partial w_i} = x_i

将公式(5.5)带入到公式(5.4)中得到下式。

公式5.6:\frac{\partial E}{\partial w_i} = -(r-y)x_i\frac{\partial f(u)}{\partial u}

这里对sigmoid函数求导。

公式5.7:\frac{\partial E}{\partial w_{ij}} = -(r_j-y_j)\frac{\partial y_j}{\partial u_j}\frac{\partial u_j}{\partial w_{ij}}

下面就和单层感知器一样,对误差函数求导。

公式5.8:\frac{\partial E}{\partial w_{ij}} = -(r_j-y_j)y_j(1-y_j)x_i

权重调整值如下所示

公式5.9:\Delta w_{ij} = \eta (r_j-y_j)y_j(1-y_j)x_i

由上可知,多层感知器中,只需使用与连接权重w_{ij}相关的输入x_i和输出y_i即可计算连接权重调整值。


下面再来看一下包含中间层的多层感知器。首先是只有一个输出单元y的多层感知器,如图所示。w_{1ij} 表示输入层与中间层之间的连接权重,w_{2j1}表示中间层与输出层之间的连接权重。i表示输入层单元, j表示中间层单元。

首先来调整中间层与输出层之间的连接权重。和上面的步骤聚一样,把误差函数E对连接权重w_{2j1}求导展开成复合函数求导。

公式5.10:\frac{\partial E}{\partial w_{2j1}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u_{21}} \frac{\partial u_{21}}{\partial w_{2j1}}


与单层感知器一样,对误差函数求导。


公式5.11:\frac{\partial E}{\partial w_{2j1}} = -(r-y) y (1-y)z_j


这里的z表示的是中间层的值。于是,连接权重调整值如下所示。

公式5.12:\Delta w_{2j1} = \eta (r-y)y(1-y)z_j

接下来调整输入层与中间层之间的连接权重。输入层与中间层之间的连接权重调整值是根据输出层的误差函数确定的,求导公式如下所示。

公式5.13:\frac{\partial E}{\partial w_{1ij}} = \frac{\partial E}{\partial y} \frac{\partial y}{\partial u_{21}} \frac{\partial u_{21}}{\partial w_{1ij}} = -(r-y)y(1-y)\frac{\partial u_{21}}{\partial w_{1ij}}

与中间层与输出层之间的权重调整值的计算方法相同,输出y也是把公式展开后进行复合函数求导。与前面不同的是,这里是中间层与输出层单元之间的激活值u_{21}对输入层与中间层之间的连接权重w_{1ij}求导。u_{21}由中间层的值z_{j}和连接权重w_{2j1}计算得到。对z_{j}求导可以得到下式。

公式5.14:\frac{\partial u_{21}}{\partial w_{1ij}} = \frac{\partial u_{21}}{\partial z_{j}}\frac{\partial z_{j}}{\partial w_{1ij}}

最后展开得到的输入层与中间层之间的连接权重调整值如下所示。

公式5.15:\Delta w_{1ij} = \eta (r-y)y(1-y)w_{2j1}z_{j}(1-z_j)x_i

上述步骤的汇总结果如下图所示。由此可见,权重调整值的计算就是对误差函数、激活函数以及连接权重分别进行求导的过程。把得到的导数合并起来就得到了中间层与输出层之间的连接权重。而输入层与中间层之间的连接权重继承了上述误差函数和激活函数的导导数。所以,对连接权重求导就是对上一层的连接权重、中间层与输入层的激活函数以及连接权重进行求导的过程。像这种从后往前逐层求导的过程就称为链式法则(chain rule)。




同理下面让我们看一下有多个输出的多层感知器的权重调整:



多个输出与单个输出的不同之处在于,输入层与中间层之间的权重调整值是相关单元在中间层与输出层之间的权重调整总和。这就会出现无法调整链接权重。这就是误差反向传播算法中梯度消失导致无法调整链接权重。对于这个问题,需要在训练过程中调整学习率\eta以防止梯度消失。

6、误差函数和激活函数

那么,有哪些函数可以作为误差函数呢?在多分类问题中,一般使用交叉恼代价雨数,公式如下所示 :

公式6.1:E = -\sum_{c=1}^{C}\sum_{n=1}^{N}r_{cn}lny_{cn}

二分类中的函数则如下所示 :

公式6.2:E = -\sum_{n=1}^{N}(r_nlny_n+(1-r_n)ln(1-y_n))

递归问题巾使用最小二乘误差函数 

公式6.3:E = \sum_{n=1}^{N}||r_n-y_n||^2

这些是经常使用的误差函数,但误差函数的种类并不仅限于此,我们也可以根据实际问题自行定义误差函数 。

激活函数类似于人类神经元,对输入信号进行线性或非线性变换。 M-P模型中使用 step 函数作为激活函数,多层感知器中使用的 是 sigmoid 函数。 这里,用输入层与中间层之间,或中间层与输 出层之间的连接权重 w_i乘以相应单元的输入值 x_i并将该乘积之和经 sigmoid 函数计算后得到激活值 u。

公式6.4:f(u) = \frac{1}{1+e^{-u}}

公式6.5: u = \sum_{i=1}^{n}w_ix_i

如下图蓝线所示,使用 sigmoid 函数时,如果对输入数据进行 加权求和得到的结果 u 较大则输 1,较小则输出 0。 而 M-P 模型中使 用的是 step 两数(如图中的红线所示),当 u 等于 0 时,输出结果 在 0和1 之间发生刷烈变动 。 另外, sigmoid 函数的曲线变化则较平缓 。

7、似然函数

我们可以根据问题的种类选择似然函数,计算多层感知器的输出结果。 多分类问题中,通常以 softmax函数(公式(7.1))作为似然函数

公式7.1:p(y^k) = \frac{exp(U_{2k})}{\sum_{q=1}^{Q}exp(U_{2q})}

softmax函数的分母是对输出层所有单元(q=l, ...,Q) 的激活 值进行求和,起到了归一化的作用, 输出层中每个单元取值都是介于 0 和 l 之间的概率值,我们选择其中概率值最大的类别作为最终分类结果输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 安装部署

文章目录 1、前言2、安装部署2.1、单机模式2.1.1、通过 yum 安装(不推荐,版本老旧)2.1.1、通过源码编译安装(推荐) 2.2、主从模式2.3、哨兵模式2.4、集群模式2.5、其他命令2.6、其他操作系统 3、使用3.1、Java 代码 —…

神经网络中的 Grad-CAM 热图(Gradient-weighted Class Activation Mapping)

Grad-CAM(Gradient-weighted Class Activation Mapping)是一种用于可视化卷积神经网络(CNN)中特定类别的激活区域的方法。其基本思想是使用网络的梯度信息来获取关于特定类别的空间定位信息。 Grad-CAM 的具体公式如下&#xff1…

Python逐步打造惊艳的折线图

大家好,Matplotlib可以快速轻松地使用现成的函数绘制图表,但是微调步骤需要花费更多精力。今天本文将介绍如何使用Matplotlib绘制吸引人的图表,实现折线图的惊艳变身。 1.数据 为了说明方法,本文使用了包含过去50年各国GDP信息的…

QT 中 QTimer 类 备查

基础 // 指定了父对象, 创建的堆内存可以自动析构 QTimer::QTimer(QObject *parent nullptr);// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔 void QTimer::start();// 启动或重新启动定时器,超时间隔为msec毫秒。 void QTimer::…

韩语语法中에和로/으로区别,柯桥发音入门韩语培训学校

에和로/으로在行动的去向与到达或涉及的地点一致时,二者可以互换。 但是에表示到达或涉及的具体地点,而로/으로表示的时动作指向的方向或经过的地点。 在只表示去向而不表示具体地点时,只能用로/으로,而在只表示具体地点而不表示方…

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果) 网页源码见附件,比较简单,之前用很多种方法实现过该效果,这次的效果相对更好。 实现功能: (1)实现左侧边栏的手…

摩根士丹利:人工智能推动增长

摩根士丹利(NYSE:MS)将人工智能战略整合到其财富管理业务中,标志着竞争性金融格局迈出了变革性的一步。该公司的人工智能计划,包括与 OpenAI 合作开发人工智能聊天机器人,促进了其财富部门的显着增长。值得…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

Linux查看计算机处理器相关的信息

采用命令lscpu。部分结果如下:

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

【开源】基于Vue+SpringBoot的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

Vue安装及环境配置详细教程

一、下载node.js 访问node.js官网:Download | Node.js 选择Windows Installer (.msi)的64-bit进行下载。 在E盘新建一个文件夹,取名为nodejs,也可以在其他盘符新建。 在安装node.js时,点击Change...,进行切换盘符安…

使用 STM32 微控制器读取光电传感器数据的实现方法

本文介绍了如何使用 STM32 微控制器读取光电传感器数据的实现方法。通过配置和使用STM32的GPIO和ADC功能,可以实时读取光电传感器的模拟信号并进行数字化处理。本文将介绍硬件连接和配置,以及示例代码,帮助开发者完成光电传感器数据的读取。 …

<JavaEE> 什么是线程安全?产生线程不安全的原因和处理方式

目录 一、线程安全的概念 二、线程不安全经典示例 三、线程不安全的原因和处理方式 3.1 线程的随机调度和抢占式执行 3.2 修改共享数据 3.3 关键代码或指令不是“原子”的 3.4 内存可见性和指令重排序 四、Java标准库自带的线程安全类 一、线程安全的概念 线程安全是指…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

spark的安装与使用:一键自动安装

使用shell脚本一键下载、安装、配置spark(单机版) 1. 把下面的脚本复制保存为/tmp/install_spark.sh文件 #!/bin/bash# sprak安装版本 sprak_version"2.4.0" # sprak安装目录 sprak_installDir"/opt/module" # hadoop安装路径&…

【数组和函数实战: 斗地主游戏】

目录 1. 玩法说明 2. 分析和设计 3. 代码实现 4. 游戏演示1. 玩法说明 一副54张牌,3最小,两个王最大,其实是2,和上面一样从大到小排列 2. 分析和设计 2.1 分析和设计 常量和变量设计 一副牌有54张,有牌的数值和花色,可以分别用两个数组来存储,card为卡牌表示的数值,color为…

Java数据结构之《希尔排序》题目

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完…

CGAL的四叉树、八叉树、正交树

四叉树(Quadtree):四叉树是一种用于二维空间分割的数据结构。它将一个二维区域划分为四个象限,每个象限进一步细分为四个小块,以此类推。四叉树可以用于空间索引、图形学、地理信息系统(GIS)等领…