当前位置:   article > 正文

CNN学习(1):一文看懂卷积神经网络CNN(1)—前馈神经网络

前馈神经网络

目录

参考资料

一、神经网络

1、人脑神经网络

2、人工神经网络

3、神经网络的发展历史

二、前馈神经网络

1、神经元

(1)Sigmoid型函数

① Logistic函数

②Tanh函数

③两个函数形状对比

(2)ReLU函数

① 带泄露的ReLU函数(PReLU)

②ELU函数

③几种函数形状的对比

(3)Swish函数

(4)GELU函数

2、网络结构

(1)前馈网络

(2)记忆网络

(3)图网络

3、前馈神经网络

(1)补充:感知器

(2)通用近似定理

(3)应用到机器学习

(3)参数学习

4、反向传播算法

5、自动梯度计算

(1)基本原理

(2)工作流程

(3)两种主要的自动微分方法

6、优化问题

(1)非凸优化问题

(2)梯度消失问题

三、总结


参考资料

在学习过程中,主要以邱锡鹏老师《神经网络与深度学习》为主要学习思路,并辅助网上已有的学习资料和学习网站。【之所以自己出一个总结,也是为了看过以后形成一个总结,方便后续查询】

邱老师的书里已经给出了系统的知识体系,强烈推荐大家去学习。

由于我主要学习目的就是CNN,所以只学神经网络—模型—前馈网络—卷积神经网络这个支线,如果有其他同学需要深度学习的,可以去看邱老师的书:https://nndl.github.io/nndl-book.pdf

一、神经网络

神经网络是受人脑神经系统的启发,模拟人脑神经系统的数字模型,称为人工神经网络,简称神经网络。在机器学习领域,神经网络是指由很多人工神经元构成的网络结构模型,这些人工神经元之间的连接强度是可学习的参数。

1、人脑神经网络

神经元(Neuron),也叫神经细胞(Nerve Cell),是人脑中携带和传输信 息的细胞,是人脑神经系统中最基本的单元。

每个神经元有上千个突触和其 他神经元相连接。这些神经元和它们之间的连接形成巨大的复杂网络。

典型的神经元结构如下:

(1)细胞体(Soma)中的神经细胞膜上有各种受体和离子通道,胞膜的 受体可与相应的化学物质神经递质结合,引起离子通透性及膜内外电位差发生 改变,产生相应的生理活动:兴奋或抑制。

(2)细胞突起是由细胞体延伸出来的细长部分,又可分为树突和轴突:

  • 树突(Dendrite)可以接收刺激并将兴奋传入细胞体。每个神经元可以有一或多个树突。
  • 轴突(Axon)可以把自身的兴奋状态从胞体传送到另一个神经元或 其他组织。每个神经元只有一个轴突。

 神经元之间没有物理连接,但是可以向其他神经元收发信息。两个连接的神经元靠突触(Synapse)进行互联来传递信息,形成一个神经网络,即神经系统。突触可以理解为神经元之间的连接“接口”,将一个神经元的兴奋状态传到另一个神经元。 一个神经元可被视为一种只有两种状态的细胞:兴奋和抑制。

神经元的状态取决于从其他的神经细胞收到的输入信号量,以及突触的强度(抑制或加强)。当信 号量总和超过了某个阈值时,细胞体就会兴奋,产生电脉冲。电脉冲沿着轴突并通过突触传递到其他神经元。

在人脑神经网络中,不同神经元之间的突触有强有弱,其强度是可以通过学习(训练)来不断改变的,具有一定的可塑性。不同的连接形成了不同的记忆印痕。

突触可塑性原理:当神经元 A 的一个轴突和神经元 B 很近,足以对它产生影响,并且持续地、重复地参与了对神经元 B 的兴奋,那么在这两个神 经元或其中之一会发生某种生长过程或新陈代谢变化,以致神经元 A 作为能使神经元B兴奋的细胞之一,它的效能加强了。

Hebb认为人脑有两种记忆:长期记忆和短期记忆。短期记忆持续时间不超过一分钟。如果一个经验重复足够的次数,此经验就可储存在长期记忆中。短期记忆转化为长期记忆的过程就称为凝固作用。

2、人工神经网络

人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实 现机理和功能上模拟人脑神经网络。

人工神经网络由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制)。

由于人工神经网络可以用作一个通用的函数逼近器(一个两层的神经网络可以逼近任意的函数),因此我们可以将人工神经网络看作一个可学习的函数,并将其应用到机器学习中。

3、神经网络的发展历史

第一阶段:模型提出

  • 提出了许多神经元模型和学习规则;
  • 提出了一种可以模拟人类感知能力的神经网络模型,称为感知器;
  • 此时已经在应用领域(自动驾驶、模式识别等)取得了成效。

第二阶段:冰河期

  • 哈佛大学的 Paul Werbos 发明反向传播算法;
  • 受动物初级视皮层简单细胞和复杂细胞的感受野的启发,福岛邦彦提出了一种带卷积和子采样操作的多层神经网络:新知机(采用了无监督学习的方式来训练)。

第三阶段:反向传播算法引起的复兴

  • 反向传播算法,简称BP算法,适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。

第四阶段:流行度降低

  • 神经网络可以很容易增加层数,神经元数量,从而构建复杂的网络,但是其计算复杂性也会随之增长,以当时的技术不足以支持训练大规模神经网络。

