BP神经网络的概念-飞外网

最近学习BP神经网络,网上文章比较参差不齐,对于初学者还是很困惑,本文做一下笔记和总结,方便以后阅读学习。

一、BP神经网络的概念

BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:输入向量应为n个特征

BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。

1. 神经元:神经元,或称神经单元/神经节点,是神经网络基本的计算单元,其计算函数称为激活函数(activation function),用于在神经网络中引入非线性因素,可选择的激活函数有:Sigmoid函数、双曲正切函数(tanh)、ReLu函数(Rectified Linear Units),softmax等。

1.1 Sigmoid函数,也就是logistic函数,对于任意输入,它的输出范围都是(0,1)。公式如下:

Sigmoid的函数图如上所示,很像平滑版的阶跃函数。但是,sigmoid 有很多好处,例如:

(1)它是非线性的

(2)不同于二值化输出,sigmoid 可以输出0到 1 之间的任意值。对,跟你猜的一样,这可以用来表示概率值。

( 3)与 2 相关,sigmoid 的输出值在一个范围内,这意味着它不会输出无穷大的数。但是,sigmoid 激活函数并不完美: 梯度消失。如前面的图片所示,当输入值 z 趋近负无穷时,sigmoid 函数的输出几乎为0 . 相反,当输入 z 趋近正无穷时,输出值几乎为 1 . 那么这意味着什么?在这两个极端情况下,对应的梯度很小,甚至消失了。梯度消失在深度学习中是一个十分重要的问题,我们在深度网络中加了很多层这样的非线性激活函数,这样的话,即使第一层的参数有很大的变化,也不会对输出有太大的影响。换句话讲,就是网络不再学习了,通常训练模型的过程会变得越来越慢,尤其是使用梯度下降算法时。

1.2 Tanh函数

Tanh 或双曲正切是另一个深度神经网络中常用的激活函数。类似于 sigmoid 函数,它也将输入转化到良好的输出范围内。具体点说就是对于任意输入,tanh 将会产生一个介于-1 与 1 之间的值。

Tanh函数图

如前面提及的,tanh 激活函数有点像 sigmoid 函数。非线性且输出在某一范围,此处为(-1, 1)。不必意外,它也有跟 sigmoid 一样的缺点。从数学表达式就可以看出来,它也有梯度消失的问题,以及也需要进行开销巨大的指数运算。

1.3

ReLU

终于讲到了 Relu,人们起初并不觉得它的效果会好过 sigmoid 和 tanh。但是,实战中它确实做到了。事实上,cs231n 课程甚至指出,应该默认使用 Relu 函数。

ReLU 从数学表达式来看,运算十分高效。对于某一输入,当它小于0时,输出为0,否则不变。下面是 ReLU 的函数表达式。Relu(z) = max(0,z)

那么你可能会问,「它是线性函数吧?为何我们说它是非线性函数?」

在线代中,线性函数就是两个向量空间进行向量加和标量乘的映射。

给定上面的定义,我们知道 max(0, x)是一个分段线性函数。之所以说是分段线性,是因为它在(−∞, 0]或[0,+∞)上符合线性函数的定义。但是在整个定义域上并不满足线性函数的定义。例如f(−1)+ f(1)≠f (0)

所以 Relu 就是一个非线性激活函数且有良好的数学性质,并且比 sigmoid 和 tanh 都运算得快。除此以外,Relu 还因避免了梯度消失问题而闻名。然而,ReLU 有一个致命缺点,叫「ReLU 坏死」。ReLu 坏死是指网络中的神经元由于无法在正向传播中起作用而永久死亡的现象。

更确切地说,当神经元在向前传递中激活函数输出为零时,就会出现这个问题,导致它的权值将得到零梯度。因此,当我们进行反向传播时,神经元的权重将永远不会被更新,而特定的神经元将永远不会被激活。

