我的深度学习


前言

在机器学习方面,我最先应用的模型是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(yy)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+Wst1+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,xt1,xt2影响。

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+Wst1+ba的对于不同参数的导数

在这里插入图片描述

4.6RNN总结
  • 完整计算流程
    在这里插入图片描述
    在这里插入图片描述

  • 反向传播结果
    在这里插入图片描述

5.搭建神经网络的框架Tensorflow

我主要看的是Tensorflow框架,也是Tensorflow让我认识到深度学习的,同时Tensorflow框架使用的是先建图,再使用session进行运行,操作简单方便,写神经网络的时候就犹如写八股文一样,条理清楚。

6.总结

之后我会继续学习机器学习和深度学习,尤其是对模型的优化和评价方面。目前我还没有开始对数据的处理,之后我会利用寒假把气象数据进行处理之后用模型简单试验一下,看看是否能达到预期的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值