神经网络概述与发展
概述
- 最初:算法企图模仿人脑
- 在上世纪80s和90s被广泛的应用;但在90s后期不再受关注,因为svm的兴起,人们觉得研究神经网络没前途
- 最近的复兴,随着深度学习兴起,提高了许多应用的最高水平,再度兴起
应用案例:
1.人脸识别
2.智能翻译
这些技术的背后都是基于神经网络,暗示着神经网络的复兴。
发展
1.生物学上发现人脑是由大量神经元构成的。
2.每个神经元都是和其他神经元连接,神经元与神经元之间有信号传输
3.生物学上的神经元认识
- 每个神经元和其他神经元连接,并相互传播信号
- 信号通过树突传入神经元
- 信号通过轴突传出神经元
- 神经网络创始人
1943年,心理学家McCulloch和逻辑学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型.MP
神经网络基本概念
神经元模型
神经元模型是一个包含输入、输出与计算功能的模型。
- x1,x2,x3,...,xn输入信号
- θ1,θ2,,....θn是权值,代表神经元与神经元之间连接的强弱
- 神经元会对输入信号做处理,做的处理是加和处理,其实就是线性变换
- 对做了线性变换的值,再经过一个函数,变换一下,类似逻辑回归:
激活函数
输入可以类比为神经元的树突,而输出可以类比为神经的轴突。计算则可以类比为细胞核。f称为**激活函数**(activation function)
- 对于一个神经元来说其具有两个状态,激活状态和非激活状态。一个神经元是否激活激活函数有关,因为是两个状态,所以类似于分类,激活函数有许多种
:
阈值激活函数
- z是经过了线性变换的结果
- 如果z>=0,那么神经元输出1,该神经元处于激活状态,如果z<0,那么神经元输出0,该神经元处与非激活状态
符号激活函数
sigmoid激活函数
sigmoid函数是一个连续的,而且s型的函数,α值称为斜度参数,α值越大,曲线越陡峭,α越小越平
sigmoid函数作为激活函数的优点:
- 非线性
- 单调性
- 无限次可微(最大优点)
- 当a很大时近似阈值函数
- 当a很小时近似线性函数
- 它能够将输入的连续实值压缩到[0,1]之间;特别的,如果是非常大的负数,那么输出就接近0;如果是非常大的正数,输出就接近1.
- 一度是被广泛使用的激活函数,能被解释为-一个神经元的"激活率"
sigmoid函数的缺点:
- sigmoid函数在一些位置非常平,进而导数接近于0,梯度下降训练时候我们更新网络参数的时候,参数得不到更新
- sigmoid是非零均值的,它的中心不是0,而是0.5,梯度更新时候会造成震荡
tanh双曲正切函数
其以0为中心的函数
双曲正切与sigmoid函数的关系:
其一部分梯度为0,的问题依旧存在
校验线性神经元,ReLU
- 准绝对值函数,当值大于0时候,保持本身,否则则为0
- log(1+e^z)函数是一种软的Relu函数
输入层、输出层
- x0,x1,...,xn叫做输入层
- θ0,θ1,...,θn叫做连接权值,是网络通过学习确定的参数
- 对输入层处理得到输出叫做输出层
简单的神经元就包括输入层和输出层两层
使用神经元来实现简单的运算
神经元实现逻辑与运算
假设我们要用单个神经元,学习到与运算,这里给出权值(实际要学习):
1.与运算就是只有输入两者都是1时候,才输出1,其他情况都输出0
- 假设给定权值,情况下,神经元所进行的运算是:
- 参数的表示方法是
- sigmoid函数
- x=+-4.6时候,y对应0.1和0.99
- 依次代入得到结果,符合与运算
神经元实现逻辑或运算
在给定权值的情况下,观察是否符合或运算:
神经元实现逻辑非运算
神经元实现异或运算或者异或非运算
- 什么是异或运算,a和b不一样的情况下结果为1,否则为0
- 什么是异或非运算?,a和b结果一样时候为1,否则为0
- 这两类点画在平面上
-
要划分这两类点,我们没法找到这样的超平面,将两类点划分开,要解决这两类点划分,没法通过一个神经元划分开,所以没法用一个神经元完成异或或者异或非问题
-
多个神经元完成异或或者异或非运算
神经网络的表示
之前看到用单个神经元可以组成一个相对复杂的神经网络,来解决复杂的问题,比如异或或者异或非问题。可以学到非线性的决策边界,这样的网络叫做
多层感知积。
- 每个神经元都和它上一层的所有神经元有连接
- 这样的网络成为全连接的网络
- 同一层的神经元之间没有连接
- 信号从输入层开始逐层的从前往后进行传播,后一层的神经元没有往会的反馈连接
- 这样的网络叫做前馈网络
- 对于单个神经元时候,神经元在接受输入的时候是有偏差项的,也就是比如x0,这样的偏差项的值是恒等于1的
- 对于每个神经元ai(j)表示第j层第i个单元的激励值,也就是激励函数的输出值
- 每一层的神经元和它下一层的神经元都是有连接的,连接权值代表着连接的强度,这么多的权值,可以用权值矩阵来记录权值θ(j),代表从第j层到第j+1层的权值矩阵
- 激励值的计算,代入线性变化后再经过激励函数得到最终的输出
- 关于θ值的意义
同理可以计算其他的激励值;
如果将参数放到矩阵θ中去,如果j层有Sj个神经元(不包含偏差项),j+1层有Sj+1个神经元。权值矩阵维度为
为了简洁可以用矩阵或者向量的形式来表示以上的公式
- z都是对输入进行线性变换的结果
- a是由激活函数变换之后得到的结果
- 增加偏差项,计算下一层的值
4.再次对输出值做变换
- 隐层在这个过程中学到了什么?
如果将输入层去掉仅仅保留隐层部分,我们将之前网络算出来的输入传递给隐层,作为输入,来计算得到输出。
网络整体得到的输出和之前是一样的,所以说隐层学到来原始信号的特征,隐层取到了特征提取的的作用。对于多层感知机网络
隐藏层最多一到两个隐层,多了会训练不出来。
节点的功能
- 在输入层的节点
- 将输入向量的值传递给第一个隐层,不做任何修改
- 在隐层的节点
- 计算加权和
- 根据激活函数对加权和做变换
- 将和传递给下一层
- 在输出层的节点
- 对输入做加权和
- 根据激活函数变换和
1.训练多层神经网络就意味着学习层之间的连接权值
2.理论上包含一个隐层的前馈神经网络,可以建模任意有界的连续函数
感知机的表示能力
- 神经网络可以做多分类的问题
- 输入层接受输入信号
- 比如将输入信号图片划分成四位,输入应该是图片(300*400),共需要120000个神经元来作为输入层
- 这样的话需要好多个神经元,为了使得不需要这么多神经元,一般输入的都是提取的特征
- 将提取200个特征,作为输入,输入给输入层
- 隐层神经元根据经验确定
- 输出层按照类数,第一个神经元代表是不是汽车,第n个神经元是不是行人....
k个输出单元代表分成k类
- L代表网络层数 4层
- Sl代表l层神经元个数
神经网络的数学基础
神经网络算法的流程
同一般的机器学习算法:
- 先定义loss function,衡量模型输出和期望输出之间的差异
- 采用梯度下降算法找到使得loss function取得极小值的参数θ*
- 梯度下降算法需要计算偏导数
- 误差反向传播(BP)算法就是计算偏导数用的
- BP算法的核心是求导链式法则
神经网络的损失函数
一个神经元其实就是一个逻辑回归,那么我们对逻辑回归的损失函数与神经网络的损失函数进行对比:
- 一个神经网络有k个输出,我们用hθ(i)代表第i个输出
- 神经网络的损失函数,类似于logistics回归的损失函数,对于神经网络来说要将每一个神经元的交叉熵损失都计算出来
- 关于正则化项
梯度概念
- 对于该目标函数:
- 分别对x和y求偏导数
- 得到梯度
- 意义代入x=-4,y=-3
如果我们对x增加一-个小的量,对完整表达式的影响效果是?。
由偏导数定义,对于x增加了一个很小的量,由于得到是-3,所以对f影响是使其减少了,减少量是增加量的三倍。减少它,并且减少量是增加量的3倍。
基于每个变量的导数告诉你完整表达式在该值上的敏感度
复合函数求导数
一个函数对一个变量的导数=一个函数对中间变量的求导*中间变量对该变量的求导
例如:如果函数u=φ(t),v=ψ(t)在t可微, z=f(u,v)
计算图
例如y=(x+y)*z可以表示成如下计算图
用一个计算图来表示信息的传递和导数的计算给定输入信号,我们可以立即计算出:
(1)当前节点的输出值,比如直接计算当x=-2,y=5,z=-4时候f的输出值
(2)局部梯度:当前节点的输出相对于当前节点输入的局部梯度值
- f对q求偏导数因为f=-4q,所以求偏导数是-4
- f对z丢偏导数因为f=3z ,求偏导数3
- q=(x+y),q对x和对y求偏导数为1
- 因为要求f对x求偏导数,就是df/dq乘dq/dx得到-4,f对y同理
- 先计算函数相对与中间变量的梯度
- 再计算中间相对于局部变量的梯度
- 将两者一乘就得到了函数相对于局部变量的梯度
复杂例子
- 求导公式
- 计算图绘制
- 计算每一个节点的输出值和整体的输出值
- 求导计算对每一个变量的梯度
从右到左
- f相对与自身梯度一开始是1
- 1/x梯度是-1/x^2,将1.37代入 -1/(1.37)^2,再乘以1,得到-0.53
- x+1求导梯度为1,与前面相乘不变还是-0.53
- ex求导还是ex,e^-1乘以-0.53=-0.20
- -x求导得-1,乘以-0.20=0.20
- 两个变量相加,对两个变量分别求导都是1,1乘以0.20不变还是0.20
- 对于剩下两个加的节点来说,求导还是得到1,1乘以0.20不变哈市0.
- y=w0x0对w0求偏导是x0也就是-1,-1*0.20=-0.20
- y=w0x0对x0求偏导是w0也就是2, 2*0.20=0.39(近似)
- y=w1x1对w1求偏导是x1也就是-2,-2*0.20=-0.40
- y=w1x1对x1求偏导是w1也就是-3,-3*0.20=-0.60
BP算法(误差反向传播算法)
BP算法又称误差反向传播算法
主要思想:从后向前逐层传播输出层的误差,以间接算出隐层误差。.
算法分两阶段:
- (正向过程) 输入信息从输入层经隐层逐层计算各单元的输出值
- (反向传播过程)输出误差逐层向后算出隐层各单元的误差,并用此误差修正前层的权值。
通常采用梯度法修正权值,因此要求激励函数可微,一般采用logistic激励函数
前向传播
- 输入层有三个神经元、隐藏层有三个神经元、输出层有一个神经元
- 注意每层的神经元个数不包括人为添加的偏差项
- ai(j),j层第i个神经元的激活值
- θ(j),代表第j层到第j+1层网络的权值
逐层传播的过程:
比如第二层第一个神经元的激活值=激活函数函数对之前线性变换得到的值
同理:
如果神经网络在第j层有Sj个神经元,j+1层有Sj+1个神经元,那么权值矩阵维度维Sj+1*(Sj+1),加一是因为偏差项
用矩阵形式来表示该过程:
- x是输入的数据
- z是线性变换得到结果
- a是对线性变换结果再经过激活函数得到的结果
- 得到最终结果
例子:包含四层神经元的神经网络:
前向传播过程:
误差反向传播
我们希望计算的是,但是其不是很好算,有了
这样一个偏导数,我们可以在梯度下降的过程中,更新权值
代表的是第l层第j个节点的误差
它正式的定义是误差函数cost相对于当前l层z的偏导数
第四层的误差是,aj(4)假设输出,yj是期望输出,两者相减
第三层的误差是:
推导:
同理:
误差反向传播算法
- 对所有样本做如下计算
- 正向计算计算出每一层的输出值a
- 再通过反向传播求每一层的δ
- 对δ求平均值,还要考虑正则化项
误差前向传播与反向传播计算过程
前向传播
- 输入层向前传播信号,这些信号会传播给后一层的每一个神经元,线性变换得到z
- 在经过非线性变换a
- 第二层的输出值又作为下一层的输入值
- 对第二层的输入信号进行线性变换后,又进行非线性变换得到第三层的输出
- 对第三层输出值作为输入信号,输入给第四层,线性变换之后经过非线性变换得到输出
反向传播
- 先计算出第四层的δ1(4)
- δ1(3)和δ2(3)可以通过公式计算
- δ2(2)可以通过公式计算得到:
- 我们可以看到误差是如何从后向前传播的
神经网络重要性质回顾
- 输入层的神经元个数对应特征的维度
- 要分多少个类输出层就对应多少个神经元
- 一个隐层用的最多,可以拟合出任何形状决策边界(有界函数)
- 多个隐层,每个隐层神经元个数都一样
- 训练网络时候,我们一开始不知道权值,会初始化权值,随机初始化权值
- 实施前向传播,计算结果
- 反向传播计算误差,更新权值
- 计算梯度容易错,所以要梯度检查
- 检查计算出梯度值与以下算式值是否接近,进行梯度检测
- 梯度下降更新权值,使得误差函数取得极小值
-
多层感知机是是--些全连接层的堆叠
-
利用梯度下降算法来训练(误差反向传播)
径向基函数神经网络
- 单隐层前馈神经网络(信号从前向后传播)
- 使用径向基函数作为隐层神经元激活函数
- 输出层则是对隐层神经元输出的线性组合
- 隐层用径向基函数作为激活函数,需要确定中心,进而计算输入向量与中心之间的距离
- 输出层对接受信号做线性变换
- 网络参数包括中心、径向基函数包含参数、隐层输出层之间连接权值
径向基函数
径向基函数定义:
沿径向对称的标量函数,通常定义为样本x到中心之间欧式距离的单调函数
- 一类函数,实值函数,输出是个实数
- 函数值仅仅依赖于输入与中心之间的距离,两个输入距离中心距离一样,两个输出就一样
常见径向基函数-高斯函数
如何确定中心?
- 中心有k个隐藏神经元就有k个中心
- 假设有100个训练样本,它把每个样本都作为训练中心,隐藏神经元个数=样本个数,两个样本比较接近的话,计算的值也比较接近,径向基函数作为激活函数,在训练样本集上两个样本集比较相似,相似可以反应到隐层神经元中。两个训练样本接近或者相等的话,他们隐层神经元的值也是相等的,如果我们以每个样本作为中心计算中心,会出现冗余
- 隐层神经元个数小于训练集样本的个数
- 输出层神经元个数-般小于隐层神经元的个数
径向基网络的参数
- 中心的个数
- 中心的坐标
- 径向基函数的参数
- 隐层和输出层之间的连接权值
径向基神经网络训练过程
1.确定中心---随机采用、聚类等
2.确定σ, ------经验公式、BP算法,最小二乘法等
径向基神经网络的用途
用于函数逼近具有足够多的隐层神经元的RBF网络可以以任意精度逼近任意的连续函数、
SOM网络
- SOM是无监督的神经网络
- 基于竞争学习(输出层神经元相互竞争,对于接受信号都有相应但是仅有输出最大的神经元会胜出,其他神经元被抑制)算法的前馈网络
- 有时也称作拓扑有序网络(在原始空间中相近的两个点在目标空间中的映像点也比较接近)
SOM网络的用途
- 发现大量数据中的分类(簇)
- 主要处理高维数据,将高维映射到一维或者二维空间,可以帮助可视化
- 组合各种数据集发现模式
kohonent SOM网络
- 最底下绿色,是输入层神经元,接受输入信号后,通过学习获得输入信号的有序拓扑图
- 上面的二维阵列是输出层,输出层会对输入有响应,每次仅仅只有一个神经元会响应,其他神经元都会被抑制
- 相似的输入信号在输出层对应的神经元是相似的,或者说邻接的
- 输出层神经元,相似的信号,对应输出神经元也是相似的
类似人的大脑,将不同的信息,映射到不同的分区
SOM训练过程
竞争阶段:选取赢家神经元
协作阶段:选择赢家神经元周围的邻域范围
更新阶段:对于邻域范围内神经元权值进行更新
- 输出层仅有三个神经元,输入层三个神经元
- 随机初始化连接权值
- 随机选择输入
- 计算赢家神经元,计算输入向量与中心的距离,同理对每个连接权重计算一个距离,看那个距离最小
- 选择最小的距离,确定赢家神经元
- 确定邻域神经元
- 更新权值
- 重复过程直到收敛
SOM 特点
- 由于邻域的更新,权值倾向于遵循输入向量的分布
- 学习到了一个表示输入空间中分布的拓扑特征图,特征图中邻接神经元将有相似的权值
ART 网络
- 基于竞争学习
- 网络可以不断学习
- 学习新的知识后不会破坏原有知识
ART 结构
- 包含两层输入层(比较层)和输出层(识别层)
- 输入层接受信号后,对输入信号变化得到输出,输出叫做短期记忆
- 输出层通过竞争得到赢家神经元
- 同时第二层有一个反馈给第一层,第一层通过比较输入向量以及第二层到第一层的自顶向下的权重,第二层的期望体现在权重(长期记忆)
- 通过比较x与θ之间的相似度得到输出给引导系统,引导系统会将信号与阈值比较,如果大于阈值系统就处于谐振状态使得赢家权值得到加强,更新权值
- 如果小于阈值,认为赢家神经元与当前输入类并不相互符合,可以选择第二大的神经元,如果每个神经元都小于阈值,那么会添加新的神经元
- 网络可以学新的知识体现在,可以添加神经元改变结构,可以改变输出层神经元个数
- 阈值是非常重要参数,阈值比较大,会添加很多神经元,分类比较细,否则比较分类粗略
- 较好缓解了稳定性和-可塑性的窘境
- 稳定性指神经网络在学习新知识的同时要保持对之前学习的知识的记忆可塑性指神经网络要能够学习新知识
级联相关网络
结构自适应网络:学习网络结构,网络的结构不是一开始设置好的,而是在学习的过程中确定的
- 一开始初始的时候具有最简单拓扑结构,一个输入层,一个输出层
- 输出层和输出层之间的权值用6个点表示
- 给初始状态增加隐层节点
- 增加隐层节点后的表示
- 红色连接权值通过最大化新节点的输出和网络误差之间的相关性来训练
级联神经网络的特点
级联:指建立层次连接的层级结构。开始训练时,网络只有输入层和输出层,处于最小拓扑结构;随
着训练的进行,新的隐层神经元逐渐加入,从而创建起层级结构。当新的隐层神经元加入时,其输入端
连接权值是冻结固定的。
相关:指通过最大化新神经元与输出网络误差之间的相关(orelatioin)来训练相关参数。
级联神经网络的优点
特点:
- 优点:与一般前馈神经网络相比,不用设置网络层数、隐层神经元数目,且训练速度快。
- 缺点:在数据较小时容易陷入过拟合。
Boltzm ann机
基于能量的模型
- 网络的每一个状态会和一个能量值相关联
- 学习就对应着修改能量函数以使得它的形状具有所期望的性质
- 例如:我们期望的网络配置是对应低能量的
- 只有两层可见层和隐层
- 可见层和隐层神经元的取值是0或者1
- 可见层的神经元之间没有连接,隐层神经元之间也没有连接
- 两层结构中可见层接受和发送数据
- 隐层从可见层中学习信息和分布,隐层可以理解为数据的内在表达
- 玻尔兹曼机是生成模型,对数据联合分布进行建模,给你可见层输入,希望再隐层学到输入表示来重建输入
能量的定义
其中: W是可见层和隐层之间的连接权值; c为可见层的偏置向量; b为隐层的偏置向量