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
《神经网络和深度学习》的第四章前馈神经网络
《动手学习深度学习》的第四章多层感知机的实现
9.30
- 卷积神经网络是一种具有局部连接、权值共享和汇聚等特性的深层前馈神经网络。
局部连接:
在传统的全连接(fully connected)神经网络中,每一层的每一个神经元都与前一层的所有神经元相连。而在卷积神经网络中,每一层的神经元只与输入数据的一小部分区域(称为感受野,receptive field)相连,而不是整个输入。这种连接模式反映了实际图像中的局部相关性——图像中的像素通常是局部相关的,远处的像素之间的相关性较小。
举个例子,假设我们在识别一张图片中的猫脸,局部连接意味着神经网络中的某些单元只关注图像的一小部分,比如眼睛周围的区域。这种局部连接不仅减少了参数的数量,还增强了模型对局部特征的捕捉能力。
权值共享
在卷积神经网络中,“权值共享”指的是同一卷积核(filter 或 kernel)在整个输入空间内滑动,并且在不同的位置使用相同的权重和偏置参数。这是因为图像中的特征(如边缘、纹理等)在图像的不同位置上是相似的,因此不需要在图像的每个位置学习不同的特征检测器。
这种权值共享机制使得卷积神经网络能够有效地检测图像中的平移不变性(translation invariance),即无论图像中的目标出现在什么位置,模型都能识别出来。此外,权值共享还极大地减少了需要学习的参数数量,从而降低了过拟合的风险。
- LeNet-5: 2个卷积层(2个平均池化层)+3个全连接层。
- AlexNet: 5个卷积层、2个全连接隐藏层和1个全连接输出层。
- VGG-11: 8个卷积层和3个全连接层。
AlexNet
- AlexNet是更大更深的LeNet,10x参数个数,260x计算复杂度
- 新引入了Dropout丢弃法,ReLU激活函数,最大池化层和数据增强
- AlexNet赢下了2012ImageNet竞赛后标志着新一轮神经网络热潮的开始
VGG
- 更大更深的AlexNet(重复的VGG块)
- VGG使用可重复使用的卷积块来构建深度卷积神经网络
- 不同的卷积块个数和超参数可以得到不同复杂度的变种
NiN架构
- 无全连接层,使用卷积层+两个1*1卷积层代替全连接层
- 交替使用NiN块和步幅为2的最大池化层,逐步减小高宽和增大通道数
- 使用全局平均池化层得到输出(代替VGG和AlexNet中的全连接层),其输入通道数是类别数,不容易过拟合,有更少的参数个数
10.8
小土堆–PyTorch–加载数据集:
- Dataset:提供一种方式去获取数据机器label;(实现以下两个功能:如何获取每一个数据及其label+告诉我们总共有多少时间)
- Dataloader:为后面的网络提供不同的数据形式
- self. 能够指定类当中的全局变量。由于不同的函数之间的变量不能传递,因此使用self将def _init_中的变量能够让其他函数能够使用
- tensor将数据包装上神经网络所需要的基础知识