神经网络学习笔记

神经网络

sigmoid函数

sigmoid函数是一种常见的挤压函数,其将较大范围的输入挤压到(0,1)区间内,其函数的表达式与形状如下图所示:

该函数常被用于分类模型,因为其具有很好的一个特性f′(x)=f(x)(1?f(x))。这个函数也会被用于下面的神经网络模型中做激活函数。

M-P神经元模型

生物的神经网络系统中,最简单最基本的结构是神经元。每个神经元都是接受其他多个神经元传入的信号,然后将这些信号汇总成总信号,对比总信号与阈值,如果超过阈值,则产生兴奋信号并输出出去,如果低于阈值,则处于抑制状态。McCulloch在1943年将该过程抽象成如下图所示的简单模型:

该模型称为“M-P神经元模型”。通过上图我们可以知道,当前神经元的输入是来自其他n个神经元的带权值的输出,而激活函数f()是一个如下图所示的阶跃函数

我们可以看到当总的输入小于阈值的时候,神经元处于抑制状态,输出为0,而当总输入大于阈值,则神经元被激活为兴奋状态,输出1。但是我们发现该函数是不连续且不光滑的,使用起来会很不方便,因此在实际应用中常常使用sigmoid函数代替阶跃函数做神经元的激活函数。

感知器模型

感知器模型,是一种最简单的神经网络模型结构,其网络结构包括输入层与输出层两层,如下图所示:

其为具有两个输入神经元,一个输出神经元的感知器模型。我们知道该模型是可以做与或非运算的。这是因为如果我们要做与或非运算,那么对于输入x1,x2来说,其取值只能是0或1,而我们的输出y=f(∑2i=1ωixi?θ),如果要做与运算,那令阈值ω1=1,ω2=1,θ=2,则只有在x1=1,x2=1的时候才能激活输出层神经元,输出1,其余情况均输出0。同样,如果做或运算,那令阈值ω1=1,ω2=1,θ=1,则只要有一个输入xi=1,即可激活输出神经元,输出1,如果对x1做非运算,那么可以令阈值ω1=?0.6,ω2=0,θ=?0.5,则如果x1=1,x2=0,总输入为?0.6,小于阈值,输出0,如果x1=0,x2=0,总输入为0,大于阈值,输出1。这里的激活函数为阶跃函数。这个通过下面的三幅图也可以看得出来

但是我们可以发现,对于只有输入层与输出层的感知机模型,∑2i=1ωixi?θ是线性的,其只能对线性数据进行划分,对于如下图的异或模型,其实无法准确划分的。

因为任何一条线都无法将(1,0),(0,1)划为一类,(0,0),(1,1)划为一类。但如果是像图(a)中那样的两层网络(这里的两层指的是隐层与输出层,因为只有这两层中的节点是有激活函数的),在隐层有两个节点,那么此时就可以得到两条线性函数,再在输出节点汇总之后,将会得到由两条直线围成的一个面,如图(b)所示,这时就可以成功的将异或问题解决。

因此我们可以看到,随着网络深度的增加,每一层节点个数的增加,都可以加强网络的表达能力,网络的复杂度越高,其表示能力就越强,也就可以表达更复杂的模型。

通过上面你的示例,我们也可以看到,对网络的学习其实主要是对网络中各个节点之间的连接权值和阈值的学习,即寻找最优的连接权值和阈值从而使得该模型可以达到最优(一般是局部最优)。下面主要介绍多隐层前馈神经网络模型参数的学习方法。

多隐层前馈神经网络

对于多隐层前馈神经网络,其网络中相邻两层是全连接,而层内是没有连接的,跨层之间也没有连接,如下图所示:

这里是一个单隐层的前馈神经网络,可以看到该网络的参数主要是输入层与隐层之间的连接权值ωhj,隐层的阈值θ,隐层与输出层之间的连接权值vih,输出层的阈值rh。这里假设输出层的节点个数为l个,隐层的节点个数为q个,输入层的节点个数为d个,那么我们需要学习的参数个数就为d?q+q+q?l+l个参数,其中d?q与q?l分别是输入层与隐层的连接权值与隐层和输出层的连接权值个数,q,l分别是隐层和输出层的阈值个数。这样我们就可以将对神经网络的学习问题转化为参数的优化问题。而优化问题最常用的方法就是梯度下降方法,就是让目标参数沿着梯度的方向变化从而达到最优值,即ωi+1=ωi+ηΔω,其中η为步长,Δω为沿梯度方向的变化量。

