神经网络-卷积神经网络

1.卷积神经网络概览

来自吴恩达课上一张图片,通过对应位置相乘求和,我们从左边矩阵得到了右边矩阵,边缘是白色宽条,当图片像素大一些时候,边缘就会变细。观察卷积核,左边一列权重高,右边一列权重低。输入图片,左边的部分明亮,右边的图片部分灰暗。这个学到的边缘是权重大的宽条(都是30),表示是由亮向暗过渡,下面这个图左边暗右边亮,学到的边界是暗的(权重-30),表示由暗向亮过渡。

上面为了理解卷积到底是如何进行边缘识别的,在神经网络中,通过将卷积设成参数,反向传播算法来进行更新,从而学到这个卷积核,不仅仅可以识别出垂直边缘、水平边缘,甚至可以学到70度,45度边缘等。

为了防止边缘像素信息丢失,可以对输入矩阵进行填充, 设原始输入维度n,卷积大小f,步长s,那么卷积操作后长度为:向上取整(n-f+1/s);填充边缘长度为p,那么卷积操作后长度为:向上取整(n+2p-f+1/s);所以可以根据想要的卷积后大小求出填充边缘长度p。

为什么卷积通常是奇数长度,只能使用不对称填充,比如当步长为1,让输入和输出大小相等,p=f-1/2,如果f是偶数,左右两边肯定需要一边多一边少,奇数卷积,会有一个中心点,直接指出卷积的位置,

tensorflow中实现卷积前向传播的函数是tf.nn.conv2d(input,卷积参数,步长,padding='SAME/VALID'表示填充0/不填充)。

识别彩色图片,输入的像素是RGB三个维度的,这里引入通道的概念,卷积核的通道个数跟输入通道个数必须一致,这个卷积核的结果是把三个通道的对应乘积求和,这里浅黄色是一个卷积核,与输入相乘后得到27个数,27个数想加得到输出的一个点。有多少个卷积核,就是输出的深度。参数个数就是(3*3*3+1)*2,其中1是每个卷积核有一个偏置项,2是两个卷积核。

卷积层连着卷积层也可以做一个卷积神经网络,如果目标是二分类就用logistic,如果是多分类就用softmax,作用在最后一层的输出节点上,这里是7x7x40,共1960个数。下面看看为什么要有池化层~

池化层,最大池化,与卷积一样,顺次移动池化层矩阵,落入池化层矩阵中的数字取一个max,最大值可能提取的特征是一个边界,图片中的一只眼睛,就是比较重要的特征。在卷积核里提取的特征,保留其最大值,池化层为什么不补0,自问一句,卷积层补0是因为边缘的点被计算的次数较少,防止漏掉边缘特征,所以补0,池化层提取最大的特征值,都在其中了,不会丢失信息,不需要补0?但是还是会存在边缘被计算的次数少呀。每个信道都单独执行池化,3个信道,池化层的深度也是3,池化层参数有,池化窗口大小,步长,常用的是2*2的,相当于长度和宽度各缩小一半,池化层没有要学习的参数,反向传播也没有什么要更新的,是一个静态的层,就长度宽度和步长需要手动设定或者是交叉验证。

LeNet-5网络:输入32X32X3,通过6个5*5*3卷积核,产生28x28x6输出,通过2x2最大池化层,得到14x14x6,然后进入下一层,通过16个10x10x6卷积核,然后通过2x2最大池化层,得到5x5x16,也就是400个输出,然后是两层全连接,120和84个节点,最后套一层softmax。高度和宽度也就是窗口大小是不断缩小的,通道数量不断增加。

卷积层相对于全连接层有啥优势?参数共享和稀疏连接,距离输入32X32X3(3072),通过6个5*5*3卷积核(450个参数),产生28x28x6(4704)输出,如果用全连接,是3072*4704个参数。参数共享,比如一个垂直边界检测的卷积核,适用与图片的任何一个子片段,稀疏连接,是指输出某一个值只依赖于卷积核窗口里的元素,其余元素无关,此外卷积核使得图片的特征平移后不变,比如眼睛在左上,移到中间,还是会被卷积核提取出来,原因就是分块提取局部特征。

2.相关问题

(1)卷积的作用

一定大小的卷积核用来提取局部特征,比如边缘滤波,卷积中的参数是通过网络训练学习出来的,因为卷积核可以包含横向、纵向滤波,甚至45度70度等倾斜的滤波,多个滤波器,还可以提取图片上的颜色、边缘等特征,再通过非线性激活、池化,一层层提取特征。卷积相对于全连接主要起到了,可以减少参数、提升泛化能力,减少参数通过参数共享和稀疏连接,卷积核可以在图片上多个位置提取特征使用即为参数共享,稀疏连接是指卷积核计算后输出的数据点,只跟上一层部分神经元连接。全连接层没有考虑像素位置之间的信息,图像识别中离得近的像素点联系比较紧密,离得远的联系就很小,全连接表示的意思是所有像素点都同等对待,那么网络学习之后可能会发现大部分权重值很小,只有少部分神经元权重很大,那么耗费大量时间来学习很多无关紧要的参数,这种学习是低效的,卷积考虑了图片像素之间的位置信息,并且提取出有用的局部特征。卷积层每层的参数的个数只和这层的fi过滤器的大小、数目有关,而和输入的规模无关。这样可以通过控制参数的数量避免过拟合了。

池化层,就是进一步做采样,缩小参数个数,最大池化层就是抽取卷积层中提取特征的关键部分,平均池化层更多保留整体信息,比如图片背景信息。池化层没有参数,只有池化大小和步长,在前向传播时候就是把将池化窗口中的最大值传给下一层,反向传播就把后面传过来的梯度递给刚才那个max元素,其他梯度都为0.。

常用的激活函数有sigmoid函数和relu函数.
Relu(x)={if x>0 then x;else 0}为了在反向传播算法中可以正常使用,将其在x=0x=0处的导数置为1,所以它的导数也就变为了 δRelu(x)={if x>0 then 1 else 0}
Relu是一个非常优秀的激活哈数,相比较于传统的Sigmoid函数,有三个作用

  1. 防止梯度弥散,sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散,而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象。
  2. 稀疏激活性:elu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,也就是说这个神经元不会经历训练,即所谓的稀疏性。
  3. 加快计算: relu函数的导数计算更快,程序实现就是一个if-else语句,而sigmoid函数要进行浮点四则运算

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值