•
分析问题定位任务:首先定位问题,将实际问题转化为机器学习问题,需要什么样的
数据,然后进行数据的采集。包含数据探查、场景抽象、算法选择。比如逻辑回归可
以决定我们是不是能喝咖啡;那另外朴素贝叶斯算法可以用来区分垃圾电子邮件和合
法电子邮件。
AI
系统不是直接检测,而是医生会提供给系统一些数据,比如说人体对
咖啡因的耐受度,会不会睡不着
数据清理:数据清洗
——
重新检查和验证数据的过程,旨在删除重复信息,纠正现有
错误并提供数据一致性。采用(随即、系统、分层)、归一化、去除噪声、数据过滤
特征提取:特征抽象、特征重要性评估、特征衍生、特征降维。
特征选择
模型训练
推理,预测和识别
一般来说,机器学习中特征是由人工选定,而特征越多,给出的信息就越多,识别准
确性会得到提升
但特征多,计算复杂度增加,搜索空间就打,训练数据会在全体特征向量中就会显得
稀疏,影响相似性判断,即
维度爆炸
何为深度学习呢?在前面的课程我们已经了解,深度学习是机器学习的一个子集。
深度学习一般指深度神经网络,深度指神经网络的层数(多层)。
这是模拟人类的神经网络而构建的
在人工神经网络设计及应用研究中,通常需要考虑三个方面的内容,即神经元作用函
数、神经元之间的连接形式和网络的学习(训练)。
GPU
之所以快的原因是因为高效的并行计算,对
矩阵乘法
和卷积具有极大的计算优势。
参考网址
:
https://blog.csdn.net/qq_18515405/article/details/42123697
可以发现,隐藏层越多,神经网络的分辨能力越强
。
这个损失函数的特点包括:
▫ 以权值向量作为自变量。
▫ 以各个训练样例的目标输出
𝑡
_
𝑑
和实际输出
𝑜
_
𝑑
的差平方和作为主体。
▫ 有个系数
1/2
。
•
我们看到,一旦训练样例给定,其输入和目标输出值是常量,实际输出跟随者
𝑊
的变
化而变化,所以误差函数的自变量是
𝑊
。
•
这里较难理解的是
1/2
这个系数,它存在的目的是当
𝐸
对自变量求导的时候,刚好和指
数
2
抵消为
1
,后面将会具体看到。
• X
是样本,
n
是样本的数量,
d
是输出层神经元。
这个损失函数的特点包括:
以权值向量作为自变量。
以各个训练样例的目标输出𝑡_𝑑和实际输出𝑜_𝑑的差平方和作为主体。
有个系数1/2。
我们看到,一旦训练样例给定,其输入和目标输出值是常量,实际输出跟随者
𝑊
的变
化而变化,所以误差函数的自变量是
𝑊
。
这里较难理解的是
1/2
这个系数,它存在的目的是当
𝐸
对自变量求导的时候,刚好和指
数
2
抵消为
1
,后面将会具体看到。
梯度法思想的三要素:出发点、下降方向、下降步长。
全量梯度下降法每次学习都使用整个训练集,因此每次更新都会朝着正确的方向进行,
最后能够保证收敛于极值点,凸函数收敛于全局极值点,非凸函数可能会收敛于局部
极值点,缺陷就是学习时间太长,消耗大量内存。
这个版本的梯度下降算法走向了另一个极端,即每个样例都更新权值。因为训练样例
中一般是含有噪声的,因此到了精确逼近极值的阶段,梯度往往会在极值附近横冲直
撞,难以收敛到极值。
这个版本的梯度下降兼顾了效率和梯度的稳定性,容易冲过局部极小值,是实际工作
中最常用的梯度下降算法,
BS
的取值因具体问题而异,一般取
32
。
也就是比较大的情况。但对于使用
sigmoid
激活函数来说,这种情况比较少。因为
𝜎
′
𝑧
的大小也与
w
有关(
[
公式
]
),除非该层的输入值
[
公式
]
在一直一个比较小的范
围内。
其实梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质
上是因为梯度反向传播中的连乘效应。
梯度剪切
这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然
后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。
这可以防止梯度爆炸。
另外一种解决梯度爆炸的手段是采用权重正则化(
weithts regularization
)比较常见
的是
l1
正则,和
l2
正则,在各个深度框架中都有相应的
API
可以使用正则化,比如在
tensorflow
中,若搭建网络的时候已经设置了正则化参数,则调用以下代码可以直接
计算出正则损失。
**Relu:**
思想也很简单,如果激活函数的导数为
1
,那么就不存在梯度消失爆炸的问题
了,每层的网络都可以得到相同的更新速度,
relu
就这样应运而生。
LSTM
全称是长短期记忆网络(
long-short term memory networks
),是不那么容
易发生梯度消失的,主要原因在于
LSTM
内部复杂的“门”
(gates)
,如下图,
LSTM
通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因
此,经常用于生成文本中。目前也有基于
CNN
的
LSTM
,感兴趣的可以尝试一下。
激活函数,是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输
出端。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具
有十分重要的作用。它们将非线性特性引入到我们的网络中。在神经元中,输入通过
加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了
增加神经网络模型的非线性。若没有激活函数的每层都相当于矩阵相乘。没有激活函
数的神经网络叠加了若干层之后,还是一个线性变换,与单层感知机无异。激活函数
可以分为饱和激活函数与不饱和激活函数,激活函数的右饱和指当
x xx
趋向于正无穷
时,函数的导数趋近于
0
。同样的,当
x xx
趋向于负无穷时,函数的导数趋近于
0
,此
时称为左饱和。当一个函数既满足右饱和,又满足左饱和,则称为饱和函数,否则称
为非饱和函数。
连续可导。
Sigmoid
函数单调连续,求导容易,输出有界,网络比较容易收敛。但是我们看到,
在远离中心点的位置,
Sigmoid
函数导数趋于
0
,在网络非常深的时候,越来越多反向
传播的梯度会落入饱和区,从而让梯度的模越来越小。一般来说,
Sigmoid
网络在
5
层
之内,就会产生梯度退化为
0
的现象,难以训练。这种现象称为梯度消失现象。另外,
Sigmoid
的输出并不是以
0
为中心的。
适合用:
Sigmoid
函数的输出范围是
0
到
1
。由于输出值限定在
0
到
1
,因此它对每
个神经元的输出进行了归一化;用于将预测概率作为输出的模型。由于概率的取值范
围是
0
到
1
,因此
Sigmoid
函数非常合适;梯度平滑,避免「跳跃」的输出值;函
数是可微的。这意味着可以找到任意两个点的
sigmoid
曲线的斜率;明确的预测,即
非常接近
1
或
0
。
缺点:
1.
容易出现梯度消失,
2.
函数输出并不是
0
均值化,
3.
幂运算相对来讲比较耗时。
双曲正切函数:
tanh
也具有和
Sigmoid
函数类似的缺点,即远离中心的位置导数趋于
0
,但是因为其关于
0
点对称,输出的均值比
Sigmoid
更加接近于
0
,因此
SGD
会更接
近自然梯度,然而,
gradient vanishing
的问题和幂运算的问题仍然存在。
Softsign
函数是
Tanh
函数的另一个替代选择。就像
Tanh
函数一样,
Softsign
函数是反
对称、去中心、可微分,并返回
-1
和
1
之间的值。其更平坦的曲线与更慢的下降导数
表明它可以更高效地学习,比
tTanh
函数更好的解决梯度消失的问题。另一方面,
Softsign
函数的导数的计算比
Tanh
函数更麻烦。
Softsign′(x)=1/(1+
∣
x
∣
)2
这个函数相比
tanh
函数,饱和得慢一些。
Sigmoid, tanh, softsign
函数在训练深度神经网络的过程中,都无法回避
梯度消失
的
问题,既在远离函数中心点的位置,函数导数趋于
0
,在网络非常深的时候,越来越
多反向传播的梯度会落入饱和区,从而让梯度的模越来越小,最终趋近于
0
,导致权
重无法更新。
一般来说,如果神经网络超出
5
层,就会产生梯度退化为
0
的现象,导致模型难以训练。
线性整流函数,又称修正线性单元
ReLU
,是一种人工神经网络中常用的激活函数,
通常指代以斜坡函数及其变种为代表的非线性函数。当输入为正时,不存在梯度饱和
问题。
它是一种专门设计用于解决
Dead ReLU
问题的
激活函数
:针对
Relu
函数中存在的
Dead Relu Problem
,
Leaky Relu
函数在输入为负值时,给予输入值一个很小的斜率,
在解决了负输入情况下的
0
梯度问题的基础上,也很好的缓解了
Dead Relu
问题;
2
、该函数的输出为负无穷到正无穷,即
leaky
扩大了
Relu
函数的范围,其中
α
的值一
般设置为一个较小值,如
0.01
;
缺点
1、论上来说,该函数具有比
Relu
函数更好的效果,但是大量的实践证明,其效果
不稳定,故实际中该函数的应用并不多。
2、由于在不同区间应用的不同的函数所带来的不一致结果,将导致无法为正负输
入值提供一致的关系预测。
在
ReLU
的基础上,增加了一点计算复杂度,但是其有连续的导数,且定义的曲面也
相对平滑。
Softplus
函数可以看作是
ReLU
函数的平滑。根据神经科学家的相关研究,
Softplus
函数和
ReLU
函数与脑神经元激活频率函数有神似的地方。也就是说,相比于
早期的激活函数,
Softplus
函数和
ReLU
函数更加接近脑神经元的激活模型,而神经网
络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪
潮。修正线性单元(
Rectified Linear Unit
,
ReLU
):
ReLU
函数被认为有生物上的解
释性,比如单侧抑制、宽兴奋边界(即兴奋程度 也可以非常高)。在生物神经网络
中,同时处于兴奋状态的神经元非常稀疏。人 脑中在同一时刻大概只有
1
∼
4%
的神
经元处于活跃状态。
Sigmoid
型激活函数会导致一个非稀疏的神经网络,而
ReLU
却具
有很好的稀疏性,大约
50%
的神 经元会处于激活状态。
过拟合主要是有两个原因造成的:数据太少
+
模型太复杂:在深度学习中,经常出现
的问题是,训练数据量小,模型复杂度高,这就使得模型在训练数据上的预测准确率
高,但是在测试数据上的准确率低,这时就是出现了过拟合。
1、获取更多数据 :从数据源头获取更多数据;数据增强(
Data Augmentation
)。
2、使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力。
3、d
ropout
。
4、正则化,在训练的时候限制权值变大;
5、限制训练时间;通过评估测试。
6、
增加噪声
Noise
: 输入时
+
权重上(高斯初始化) 。
7、
数据清洗
(data ckeaning/Pruning)
:将错误的
label
纠正或者删除错误的数据。
8、
结合多种模型: Bagging
用不同的模型拟合不同部分的训练集;
Boosting
只使用简单的神经网络。
特殊情况下,对于二次优化问题,并且假设对应的
Hessian
矩阵是对角矩阵,可以推
导出参数递推公式为
𝑤
𝑖
= 𝑠𝑖𝑔𝑛 𝑤
𝑖 ∗
ma𝑥( 𝑤
𝑖 ∗
−
𝜆 𝛼
𝑖
, 0)
,从中可以看出当
𝑤
𝑖 ∗
<
𝜆 𝛼
𝑖
时,
对应的参数会缩减到
0
,这也是和
𝐿
2
正则不同地方。对比
𝐿
2
优化方法,
𝐿
2
不会直接将
参数缩减为
0
,而是一个非常接近于
0
的值。
向目标函数添加一个正则项
Ω(θ)=12||w||22
,使权重更加接近原点
我们往往会设置一个比较大的迭代次数
n
。首先我们要保存好现在的模型
(
网络结构和
权值
),
训练
num_batch
次
(
即一个
epoch),
得到新的模型。将测试集作为新模型的输入
,
进行测试。如果我们发现测试误差比上次得到的测试误差大,我们并不会马上终止测
试,而是再继续进行几个
epoch
的训练与测试,如果测试误差依旧没有减小,那么我
们就认为该试验在上一次达到最低测试误差时停下来训练模型时,
一般的做法是记录到目前为止最好的测试集准确率
p
,之后连续
m
个周期没有超过最
佳测试集准确率
p
时,则可以认为
p
不再提高了,此时便可以提前停止迭代(
Early
Stopping
)。
从图中可以看出,测试误差在前几个
epoch
中逐渐减小,但是训练到某个
epoch
后,
测试误差又有了小幅度的增大。这说明此时发生了过拟合。
发生过拟合是我们所不愿意看见的,我们可以利用提前终止
(early stopping)
来防止过拟合的发生。
提前终止是指:在测试误差开始上升之前,就停止训练
,
即使此时训练尚未收敛
(
即训
练误差未达到最小值
)。
在每一轮的样本输入到神经网络进行训练时,设定一个概率
p
,使得每个神经元有一
定的概率死亡,不参与网络的训练。
其流程为:
1.
首先以一定的概率
p
随机删除掉网络隐藏层中的神经元(暂时死亡),
输入输出神经元保持不变。
2.
然后把输入
x
通过修改后的网络前向传播,把得到的损
失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除
的神经元上按照随机梯度下降法更新对应的参数(
w
,
b
)。
3.
然后继续重复这一过程:
恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有
所更新)从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神
经元的参数)。对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下
降法更新参数(
w
,
b
) (没有被删除的那一部分参数得到更新,删除的神经元参数
保持被删除前的结果)。
原始输入每一个节点选择概率
0.8
,隐藏层选择概率为
0.5
。
Dropout
的优点:
▫
相比于
weight decay
、范数约束等,该策略更有效。
▫
计算复杂度低,实现简单而且可以用于其他非深度学习模型。
▫
但是当训练数据较少时,效果不好。
▫ Dropout
训练过程中的随机过程不是充分也不是必要条件,可以构造不变的屏
蔽参数,也能够得到足够好的解。
除上述的方法以外,还有半监督学习、多任务学习、提前停止、参数共享、集成化方
法、对抗训练等方法。
𝜂𝛿
𝑖
𝑙+1
𝑥
𝑗
𝑙
𝑛
为原梯度大小和方向,
j
表示第
l
层的第
j
个神经元,
i
表示第
l+1
层的第
i
个神
经元
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的权
重固定,所以又可以看做一个恒定的滤波器
filter
(
kernel
))做内积(逐个元素相乘
再求和)的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。
局部感知,一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部
的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有
必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合
起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系
统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域
的刺激)。
参数共享,对输入的照片,用一个或者多个
filter
扫描照片,
filter
自带的参数就是权
重,在同一个
filter
扫描的图层当中,每个
filter
使用同样的参数进行加权计算。权值
共享意味着每一个过滤器在遍历整个图像的时候,过滤器的参数
(
即过滤器的参数的
值
)
是固定不变的,比如我有
3
个特征过滤器,每个过滤器都会扫描整个图像,在扫描
的过程中,过滤器的参数值是固定不变的,即整个图像的所有元素都“共享”了相同
的权值。
输入层,用于数据的输入。
卷积层(
Convolutional layer
),卷积神经网路中每层卷积层由若干卷积单元组成,
每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入
的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,
更多层的网络能从低级特征中迭代提取更复杂的特征。
线性整流层(
Rectified Linear Units layer, ReLU layer
),这一层神经的活性化函数
(
Activation function
)使用线性整流(
Rectified Linear Units, ReLU
)
f(x)=max(0,x)
。
池化层(
Pooling layer
),通常在卷积层之后会得到维度很大的特征,将特征切成几
个区域,取其最大值或平均值,得到新的、维度较小的特征。
全连接层(
Fully-Connected layer
)
,
把所有局部特征结合变成全局特征,用来计算
最后每一类的得分。
输出层,用于输出最终结果。
实际的分类网络,基本上都是卷基层和
Pooling
层交替互联,形成的前馈网络。
Pooling
层有如下作用:
不变性:
MaxPooling
在一定范围内保证了不变性,因为一片区域的最大值无论
在这篇区域的何处,最后输出都是它。
减小下一层输入大小:
Pooling
有效降低了下一层输入数据的尺寸,减少了参数
个数,减小了计算量。
获得定长数据:通过合理设置
Pooling
的窗口尺寸和
Stride
,可以在变长输入中
得到定长的输出。
增大尺度:相当于扩大了尺度,可以从更大尺度上提炼上一层的特征
防止过拟合:
Pooling
简化了网络,降低了拟合的精度,因此可以防止过拟合
(注意有可能带来的欠拟合)。
D
ABCD
A