深度神经网络在图像识别应用中的演化【笔记】

来源:互联网 发布:小企业的会计软件 编辑:程序博客网 时间:2024/05/19 11:44

深度神经网络在图像识别应用中的演化


【minibatch】
你用一个数据点去算去修改网络,可能是很不稳定的,因为你这个点的 lable 可能是错的。这时候你可能需要一个 minibatch 的方法,把一批数据结果平均一下,根据它们的方向去修改。修改的过程中,修改力度(learning rate)可以调整。开始的时候,拿不准的就学得快一慢,慢慢有把握了,就学得慢一点。

【dropout】、【batchnormalization】


black magic】

但有一件事没有本质性的改变,这个网络结构还是属于 black magic。但是本质上还是实验出来。实验出来得到一些比较好的结构、功能,然后再反过来给大家解释一下,它总是会有一些道理。

LeNet5AlexNetGoogLeNetResidual Net【】

LeNet5,2012 年 AlexNet 能突破性地把图像识别的错误率降了 10%。再之后谷歌 GoogLeNet 能够把网络结构的复杂程度突破大家的想象。在那之前,大家还是按照 LeCun 的方式去做。微软的 Residual Net也是一个很好的工作,可以让网络结构变得更深,效果也更好。



卷积神经网络有两个角度的改进。

【局部连接】【权值共享】

第一个是下一层的节点并不是连接上一层的所有节点,它只连接一个区域的几个节点。比如说如果你第 1 层有 10 个节点,第 2 层有 10 个节点,那么第 2 层一个节点连接一个小区域,一个局部的小区域,比如 3 个节点。在图像中就意味着你可能只是连接图像中一个小区域,一个小 patch。

第二个改进是连接这个小区域中,你的这个小区域跟连接的下个小区域的所有的连接的 weight 是一样的,这个叫做 weight sharing(权重共享)。或者说你有一个线性的卷积核(convolutional kernel)。这个卷积核,比如说 3×3 的卷积核,有 9 个数,这 9 个数拍在这个空间上去算一个卷积,平均一下再拍到另一个空间,也算一个卷积。这几个卷积中的卷积核本身是一样的。所以从原来最开始那个 MLP 向下发展到 CNN,定义出了一个卷积的概念。就是这两点不同。

第一,下一个节点,就是第二层节点只连接上一层的局部的几个输入。第二,这几个局部输入位置在空间上是共享的、固定的。你有一个输入之后可能会有几个卷积核。如果你有一个卷积,一个 filter,然后通过扫描方式,或者放一个点,乘加一次就算出一个数来,就会得到这边的一个点。你有一个卷积函数的话,就可以得到这边的一个区域,叫 feature map。如果你有六个卷积的话就是 6 ×28×28,那就是你做了 6 个卷积把输入图像从 32×32 变成了 28×28,那是第一层的卷积操作。然后你需要一些降采样。

当时 LeCun 为了计算量比较小,立刻就降采样了。降采样之后还是 6 个 feature map。之后他在 C3 层定义了 10 个 feature map。这 10 个 feature map,每一个卷积核在这 6 个卷积核的 6 个 feature map 上,上一层的 6 个 feature map 上也进行卷积。空间上不断地移动。卷积了之后把结果线性组合一下。线性组合本身的所有参数都是学习到的。线性组合得到下一个层的 feature map。你有 10 个,那么就重复 10 次这个过程,就把这 6 个 feature map 变成了 10 个。

事实上,LeCun 在处理这个工作的时候是处理不了这么多的。就是说 6 个 feature map 对应 10 个 feature map,他其实是随机选了一下。可能只有一个 C3 层的一个 feature map 是对应于 6 个,其他几个是对应之前的 3 个或 4 个。

当时 LeCun 的文章解释说是为了破坏对称性,就说不要完全对称。

但我觉得主要还是计算量的原因。最后类似地你可以再把规模降小一点,进行降采样,然后做一些全连接。全连接就是指每个输入跟下一层每个输出全连接在一起,这不是一种卷积形式。

当时这个结构有大概是 6 万个参数,能识别手写体的数字或者是邮编。LeCun 他们把这做完之后还真的实现产品化了。当时它发展到可以处理美国 1/3 的邮件的手写体识别,这应该是八九十年代最巅峰的工作了。

到了 2012 年的 AlexNet,结构本身没有本质性的提高,但是规模大了很多。


【AlexNet】


LeNet-5 是 6 万个参数,那么 AlexNet 是 6000 万个参数。

分成上下两层,输入的是 224×224 的图像,之后第一层是 11×11 卷积,也是一个 11×11 的卷积的滤波器,放到图像上去,开始平移,乘加,平移一次,算出一个点,算出来之后做一次采样。

average pooling】【Max pooling

采样是指你有几个点,你挑一个点使用。这个采样叫 pooling。比如你有 4 个点,取 1 个最大的,那就叫 Max pooling。如果说有 4 个点,平均一下就是一个值,那就是 average pooling。只要能够把多个点变成一个点,那么这种某种方式就叫 pooling。

做完 Max Pooling 之后,继续卷积,去做 Pooling。

dropout

本质上结构跟原来是一样的,只是大了很多,以至于当时的 GPU,用一块是训练不了的,所以同时用两块去训练。当时一个 GPU 的内存可能是 3G。训练的时候开始对输入进行一些归一化,要加一些 dropout,就是随机的在训练过程中把一些节点设置为 0。

在神经网络中,很多连接、很多节点,每个节点可能都会输出一个值,做一个 Activation,输给下一层。那么本来是说每个节点都会对最终结果有贡献,那么 dropout 就是在这过程中随机性把 50% 或者 40% 的节点的输出置为 0,让它没有贡献,那这样你训练得到的分类结果,就不能依赖于所有节点都正常工作,或者所有的信息都能收集到。这种情况下,如果还要得到一个好结果,那么你在测试的时候,就不会非常依赖于这些数据要跟之前的数据很像,或者是见过的数据,这样的话你就能处理一些未知的数据。这是当时就是 AlexNet 的改进,但是本质网络结构本身还是相当。


【VGG】



阅读全文
0 0
原创粉丝点击