卷积神经网络,就是利用和人大脑相似的原理来进行工作的,人脑是怎么工作的,就是通过一系列的神经元来进行感知,兴奋,传递信息的,就比如你看到一束花,你的视觉神经元兴奋,然后就将这种花图像的神经元信号传递给大脑,然后大脑进行是做相关的处理。
上面说了神经元要兴奋,可是怎么就能让自己训练的CNN网络中(神经元)兴奋呢,哈哈这里我叫神经元就不合适了,因为在CNN网络中是没有神经元这一概念的,他其实就是一堆滤波器,因为滤波器你设定的不一样,他对一些特定的图案,或者形状,就会有不一样的输出,比如你设定的一个滤波器对数字1这个形状比较感兴趣(感兴趣其实就是一个滤波器输出值而已)值越大证明这个图案和1特别相近,这时你输入一个2,他就不感兴趣了,相应的你的输出值就会变小。
下面说一说具体的CNN网络的实现过程,在这之前我再重复一遍,训练卷积神经网络,其实就是在训练一个个的滤波器(很容易理解的),这就相当于人脑中的神经元,不是都说人学习的过程就是在建立一个个神经元的过程吗,网络构建中就是在建立一个个的滤波器。滤波器与图像做卷积大家应该都会吧。
好了废话说了好多,直接开始吧,训练卷积层,从第一层开始吧,比如第一层你定义6个filter(滤波器),这是你的这个神经网络第一层就可以对6类特征感兴趣,比如你输入的是一张64*64 的灰度图像,通过卷积神经网络就会输出64*64*6,不同的filter对特定的图形,图案有这高的输出,比较高端的说法就是激活函数,从而才能达到识别特定的特征的目的,数学嘛,玩的不就是一堆数吗,离开数,数学什么也做不了(当然这只是我自己的理解,见笑了)。
一般卷积层的第一层都是来识别一些简单的特征,往专业上说就是一些低阶的特征,比如一些边,角,线段等等,加上后面层数的话,就可以识别更多的特征(就是第一层特征的一些组合),简单特征组合就可以组成复杂的特征,图案不就是一些点和线组成的吗,这样就可以对较复杂的特征进行识别了。
就好像第二层的输入就是第一层的输出,后一层的输入都是前一层的输出,第一层识别一些边边角角,第二层把这些边边角角组合,比如一些圆,正方形,三角形等。从低阶特征逐渐到高阶特征的过程,不就正是我们人学习的过程吗,不会走是学不会跑的,你不会1+1.怎么能学会后面的乘法,除法。
最后总结下吧,CNN就是这样一个有简单到复杂的过程。一开始建立一些自己人为设定的filter,当然开始的时候,神经网络是不知道什么东西是自己感兴趣的,他对所有的特征都是平等对待的(不会对任何特征进行识别),后面我们需要做的事情就是通过改变这些filter的weight(权重),权重说简单点就是一个系数,值越大,说明占的权重越大,反之越小。改完权重之后,CNN就知道你对那些东西感兴趣了,然后通过一层一层的迭代,就会达到你要识别的目的了。
把一个空白的filter,通过改变weight就可以变成你想要的那个识别特定特征的filter,这就是CNN所要做的工作,这里边就需要用到反馈了,输出影响这输入,你设定一个损失函数MSE,别被这个吓到,就是看你的权重合适不合适,你的权重到合适的时候这个损失函数就不会起作用了,就不会影响你的output,我们做的就是让MSE的输出,暂且顶他为S,反馈给CNN,以修改filter的weight,是S达到最小,这个过程就是我们优化方法中的最优解问题,这里就不做详细的介绍了。
以上就是通俗的CNN网络建立的过程。如果有什么理解错误的地方,希望大家留言指正。