本文用作《深度学习21天实战caffe笔记》的备忘,请结合原书食用~
前言
- Caffe框架以“层”为单位对深度神经网络的结构进行了高度的抽象。
- Caffe由贾杨清开发。
- 卷积神经网络发明者Geoffrey Hinton在20世纪70年代提出深度学习理论,随着NVIDIA GPU的广泛使用才大量应用。
- 深度学习年代久远,当时受限于计算能力不足和数据集匮乏陷入低谷,直到云计算、大数据时代到来才突飞猛进。
第一天 什么是深度学习
- 带“学习”功能的机器:“看”未知系统的输入-输出对(训练样本),自动得算法,可举一反三(泛化)。
- 训练样本D=z1,z2,z3⋯znD=z1,z2,z3⋯zn,zizi位输入-输出对。
- 惩罚函数L(f,Z)L(f,Z),参数为学到的规则ff和独立于的验证样本集,返回值为实数标量,称为惩罚值或损失。目标是L(f,Z)L(f,Z)尽量小。
- 机器学习需要三份数据:
- 训练集:机器学习的样例
- 验证集:机器学习阶段,用于评估得分和损失是否满足要求
- 测试集:机器学习结束之后,实战阶段评估得分。;
- 深度学习:由多个处理层组成的计算模型,可通过学习获得数据的多抽象层表示。
- 机器学习三大牛:Geoffrey Hinton, Yann LeCun, 和 Youshua Bengio。
第二天 深度学习的过往
- 传统机器学习需要手动提取特征,比较繁琐且往往需要领域专家设计特征。
- 分类问题中,高层特征能强调重要的类别信息,而抑制无关的。如图像中从低到高的特征:边缘->图案->图案组合。深度学习自动在高维数据中发现复杂结构。
监督学习
- 监督学习中的数据是带有标签(label)的。
- 训练过程中需要不断更新权值(参数)向量,方法是:计算梯度向量,表示每个权值增加一个微小值时目标函数的变化量,之后权值向量根据梯度向量的相反方向调节。
- 经典更新方法——随机梯度下降(Stochastic Gradient Descent, SGD):输入少量样本,计算输出和误差,计算样本的平均梯度,根据梯度调节平均值。
- 线性分类器:高于阈值就分为一类,否则另一类。
- 深度学习核心优势:自动学习好的特征,很多个模块,每个都能计算非线性输入-输出映射。
反向传播算法
反向传播算法通过计算目标函数相对于多层网络权值的梯度,进行链式求导,从而调整参数。
下面举一个网络的例子,下图的左、右分别代表了该网络的前向传播和反向传播的过程
前向传播
先看左图前向传播的计算过程:
Input -> H1
取H1中的一个结点jj,其值。
其中zjzj是input中三个结点x1,x2,x3x1,x2,x3的函数,也就是说jj的由xixi决定。
这里的zj=∑iwijxizj=∑iwijxi,其中wijwij为权重。
函数ff是一个激活函数(如ReLU),它对进行非线性变换,得到输出yjyj。
H1->H2和H2->Output
类似的,令H2、Output中的结点为kk和,我们可以得到:
yk=f(zk),zk=∑jwjkyjyk=f(zk),zk=∑jwjkyj
yl=f(zl),zl=∑kwklylyl=f(zl),zl=∑kwklyl
反向传播
再来看右图反向传播的计算过程,它分为两步;
1. 计算每层的梯度:对于每层,我们计算它对这一层的输出结点误差的梯度,也就是求对后一层的输入误差的加权和。
2. 应用链式求导法则,将误差梯度传到这一层的输入结点。
例如,若Output units中的结点ll的代价函数(loss function)为,其中tltl是我们想要的输出,ylyl是目前的输出,我们现在求这个loss function对zlzl的梯度:
EE对于的偏导数为yl−tlyl−tl,又因为yl=f(zl)yl=f(zl),所以∂E∂zl=∂E∂yl∂yl∂zl=(yl−tl)f′(zl)∂E∂zl=∂E∂yl∂yl∂zl=(yl−tl)f′(zl)。
这里运用了链式求导法则,将EE对的偏导拆成了两个偏导的乘积,我们只需要分别计算这两个因子,将它们相乘就能得到想要的结果。
同理,要计算loss function对H2的梯度,应用链式求导法则的可得:
∂E∂yk=∑l∂E∂zl∂zl∂yk=∑lwkl∂E∂zl∂E∂yk=∑l∂E∂zl∂zl∂yk=∑lwkl∂E∂zl,这里的∂E∂zl∂E∂zl我们之前刚刚计算过,直接用就好。
后面两层的梯度计算同理。
卷积神经网络
卷积神经网络(ConvNet)如今应用广泛,它包含了卷积操作。ConvNet有4个基本特征;局部互联、共享权值、下采样和使用多个卷积层。
在ConvNet,数据会使用不同的卷积核经过卷积层得到特征图,从而提取到前一层的局部连接特征;使用激活函数(如ReLU)使网络具有非线性表达能力;通过下采样层(池化层)将相似特征融合,并减少参数量。
这种卷积-非线性-池化的组合构成了一组单元,ConvNet中可以有若干个这样的单元相连接。
ConvNet成功用在了图像处理中的多种任务上,如分割、分类等。
第三天 深度学习工具汇总
- Caffe实现了CNN,适合做特征提取,它提供了面向命令行、MATLAB和Python的接口。
- Torch目前已经进化到已经Pytorch,使用Python接口,很流行也很有潜力。
- MXNet目前在快速发展,提供了ndarray接口和symbolic接口。
- TensorFlow由Google支持,目前资料最多。
- Theano往往用于教学和研究,不够高效,不适合线上部署。
- CNTK由微软提出,对Windows支持最好,不建议初学者入门使用。