还有件事值得一提。你可能注意到,不像 sigmoid 和 tanh,Relu 并未限定输出范围。这通常会成为一个很大的问题,它可能在另一个深度学习模型如递归神经网络(RNN)中成为麻烦。具体而言,由 ReLU 生成的无界值可能使 RNN 内的计算在没有合理的权重的情况下发生数值爆炸。因此反向传播期间权重在错误方向上的轻微变化都会在正向传递过程中显著放大激活值,如此一来学习过程可能就非常不稳定。我会尝试在下一篇博客文章中详细介绍这一点。(摘自https://my.oschina.net/amui/blog/1633904)

1.4 softmax简介

Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。比如我们的网络要完成的功能是识别0-9这10个手写数字,若最后一层的输出为[0,1,0, 0, 0, 0, 0, 0, 0, 0],则表明我们网络的识别结果为数字1。

Softmax的公式为

,可以直观看出如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,并且对所有输入数据进行归一化。

2.权重:

3.偏置

偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b 的意义是一致的。在 y=wx+b中,b表示函数在y轴上的截距,控制着函数偏离原点的距离,其实在神经网络中的偏置单元也是类似的作用。

因此,神经网络的参数也可以表示为:(W, b),其中W表示参数矩阵,b表示偏置项或截距项。

2.反向传播调节权重和偏置


如何在IP的kernel module里设置并使用IP interrupt 用附件里的 system-user.dtsi 把 project-spec/meta-user/re.... FPGA之家 发表于 06-30 09:48 •
这里最重要的是要注意到上面的图示,积分图对象的Mat(1,1)对应实际图像Mat(0,0),如果不加.... OpenCV学堂 发表于 06-29 10:26 •
怎样格式化u盘,最好能使用现成的函数写扇区 怎样格式化u盘,最好能使用现成的函数写扇区(据说是什么地方从第5个字节开始写0,主目录从第33个字节开始写),我希望高手能提供... 发表于 06-29 07:54 • 112次
使用TensorBoard进行机器学习模型分析 总体而言,TensorBoard 是帮助开发和培训过程的绝佳工具。Scalar and Metr.... 发表于 06-27 11:41 • 160次
请问在ch554芯片测试程序,键盘和鼠标的例程里 i = _getkey( )无法实现是为什么? 请问下,下面的这段函数,实现的是键盘或鼠标的模拟输入,但是我把代码烧录进去,只有大小写案件可以正常,调试,其他按键和鼠标... 发表于 06-27 07:07 •
CH545芯片可以使用malloc函数进行内存的动态分配嘛? 如题,请问贵公司的单片机芯片(如CH545)可以使用malloc函数进行内存的动态分配嘛?... 发表于 06-24 12:46 • 119次
Hash哈希竞猜游戏开发方案(技术详情)简介 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,哈l8l希2809系2756统竞猜模式就是把.... 发表于 06-24 10:08 •
虽然目前在数字芯片上的消费级图像分类技术每秒可以执行数十亿次计算(GHz),这使得它对于大多数场景来.... 中科院长春光机所 发表于 06-23 14:27 • 261次
左边是16x16单色图像的位图。矩阵中的每个值表示相应像素的亮度。我们可以看到,这是一个简单的灰色图.... 新机器视觉 发表于 06-23 11:46 • 175次
这里有个简单的方法,直接在syscalls.c文件中,改写_write()函数的内容,代码如下所示。.... strongerHuang 发表于 06-23 10:21 • 177次
rt-thread优化系列(三)软定时器的定时漂移问题分析 所谓软定时器,是由一个线程运行维护的定时器列表。由线程调用定时器回调函数。 出出 发表于 06-23 09:35 • 1470次
神经形态技术是受生物系统启发的技术,包括终极计算机、大脑及其计算元素神经元。问题是没有人完全理解神经.... 要长高 发表于 06-22 11:53 • 400次
Java反射机制清空字符串导致业务异常分析 JVM为了提高性能和减少内存开销,在实例化字符串常量时进行了优化。JVM在Java堆上开辟了一个字符.... openEuler 发表于 06-22 11:17 • 103次
使用NVIDIA QAT工具包实现TensorRT量化网络的设计 目前, TensorFlow 在其开源软件 模型优化工具包 中提供非对称量化。他们的量化方法包括.... 星星科技指导员 发表于 06-21 16:54 • 310次
云天励飞边缘计算盒子助力道路维护工作从经验决策走向数据决策 道路病害包括道路网裂、凹陷、积水、标志线破损等。目前,道路病害检测工作主要依靠人力完成,缺乏数字化和.... 科技绿洲 发表于 06-21 15:13 • 319次
哈希表就是一种以键-值(key-indexed)存储数据的结构,我们只要输入待查找的值即key,即可.... 搭建punk2558 发表于 06-21 13:45 • 183次
整体的PointNet网络中,除了点云的感知以外,还有T-Net,即3D空间变换矩阵预测网络,这主要.... 新机器视觉 发表于 06-21 11:08 • 213次
最近中科院软件研究所、华为诺亚方舟实验室、北京大学、澳门大学的研究人员联合提出了一个全新的模型架构V.... OpenCV学堂 发表于 06-21 10:31 • 194次
时识科技提出新脉冲神经网络训练方法 助推类脑智能产业落地 近日,SynSense时识科技技术团队发表题为“EXODUS: Stable and Efficie.... 科技绿洲 发表于 06-20 14:21 • 250次
使用FLASH_ProgramHalfWord函数写0x0800ff00地址进入硬件错误中断是为什么 具体现象为 兼容模式 1k擦除后,使用FLASH_ProgramHalfWord函数写0x0800ff00地址及以后地址进入硬件错误中断,使用快写正... 发表于 06-20 06:10 • 107次
RT-Thread记录(三、RT-Thread线程操作函数) 讲完了RT-Thread开发环境,启动流程,启动以后当然是开始跑线程了,那么自然我们得学会如何创建线.... 矜辰所致 发表于 06-20 00:31 • 1820次
大多数的处理器架构,都有实现硬件栈。有专门的栈指针寄存器,以及特定的硬件指令来完成 入栈/出栈 的操.... 一口Linux 发表于 06-17 11:19 • 239次
DNN 计算一个所谓的Q-函数,该函数预测要针对特定​​状态执行的最优动作 a s。换句话说,D.... 星星科技指导员 发表于 06-17 10:06 • 245次
机器学习技术的理论背景及可用神经网络类型 主成分分析 (PCA)是一种数据降维技术,它将一组可能相关的特征转换为一组称为主成分的线性不相关.... 星星科技指导员 发表于 06-17 09:57 • 3197次
这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型.... 安芯教育科技 发表于 06-17 09:10 • 179次
请教各位大神,为什么我printf函数输出串口少了这三个字符(ch=)),代码图片如下 为什么我printf函数输出串口少了这三个字符(ch=)),即输出结果为1而不是ch=1,代码图片如下... 发表于 06-16 19:33 • 1128次
例如,经过训练以识别狗品种的 DNN 将遍历给定的图像并计算图像中的狗是某个品种的概率。用户可以查看.... FPGA技术江湖 发表于 06-16 09:27 • 212次
最初的Verilog语言没有一个可用于多个模块的定义。每个模块都必须有任务、函数、常量和其他共享定义.... OpenFPGA 发表于 06-15 09:18 • 220次
什么是哈希/Hash 哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通.... 開發丨KFZ433 发表于 06-14 09:14 • 150次
Python中有几个开源的条码解析库,之前我测试过pyzbar、libdmx这些库,发现都是个锤子,.... OpenCV学堂 发表于 06-12 16:50 • 281次