目录:
一、深度学习的理论演进
1、从 Logistic Regression (LR)到 Neural Networks(NN)
2、从 Neural Networks(NN)到 Deep Neural Networks(DNN)
3、从 Deep Neural Networks(DNN)到 Convolutional Neural Networks(CNN)
二、深度学习在图像识别中的应用——以手写汉字识别为例
一、深度学习的理论演进
0、概念
深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。—— wikipedia
https://zh.wikipedia.org/wiki/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0
关键点:(1)、机器学习的分支;(2)、结构复杂、多层、非线性变换
(1)、机器学习的分支
(2)、结构复杂、多层、非线性变换
1、从 Logistic Regression (LR)到Neural Networks(NN)
简介:Logistic Regression 是深度学习的基石算法。Logistic Regression 被称为对数回归,或逻辑斯回归,外界常称其为“逻辑回归”其实不严谨,它是一种监督学习算法,通过 sigmoid 激活函数对线性输出进行非线性映射,以概率的形式返回结果。逻辑回归本质上是线性回归模型,关于系数是线性函数,加入 sigmoid 映射后对输出做非线性变换。
训练过程:
(1)、数据标准化,消除锯齿效应,加快训练速度:
(2)、明确损失函数,即训练目标。本案从贝叶斯角度呈现完整推导过程:
(3)、明确梯度函数,即对w求导,为优化做准备(注:此处将w和偏执项b合并)
(4)、明确优化算法,即训练手段,常用梯度下降(注:或用共轭梯度法、牛顿法、拟牛顿法)
(5)、迭代至损失值达到足够小,停止迭代,得到参数向量w,用于未来预测。
应用:Logistic Regression是统计学习流派的基础算法,也是机器学习中最常用和最基础的算法之一(机器学习分为统计学习、符号主义、连接主义、贝叶斯主义四大流派),广泛应用于如垃圾邮件识别、流失预警、CTR预估等多个场景。
扩展1:若对其施加拉格朗日正则化项可以变为正则对数回归,降低过拟合影响:
扩展2:若对其进行核函数映射可以变为核对数回归,进一步提升非线性拟合能力:
扩展3:将多个 Logistic Regression 进行集成,并添加一个隐藏层,用 Tanh 替代 sigmoid 函数(Tanh效果往往更好),用交叉熵定义损失函数(支持多分类输出),即为Neural Networks(NN)。因此NN相对于LR没有本质上的变化,只是模型更加复杂,非线性能力更强。
2、从 Neural Networks(NN)到 Deep Neural Networks(DNN)
简介:当隐藏层的数量进一步积累,就是所谓的 Deep Neural Networks (深度神经网络),DNN比NN更加复杂,非线性能力更强。
DNN能力虽强,但有两个独有的问题:
1、梯度爆炸:在前向传播时,参数初始值w若过大,激活函数会以指数级递增,例如w比1略大,w^layers将非常大;
2、梯度消失:即梯度趋向于0无法优化参数,因为通常DNN所用的激活函数是 sigmoid 或 tanh,这两个函数的导数在[0,1]之间,反向求导根据链式法则是一系列偏导数的乘积,因此梯度的连乘会越来越小。
因此,解决这两个问题,通常使用ReLu/Leaky-ReLu/PReLu作为激活函数,同时约束参数初始值的大小(np.sqrt(2/p))。
训练过程:
(1)、数据标准化,消除锯齿效应,加快训练速度
(2)、明确损失函数。DNN以交叉熵为损失函数,对应输出层做softmax变换以实现多分类预测,以三层网络加正则为例:
softmax 函数:
(3)、明确梯度函数,逐层执行前向运算和反向求导
w3层:
w2层:
w1层:
(4)、明确优化算法,随机梯度下降(SGD)最为稳定,工业界目前多用(ADAM:Adaptive Moment Estimation,自适应矩估计):
Adam的优点:
1、分子是梯度的移动平均值,通过移动平均抵消梯度摆动,加快收敛速度,(如beta=0.9,等于取1/(1-beta)=10次平均);
2、分母是梯度的二阶移动平均,起到约束整个梯度分式避免梯度振幅过大,减少学习路径上的摆动;
3、因此,Adam容忍更大的学习率。
应用层面,当前Adam优先使用,在Mnist数据集上的优化效果对比:
几种算法速度对比:
https://zhuanlan.zhihu.com/p/27449596?utm_source=weibo&utm_medium=social
(5)、迭代至损失值达到足够小,停止迭代,储存每层模型参数,用于未来预测。
3、从 Deep Neural Networks(DNN)到 Converlutional Neural Networks(CNN)
简介:CNN卷积神经网络,即把卷积滤波器和神经网络两个思想结合起来,专门应用于图像识别的一套算法。与传统的全连接神经网络相比,卷积网具有两个特点:1、权值共享;2、稀疏连接。
举个例子,一张64*64的彩色图片,特征数量就达到64*64*3=12,288维,若网络有10层,每层50个神经元,DNN的参数量为12,288*50*10=6,144,000。而CNN若卷积核取3*3,同样10层,每层50个卷积核,CNN的参数量仅为3*3*10*50=4500,因此它更适用于图像领域。
输入层:四维张量(NCHW,N:样本量,C:通道数,H:高,W:宽)
卷积层:完成特征运算
BN层:BatchNormalization层,层间标准化,实现层间解耦,加快训练速度,防止 Covariate Shift
激活层:神经元激活(与DNN类似)
池化层:常用最大池化与均匀池化,减少参数量,防止过拟合
全连接层:与DNN类似
失活层:dropout层,神经元按给定概率随机失活,防止过拟合
输出层:softmax,与DNN类似
训练:
(1)、数据标准化
(2)、明确损失函数,常用交叉熵
(3)、明确每一层梯度函数,CNN的梯度计算较为复杂,需要考虑不同层级各自的求导函数,逐层进行前向运算和反向求导(注:卷积层反向求导时卷积核需翻转180度)
(4)、明确优化算法,常用Adam,并增加学习率衰减系数(decay = 0.04),便于收敛;指定batch_size,分批优化
(5)、迭代至损失值达到足够小,停止迭代。
二、深度学习在图像识别中的应用——以手写汉字识别为例
目标:识别手写汉字
训练数据来源:中科院自动化研究所,手写汉字图片数据集( HWDB1.1 )
简介:该数据集采集了来自480个人的总共3755个手写汉字图片(.png),每个汉字约辖300样本,每个样本像素不大于90*90,训练集共计895,035样本,测试集共计223,991样本
模型训练:仅选取常用157个汉字,并刻意加入一定混淆字进行训练
char_set = "的一是了我不订人在他有这个上们来到时大地为子中你说生国年着就那和要她出也得里后自以会家可下而过天去能对小多然于心学么之都好看起发当没成只如事把还用第样道想作种开美总从无情单面最女但现前些所同日手又行意动方期它头经长儿回位分爱老因很给名法间斯知世什两次使身者被高已亲认其进取此话常与活正感己确消肖慧惠旅华力已角商逼通"
硬件信息:
CPU:Intel i7-8700K
GPU:Nvidia GeForce 1080ti
内存:16G
框架:Keras
训练时长:4h:49m:30s
loss function:categorical_crossentropy
optimizer:Adam
data augmentation:
(1)、每张图片统一resize为1*96*96
(2)、图片灰度化+二值化+黑白取反:灰度化与二值化的目的是凸显文字,使文字边界更清晰;黑白取反的目的是令占比更多的背景变为黑色像素值为0,文字为白色像素值为255,减少运算开销
(3)、网络加速优化:把卷积层拆分为瓶颈层减少计算开销,加快训练速度,例如:
(4)、model
(5)、evaluate