CNN卷积神经网络原理记录

卷积神经网络最让人迷惑的地方就是在于他的卷积过程,还有其权值共享的原理。下面从初始化序贯模型(一种可以在中间随意堆叠神经网络层的结构)开始记录。卷积神经网络的目的是应用于图片识别,最初的成熟的CNN模型是手写数字识别,银行很早就开始应用这个系统。本文只是对原理的理解心得(纯属个人理解),不涉及任何公式推导。

现在有一张1000*1000的照片,总共有1000000个像素点,也就是有1000000个维度,现在我们假设有一个有1000000个神经元的隐含层,用来接受1000000个维度的输入。那么问题来了,为什么要有1000000个神经元的隐含层呢?我们先来看下一般神经网络的结构,隐含层的目的是为了学习更复杂的情况,最好的情况是每一个输入维度都有一个对应的神经元去学习他,这样可以学习全部的特征,虽说其每个隐层神经元会全连接所有输入维度,但是自我感觉,如果神经元太少,学习能力会弱,而过多的话,会产生过度学习的情况(也就是过拟合),所以加入一个1000000个神经元的隐含层就是这个道理。

这个问题解释完了,开始解决下一个问题,当用这个1000000个神经元的隐含层去连接输入的时候,就会产生1000*1000*1000000个权值参数(因为每个连接都会产生一个权值参数),这样参数会多到爆炸,计算量太大,没法训练模型,所以我们就要想办法减少参数,这时候就用到了卷积的原理,因为每个隐层神经元全连接所有1000000个像素,有点浪费资源,感觉没有必要全部链接,所以我们让每个隐层神经元只连接100个像素(也就是100个维度),这样,也能覆盖整个图片。这时,权值参数的数量就是10*10*1000000,已经减少了很多。

但是,这样其实也远远不够,参数还是太多,不好训练。然后我们就要用到权值共享的原理。每个隐层神经元都有100个参数,如果我们让1000000个神经元都用同样的权值参数,那么我们的参数数量就降低到100个,我们就只需要优化这100个参数就可以了,但是为什么可以共用这100个参数呢,我们将隐层神经元看做是学习图片某种特征的工具,这时候我们固定了一个神经元的100个参数,这样,这个神经元就学习到了他所连接的100个像素值区域中的某种特征。然后我们将这100个参数传递给剩余的所有神经元,也就是1000000个神经元用相同的100个参数,这时,所有的神经元都是学习图片中一个类型的特征,跟第一个神经元在100个像素值区域中学习的某种特征是一个类型。这一步,我们用所有的1000000个神经元学习了整个图片的某一特征。因为参数是相同的,其激活函数也是相同的,就相当于一个神经元在整个图片滚动扫了一遍,学习完这100的区域,再学习下一个100的区域。

到这里,我们知道,因为参数相同,我们只学到了一个图片的其中某一种特征,这还远远不够。我们就需要再增加多个神经元去扫这张图片,这样我们就学到了一个图片的不同类型的特征,提高我们模型的识别效果。

接下来是全连接,卷积完之后,要把所有学到的图片(因为卷积的结果其实就是产生了一个只含有原图片一个特征的新图片)压平,然后连接在一起,再输入到全连接中。


追加对于池化的理解:个人觉得,池化也是一个卷积层,只是不会去设定卷积核的数量,所以只会有相对应的数量的池化图片(对应于上一卷积层产生的图片数量),他是运用了池化函数,而不是跟卷积核一样的激活函数,所以才能起到池化的作用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值