期末机器学习汇报
前言
在机器学习方面,我最先应用的模型是BP神经网络,但是在实际操作时发现,我们掌握的数据之多,类型之复杂,仅凭纯粹的机器学习很难做到比较稳定的预测,所以我后面又开始了解到深度学习,发现能用深度学习来代替机器学习,接下来我会介绍深度学习。
一、机器学习与深度学习的关系
深度学习是机器学习的一个分支,它是使用多个隐藏层神经网络模型,通过大量的向量计算,学习到数据内在规律的高阶表示特征,并利用这些特征来进行决策的过程。
- 机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识
- 深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,通过将数据从一层传递到另一层来构建更复杂的模型。通过大量数据的训练自动得到模型,不需要人工设计特征提取环节。
- 在面对大量数据时,深度学习的学习性能会随着训练集的增加而增加,同时在训练集足够多的情况下,其学习性能会超过传统的机器学习。
二、深度学习代表算法——神经网络
1.神经网络
神经网络是一种模仿生物神经网络结构和功能的 计算模型。经典的神经网络结构包含三个层次的神经网络。分别输入层,输出层以及隐藏层。
其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只是输入。
2.神经网络的组成
2.1损失函数
损失函数(loss function)用于衡量预测结果与真实值之间的误差。最简单的损失函数定义方式为平方差损失:
L
(
y
,
y
′
)
=
1
2
(
y
′
−
y
)
2
L(y,y^{ '})= \frac{1}{2}(y^{'}-y)^{2}
L(y,y′)=21(y′−y)2
2.2梯度下降算法
目的:使损失函数的值找到最小值
方式:梯度下降
函数的梯度指出了函数的最陡增长方向。往梯度的方向走,函数增长得就越快。那么按梯度的负方向走,函数值自然就降低得最快了。模型的训练目标即是寻找合适的 w 与 b 以最小化代价函数值。假设 w 与 b 都是一维实数,那么可以得到如下的 J 关于 w 与 b 的图:
参数w和b的更新公式为:
w
:
=
w
−
α
d
J
(
w
,
b
)
d
w
w := w - \alpha\frac{dJ(w, b)}{dw}
w:=w−αdwdJ(w,b)
b
:
=
b
−
α
d
J
(
w
,
b
)
d
b
b := b - \alpha\frac{dJ(w, b)}{db}
b:=b−αdbdJ(w,b)
其中 α 表示学习速率,即每次更新的 w 的步伐长度。当 w 大于最优解 w′ 时,导数大于 0,那么 w 就会向更小的方向更新。反之当 w 小于最优解 w′ 时,导数小于 0,那么 w 就会向更大的方向更新。迭代直到收敛。
2.3正向传播与反向传播
前面我们所做的整个过程分为两个部分,一个是从前往后的计算出梯度与损失,另外一部分是从后往前计算参数的更新梯度值。所以在神经网络当中会经常出现两个概念,正向传播与反向传播。
2.4 激活函数的选择
激活函数:隐藏层与输出层之间的函数,将隐藏层作为变量计算出输出层的值。
可选择的激活函数有:
- tanh 函数(双曲正切函数)
- ReLU 函数(修正线性单元)
- Leaky ReLU(带泄漏的 ReLU)
- sigmoid 函数
2.5 超参数
典型的超参数有:
- 学习速率:α
- 迭代次数:N
- 隐藏层的层数:L
- 每一层的神经元个数:n[1],n[2],…
- 激活函数 g(z) 的选择
当开发新应用时,预先很难准确知道超参数的最优值应该是什么。因此,通常需要尝试很多不同的值。应用深度学习领域是一个很大程度基于经验的过程。
3.深度神经网络
4.循环神经网络(RNN)
鉴于我们拥有的数据包括连续数据和离散数据,因此对于离散数据我们可以采用普通的神经网络模型,对于连续数据我们则可以采用循环神经网络来训练。
4.1循环神经网络的特点
循环神经网络(RNN)是神经网络的一种。RNN将状态在自身网络中循环传递,可以接受时间序列结构输入。
4.2循环网络类型
一对一:固定的输入到输出,如图像分类
一对多:固定的输入到序列输出,如图像的文字描述
多对一:序列输入到输出,如情感分析,分类正面负面情绪,预测股票
多对多:序列输入到序列的输出,如机器翻译,称之为编解码网络
同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类,也称之为序列生成
4.3基础循环网络
-
x t x_t xt:表示每一个时刻的输入
-
o t o_t ot:表示每一个时刻的输出
-
s t s_t st :表示每一个隐层的输出
-
中间的小圆圈代表隐藏层的一个unit(单元)
所有单元的参数共享
通用公式表示: -
s 0 = 0 s_0=0 s0=0
-
s t = g 1 ( U x t + W s t − 1 + b a ) s_{t} = g1(Ux_t + Ws_{t-1} + b_{a}) st=g1(Uxt+Wst−1+ba)
-
o t = g 2 ( V s t + b y ) o_{t} = g2(V{s_t}+b_{y}) ot=g2(Vst+by)
g1,g2:表示激活函数,g1:tanh/relu, g2:sigmoid、softmax其中如果将公式展开:
循环神经网络的输出值
o
t
o_t
ot,是受前面历次输入值
x
t
,
x
t
−
1
,
x
t
−
2
x_{t},x_{t-1},x_{t-2}
xt,xt−1,xt−2影响。
4.4矩阵运算表示
4.5时序反向传播算法(BPTT)
对于RNN来说有一个时间概念,需要把梯度沿时间通道传播的 BP 算法,所以称为Back Propagation Through Time-BPTT
我们的目标是计算误差关于参数U、V和W以及两个偏置bx,by的梯度,然后使用梯度下降法学习出好的参数。由于这三组参数是共享的,我们需要将一个训练实例在每时刻的梯度相加。
1、要求:每个时间的梯度都计算出来t=0,t=1,t=2,t=3,t=4,然后加起来的梯度, 为每次W更新的梯度值。
2、求不同参数的导数步骤:
- 最后一个cell:计算最后一个时刻交叉熵损失对于 s t s_t st的梯度,记忆交叉熵损失对于 s t , V , b y s^t,V,b_{y} st,V,by的导数按照图中顺序计算
- 最后一个之前的cell:
第一步:求出当前层损失对于当前隐层状态输出值 s t s^{t} st的梯度 + 上一层相对于 s t s^{t} st的损失
第二步:计算tanh激活函数的导数
第三步:计算 U x t + W s t − 1 + b a Ux_t + Ws_{t-1} + b_{a} Uxt+Wst−1+ba的对于不同参数的导数
4.6RNN总结
-
完整计算流程
-
反向传播结果
5.搭建神经网络的框架Tensorflow
我主要看的是Tensorflow框架,也是Tensorflow让我认识到深度学习的,同时Tensorflow框架使用的是先建图,再使用session进行运行,操作简单方便,写神经网络的时候就犹如写八股文一样,条理清楚。
6.总结
之后我会继续学习机器学习和深度学习,尤其是对模型的优化和评价方面。目前我还没有开始对数据的处理,之后我会利用寒假把气象数据进行处理之后用模型简单试验一下,看看是否能达到预期的效果。