《深度学习入门》学习记录 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)
卷基层的实现:
池化运算
池化是缩小高、长方向上的空间的运算,一般是指Max池化。其特征是:
- 没有要学习的参数
- 通道数不会发生变化
- 对微小的位置变化具有鲁棒性
CNN的实现
网络构成为3层:(Convolution - ReLU - Pooling) - (Affine - ReLU - Affine) - (Softmax)
SimpleConvNet:
- 初始化滤波器的数量、大小、填充、步长,输入数据的大小,卷基层和池化层的输出大小。❓这里池化层的输出大小公式有点没看懂(P225):
pool_output_size = int(filter_nem * (conv_output_size/2) * (conv_output_size/2))
- 初始化权重参数:
W1, b1, W2, b2, W3, b3
- 通过有序字典(OrderedDict)来添加神经网络的层。神经网络的各层内部能正确的处理「正向传播」和「反向传播」这里是要做的是以正确的顺序连接各层,再按顺序或者逆序调用各层。
- 各层依次进行推理predict(forward处理)
- 求损失函数loss
- 基于「误差反向传播法」求「梯度」gradient
CNN的可视化
卷积层在「观察」什么?
滤波器经过一轮一轮的学习后,可以变成有规律的滤波器,能观察「边缘」(颜色变化的分界线)和「斑块」(局部的区块区域)
❓P229 滤波器的响应方向看不懂。
分层结构的信息提取
卷积神经网络在开始的层对简单的「边缘」有响应,下一层对「纹理」有响应,再下一层对更加复杂的「物体部件」有响应。随着层次的加深,提取的信息愈加复杂、抽象,「神经元」从简单的「形状」向「高级」信息变化。
深度学习
深度学习是加深了层的神经网络。
提高识别精度的方法:
- 更深的卷积神经网络
- 数据扩充(Data Augmentation)
- 集成学习
- 学习率衰减
加深层:
- 可以减少网络的参数数量
- 可以减少学习数据使学习更加高效
- 可以分层次的传递信息
深度学习方法
- VGG:以CNN为基础,将有权重的层叠加至16层或者19层
- GoogLeNet:网络不仅有纵向上的深度,也有横向上的广度(Inception结构)
- ResNet:通过导入「快捷结构」来不断的加深层来提高性能
深度学习的高速化
深度学习需要大量的运算,最耗时的事卷积层的处理。高速化的方法:
- GPU计算:基于GPU进行通用的数值计算的操作
- 分布式学习:如何进行分布式计算事一个非常那的课题,但是我们可以将这些难题都交给框架,如TensorFlow、CNTK等。
- 运算精度的位数缩减:深度学习并不那么需要数值精度的位数
深度学习的应用案例
- 图像
- 物体检测:从图像中确定物体的位置并进行分类
- 图像分割:在像素水平上对图像进行分类
- 图像标题生成
- 图像风格变换
- 图像的生成:生成图像时不需要任何输入图像
- 自动驾驶:高精度的识别驾驶环境
- 语音
- 自然语言
- 强化学习(Reinforcement learning)
- Deep Q-Network
- AlphaGo
接下来的学习内容
- 对《深度学习入门》做一个完整的总结
- 学习斯坦福课程 CS231n: Convolutional Neural Networks for Visual Recognition