第五阶段:深度学习的崛起

  • Hinton通过逐层预训练来学习一个深度信念网络,并将其权重作为一个多层前馈神经网络的初始化权重,再用反向传播算法进行精调,这样可有有效解决深度神经网络难以训练的问题;
  • 同时随着大规模并行计算以及GPU设备的普及,计算机的计算能力得以大幅提高,可供机器学习的数据规模也越来越大,计算机已经可以端到端训练一个大规模神经网络,不需要借助于训练的方式。

二、前馈神经网络

神经网络是一种打过莫的并行分布式处理器,从两个方面上模拟大脑:(1)网络获取的知识是通过学习来获取的;(2)内部神经元的连接强度,即突触权重,用来储存获取的知识。

神经网络有三个主要特性:(1)信息表示是分布式的(非局部的);(2)基于和知识是储藏在单元之间的连接上的;(3)通过逐渐改变单元之间的连接强度来学习新知识。

从机器学习的角度来看,神经网络一般可以看作一个非线性模型,其基本组成单元为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络称为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,可以在机器学习的框架下通过梯度下降方法来进行学习。

1、神经元

人工神经元,简称神经元,是构成神经网络的基本单元,主要是模拟生物神经元的结果和特性,接收一组输入信号并产生输出。

一个生物神经元通常具有多个树突和一条轴突。树突用来接收信息,轴突用来发送信息。当神经元所获得的输入信号的积累超过某个阈值时,它就处于兴奋状态,产生电脉冲。轴突尾端有许多末梢可以给其他神经元的树突产生连接(突触),并将电脉冲信号传递给其他神经元。

假设一个神经元接收D个输入x1,x2,…,xp,令向量x=[x1;x2;…;;xp]来表示这组输入,并用净输入(Net Input)z€R表示一个神经元所获得的输入信号x的加权和:

其中的\omega是D维的权重向量,b是偏置。

净输入z在经过一个非线性函数f(⋅)后,得到神经元的活性值a:

其中的非线性函数f(⋅)成为激活函数(Activation Function).

为了增强网络的表示能力和学习能力,激活函数需要具备以下几点特质:

(1)连续并可导(允许少数点上不可导)的非线性函数.可导的激活函数可以直接利用数值优化的方法来学习网络参数;

(2)激活函数及其导函数要尽可能的简单,有利于提高网络计算效率;

(3)激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

(1)Sigmoid型函数

Sigmoid型函数是指一类S型曲线函数,为两端饱和函数.常用的Sigmoid型函数有Logistic函数和Tanh函数。

其实就是两端处,函数图形趋于直线。

① Logistic函数

函数定义为:

Logistic 函数可以看成是一个“挤压”函数,把一个实数域的输入“挤压”到 (0, 1)。当输入值在0附近时,Sigmoid型函数近似为线性函数;当输入值靠近两端时,对输入进行抑制。输入越小,越接近于 0;输入越大,越接近于 1。

和感知器使用的阶跃激活函数相比,Logistic函数是连续可导的, 其数学性质更好。

装备了Logistic激活函数的神经元具有以下两点性质:1)其输出直接可以看作概率分布,使得神经网络可以更好地和统计 学习模型进行结合;2)其可以看作一个软性门(Soft Gate),用来控制其他神经元输出信息的数量。

②Tanh函数

函数定义:

Tanh函数可以看作放大并平移的Logistic函数,其值域是(−1, 1)。

③两个函数形状对比

Tanh 函数的输出是零中心化的(Zero-Centered),而 Logistic 函数的输出恒大于 0。非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。

(2)ReLU函数

ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier函数,是目前深度神经网络中经常使用的激活函数。ReLU实际上是一个斜坡(ramp)函数,定义为:

【优点】

采用 ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效。

Sigmoid 型激活函数会导致一个非稀疏的神经网络,而 ReLU 却具有很好的稀疏性,大约50%的神经元会处于激活状态。

在优化方面,相比于Sigmoid型函数的两端饱和,ReLU函数为左饱和函数, 且在x > 0时导数为 1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。

  • 梯度下降问题:是一种优化算法,用于训练神经网络模型。通过调整网络中的权重和偏置参数来最小化损失函数,从而达到学习数据模式的目的。(1)梯度的方向指向损失函数增长最快的方向。(2)通过不断迭代,沿着梯度的反方向更新参数,直到损失函数达到一个较小的值,或者达到预设的迭代次数。

【缺点】

死亡 ReLU 问题:在训练的时候,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,说明这个神经元自身参数的梯度永远都为0,在以后得训练过程中永远不可能被激活。

① 带泄露的ReLU函数(PReLU)

在输入x<0时,保持一个很小的梯度\gamma,当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不会激活。

梯度\gamma是一个很小的常数,当梯度\gamma<1时,带泄露的ReLU也可以写为:

(其实就是为了当输入为负时,ReLU的导数为0,导致神经元的权重在反向传播过程中不会更新,所以允许负输入有一个非零的梯度)

②ELU函数

ELU(Exponential Linear Unit,指数线性单元)是一个近似的零中心化的非线性函数。

(ELU函数在负值区域的梯度随着输入值的减小而逐渐增大,这有助于梯度在深层网络中的传播,缓解了梯度消失的问题。ELU的负值部分的梯度是连续的,这有助于提高训练过程中的稳定性。)

③几种函数形状的对比

(3)Swish函数

是一种自门控的激活函数,由谷歌的研究人员在2017年提出。

其中,声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】

推荐阅读
相关标签