深度学习(Deep Learning) 5.CNN
1 Convolutional Neural Network
常用于图像处理,为什么卷积神经网络处理图像效果好?
假设输入30000维,第一层1000维,那么这里的参数就有30000*1000个!CNN中可以去除一些参数,从而改变神经网络的架构。对于某一个神经元,它不需要看到整张图片,它只需要看到一部分特征模式,例如图片中有没有鸟嘴的存在只需要看一小块区域。
image → Convolution → Max Pooling → Convolution → Max Pooling 反复 → Flatten → 神经网络
- Convolution:一些特征只出现在图像中的一小部分,相同的特征会出现在图像的不同区域。
- Max Pooling:subsampling不改变图像对象
2 Convolution & Max Pooling
- 利用Filter和stride进行特征的映射 → Feature map,相当于只连接了一部分输入,并不是全连接,即这样的结构参数较少。并且某些权重参数是共用(sharing)的。
- Max Pooling:进行分割之后,每个区块取最大值,例如4x4 → 2x2
- 经过以上两步:6x6 image → 2x2 image,重复以上步骤可以不断“减小”图像大小。
- Flatten:拉直所有映射得到的特征放到Neural Network中训练
3 CNN in Keras
model2.add(Convolution2D(25, 3, 3, input_shape(1, 28, 28))) #28*28的image通过25个3*3的filter得到25*26*26的新图像_每个filter9个参数
model2.add(MaxPooling2D((2, 2))) #得到25*13*13的新图像
model2.add(Convolution2D(50, 3, 3)) #得到50*11*11_每个filter25*9=225个参数
model2.add(MaxPooling2D((2, 2))) #得到50*5*5的新图像
model2.add(Flatten())
model2.add(Dense(output_dim = 100))
model2.add(Activation('relu'))
model2.add(Dense(output_dim = 10))
model2.add(Activation('softmax'))
4 CNN学到了什么?
- 第二层的Convolution中每个filter的输出是一个11*11的矩阵
- Degree of the activation of the k-th filter: ak=∑i=111∑i=111akij ,找到 x∗=argmaxxak (gradient ascent)
- x∗=argmaxxyi ,加入约束 x∗=argmaxx(yi−∑i,j|xij|) 即 L1 正则化
5 有趣的应用
- Deep Dream:让CNN看到的东西更像,正数变大,负数变小。
- Deep Style:改造成世界名画的风格,CNN分别训练出第一张图的content,第二张图的style,组合。
- Playing Go:Alpha Go 在第一层layer使用5x5的filter,并没有使用max pooling
- Speech recognition
- Text