一、深度学习
1.BP算法
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是一种使用比较广泛的参数学习算法。
如图所示,它的基本思想是学习过程由信号的正向传播(求损失)与误差的反向传播(误差回传)两个过程组成。
(1)BP算法的一般流程
1)正向传播FP(求损失)
在这个过程中,我们根据输入的样本,给定的初始化权重值W和偏置项的值b,计算最终输出值以及输出值与实际值时间的损失值。如果损失值不在给定范围内则进行反向传播过程;否则停止W,b的更新。
2)反向传播BP(回传误差)
将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
由于BP算法是通过传递误差值δ进行更新求解权重值W和偏置项的值b, 所以BP算法也常常被叫做δ算法。如下图所示,以三层感知器结构为例,说明BP算法的一般计算方法。
(2)BP算法的各层误差计算
各部分输入输出如下图所示,各层误差的计算主要包括三部分。
1)输出层的误差
2)展开至隐层的误差
3)展开至隐层的误差
观察上式,只有上式和输入x有关。E有了,那么就很简单可以看出使用常用的随即梯度下降法(SGD)求解,也就是求解式子中的W和V,使得误差E最小。
2.卷积神经网络
卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络的创始人是有着的计算机科学家Yann LeCun,他是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。架构如下所示:
卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,卷积神经网络能够接受多个特征图作为输入,而不是向量。卷积圣经网络的层级结构主要包括数据输入层、卷积计算层、ReLU激励层、池化层和全连接层。
(1)数据输入层
该层要做的处理主要是对原始数据进行预处理,其中包括:
1)去均值:把输入数据各个纬度都中心化为0,其目的就是把样本的中心拉回到坐标系原点上。
2)归一化:幅度归一化到同样的范围,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A合B的数据都变为0到1的范围。
3)PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化。
(2)卷积计算层
这一层就是卷积神经网络最终的一个层次,也是“卷积神经网络”的名字来源。在这个卷积层,有两个关键操作:局部关联,每个神经元看做一个滤波器(filter);窗口(receptive field)滑动,filter对局部数据计算。
(3)激励层
把卷积层输出结果做非线性映射。
CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),特德特点是收敛快,求梯度简单,但叫脆弱,图像如下所示。
(4)池化层
池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
1)特征不变性。也就是在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最终的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
2)特征降维。一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
3)在一定程度上防止过拟合,更方便优化。
池化层用的方法有max pooling和average pooling,而实际上用的较多的是max pooling,其方法如下图所示,对于每个2×2的窗口选出最大的数作为输出矩阵的相应元素的值。
(5)全连接层
两层之间所有的神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的网络神经元的连接方式是一样的:
(6)卷积神经网络优缺点
1)优点:共享卷积核,对高维数据处理无压力;无需手动选取特征,训练好权重,即得特征分类效果好。
2)缺点:需要调参,需要大样本量,训练最好要GPU;物理含义不明确,即其本身就是一种难以解释的“黑箱模型”。
(7)卷积神经网络常用框架
1)Caffe:源于Berkeley的主流CV工具包,支持C++、Python和matlab;Model Zoo中有大量预训练好的模型供使用。
2)Torch:Facebook用的卷积神经网络工具包;通过时域卷积的本地接口,使用非常直观;定义新网络层结构。
3)TensorFlow:Google的深度学习框架;TensorBoard可视化非常方便;数据和模型并行化好,速度快。