1.神经网络

我们学习的图像分类许多都是基于CNN(卷积神经网络)衍生的,CNN在计算机视觉的重要性不言而喻。接下来我们将把卷积神经网络拆开理解:神经元——神经网络——卷积神经网络。了解神经网络的原理,为卷积神经网络的学习做铺垫。

本章主要学习BP神经网络,主要理解推理过程,知道模型的运行原理,虽然BP神经网络跟图像分类的关系不算太大,但是要学会看模型、读懂模型,后续的cnn模型只会比BP神经网络更复杂。

一、神经元

1.概念

神经网络中最基本的模型就是神经元

2.类比

在生物学知识中,无数的神经元组成了我们的神经网络。当神经元被刺激时,产生一定的电位差,电位差达到一个阈值时,神经元就会被激活,同时可能会激活相邻的神经元,无数神经元的电位差达到阈值被激活后,神经网络就会通过释放化学物质执行下一步。而计算机中的相关算法都是模仿了生物学中的神经网络产生的。

举例:我们看到美食的时候,无数的神经元被激活,促使我们激活了‘想吃饭’这个行为。

4.发展

1943年,McCulloch基于上述的情景提出了M-P神经元模型,就是一个神经元与n个神经元相连,n个神经元输入信号,输入信号提供带权重的连接进行传递,该神经元收到信号后与阈值进行比较,最后通过激活函数处理并输出。(多个条件共同作用产生一个反应)

举例:我们高考填志愿选择大学,比如学校是否是名校、专业是否是热门专业、师资力量行不行、宿舍环境好不好,都是我们考量的。

5.激活函数

激活函数最简单的理解就是0-1,0代表未被激活,1代表激活(相当于与或计算)。但是实际中不大可能是非0即1的算法,所以需要连续光滑等性质,因此,激活函数选择Sigmoid函数,也称为挤压函数。

之后深入学习CNN和相关模型后,我们会发现Sigmoid函数也有它的弊端,比如 Sigmoid函数饱和使梯度消失 (X越接近无穷,返回值的变化越小)。

二、神经网络

1.感知机

由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,也称为 阈值逻辑单元。(普通的两层神经元连接)

但是感知机只有一层功能神经元,学习能力非常有限,只能解决一些线性可分问题。因此实际应用中几乎很少用。(神经元作为神经网络的基本单元很重要,但大量的神经元连接才能产生复杂的作用)

2.多层网络

要解决非线性可分问题,就要用到多层功能神经元。

因此在解决实际模型中,最常见的是多层网络,也称为 多层前馈神经网络前馈网络的意思是,神经元之间不存在同层链接不存在跨层链接。(同级互不干扰,不跨层干扰)

同时在多层网络中,输出层和输入层之间的神经层称为隐层隐含层。(中间层)

如上图,最下面是输入层,四个节点代表四维输入向量;最上面是输出层,四个节点代表四个输出值;中间的一层即是隐层。可以理解前馈网络和隐层的意思。

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中,

3.误差逆传播算法(BP神经网络)

误差逆传播算法,BackPropagate,又称为BP网络BP算法。是P.Werbo博士于1974年提出的,该算法是当前最优异的神经网络算法,是数学建模和许多科研研究必不可少的算法。注意,这节公式推理很多,一遍可能不好理解,要仔细多看几遍。后续研读论文许多都是公式推导,要会看懂公式推导。

给定训练集D={(x1,y1),(x2,y2),......,(xm,ym)},xi∈R,yi∈R,注意是训练集,我们要训练模型。

输入是 d 维特征向量;输出是 l 个输出值。 隐层是 q 个隐层神经元组成的。 假定功能单元均用Sigmoid激活函数f(x)

 β是输出层神经元接收到的输入信号,θ是输出层神经元的阈值。(右下角的角标j代表第j个输出神经元,这里是简化了好理解)

我们设定的激活函数为Sigmoid,用f(x)表示;输入信号减去阈值,就是净输入;套入激活函数,得到输出结果  y=f(β-θ)

因此,详细来说,对于(第k个样例)训练例,假定网络的实际输出为

其中:

则网络在上的均方误差为:

可以看到是由决定的。

需通过学习确定的参数数目为:,可以思考下怎么确定的。

BP算法是一个迭代学习算法,在迭代的每一轮中采用广义感知机(知道这个名就行)学习

看式子很好理解,主要就是要知道的变化,是源自 误差

BP算法是基于梯度下降策略,以目标的负梯度方向对参数进行调整

梯度下降算法:一种优化算法,通过迭代调整模型参数,沿着损失函数梯度的方向逐步降低损失,以找到使模型最优的参数值。(简单理解就是越小越好,不断执行找到极小点)

梯度下降算法:一种优化算法,通过迭代调整模型参数,沿着损失函数梯度的方向逐步降低损失,以找到使模型最优的参数值。(简单理解就是越小越好,不断执行找到极小点)

以隐层到输出层的连接层为例

误差,给定学习率(学习率在0-1),有:

右侧的是求偏导,即求出梯度的方向,决定了幅度。学习了线性回归对这个不难理解。但w和E没法之间求偏导,注意到先影响到,再影响到,然后才影响到,有:(链式法则,微积分中应该也有涉及)

 

接下来是运算,可以看下图的推理理解即可,得到的值

同理等都能算出来了,不再演示,理解即可。

4.BP算法概括

BP神经网络的流程大概就是一开始所有权重参数随机生成,输入x,经过一轮后,得到

再和得到误差,再根据上面的运算,得到权重的值,比如

再通过迭代,再训练得到,继续得到,在得到值,再迭代变化,再训练…

因此,我们也可以理解,当值趋于零的时候,模型的性能理论上就是最优越的,因为不再需要变化调整。

但是,如果我们的值每次变化太大,会造成模型的振荡,总是无法达到值趋于0的效果;相反值变化太小的话,需要很多次的训练才能让值趋于0,会浪费很多算力。除了训练效果不好,还有更棘手的过拟合问题:其训练误差持续降低,但测试误差却可能上升。

为了解决值变化太大或太小的问题,我们要合理选择训练的轮数(round/epoch),这个不难理解。BP算法概括中:

再通过迭代,再训练得到,继续得到,在得到值,再迭代变化

这就是一轮训练,很好理解。

选择训练轮数要结合算力与值变化的考量,比方说值基本上在0.01左右徘徊,就停止训练。最重要的是,值是有学习率决定的,我们对学习率的选择也是决定模型训练效果的重要因素。

因此,模型训练轮数的选择,学习率的选择也是可以进行讨论的,这就是敏感度分析,是数学建模取得高奖项必不可少的一步。

除了定量讨论,像是动态学习率也是可以考虑的方向。

在现在的实验研究中,解决过拟合是主要问题,这里提供两种方案解决过拟合问题,当然这也是一个研究方向:

1.早停

训练集误差降低,测试集误差升高停止训练。

2.正则化

通过在损失函数中添加惩罚项来限制模型复杂度,防止其过度拟合训练数据。

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值