读书笔记——《解析卷积神经网络 ——深度学习实践手册(魏秀参)》

#卷积神经网络(CNN)基本概念#

##发展历程##

  • 1959 加拿大神经科学家提出感受野概念
  • 1980日本科学家福岛邦彦提出神经认知模型,S-cells抽取局部特征—>卷积convolution层,C-cells抽象和容错—>池化pooling层
  • 1998 Yann LeCun 基于梯度学习的卷积神经网络LeNet 手写字体识别
  • 2012 Hinton AlexNet在ImageNet夺冠
  • 2015 改进激活函数,预测能力超过人类

##基本结构

  • 原始数据raw data representation—>卷积、池化、非线性激活函数(不同操作层的“堆叠”)—>映射为高级语义表示—>向任务目标映射==>“端到端”学习或“表示学习”
  • 前馈运算:对样本进行推理和预测
  • 反馈运算:将预测误差反向传播逐层更新参数
  • 两种运算交替以训练网络模型

##基本部件

  • “端到端”学习,替代特征表示+分类器
  • 网络某一层的输入通常是一个四维张量(高度,宽度,维度,mini-batch)

卷积层

  • 卷积核f可视为学习到的权重w,对不同位置的所有输入都是相同的,即卷积层的“权值共享”特性。可加入偏置项b。
  • 超参数:卷积核大小filter size、卷积步长stride
  • 作用:获取图像的局部信息,如边缘、颜色、形状、纹理等。
    汇合层(池化层)
  • 超参数:汇合类型(average-pooling、max-pooling等)、核大小、步长。
  • 作用:特征不变性(容错)、特征降维(降采样)、一定程度防止过拟合。
    (stride convolutional layer 可代替汇合层降采样)
    激活函数(非线性映射层)
  • 作用:增加网络的表达能力(即非线性)
  • ReLU函数
    全连接层
  • 作用:将学习到的特征表示映射到样本的标记空间,类似于“分类器”
    目标函数
  • 作用:衡量该预测值与真实样本标记之间的误差 。
  • 最常用的目标函数:交叉熵损失函数——分类问题,l2损失函数——回归问题

备注:
1、单层感知机属于线性分类器,由于异或问题非线性可分,故无法解决疑惑问题。而多层感知机计算复杂,无法直接求解隐藏层参数,故直到Hinton等提出BP算法,基于链式求导法则,解决了多层感知机中间层参数计算的问题。
2、神经网络模型是非凸函数且复杂,优化求解困难,因此采用随机梯度下降SGD和误差反向传播进行模型参数更新。批处理mini-batch SGD 每次不放回随机抽样,遍历一次训练集为一轮epoch,避免局部最优更新。


##三个重要概念
感受野

  • 小卷积核的多层堆叠可取得大卷积核同等规模的感受野,加深网络(增强容量和复杂度)、减少参数个数。
    分布式表示
  • “语义概念”到神经元是一个多对多映射 。
    深度特征的层次性
  • 随着若干卷积、汇合等操作的堆叠,各层得到的深度特征逐渐从泛化特征过渡到高级语义表示。

##四种经典网络
Alex-Net
VGG-Nets
Network-In-Network
Residual Network深度残差网络


##数据扩充

  • 水平翻转、随机扣取(0.8-0.9倍)、尺度变换(分辨率变为原图0.8-1.3等倍)、旋转变换、色彩抖动(对RGB色彩分布轻微扰动、HSV颜色空间随机改变S饱和度和V明度通道的值)

  • Fancy PCA:“可以近似的捕获自然图像 的一个重要特性,即物体特质与光照强度和颜色变化无关 。”对所有训练数据的R,G,B像素值进行主成分分析,得到对应的特 征向量 pi 和特征值 λi i = 1, 2, 3 ,然后根据特征向量和特征值可以计算一组随机值 [p1, p2, p3] [α1λ1, α2λ2, α3λ3]⊤,每一个epoch重新选取αi计算新的随机值,将其作为扰动加到原像素值中即可。

  • 监督式数据扩充:根据原数据训练一个分类的初始模型,利用该模型对每张图生存对应的特征图或热力图(可指示图像区域与场景标记间的相关概率),选择较强相关的图像区域作为扣取的图像块。


##数据预处理

  • 卷积神经网络中的数据预处理通常是计算训练集图像像素均值,之后在处理训练集验证集和测试集图像时分别减去该均值。
  • 原理:我们默认自然图像是一类平稳的数据分布(即数据每一个维度的统计都服从相同分布),此时,在每个样本上减去数据的统计平均值(逐样本计算)可以移除共同部分,凸显个体差异。

##网络参数初始化

  • 通过合理的数据预处理和规范化,当网络收敛到稳定状态时,参数(权值)在理想情况下应基本保持正负各半的状态(此时期望为0 ) 。
  • 随机初始化:随机参数服从高斯分布或均匀分布。w=0.001*randn(n_in,n_out)
    不足:方差会随输入神经元的个数改变。
  • Xavier参数初始化方法:加入了 方差规范化。w=0.001*randn(n_in,n_out)/sqrt(n)
    不足:并未考虑非线性映射函数对输入 s 的影响
  • He方法:将非线性映射造成的影响考虑进参数初始化中,方差规范化分母sqrt(n/2)
  • 利用预训练模型


##激活函数

  • Sigmoid型函数

  • tanh(x)型函数
    在 型函数基础上为解决均值并非为0而是全为正的问题提出的激活函数: tanh(x)=2sigmiod(2x)-1
    依然会发生“梯度饱和”现象 。

  • 修正线性单元( ReLU)

  • Leaky ReLU

  • 参数化ReLU

  • 随机化ReLU

  • 指数化线性单元(ELU)


##目标函数

  • 分类任务
    -交叉熵cross entropy损失函数(Softmax)
    -合页损失函数hinge loss
    -坡道损失函数ramp loss
    交叉熵损失函数是最为常用的分类目标函数,且效果一般优于合页损失函数;大间隔损失函数和中心损失函数从增大类间距离、减小类内距离的角度不仅要求分类准确,而且还有助提高特征的分辨能力;坡道损失函数是分类问题目标函数中的一类非凸损失函数,由于其良好的抗噪特性,推荐将其用于样本噪声或离群点较多的分类任务。

  • 回归任务
    l1 损失函数和 l2 损失函数是两个直观且常用的 回归任务目标函数,实际使用中 l2 损失函数略优于 l1 损失函数; 损失函数为回归问题中的一类非凸损失函数,同样具有良好的抗 噪能力;


##网络正则化

  • 目的:防止过拟合。
  • 正则化是机器学习中通过显式的控制模型复杂度来避免模型过拟合、确保泛化能力的一种有效方式 。
    A. l1正则化
    B. l2正则化
    C. 最大范数约束
    D. 随机失活dropout
    原理:对于某层的每个神经元,在训练阶段 均以概率 p 随机将该神经元权重置 (故被称作“随机失活”),测试阶段所有神经元均呈激活态,但其权重需乘 (1 − p) 以保证训练和测试阶段各自权重拥有相同的期望 。
    工程实现时使用“倒置随机失活” ,训练阶段:(1/(1-p))w 测试阶段w
    E. 利用验证集判断模型过拟合、欠拟合
    “早停”:取验证集 准确率最高的那一轮训练结果作为最终网络。

##超参数设定和网络训练

  • 输入数据大小一般为a*2^n的正方形,便于GPU并行计算。
  • 卷积层推荐使用3x3,5x5的小卷积核,还可以对图像边缘做填充操作。
  • 汇合层常用2x2,步长为2。
  • 训练数据随机打乱,确保模型不同epoch相同batch看到的数据是不同的。
  • 初始学习率不宜过大(0.01或0.001),学习率应随轮数增加而减缓。
  • 批规范化batch normalization:

你可能感兴趣的:(CNN,深度学习,神经网络,读书笔记)