假设隐层与输出层的激活函数均为sigmoid函数,该网络的输出为Y?=(y?1,...,y?j,...,y?l),那么其第j个节点的输入为βj=∑qi=1ωijbi,其输出y?j=f(βj?rj),那么该网络的均方误差值即为E=12∑li=1(yi?y?i)2。

这里我们将隐层第h个节点与输出层第j个节点的连接权值ωhj作为优化的目标参数,那么基于梯度下降方法我们知道该参数的变化量

Δωhj=ηδEδωhj

根据链式规则,我们可以将该公式展开

δEδωhj=δEδy?jδy?jδβjδβjδωhj

其中,δEδy?j=y?j?yj,δy?jδβj=y?j(1?y?j),δβjδωhj=bh,因此

δEδωhj=y?j(1?y?j)(y?j?yj)bh

令gj=y?j(1?y?j)(y?j?yj),那么

Δωhj=ηgjbh

同样的方法,我们可以求出所有其他参数的变化值,依据这些变化值不断调整参数直至收敛。这种学习参数的方法称为标准BP算法(误差逆向传播算法)。

我们可以看到,对于标准BP算法,其每输入一个样本值的时候,就会对参数进行一次更新,当我们的样本量非常大的时候,这种学习方式会耗费大量的时间成本,速度非常的慢,而且对不同的样本进行更新的时候很可能会出现效果抵消的问题。那么我们想如果可以将所有的样本都输入一次后,再对参数进行更新,即将所有的样本的误差都计算一遍,并将这些误差累积,依据累积的误差来对参数进行更新,这样就会快很多。这种方法是可行的,以这种思想为基础的BP算法称为累积BP算法。累积BP算法的更新频率会低很多,但是该算法在下降到一定程度之后,其再下降的速度就会慢很多。因此对于大部分的算法,其都是首先使用累积梯度下降更新参数,在下降到一定程度之后,再用标准BP算法进行更新。

但是使用BP算法,常常会遇到过拟合的问题,对于过拟合问题,通常采用早停正则化的两种方式来缓解。其中早停方法比较简单,其就是讲数据集分为训练集和验证集两部分,当训练集的误差降低但验证集的误差升高的时候,就结束训练。而正则化方法则是在计算误差的时候加上一个正则项μ,该正则项用于衡量模型的复杂度,如下所示:

μ=∑iω2i

在增加连接权值和阈值这些参数的平方项之后,使得网络更加倾向于比较小的参数,从而让网络的输出更加平滑,对过拟合有所缓解。

注:图片均来自周志华老师的机器学习书的第五章神经网络,如有侵权,请联系我删除,谢谢。

时间: 2024-08-04 04:35:37

神经网络学习笔记的相关文章

CNN卷积神经网络学习笔记2:网络结构

