感知机(Perceptron)是由两层神经元组成,输入层接收外界输出信号后传递给输出层,输出层是M-P神经元,也称为“阈值逻辑单元”。
对于以上的感知机,我们可以建立模型:
感知机存在的问题是,对线性可分数据工作良好,如果设定迭代次数上限,则也能一定程度上处理近似线性可分数据。但是对于非线性可分的数据,比如最简单的异或问题,感知器就无能为力了。这时候就需要引入多层感知器这个大杀器。
多层感知器的思路是,尽管原始数据是非线性可分的,但是可以通过某种方法将其映射到一个线性可分的高维空间中,从而使用线性分类器完成分类。下面卷积神经网络概述神经网络的大体结构图中,从X到O这几层,正展示了多层感知器的一个典型结构,即输入层-隐层-输出层。
输入层-隐层
是一个全连接的网络,即每个输入节点都连接到所有的隐层节点上。更详细地说,可以把输入层视为一个向量 x ,而隐层节点 j有一个权值向量 θj 以及偏置 bj ,激活函数使用 sigmoid 或 tanh ,那么这个隐层节点的输出应该是
隐层-输出层
可以视为级联在隐层上的一个感知器。若为二分类,则常用Logistic Regression;若为多分类,则常用Softmax Regression。
为讨论下面几种算法,采用最简单的线性回归作为例子。相关的参数如下(一般机器学习中都相关问题都是采用下列的参数):
n :训练集合的特征数量,例如房价预测中的房子的大小和卧室的数量
m :训练样本的数量
x :输入变量/特征
y :输出变量/特征
(x,y) :训练样例
ith :训练样例的组数,表示为: (x(i),y(i))
h(x) :拟合函数
J(x) :损失函数
(此处注意上面推出的这个迭代式,下面要与逻辑回归中推出的迭代式进行比较)
(3)随机梯度下降法(stochastic gradient descent,SGD)
SGD是最速梯度下降法的变种。
使用最速梯度下降法,将进行N次迭代,直到目标函数收敛,或者到达某个既定的收敛界限。每次迭代都将对m个样本进行计算,计算量大。
为了简便计算,SGD每次迭代仅对一个样本计算梯度,直到收敛。伪代码如下(以下仅为一个loop,实际上可以有多个这样的loop,直到收敛):
线性回归的一个具体实现可以从上面解决非线性最优问题的常见算法的例子里学习,下面首先给出一个对于线性回归的一个可能的解释。
Probabilistic Interpretation
局部加权回归(Locally weight regression,Loess/Lowess)
通过以上的介绍我们弄清楚了神经网络的结构,常见的神经网络有多层前馈网络(每层神经元与下一层神经元全连接,神经元之间不存在同层连接,也不存在跨层连接),下面就是介绍训练类似的多层网络(即估计权重和阈值这些参数)的方法了。对于一般的问题,可以通过求解损失函数极小化问题来进行参数估计。但是对于多层感知器中的隐层,因为无法直接得到其输出值,当然不能够直接使用到其损失了。这时,就需要将损失从顶层反向传播(Back Propagate)到隐层,来完成参数估计的目标。
首先,我们给出下面的BP网络(用BP算法训练的多层前馈神经网络):
给定训练集 D=(x1,y1),(x2,y2),……,(xm,ym),xi∈Rd,yi∈Rl ,即输入示例由 d 个属性描述,输出 l 维实值向量。为了便于讨论,上图给出了一个拥有 d 个神经元、 l 个输出神经元、 q 个隐层神经元的多层前馈网络结构,其中输出层第 j 个神经元的阈值用 θj 表示,隐层第 h 个神经元的阈值用 γh 表示。输出层第 i 个神经元与隐层第 h 个神经元之间的连接权为 νih ,隐层第 h 个神经元与输出层第 j 个神经元之间的连接权为 ωhj 。记隐层第 h 个神经元接收到的输入为 αh=∑i=1dνihxi ,输出层第 j 个神经元接收到的输入为 βj=∑qh=1ωhjbh ,其中 bh 为隐层第 h 个神经元的输出。假设隐层和输出层神经元都使用sigmoid函数。
具体推导过程如下两张图片所示:
最后补充几个常用的激活函数的导数结果:
f′(x)f′(x)f′(x)=sigmoid′(x)=f(x)(1−f(x))=tanh′(x)=1−f2(x)=softmax′(x)=f(x)−f2(x)
卷积神经网络沿用了普通的神经元网络即多层感知器的结构,是一个前馈网络(网络拓扑结构上不存在环或者回路)。以应用于图像领域的CNN为例,大体结构如下图所示:
根据上面的基本结构,我们就逐层进行分析。
以上介绍的多层感知机存在一定的问题,它是一个全连接的网络,因此在输入比较大的时候,权值会特别多。比如一个有1000个节点的隐层,连接到一个1000×1000的图像上,那么就需要 10^9 个权值参数(外加1000个偏置参数)!这个问题,一方面限制了每层能够容纳的最大神经元数目,另一方面也限制了多层感知器的层数即深度。
多层感知器的另一个问题是梯度发散。一般情况下,我们需要把输入归一化,而每个神经元的输出在激活函数的作用下也是归一化的;另外,有效的参数其绝对值也一般是小于1的;这样,在BP过程中,多个小于1的数连乘,得到的会是更小的值。也就是说,在深度增加的情况下,从后传播到前边的残差会越来越小,甚至对更新权值起不到帮助,从而失去训练效果,使得前边层的参数趋于随机化(补充一下,其实随机参数也是能一定程度上捕捉到图像边缘的)。
有关神经网络训练过程中梯度的有关问题可以详细见:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap5/c5s0.html
既然多层感知器存在问题,那么卷积神经网络的出现,就是为了解决它的问题。卷积神经网络的核心出发点有三个。
更加生动形象的对于这三个问题的解释可以参考以下的文章:
http://blog.csdn.net/stdcoutzyx/article/details/41596663/
现在来看,需要训练参数过多的问题已经完美解决。关于梯度发散,因为多个神经元共享权值,因此它们也会对同一个权值进行修正,积少成多,积少成多,积少成多,从而一定程度上解决梯度发散的问题!
接下来有关卷积的问题可以参考下面这两篇文章:
卷积神经网络全面解析(之前的很多内容也是参考这篇文章里面的)
以及一些有关图像语义分割的反卷积的知识:图像卷积与反卷积
指数分布族(The Exponential Family)
如果一个分布可以用如下公式表达,那么这个分布就属于指数分布族:
当T(y)被固定时,a(η)、b(y)就定义了一个以η为参数的一个指数分布。我们变化η就得到不同的概率分布。
在 T(y)=y 的通常情况下,η也仅仅是个实数,所以 ηTT(y) 也是实数。
广义线性模型(GLM)
在分类和回归问题中,我们通过构建一个关于x的模型来预测y。这种问题可以利用广义线性模型(Generalized linear models,GMLs)来解决。构建广义线性模型我们基于三个假设,也可以理解为我们基于三个设计决策,这三个决策帮助我们构建广义线性模型:
相关问题可以参考:
http://www.cnblogs.com/BYRans/p/4735409.html
多分类问题
多分类问题符合多项分布。有许多算法可用于解决多分类问题,像决策树、朴素贝叶斯等。这篇文章主要讲解多分类算法中的Softmax回归(Softmax Regression)
推导思路为:首先证明多项分布属于指数分布族,这样就可以使用广义线性模型来拟合这个多项分布,由广义线性模型推导出的目标函数 hθ(x) 即为Softmax回归的分类模型。
上面的推导过程是参考:http://www.cnblogs.com/BYRans/p/4905420.html这篇博文的,有关于Softmax回归的更多问题可以看:
Softmax回归
至此,整个卷积神经网络的相关知识就总结完了,其中参考了很多大牛们的博客,写这篇博客也是为了自己总结梳理相关的知识,本人的能力有限,如有错误的地方还请大家留言指正。