《深度学习入门》学习记录 Part4

这周完整的把《深度学习入门》学完了,重点学习了「卷积神经网络」并通过调试代码的方式把前面的内容复习了一遍。

概念

  • 特征图(feature map):卷积层的输入输出数据
  • im2col(image to column):将输入数据展开以适合滤波器(权重)的函数,其输出结果为2维矩阵。im2col (input_data, filter_h, filter_w, stride=1, pad=0)

卷积神经网络(Convolutional Neural Network, CNN)

在神经网络中新增了「卷积层」(Convolution)和「池化层」(Pooling)。在这之前,需要先了解下之前神经网络中运用到的全连接层。

全连接(fully-connected)

在全连接层中,相邻层神经元全部连接在一起,如Affine层,其输入数据需要为1维数据。
这就导致了数据的「形状」被忽略了。比如图像是包含通道、高、宽的3维形状,但输入全连接层(Affine层)时则需要将其排成1列(MNIST数据集是784个数据)。

卷积层可以保持输入数据的形状不变。

卷积运算

在卷积层进行的处理就是「卷积运算」,相当于图像处理中的「滤波器运算」,进行「乘积累加运算,即将各个位置上滤波器的元素和输入的对应元素相乘后再求和。

填充(padding)
向输入数据的周围填入固定的数据,使得卷积运算可以在保持空间大小不变的情况下将数据传给下一层。

步幅(stride)
应用滤波器的位置间隔

输入大小为(H, W),滤波器大小为(FH, FW),输出大小为(OH, OW),填充为P,步幅为S:

  • OH = 1 + (H + 2P -FH)/ S
  • OW = 1 + (W + 2P -FW)/ S

批处理的多维数据的保存顺序:(batch_num, channel, height, width)
《深度学习入门》学习记录 Part4

卷基层的实现:
《深度学习入门》学习记录 Part4

池化运算

池化是缩小高、长方向上的空间的运算,一般是指Max池化。其特征是:

  • 没有要学习的参数
  • 通道数不会发生变化
  • 对微小的位置变化具有鲁棒性

《深度学习入门》学习记录 Part4

CNN的实现

网络构成为3层:(Convolution - ReLU - Pooling) - (Affine - ReLU - Affine) - (Softmax)

SimpleConvNet:

  1. 初始化滤波器的数量、大小、填充、步长,输入数据的大小,卷基层和池化层的输出大小。❓这里池化层的输出大小公式有点没看懂(P225):pool_output_size = int(filter_nem * (conv_output_size/2) * (conv_output_size/2))
  2. 初始化权重参数:W1, b1, W2, b2, W3, b3
  3. 通过有序字典(OrderedDict)来添加神经网络的层。神经网络的各层内部能正确的处理「正向传播」和「反向传播」这里是要做的是以正确的顺序连接各层,再按顺序或者逆序调用各层。
  4. 各层依次进行推理predict(forward处理)
  5. 求损失函数loss
  6. 基于「误差反向传播法」求「梯度」gradient

CNN的可视化

卷积层在「观察」什么?
滤波器经过一轮一轮的学习后,可以变成有规律的滤波器,能观察「边缘」(颜色变化的分界线)和「斑块」(局部的区块区域)

❓P229 滤波器的响应方向看不懂。

分层结构的信息提取
卷积神经网络在开始的层对简单的「边缘」有响应,下一层对「纹理」有响应,再下一层对更加复杂的「物体部件」有响应。随着层次的加深,提取的信息愈加复杂、抽象,「神经元」从简单的「形状」向「高级」信息变化。

深度学习

深度学习是加深了层的神经网络。

提高识别精度的方法:

  • 更深的卷积神经网络
  • 数据扩充(Data Augmentation)
  • 集成学习
  • 学习率衰减

加深层:

  1. 可以减少网络的参数数量
  2. 可以减少学习数据使学习更加高效
  3. 可以分层次的传递信息

深度学习方法

  • VGG:以CNN为基础,将有权重的层叠加至16层或者19层
  • GoogLeNet:网络不仅有纵向上的深度,也有横向上的广度(Inception结构)
  • ResNet:通过导入「快捷结构」来不断的加深层来提高性能

深度学习的高速化

深度学习需要大量的运算,最耗时的事卷积层的处理。高速化的方法:

  1. GPU计算:基于GPU进行通用的数值计算的操作
  2. 分布式学习:如何进行分布式计算事一个非常那的课题,但是我们可以将这些难题都交给框架,如TensorFlow、CNTK等。
  3. 运算精度的位数缩减:深度学习并不那么需要数值精度的位数

深度学习的应用案例

  • 图像
    • 物体检测:从图像中确定物体的位置并进行分类
    • 图像分割:在像素水平上对图像进行分类
    • 图像标题生成
    • 图像风格变换
    • 图像的生成:生成图像时不需要任何输入图像
    • 自动驾驶:高精度的识别驾驶环境
  • 语音
  • 自然语言
  • 强化学习(Reinforcement learning)
    • Deep Q-Network
    • AlphaGo

接下来的学习内容

  1. 对《深度学习入门》做一个完整的总结
  2. 学习斯坦福课程 CS231n: Convolutional Neural Networks for Visual Recognition