在上篇笔记<CNN卷积神经网络学习笔记1:背景介绍>中已经介绍过CNN的结构,这篇笔记中,通过一个简单的CNN的例子,梳理一下CNN的网络结构的细节. 以下是一个6层的CNN网络,这个简单的CNN网络是DeepLearning Toolbox里面CNN的一个例子,后面要通过DeepLearning Toolbox中CNN的代码来进一步理解CNN的整个过程.我们输入的是1张大小为28*28的图片. 需要注意的有: 1,这里输入的是一张图片,如果我们输入了50张图片,那么下图中的每一个方框(代表一

CNN卷积神经网络学习笔记3:权值更新公式推导

在上篇<CNN卷积神经网络学习笔记2:网络结构>中,已经介绍了CNN的网络结构的详细构成,我们已经可以初始化一个自己的CNN网络了,接下来就是要用训练得到一个确定的CNN的模型,也就是确定CNN的参数. CNN本质上就是人工神经网络的一种,只是在前几层的处理上有所不同,我们可以把卷积核看成是人工神经网络里的权值W,而采样层实质上也是一种卷积运算.所以可以基于人工神经网络的权值更新的方法来推导CNN里的权值更新公式.人工神经网络里是用反向传播算法将误差层层回传,利用梯度下降法更新每一层的权值,C

【神经网络学习笔记】LIBSVM参数讲解

支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习方法可以实现模式分类和非线性回归,本文就matlab中的LIBSVM工具箱展开说明. 在matlab中调用LIBSVM工具箱可以方便的使用LIBSVM网络,台湾大学的林智仁教授已经封装好各方法,大家可以在此下载. LIBSVM工具箱的主要函数为svmtrain和svmpredict,调用格式为 model = svmtrain(train_lable,train_data,options); [predict

CNN卷积神经网络学习笔记1:背景介绍

Convolutional Neural Network 卷积神经网络是基于人工神经网络提出的.人工神经网络模拟人的神经系统,由一定数量的神经元构成.在一个监督学习问题中,有一组训练数据(xi,yi),x是样本,y是label,把它们输入人工神经网络,会得到一个非线性的分类超平面hw,b(x),在这篇笔记中先梳理一下传统人工神经网络的基本概念,再基于传统人工神经网络简单介绍卷积神经网络. 1,神经元neuron 一个神经元是神经网络中的一个运算单元,它实质上就是一个函数.下图是一个神经元的示意图

神经网络学习笔记-入门篇*

1简单模型 vs 复杂模型 对于一个崭新的机器学习的任务,在模型选取和特征向量获取上通常我们会有两种选择方式:a. 简单模型 + 复杂特征项:b. 复杂模型 + 简单特征项.这两种方式各有各的优缺点: 1.1 简单模型 对于简单模型来说,其优点是容易理解.可解释性较强,但是为了达到相对好的预测效果,我们通常会考虑对原始特征进一步抽象,增加大量的特征项来弥补model在处理非线性问题上的缺陷: 假设我们现在有一个学习任务,首先我们抽取出100个不相关的特征属性,然后我们想要尝试使用逻辑回归(LR)

卷积神经网络学习笔记与心得(3)卷积

数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值. 从卷积的效果来看,在二维图像上进行卷积时,卷积核对所在区域上符合某种条件的像素赋予较多的权重,其他的像素赋予的权重较少,这可以看作是一种滤波行为,因此卷积神经网络的卷积核有时也被称为滤波器,卷积核所在区域被称为局部感知域.若局部感知域中存在像素符合加较大权重的条件,称这些像素具有某种特

卷积神经网络学习笔记与心得(2)数据集

机器学习领域有很多现成的数据集,它们由个人或组织制作.整理,且向外界公开下载,比如在字符识别领域有mnist数据集等,数据挖掘领域有Iris,Adult数据集等.这些数据集为相关技术研究者提供了很大的便捷,有了这些资源,研究者就可以把更多的精力放在模型的研究上,可以说这些数据集的制作整理者对推动数据挖掘和机器学习的发展做出了巨大的贡献. 不过,在不少情况下,这些数据集未必能满足我们的需求,这时就要我们自己制作数据集了.不得不说,这次的字符识别项目中制作数据集的经历着实让我感受到了那些数据整理者的

卷积神经网络学习笔记与心得(4)池化

图片经过卷积.激活后的结果一般带有大量原图信息. 上图中卷积核提取的是竖直方向上的连续像素,但是,被增强的像素只占了结果的1/3,对于多层网络,其余重要性较低的信息也被传入了下一层网络,造成了不必要的浪费,因此需要用池化对卷基层得到的结果做聚合统计.池化的理论基础是:图像相邻位置的像素是相关的,即使间隔一段尺寸对图像进行采样,得到的结果依旧能保持大部分信息.常用的池化方式有最大池化和均值池化.池化的另一个重要作用是为卷积神经网络带来一定的平移.旋转和透视不变性. 上图展示了池化如何为模型带来平移

个人卷积神经网络学习笔记(我的理解)

学习过程相当于使用一个滤波器,定义滤波器大小和深度步长,在原图像上滑动,滤波器上每一个深度的点对原图像上特征点响应的量化值都是不同的,响应过程是一个卷积过程,原图像如果是3 7*7(3是原来的depth),滤波器定义为10 3*3 stride=1则获得的输出为10 5*5,在学习过程中卷积层的大小会不断变小,所以针对高深度的可能会循环上千次的卷积神经网络,需要在每次输出的卷积层外加(size_of_fliter-1)的pad,来防止尺度缩减或者缩减过快的问题,针对我列举出的数据,训练一次之后的