一、卷积和神经网络
卷积神经网络是近些年逐步兴起的一种人工神经网络结构, 因为利用卷积神经网络在图像和语音识别方面能够给出更优预测结果, 这一种技术也被广泛的传播可应用. 卷积神经网络最常被应用的方面是计算机的图像识别, 不过因为不断地创新, 它也被应用在视频分析, 自然语言处理, 药物发现, 等等. 近期最火的 Alpha Go, 让计算机看懂围棋, 同样也是有运用到这门技术.
我们来具体说说卷积神经网络是如何运作的吧。举一个识别图片的例子, 我们知道神经网络是由一连串的神经层组成,每一层神经层里面有存在有很多的神经元. 这些神经元就是神经网络识别事物的关键. 每一种神经网络都会有输入输出值, 当输入值是图片的时候, 实际上输入神经网络的并不是那些色彩缤纷的图案,而是一堆堆的数字. 就比如说这个. 当神经网络需要处理这么多输入信息的时候, 也就是卷积神经网络就可以发挥它的优势的时候了. 那什么是卷积神经网络呢?
我们先把卷积神经网络这个词拆开来看. “卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解. 具体步骤:
1. 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息,
2. 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等.
4. 再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来.
5. 最后我们再把这些脸部信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了.
————————————————————原理剖析——————————————————
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stride是步长,此处步长是1。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
步长不为1的时候,输入维数又很大的时候,该怎么计算,经过自己的研究得出公式:
input_size: 输入维数大小
filter_size: 卷积核大小
stride: 步长
feature map = (input_size - filter_size + 2 * padding) / stride + 1
;;上取整,边界不丢弃
因为卷积核沿原图边长一个像素点一个像素点的扫描,直到卷积核的右边沿触碰原图的右边沿,还有卷积核边长这么宽的位置没有扫描。(纵方向以此类推)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
更正:上述feature map笔误,是kernel,feature map是卷积后得到的特征图,kernel是卷积核
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
————————————————原理剖析结束——————————————
我们截取一段 google 介绍卷积神经网络的视频, 具体说说图片是如何被卷积的. 下面是一张猫的图片, 图片有长, 宽, 高 三个参数. 对!图片是有高度的! 这里的高指的是计算机用于产生颜色使用的信息. 如果是黑白照片的话, 高的单位就只有1, 如果是彩色照片, 就可能有红绿蓝三种颜色的信息, 这时的高度为3. 我们以彩色照片为例子:
1. 过滤器就是影像中不断移动的东西, 他不断在图片收集小批小批的像素块,
2. 收集完所有信息后, 输出的值, 我们可以理解成是一个高度更高,长和宽更小的”图片”(因为有多个过滤器,一次性过滤出很多层). 这个图片里就能包含一些边缘信息.
3. 然后以同样的步骤再进行多次卷积, 将图片的长宽再压缩(卷积),高度再增加(多个过滤器,即多个卷积核), 就有了对输入图片更深的理解.
4. 将压缩,增高的信息嵌套在普通的分类神经层上,我们就能对这种图片进行分类了.
二、池化
研究发现, 在每一次卷积的时候, 神经层可能会无意地丢失一些信息. 这时, 池化 (pooling) 就可以很好地解决这一问题. 而且池化是一个筛选过滤的过程, 能将 layer 中有用的信息筛选出来, 给下一个层分析. 同时也减轻了神经网络的计算负担 (具体细节参考). 也就是说:
1. 在卷积的时候, 我们不压缩长宽, 尽量地保留更多信息(padding)
2. 压缩的工作就交给池化了
这样的一项附加工作能够很有效的提高准确性. 有了这些技术,我们就可以搭建一个属于我们自己的卷积神经网络啦.
三、理解全连接层
理解全连接层:
如果把上一层卷积层传来的特征图的每个像素点作为一个神经元,那么破坏了特征结构。连接层实际就是卷积核大小为上层特征大小的卷积运算,卷积后的结果为一个节点,就对应全连接层的一个神经元。
假设最后一个卷积层的输出为7×7×512,连接此卷积层的全连接层为1×1×4096。如果将这个全连接层转化为卷积层:
1.共有4096组滤波器
2.每组滤波器含有512个卷积核
3.每个卷积核的大小为7×7
4.则输出为1×1×4096
若后面再连接一个1×1×4096全连接层。则其对应的转换后的卷积层的参数为:
1.共有4096组滤波器
2.每组滤波器含有4096个卷积核
3.每个卷积核的大小为1×1
4.则输出为1×1×4096
四、理解softmax层
Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。比如我们的网络要完成的功能是识别0-9这10个手写数字,若最后一层的输出为[0,1,0, 0, 0, 0, 0, 0, 0, 0],则表明我们网络的识别结果为数字1。
Softmax的公式为:
可以直观看出如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,并且对所有输入数据进行归一化。
理解max. 对一个三类问题,某样本经过NN处理后,最后一层输出值为[24, 3, 0.1]的话,那么经过max之后的结果为[1, 0, 0]。对不?(至于为啥要max,输出结果本来挺奇怪 经过max以后就是categorical 的了,那么样本的类标就可以和他的预测值一起合体 直观地计算cost function。)
我们最需要的其实是max,但是max有个缺点就是不可导,没法用在dp里,于是有人就想出了softmax。思路就是指数级扩大最后一层的输出,每个值都会增大,然而最大的那个值相比其他值扩大的更多,然后归一化一下,考虑一下极限,如果最大值x_1经过指数运算后想对其他值为无穷大,那么exp(x_1)/exp(x_1)+others =1,其他输出值对应的为0。所以softmax模拟了max的行为,同时他还可导。
五、流行的CNN
比较流行的一种搭建结构是这样, 从下到上的顺序, 首先是输入的图片(image), 经过一层卷积层 (convolution), 然后在用池化(pooling)方式处理卷积的信息, 这里使用的是 max pooling 的方式. 然后在经过一次同样的处理, 把得到的第二次处理的信息传入两层全连接的神经层 (fully connected),这也是一般的两层神经网络层,最后在接上一个分类器(classifier)进行分类预测.