目前总体来说比较流行,表现非常好的算法:
Convolution Nerual Network(CNN)
举个例子:在手写数字识别集 MNIST上面,使用CNN,用gpu计算,deep network ,dropout,ensembles
结果达到接近人肉眼识别水平:9967/10000 识别正确
以下是误识别的图片:
右上角是正确数字,右下角是计算机识别到的数字,仔细观察可以看到,计算机识别的准确率还是很好的,上面很多数字都很迷惑,肉眼都很有可能识别错误对于之前的神经网络,相邻两层所有的神经元都两两相连
输入层:图像像素值;输出值:0-9CNN结构不一样,输入是一个二维的神经元(28*28)
Local receptive fields:
以5x5的小方格不停地去做卷积,构建到下一层隐藏层的第一层(28-5+1=24,变为24x24)
stride:每次移动的多少,上面我们是一次移动了一格共享权重和偏向(shared weights and biases):
w:5x5
对于第一个隐藏层,所有神经元探测到同样的特征,只是根据不同位置:
更新之后,我们仍然可以保持图像原始的形状特征:
再来介绍另一个概念:Feature map:从输入层转化到输出层
以上3个feature maps,每个是5x5
通常一些表现较好的方法都是使用更多的feature maps:
以上是根据5x5的feature map学习出的,浅色代表更小的权重(负数),表明CNN在学习共享的权重和偏向(weights,bias)大大减少了参数的数量:
对于每一个feature map,需要5x5=25个权重参数,加上1个偏向,26个
如果有20个feature maps,总共26x20=520个参数就可以定义CNN如果像之前的神经网络,两两相连,需要28x28=784个输入层,加上第一层30个神经元,则需要784x30再加上30个bias,总共23550个参数,多了40倍的参数
也可以写成:
Pooling layers:
浓缩神经网络的代表性,减小尺寸
24x24,2x2 pooling---->12x12
以上是max pooling的方法,在2x2的小方格中,我们取其中的最大值
多个 feature maps:
重要特征点找到之后,绝对位置并不重要,相对位置更重要以上所有的步骤结合在一起:
还是用之前的backpropagation,gradient descent解决