万有逼近定理:
如果一个隐层包含足够多的神经元,三层前馈神经网络(输入-隐层-输出)能以任意精度逼近任意预定的连续函数。
当隐层足够宽时,双隐层感知器(输入-隐层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 螺旋数据分类这里有三点需要注意: