卷积神经网络

神经元

  • 神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,再将其放在非线性的激活函数中计算后输出。每两个神经元连接线上的值代表加权值,称之为权重。 不同的权重和激活函数 ,就会导致神经元有不同的输出。神经网络的每个神经元如下所示。
  • 一开始为了简单,人们把激活函数定义成一个线性函数,比如一个简单的线性激活函数是g(z)=z。后来实际应用中发现,线性激活函数太过局限,于是人们引入了非线性激活函数。
  • 常用的非线性激活函数有sigmoid、tanh、relu等,前两者比较常见于全连接层,后者relu常见于卷积层。sigmoid的函数表达式如下。
  • sigmoid函数g(z)的图形表示如下。
  • 也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,g(z)会趋近于0。压缩至0到1的用处是可以把激活函数看作一种分类的概率,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

神经网络

  • 将单个神经元组织在一起,便形成了神经网络。下图便是一个三层神经网络结构,图中最左边的层称之为输入层,最右边的层称之为输出层,中间的叫隐藏层。
  1. 输入层,接受大量非线形输入信息的层,输入的信息称为输入向量。
  2. 输出层,形成输出结果的层。输出的信息称为输出向量。
  3. 隐藏层,输入层和输出层之间的各个层。
  • 每一层都可能由单个或多个神经元组成,每一层的输出将会作为下一层的输入数据。
  • 此外,输入层和隐藏层都存在一个偏置单元,所以上图中也增加了偏置项x0和a0。针对上图,有如下公式。

卷积神经网络

  • 卷积神经网络层次结构如下。
  1. 最左边是输入层,对数据做一些处理,比如去均值、归一化等等。CNN只对训练集做去均值这一步。
  2. 中间有CONV,即卷积计算层;RELU,即激励层,激励层使用的ReLU是激活函数的一种;POOL,即池化层,取区域平均值或最大值。
  3. 最右边是FC,即全连接层
  • 对图像中不同窗口内的数据和滤波矩阵做内积的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。
  • 在下图对应的计算过程中,输入是一定大小的数据,它和滤波器做内积后等到新的二维数据。不同的滤波器会得到不同的输出数据。如果想提取图像的不同特征,则用不同的滤波器,提取想要的关于图像的特定信息,比如颜色深浅或轮廓。
  • 在CNN中,滤波器对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有以下几个参数。
  1. 深度:神经元个数,即滤波器个数,决定输出的厚度。
  2. 步长:决定滑动多少步可以到边缘。
  3. 填充值:在外围边缘补充的0的圈数,方便从初始位置以步长为单位可以刚好滑倒末尾位置。
  • 每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。与此同时,数据窗口滑动,导致输入在变化,但中间滤波器的权重是固定不变的,这个权重不变即所谓的CNN中的权重共享机制。
  • 在实际梯度下降中,sigmoid容易饱和,造成终止梯度传递,且没有0中心化。可以使用另外一个激活函数:ReLU。ReLU的优点是收敛快,求梯度简单。它对于输入的负值,输出全为0,对于正值,原样输出。
  • 池化层可以将一幅大的图像缩小,同时又保留其中的重要信息。通常情况下,池化都是2乘以2大小,比如对于最大池化来说,就是取输入图像中2乘以2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。同理,对于平均池化来说,就是取2*2大小块的平均值作为结果的像素值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章