第一次作业:深度学习基础 (2)

第一次作业:深度学习基础

万有逼近定理:

如果一个隐层包含足够多的神经元三层前馈神经网络(输入-隐层-输出)能以任意精度逼近任意预定的连续函数

当隐层足够宽时,双隐层感知器(输入-隐层1-隐层2-输出)可以逼近任意非连续函数:可以解决任何复杂的分类问题。

为什么线性分类任务组合后可以解决非线性分类任务?

答:第一层感知器经过空间变换将非线性问题转化为线性问题。

结构 决策区域类型
无隐层   由一超平面分成两个  
单隐层   开凸区域或闭凸区域  
双隐层   任意形状(复杂度由单元数目确定)  

第一次作业:深度学习基础

梯度:一个向量。方向是最大方向导数的方向。模为方向导数的最大值。

梯度下降:参数沿负梯度方向更新可以使函数值下降。

反向传播:根据损失函数计算的误差通过反向传播的方式,指导深度网络参数的更新优化。

为什么使用梯度下降来优化神经网络参数?

我们的目的是让损失函数取得极小值。所以就变成了一个寻找函数最小值的问题,在数学上,很自然的就会想到使用梯度下降来解决。

深度学习两个优化器:Adam、SGD(随机梯度下降)

一般Adam效果较好。

梯度消失、爆炸会带来哪些影响?

举个例子,对于一个含有三层隐藏层的简单神经网络来说,当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。

神经网络的第三次兴起:

第一次作业:深度学习基础

解决梯度消失的方法:

第一次作业:深度学习基础

逐层预训练(layer-wise pre-training):权重初始化,拥有一个较好的初始值,尽可能避免局部极小值梯度消失。

受限玻尔兹曼机(RBM)

自编码器(Autoencoder)

第一次作业:深度学习基础

自编码器原理:

假设输出与输入相同(target=input),是一种尽可能复现输入信号的神经网络。通过调整encoder和decoder的参数,使得重构误差最小。

自编码器可实现降维、去噪

第一次作业:深度学习基础

微调(fine-tune)

1.3 pytorch基础

torch.Tensor(张量,各种类型数据的封装)

data属性,用来存数据

grad属性,用来存梯度

grad_fn,用来指向创造自己的Function

torch.autograd.Function(函数类,定义在Tensor类上的操作)

如何用Pytorch完成实验?

加载、预处理数据集

构建模型

定义损失函数

实现优化算法

迭代训练

加速计算(GPU)

存储模型

构建baseline

2. 代码练习

理论指导实践,这里引入中国海洋大学视觉实验室前沿理论小组 pytorch 学习中03分类问题(离散性)、04回归问题(连续性)两个经典的范例,通过Colaboratory运行代码观察结果,并写下一点自己的理解。

在训练模型时,如果训练数据过多,无法一次性将所有数据送入计算,那么我们就会遇到epoch,batchsize,iterations这些概念。为了克服数据量多的问题,我们会选择将数据分成几个部分,即batch,进行训练,从而使得每个批次的数据量是可以负载的。将这些batch的数据逐一送入计算训练,更新神经网络的权值,使得网络收敛。

一个epoch指代所有的数据送入网络中完成一次前向计算及反向传播的过程。

所谓Batch就是每次送入网络中训练的一部分数据,而Batch Size就是每个batch中训练样本的数量

iterations就是完成一次epoch所需的batch个数。

问题:

神经网络的输出层需要激活函数吗?

2.1 螺旋数据分类

这里有三点需要注意:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgspy.html