一、深度学习的应用场景
1、深度学习的应用场景
1、图像应用:
1.1 大规模(大数据量)图片识别(聚类/分类),如人脸识别,车牌识别,OCR等
人脸识别:① faceID ② faceNet
1.2 以图搜图,图像分割
1.3 目标检测,如自动驾驶的行人检测,安防系统的异常人群检测
目标检测:① faster RCNN ② SSD ③ YOLO(YOLO3)
2、语音识别
语音识别,语音合成
语音识别:① deep speech2 ② DFSMN
语音合成:① tactorn2 ②
3、自然语言处理 NLP:
3.1 自动分词,句法分析/语义分析、语义角色标注SRL,语法纠错,关键词提取,文本分类/聚类,文本自动摘要,信息检索(ES,Solr)
信息抽取,网络爬虫,情感分析,命名实体识别,问答系统
3.11 自动分词:
算法:
工具:
jiagu jieba hanlp
3.12 句法分析/语义分析、语义角色标注SRL:
(1)句法分析:
算法:
工具:
hanlp
(2)语义分析、语义角色标注SRL:
算法:
工具:
ltp
3.13 语法纠错:
3.14 关键词抽取:
3.15 关键词分类:
3.16 文本分类、文本聚类:
(1)文本分类:
(2)文本聚类:
3.17 文本自动摘要:
3.18 信息检索:
3.19 信息抽取:
3.20 情感分析:
3.21 命名实体识别:
算法:
工具:
hanlp
3.21 问答系统:
pass(后续文章)
3.2 知识图谱,机器翻译,人机对话,机器写作
3.3 推荐系统,高考机器人
4、数据挖掘,风控系统,推荐系统,广告系统等 --------- 机器学习多于深度学习
二、神经网络的起源
1、神经网络来源之人的思考
1、大脑是由处理信息的神经元细胞和连接神经元的细胞进行信息传递的突触构成的。 树突(Dendrites)从一个神经元接受电信号,
信号在细胞核(Cell Body)处理后, 然后通过轴突(Axon)将处理的信号传递给下一个神经元。
2、神经网络来源之人的思考
一个神经元可以看作是将一个或多个输入处理成一 个输出的计算单元。
通过多个神经元的传递,最终大脑会得到这个信息, 并可以对这个信息给出一个合适的反馈。
2、感知器模型 ----- 深度学习神经元的前身
https://blog.csdn.net/qq_16555103/article/details/89002382 ---------- 详情见SVM算法感知器
0、感知器是深度学习神经元的前身,即 感知器 中sign() 换为其他 激活函数 >>>> 深度神经网络神经元
1、感知器可以看作是根据权重来做出决定的一个设备/单元,只要我们可以给定一 个比较适合的权重以及阈值,那么感知器应该是
能够对数据进行判断的/分类预 测的。
2、假定你现在在考虑是否换工作,也许你会考虑一下三个方面的因素:
新工作的待遇会提高吗? 权重w1
你家庭经济压力大吗? 权重w2
新工作稳定吗? 权重w3
结果:
w1*x1 + w2*x2 + w3*x3 比较 阈值
感知器计算过程:
从感知器模型中,我们可以将单个神经元的计算过程看成下列两个步骤:
① 先计算权重w和输入值x以及偏置项b之间的线性结果 决策函数值z:z=wx+b
② 然后对结果值z进行一个数据的sign函数(变种)转换,得到一个离散的0/1值: y=int((sign(z)
+1)/2) 或 sign(z)
3、感知器模型与深度学习网络的关系:
深度学习网络是由感知器模型组合推演而来的
4、多个感知器组合与深度学习网络的区别?
① 多个感知器组合虽然一定程度上可以解决非线性分类问题,但是由于单个感知器输出结果只有(-1,+1),即
离散值,因而感知器组合模型本质上还是一个线性模型。深度学习网络对于每一个神经元都加入的非线性因素(激活函
数),因此深度学习网络可以解决非线性问题。
③ 只要感知器网络中的权重或者偏置项稍微的做一点小的改动,都会导致最终的输 出发生一定的变化。但是在感知器神经网络
中,单个感知器上的权重或者偏置项 发现一点小的变化,最终的输出要不不变。
例如:
感知器模型:>= 0 label为 +1 , <0 label为 -1;
当决策函数值z:从-10000 ...>> -1 >> +1,则感知器模型先不进行模型参数更新(因为预测值-10000 与 -1 是
一样的,都是-1 ),而当x = +1 时,模型预测值直接发生反转【因为预测值只有两种取值-1 和 1】,显然
这是不合理的。
(1)多层感知器(人工神经网络ANN)
1、将多个感知器进行组合,我们就可以得到一个多层感知器的网络结构,网络中的每一个节点我们叫做神经元。
(2)感知器神经元组合 解决 非线性可分
- 单个感知器非线性可分数据
- 组合感知器(并没有加入激活函数) 非线性数据划分
注意:下面组合感知器 因为没有加入非线性因素的激活函数,因此分类模型是线性的模型
- 组合感知器网络的缺点
1、感知器组合模型的缺点:
其实只要将网络中的权重或者偏置项稍微的做一点小的改动,都会导致最终的输 出发生一定的变化。但是在感知器神经网络中,
单个感知器上的权重或者偏置项 发现一点小的变化,最终的输出要不不变,要不完全翻转(因为只有两种取值-1 和 1),这
种翻转会导致接下来的感知器可能发生复杂的完全没法控制的变化,这样 会导致我们的网络很难得到最终的逼近结果。
因此:感知器模型 + 非线性连续激活函数 来使得网络 赋予非线性因素的方法就诞生了。
2、感知器缺陷总结:
① 感知器网络会出现模型参数不更新的无用迭代过程
② 模型更新会出现突变反转,会导致网络震荡无法逼近真实值。
因此,每个神经元需要加入非线性因素的激活函数
3、S型神经元代替感知器 的神经网络
1、s型神经元诞生的原因
对感知器网络(线性的)的这种很难学习的问题,引入S型神经元来代替感知器,从而解 决这个问题
2、在S型神经元中,和感知器神经元的区别在于:
对于结果值z的转换,采用的不是sign函数进行转换,是采用平滑类型的函数进行转 换,让输出的结果值y最终是一个连续
的,S型神经元转指使用的是sigmoid函数。
三、神经网络的基本结构
1、激活函数
1、激活函数的主要作用:
① 提供网络的非线性建模能力。如果没有激活函数,那么该 网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网
络跟单层神经网 络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具 备了分
层的非线性映射学习能力。
激活函数的主要特性是:可微性、单调性、输 出值的范围;
② 某些激活函数一定程度上解决了梯度消失和梯度爆炸问题,例:Relu(5、6、20)
2、常见的激活函数:Sign函数、Sigmoid函数、Tanh函数、ReLU函数、P-ReLU 函数、Leaky-ReLU函数、ELU函数、Maxout函数等
https://blog.csdn.net/wangqianqianya/article/details/82961276 --------- Sigmoid、tanh、ReLU、LeakyReLU、
pReLU、ELU、maxout
(1)各种激活函数存在的问题与解决的问题
1、sign()
存在问题:
① 感知器网络会出现模型参数不更新的无用迭代过程
② 模型更新会出现突变反转,会导致网络震荡无法逼近真实值。
③ 模型是线性的
2、sigmoid
解决问题:
解决的sign激活函数的缺陷
存在问题:
① 存在饱和区与兴奋区,饱和区梯度小,bp过程更新参数慢(以为梯度下降:θ = θ - α * 梯度链的值)
② 存在zigzag,不容易达到最优
③ 存在 exp 函数,计算量大
④ 存在 梯度消失 与 梯度爆炸 问题
zigzag 现象:
3、tanh 与 sigmoid 区别
优势:Tanh函数是0均值的更加有利于提高训练效率,由于Sigmoid输出是在0-1之间,总是正数,在训练过程中参数的梯度值为
同一符号,这样更新的时候容易出现zigzag现象,不容易到达最优值。具体推导详见知乎:
https://www.zhihu.com/question/50396271?from=profile_question_card
缺点:
仍存在 存在 梯度消失 与 梯度爆炸问题
存在 exp 函数,计算量较大
4、relu
① 没有 exp 函数,收敛速度较快,存在 dead神经元区(过滤噪声特征),增加了泛化能力。
② 梯度截断 与 右边激活函数的梯度 恒为1,共同 缓解梯度爆炸的问题
③ 梯度右边激活函数的梯度 恒为1,解决了 梯度消失的问题
https://blog.csdn.net/edogawachia/article/details/80043673
-------- 神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)
2、 神经网络的基本结构与类型
神经网络主要由三个组成部分:
第一个是架构(architecture)或称为拓扑结构 (topology),描述神经元的层次与连接神经元的结构。
第二个组成部分是神 经网络使用的激励/激活函数。
第三个组成部分是找出最优权重值的学习算法(BP)。
神经网络主要分为两种类型:
前馈神经网络(Feedforward Neural Networks) 是最常用的神经网络类型,一般定义为有向无环图,信号只能沿着最终输出
的那个方向传播。
另外一个是反馈神经网络(Feedback Neural Networks),也称为 递归神经网络(Recurent Neural Networks),也就
是网络中环。
反馈神经网络有时序制约,因此反馈神经网络比前馈神经网络迭代速度慢。
3、神经网络之浅层神经网络 RBM
添加少量隐层的神经网络就叫做浅层神经网络(无激活函数、无分布式、无dropout、只有一个隐层),也叫作传统神经网络;超
过两隐层的话,效果会差很多
4、神经网络之深层神经网络 DNN
增多中间层(隐层)的神经网络就叫做深度神经网络(DNN);可以认为深度学习是 神经网络的一个发展
5、DNN解决非线性可分
6、神经网络之过拟合
1、理论上来讲,单隐层的神经网络可以逼近任何连续函数(只要隐层的神经元 个数足够的多<一个神经元将数据集分为两类>) 虽然从
数学表达上来讲,效果一样
2、网络工程效果中,多隐层的神经 网络效果要比单隐层的神经网络效果好(前提:加入激活函数才会有这种效果,因此感知器网络
ANN多层效果会变差)
3、对于一些分类的问题来讲,三层的神经网络效果优于两层的神经网络,但是 如果把层次不断增加(4,5,6,7....),对于
最终的效果不会产生太大的变化。
tip:现在有些神经网络已经解决层数逐渐增大,神经网络效果不断变化甚至变差;例如:resnet网络。
4、提升隐层层数或者神经元个数,神经网络的“容量”会变大,那么空间表达 能力会变强,(模型的预测能力),从而有可能导致过拟合
的问题
隐层与神经元数目过多的问题:
① 神经网络空间表达能力过强,训练学习噪声,模型预测过拟合
② 参数过多,迭代时间过长,模型太复杂
5、对于视频/图片识别等问题,传统的神经网络(全连接神经网络)不太适合
四、BP神经网络(链式求导)
BGD、SGD、MBGD、ADam、ADamgrad ...... 牛顿法与拟牛顿法、共轭梯度法 ------- BP优化参数的方法
1、神经网络的一种求解W的算法,分为信号“正向传播(FP)”求损失,“反向 传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代 。
BP算法也叫做δ算法
2、Δw = Y - Y_pre 是深度学习更新回归问题的 单层梯度,下面有证明
1. 正向过程经过的所有计算链条,反向的时候都要通过求导链条反向回溯
2. 前一层的求导链,由于涵盖了后层的链条,后层的计算结果被直接利用
3. 隐层越多,离输入层近的W_i,求导链分支越多,越容易出现梯度消失或梯度爆炸。
4. Bp过程只在训练的时候执行,预测的过程中不执行;
5. Bp必须在所有的正向过程都运行完后才执行;
6. BP执行过程比正向(或预测)执行时间长,训练一次的时间比预测一次的时间长;原因:①反向分支链多 ②反向BP有求导法则
7. 隐层节点的值h在bp更新过程中会用到,但是不会更新,更新的只有w和b;
8. 激活函数一般用在隐层使用较多的是tanh/relu;输出层如果使用激活函数,一般使用sigmoid或softmax,有时候不使用激
活函数,有些情况输出层使用激活函数会使得模型很难训练;
1、回归问题 理解正向过程FP与反向过程 BP
注意:深度神经网络在做回归问题的时候,如果最后的输出层用了激活函数,预测值就会被压缩到一个区间范围之内,这就会出现预测
值与真实值差距过大的情况,就会导致模型训练困难;分类问题不做考虑。
有以下两种解决手段:
① 回归问题最后的输出层不加激活函数
② 回归问题在模型训练以前将真实值归一化到一个合理的区间内,训练完模型后用来预测数据得到预测值,在反推出真实
的预测值即可
下文解答是输入层加入激活函数的解释过程。
- 第一步:前项传播 FP 求 预测 Y_pre (也是模型预测时的预测过程)
- 第二步 BP过程的准备阶段,构建Loss函数,模型预测不会执行该步骤
回归问题:通常用 MSE
分类问题:通常用 交叉熵损失函数(softmax的损失函数,https://blog.csdn.net/qq_16555103/article/details/97423338)
- 第三步: BP过程,传递误差LOSS,更新模型参数
链式结构求导结构,一般从接近输出层的参数开始迭代,后面参数迭代可以用前面参数计算的结果,详情见下文:
2、一个三层网络的输入 —— 输出的LOSS函数的计算方式
(1)求需要更新的参数的总的损失函数LOSS
(2)用SGD进行更新该参数
2、BP算法的实例
(1)题目(求解w1....w12 更新梯度的过程)
(2)求解过程
求复合函数链式导数,为了用梯度下降或者其他优化器
- 正向传播求损失
- 反向BP传误差
- 求w7的过程
-
- 求w1的过程
- 迭代多次后
3、 DNN 小批量batch_size 执行过程
注意:我们构造的DNN网络是根据一个样本的特征输入构建的,当同时有多个样本输入神经网络,DNN执行方式如下:
五、RBF神经网络
1、SVM中用到的rbf的高斯核函数
2、他是局部的,深度学习的全局的
六、DNN的两个问题:梯度消失与梯度爆炸
1、一般来讲,可以通过增加神经元和网络层次来提升神经网络的学习能力,使 其得到的模型更加能够符合数据的分布场景;但是实际应
用场景中,神经网 络的层次一般情况不会太大,因为太深的层次有可能产生一些求解的问题
2、在DNN的求解中有可能存在两个问题:梯度消失和梯度爆炸
我们在求解梯 度的时候会使用到链式求导法则,实际上就是一系列的连乘,如果每一层都 小于1的话,则梯度越往前乘越小,导致
梯度消失,而如果连乘的数字在每层 都是大于1的,则梯度越往前乘越大,导致梯度爆炸.
梯度消失梯度爆炸的解决手段:
- 预训练加微调
- 梯度剪切、权重正则(针对梯度爆炸)
- 使用不同的激活函数
- 使用batchnorm
- 使用残差结构
- 使用LSTM网络
参考 : https://blog.csdn.net/qq_25737169/article/details/78847691 ---- 详解梯度消失、爆炸原因及其解决方法