【研1深度学习】《神经网络和深度学习》阅读笔记(记录中......
9.27
- 语义鸿沟: 是指输入数据的底层特征和高层语义信息之间的不一致性和查一下。如果可以有一个好的表示在某种程度上能够反映出数据的高层语义特征,那么我们就能相对容易的构建后续的机器学习模型。
- 嵌入(Embedding): 将一个度量空间中的一些对象映射到另一个低维的度量空间中,并尽可能地保持不同对象之间的拓扑关系。
- 端到端的训练: 在学习过程中不进行分模块或分阶段的训练,直接优化任务的总体目标。
- 梯度消失问题阻碍神经网络的进一步发展,特别是循环神经网络。为了解决这个问题,研究人员采用两步来训练一个多层的循环神经网络:第一步为通过无监督学习的方式来逐层训练每一步循环神经网络,即预测下一个输入;第二部通过反向传播算法进行精调。
- 过拟合问题往往是由于训练数据少和噪声以及模型能力强等原因造成的。为了解决过拟合问题,一般在经验风险最小化的基础上再引入参数的正则化来限制模型能力,使其不要过渡地最小化经验风险。这种就是结构风险最小化。
- 超参数: 用来定义模型结构或优化策略的参数。
- 最简单、常用的优化算法为梯度下降,首先初始化参数,然后按照下面迭代公式来计算风险函数的最小值:
θ t + 1 = θ t − α ∂ R D ( θ ) ∂ θ \theta _{t+1}=\theta _t-\alpha \frac{\partial R_D(\theta )}{\partial \theta } θt+1=θt−α∂θ∂RD(θ),其中 α \alpha α为搜索步长,一般称为学习率。 - Early Stop: 每次迭代时,把新的到的模型在验证集上进行测试,计算错误率。如果在验证集上的错误率不再下降,就停止迭代。
- 目标函数是整个训练集上风险函数,这种方式称为批量梯度下降法(Batch Gradient Descent,BGD)。批量梯度下降法在每次迭代时需要计算每个样本上损失函数的梯度并求和。当训练集中的样本数量N 很大时,空间复杂度比较高,每次迭代的计算开销也很大。
- 为了减少每次迭代的计算复杂度,我们也可以在每次迭代时只采集一个样本,计算这个样本损失函数的梯度并更新参数,即随机梯度下降法(Stochastic Gradient Descent,SGD)
- 偏差指的是算法的期望预测与真实预测之间的偏差程度, 反应了模型本身的拟合能力。
- 方差度量了同等大小的训练集的变动导致学习性能的变化, 刻画了数据扰动所导致的影响。
9.28
线性模型 | 激活函数 | 损失函数 | 优化方法 |
---|---|---|---|
线性回归 | – | ( y − ω T x ) 2 (y-\omega ^Tx)^2 (y−ωTx)2 | 最小二乘、梯度下降 |
逻辑回归 | σ ( ω T x ) \sigma (\omega ^Tx) σ(ωTx) | y l o g σ ( ω T x ) ylog\sigma (\omega ^Tx) ylogσ(ωTx) | 梯度下降 |
Softmax回归 | s o f t m a x ( W T x ) softmax(W^Tx) softmax(WTx) | y l o g s o f t m a x ( W T x ) ylogsoftmax(W^Tx) ylogsoftmax(WTx) | 梯度下降 |
感知器 | s g n ( ω T x ) sgn(\omega^Tx) sgn(ωTx) | m a x ( 0 , − y ω T x ) max(0,-y\omega^Tx) max(0,−yωTx) | 随机梯度下降 |
支持向量机 | s g n ( ω T x ) sgn(\omega^Tx) sgn(ωTx) | m a x ( 0 , 1 − y ω T x ) max(0,1-y\omega^Tx) max(0,1−yωTx) | 二次规划、SMO等 |
- 学习率和批量大小的理解
-
在机器学习中,特别是涉及到使用梯度下降算法进行模型训练时,学习率通常被比喻成步长或者步幅。这个比喻是基于梯度下降的基本原理:通过调整参数来最小化损失函数。在每次迭代中,参数的更新量是由梯度(损失函数关于参数的变化率)与学习率的乘积决定的。因此,如果把参数空间想象成一个山丘,那么学习率就是你每一步下山时迈的步子大小。
-
如果学习率设置得太大,就像迈出了很大的步伐,可能会越过最低点,导致无法收敛或收敛速度慢。相反,如果学习率太小,则像每次只迈出一小步,虽然更有可能找到局部最小值,但是达到最小值的速度会非常慢,使得训练过程耗时过长。
-
至于批量大小(batch size),它影响的是我们计算梯度的方式。批量大小是指每次更新参数时所使用的样本数量。较小的批量大小(如随机梯度下降SGD)会导致估计的梯度有较高的方差,这可能会使下降路径更加不稳定,但有时也有助于跳出局部最小值。较大的批量大小则会产生更稳定但可能更保守的梯度估计,这有助于更平滑的收敛路径,但也可能导致陷入鞍点或局部最小值。
总结来说,学习率可以类比为你下山的步伐大小,而批量大小则是决定你是在每次只观察少数几个脚印(小批量),还是等待更多人走过之后再决定下一步的方向(大批量)。
- 反向传播的简单理解
反向传播是为了有效地计算出损失函数相对于网络中所有权重的梯度,并据此调整权重,以期最小化损失函数。之所以选择损失进行反向传播,是因为损失直接反映了模型预测的质量,通过减少损失,可以间接地提高模型的预测能力。
- 线性回归从零实现时的训练过程
- 初始化参数
* 重复以下训练,直到完成
* 计算梯度
* 更新参数
lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss
for epoch in range(num_epochs):
for X, y in data_iter(batch_size, features, labels):
l = loss(net(X, w, b), y) # X和y的小批量损失
# 因为l形状是(batch_size,1),而不是一个标量。l中的所有元素被加到一起,
# 并以此计算关于[w,b]的梯度
# 只是对所有损失求和(l.sum()),然后调用 .backward() 来计算这个总和损失关于模型参数的梯度。
l.sum().backward() # 计算模型参数的梯度
sgd([w, b], lr, batch_size) # 使用参数的梯度更新参数
with torch.no_grad():
train_l = loss(net(features, w, b), labels)
print(f'epoch {epoch + 1}, loss {float(train_l.mean()):f}')
9.29
《神经网络和深度学习》的第四章前馈神经网络
《动手学习深度学习》的第四章多层感知机的实现