四、深度神经网络(2006)
深度学习:可以有多个隐含层,包括 深度神经网络、 卷积神经网络、 循环神经网络、 LSTM及 强化学习等。
4.1 深度神经网络
梯度爆炸和梯度消失问题: 原因是网络层数太深,梯度反向传播中的连乘效应。
4.2 梯度下降
4.2.1 随机梯度下降:每次只随机选择一个样本来更新模型参数
优点: 学习速度快。
缺点: 每次更新不会按照梯度下降最快的方向进行,收敛速度慢。
批量梯度下降:每次使用整个数据集训练
优点: 每次更新会朝着正确的方向进行,收敛速度快,迭代次数少。
缺点: 每次更新需要遍历整个数据集,需要计算量大,消耗内存多。
4.2.2 Mini-Batch 梯度下降:小批量梯度下降算法----主流方法(介于批量和随机之间)
优点: 保证收敛和更新速度。
数据集加载和划分: (不涉及梯度下降算法)
torch.utils.data.DataLoader(dataset, batch_size=, shuffle=, ...)
4.3 优化器(梯度学习算法):torch.optim
4.3.1 SGD:就是Mini-Batch梯度下降算法
最常用的优化方法
4.3.2 Momentum:加速收敛
class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=FALSE)
SGD方法和动量方法都是调用同一个函数,靠设置参数momentum进行区分。
4.3.3 AdaGrad:自适应缩小学习率
累计历史上出现过的梯度(平方),用积累的梯度平方的总和的平方根,去逐元素地缩小现在的梯度。某种意义上是在自行缩小学习率,学习率的缩小与过去出现过的梯度有关。
缺点: 刚开始参数的梯度一般很大,但是算法在一开始就强力地缩小了梯度的大小,也称学习率的过早过量减少。
class torch.optim.Adagrad(prams, lr, lr_decay, weight_decay)
4.3.4 RMSProp :加入了平方梯度的衰减项
AdaGrad算法在前期可能会有很大的梯度,自始至终都保留了下来,这会使得后期的学习率过小。RMSProp在这个基础之上,加入了平方梯度的衰减项,只能记录最近一段时间的梯度,在找到碗状区域时能够快速收敛。
class torch.optim.RMSProp(params, lr=0.01, alpha=0.99, eps=1e-8, weight_decay=0, momentum=0, centered=False)
4.3.5 Adam :学习率自适应优化算法,动量方法和RMSProp方法的结合,更新一阶矩和二阶矩。(目前最好的)
Adam算法和之前类似,也是自适应减少学习率的算法,不同的是它更新了一阶矩和二阶矩,用一阶矩有点像有动量的梯度下降,而用二阶矩来降低学习率。
class torch.optim.Adam(params, lr=0.001, betas(0.9, 0.999), eps=1e-8, weight_decay=0)
torch.squeeze(imput): 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,默认是将a中所有为1的维度删掉。也可以通过dim指定位置,删掉指定位置的维数为1的维度。
torch.unsqueeze(imput, dim): 这个函数主要是对数据维度进行扩充。需要通过dim指定位置,给指定位置加上维数为1的维度。
torch.linspace(start, end, steps): 函数的作用是,返回一个一维的tensor(张量),这个张量包含了从start到end,分成steps个线段得到的向量。
4.4 正则化:解决欠拟合和过拟合的问题
方式: 在目标函数中引入额外的信息来惩罚过大的权重参数。
目标函数: J ( θ ) J(\theta) J(θ)
在优化时,不是直接优化 J ( θ ) J(\theta) J(θ),而是优化 J ( θ ) + λ R ( W ) J(\theta)+\lambda R(W) J(θ)+λR(W), 其中 λ \lambda λ为正则化系数, λ R ( W ) \lambda R(W) λR(W)称为正则项, λ \lambda λ越大,惩罚越大,只对权重W做正则惩罚而不对偏置b做正则惩罚。