(1)定义:由一个或多个卷积层、池化层、全连接层组成,同时通过权重关联各层之间的神经元的神经网络,这一结构使得卷积神经网路能够处理输入的二维数据结构。
(2)卷积的理解:卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解. 具体来说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等. 再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来. 最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了.[1]
(3)输出层:输出的样本数据是N张深度为1或3的像素矩阵(图像)。
(4)卷积层:卷积层中每一个节点的输入只是上一层神经网络的一小块区域,通过卷积可以增加节点矩阵的深度。卷积层把特征提取到深度中保存。
(5)池化层:
①不改变节点矩阵的深度,而改变节点矩阵的宽度。
②池化层减小了图像的像素和尺寸,也就减少了参数个数。
③提高模型的鲁棒性。
(6)全连接层:
(7)Softmax层:
(8)卷积核(Kernel) or 过滤器(Filter)or 特征提取器(Feature Detector):
①权值共享:同一个卷积层的Filter是相同的,不同卷积层的Filter是不一样的。减少的是当前层网络的参数个数。
②将当层与卷积核尺寸一样大的子节点矩阵转化为下一层神经网络上的单位节点,如果当层矩阵比卷积核尺寸大,则转化为下一层网络的更小的节点矩阵。
如果我们对图像执行傅里叶变换,并且乘以一个圆形(背景填充黑色,也就是 0),我们可以过滤掉所有的高频值(它们会成为 0,因为填充是 0)。注意过滤后的图像依然有条纹模式,但图像质量下降了很多——这就是 jpeg 压缩算法的工作原理(虽然有些不同但用了类似的变换),我们变换图形,然后只保留部分频率,最后将其逆变换为二维图片;压缩率就是黑色背景与圆圈的比率。
我们现在将圆圈想象为一个卷积核,然后就有了完整的卷积过程——就像在卷积神经网络中看到的那样。要稳定快速地执行傅里叶变换还需要许多技巧,但这就是基本理念了。[2]
③全连接层的参数过多,导致模型容易过拟合,所以提出卷积神经网络,利用卷积核来共享参数,实现参数的减少。
(9)防止过拟合[3]
①L1正则化 和 L2正则化:改变权值w的更新细节,达到减小w的作用,减小w可以防止过拟合,相当于减小了两个神经元之间的重要性,防止w过大,产生过拟合情况。
正则化的基本思想是通过加入一个含有解的先验知识的约束来控制映射函数的光滑性,这样相似的输入就对应着相似的输出。
②Dropout:随机地删除部分神经元,使网络结构复杂度降低,直接使w和某些神经元消失。然后独立重复多次,可以训练多个这样的删除不同部分神经元的神经网络,实现类似随机森林的投票机制。
③数据增强(Data Argumentation):增加数据集,可以减少过拟合效果。
1. 将原始图片旋转一个小角度
2. 添加随机噪声
3. 一些有弹性的畸变(elastic distortions)
4. 截取(crop)原始图片的一部分
(10)数据集样本不均衡处理方法:数据的角度和算法的角度[4]
① 数据采样:通过某一种策略改变样本的类别分布,以达到将不平衡分布的样本转化为相对平衡分布的样本的目的,而随机采样是采样算法中最简单也最直观易懂的一种方法。
1.过采样:通过多次有放回随机采样从少数类中抽取数据集E,采样的数量要大于原有少数类的数量,最终的训练集为S_maj+E
2.欠采样:从多数类S_maj中随机选择少量样本E再合并原有少数类样本作为新的训练数据集,新数据集为S_min+E,随机欠采样有两种类型分别为有放回和无放回两种,无放回欠采样在对多数类某样本被采样后不会再被重复采样,有放回采样则有可能
3.过采样和欠采样那个效果好些?[5]
(a). 解决不均衡数据问题的方法中,占主导地位的是过采样,它几乎存在于所有的分析场景中
(b). 过采样应该被用在那些需要完全消除不均衡的情况中,而下采样在只需要从一定程度消除不均衡的情况中的效果可能更好
(c). 与一些传统的机器学习模型不同的是,过采样也不一定会造成卷积神经网络的过拟合
②代价敏感学习算法: 误分类的样本引入不同的权重系数 ,或者具体地调节先验类别概率 。
(11)判断网络模型好坏的标志:ROC、AUC
①ROC(Receiver Operating Characteristic Curve):TP与FP的曲线
②AUC(Area Under Curve):ROC曲线下的面积
AUC的计算分为下面三个步骤[6]:
1. 计算数据的准备,如果模型训练时只有训练集的话一般使用交叉验证的方式来计算,如果有评估集(evaluate)一般就可以直接计算了,数据的格式一般就是需要预测得分以及其目标类别(注意是目标类别,不是预测得到的类别)
2. 根据阈值划分得到横(X:False Positive Rate,假阳性)以及纵(Y:True Positive Rate,真阳性)点
X:FPR = FP / (FP + TN), Y:TPR = TP/ (TP+ FN), 其中TNR = TN/ (FP+ TN) = 1 - FPR
3. ROC曲线下方的面积,就是AUC的值[18]
AUC系数越高,模型的风险区分能力越强。
AUC>0.9以上时有较高准确性
AUC,0.7~0.9时有一定准确性
AUC,0.5~0.7时有较低准确性
③补充知识:
1.TP——将正类预测为正类
2.FN——将正类预测为负类
3.FP——将负类预测为正类
4.TN——将负类预测为负类
5.精确率Precision: P=TP/(TP+FP) —— 就是找得对[7]
6.召回率Recall:R=TP/(TP+FN) —— 就是找得全
7.ROC:是TP-FP曲线
(12)Train Set, Validation Set 和 Test Set的作用和意义[8]
①设置好模型后,训练集就是用梯度下降算法来训练模型更新权重参数。而验证集是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证集跟训练集没有交集,因此这个准确率是可靠的?
②普通参数和超参数。在不引入强化学习的前提下,那么普通参数就是可以被梯度下降算法所更新的权值参数。另外,还有超参数的概念,比如网络层数、网络节点数、迭代次数、学习率等等,这些参数不在梯度下降的更新范围内。尽管现在已经有一些算法可以用来搜索模型的超参数,但多数情况下我们还是自己人工根据验证集来调。
③从狭义来讲,验证集没有参与梯度下降的过程,也就是说是没有经过训练的;但从广义上来看,验证集却参与了一个“人工调参”的过程,我们根据验证集的结果调节了迭代数、调节了学习率等等,使得结果在验证集上最优。
④验证集:既不用测试集进行梯度下降,也不用它来控制超参数,只是在模型最终训练完成后,用来测试一下最后准确率。
(13)径向基函数(Radial Basis Function)or 高斯核函数(Gaussian Kernel Function)[10-12]
①全连接层利用RBF能够以任意精度逼近任意连续函数,特别适合于解决分类问题
②插值:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点[13]。
③每个输出RBF单元计算输入向量和参数向量之间的欧式距离。插值影响最大的就是离得近的点,离的远的就没什么贡献
④原文献对Gaussian connections 的解释如下:
最后的输出层是由欧式径向基单元(Euclidean Radial Badi)组成,每类一个单元,每个有84个输入。每个输出ERBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,ERBF输出越大。因此,一个ERBF输出可以被理解为衡量输入模式和与ERBF相关联类的一个模型的匹配程度的惩罚项。同时ERBF参数向量起着F6层目标向量的角色。这些向量的成分是+1或者-1,也可以防止F6层的Sigmoid函数饱和[16]。
(14)卷积神经网络的前向传播数学公式
①小疑问:LeNet-5中第二个卷积层的输入为6@10×10,卷积核为16@5×5,结果输出为16@5×5,从下面的公式,一个输入对应一个卷积核,得到一个输出,结果?
解释:在TensorFlow中,卷积核的定义为
conv2_weights = tf.get_variable("weight", [CONV2_SIZE, CONV2_SIZE, CONV1_DEEP, CONV2_DEEP], initializer = tf.truncated_normal_initializer(stddev=0.1))
其中CONV2_SIZE = 5, CONV1_DEEP = 6, CONV2_DEEP = 16,从这里可以看出卷积核的维度是5×5×6×16.
(15)卷积神经网络的反向传播算法[15]
①卷积神经网络反向传播也是利用损失函数来传递误差,并通过误差梯度来实现从输出层到输入层之间权值W与偏置b的梯度求解和更新。整体与DNN全连接层一样,细节上就是在卷积和池化的反向处理不一样,dot180是反向卷积的功能,池化层反向处理时upsampling
②反向传播算法的整体过程
知识补充:
(1)如果样本都是有RGB的彩色图片,这样输入XX就是3个矩阵,即分别对应R,G和B的矩阵,或者说是一个张量。
(2)填充padding(以下简称P),我们卷积的时候,为了可以更好的识别边缘,一般都会在输入矩阵在周围加上若干圈的0再进行卷积,加多少圈则P为多少。
(3)经过了若干全连接层之后,最后的一层为Softmax输出层。此时输出层和普通的全连接层唯一的区别是,激活函数是softmax函数。
参考文献:
[1] 什么是卷积神经网络 CNN (Convolutional Neural Network)?https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-03-A-CNN/
[2] 理解深度学习中的卷积.http://www.dataguru.cn/article-10966-1.html
[3] 正则化方法:L1和L2 regularization、数据集扩增、dropout.(此文章对正则化的理论理解有非常大的作用)
[4] 不平衡数据下的机器学习方法简介
[5] 一文概览卷积神经网络中的类别不均衡问题.(这是一篇论文的翻译内容,通过实验得到的效果也很明显)
[8] 训练集、验证集和测试集的意义
[9] 卷积神经网络(CNN)学习笔记1:基础入门(非常详细地讲述了卷积神经网络的基础知识并且非常详细地介绍LeNet-5模型)
[10] 径向基(Radial basis function)神经网络、核函数的一些理解.
[11] 径向基网络(RBF network)之BP监督训练
[12] 径向基函数(RBF)神经网络
[13] 插值——百度百科
[14] 卷积神经网络(CNN)前向传播算法(强烈推荐)
[15] 卷积神经网络(CNN)反向传播算法(强烈推荐,总结的非常好!!!)
[16] LeNet中最后一步的gaussian connections 具体是什么样的操作?
[17] 「 Neural Networks and Deep Learning 」中文翻译(连载完毕)(推荐阅读)
[18] ROC曲线/AUC值/PR曲线