一、回归模型的建立
1、优化器的作用
优化器是机器学习和深度学习中的一个重要组件,用于调整模型的参数以最小化损失函数。优化器的目标是通过迭代更新模型的参数,使得模型在训练数据上能够更好地拟合,并在测试数据上具有较好的泛化能力。
常见的优化器包括:
-
梯度下降法(Gradient Descent):梯度下降法是最基本的优化算法,通过计算损失函数对参数的梯度来更新参数。常见的梯度下降法包括批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-batch Gradient Descent)。
-
动量优化器(Momentum):动量优化器在梯度下降法的基础上引入了动量项,用于加速收敛并减少震荡。动量优化器通过累积之前梯度的指数加权平均来更新参数。
-
自适应学习率优化器(Adaptive Learning Rate):自适应学习率优化器根据参数的梯度情况自动调整学习率。常见的自适应学习率优化器包括AdaGrad、RMSprop和Adam。
-
学习率衰减(Learning Rate Decay):学习率衰减是一种在训练过程中逐渐减小学习率的策略,可以帮助模型更好地收敛。常见的学习率衰减方法有固定衰减、指数衰减和余弦退火等。
-
正则化优化器(Regularization):正则化优化器通过在损失函数中引入正则化项,限制模型的复杂度,防止过拟合。常见的正则化优化器有L1正则化和L2正则化。
2、简单的回归模型
简单的回归模型包括
数据data:训练集(train)、验证集(val)、测试集(test)一般输入是文件地址,或者数据内容, 输出是一个 存储了数据X,Y的数据结构。
模型model:初始化定义模型,输入X, 输出预测值。
超参数hyperPara:除模型外的超参 一般包含: 学习率,优化器, 损失函数等
损失函数(Loss Function)是机器学习中的一个重要概念,用于衡量模型预测结果与真实值之间的差异程度。它是优化算法的核心,通过最小化损失函数来调整模型的参数,使得模型能够更好地拟合训练数据。
常见的损失函数有以下几种:
-
均方误差(Mean Squared Error,MSE):计算预测值与真实值之间的平方差的平均值。适用于回归问题。
-
交叉熵损失(Cross Entropy Loss):用于分类问题,特别是二分类或多分类问题。常见的交叉熵损失函数有二分类交叉熵损失(Binary Cross Entropy Loss)和多分类交叉熵损失(Categorical Cross Entropy Loss)。
-
对数损失(Log Loss):常用于逻辑回归问题,衡量模型对样本分类的准确性。
-
Hinge损失:常用于支持向量机(SVM)中,用于处理二分类问题。
-
KL散度(Kullback-Leibler Divergence):用于衡量两个概率分布之间的差异。
-
Huber损失:结合了均方误差和绝对误差,对异常值具有一定的鲁棒性。
3、回归模型整体框架
dataset:
init
getitem
getitem 方法接收一个参数,即索引,它可以是整数、切片或任何其他可以用于索引访问序列的类型。在方法内部,根据索引类型执行相应的操作,并返回对应的元素。
len
model:
init
forward 模型的前向过程
training data:取一batch的x,根据模型求出对应y,计算loss=(y^ -y), 根据Loss对参数的导数来更新模型参数(梯度下降算法),继续给batch的x,重复上述过程,记录下来每个时刻的模型,最后取最小loss值的模型作为训练所得模型。
val data:给一个x代入当前模型,求Loss以判断模型效果
二、回归模型代码解析
1、csv(Comma-Separated Values)文件是什么?
它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。
其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。
csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。
使用 csv.reader()
读取 csv 文件内容。
2、
Epoch(时期):
当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次>epoch。(也就是说,所有训练样本在神经网络中都 进行了一次正向传播 和一次反向传播 )
再通俗一点,一个Epoch就是将所有训练样本训练一次的过程。
然而,当一个Epoch的样本(也就是所有的训练样本)数量可能太过庞大(对于计算机而言),就需要把它分成多个小块,也就是就是分成多个Batch 来进行训练。**
Batch(批 / 一批样本):
将整个训练样本分成若干个Batch。
Batch_Size(批大小):
每批样本的大小。
Iteration(一次迭代):
训练一个Batch就是一次Iteration(这个概念跟程序语言中的迭代器相似)
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
那么,到底多少个epoch最合适,这个问题没有正确答案,对于不同的数据集,答案都不相同。
Batch Size
直观的理解:
Batch Size定义:一次训练所选取的样本数。
Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如GPU内存不大,该数值最好设置小一点。
为什么要提出Batch Size?
在没有使用Batch Size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,所以计算得到的梯度方向更为准确。但在这情况下,计算得到不同梯度值差别巨大,难以使用一个全局的学习率,所以这时一般使用Rprop这种基于梯度符号的训练算法,单独进行梯度更新。
在小样本数的数据库中,不使用Batch Size是可行的,而且效果也很好。但是一旦是大型的数据库,一次性把所有数据输进网络,肯定会引起内存的爆炸。所以就提出Batch Size的概念。
Batch Size合适的优点:
1、通过并行化提高内存的利用率。就是尽量让你的GPU满载运行,提高训练速度。
2、单个epoch的迭代次数减少了,参数的调整也慢了,假如要达到相同的识别精度,需要更多的epoch。
3、适当Batch Size使得梯度下降方向更加准确。
Batch Size从小到大的变化对网络影响
1、没有Batch Size,梯度准确,只适用于小样本数据库
2、Batch Size=1,梯度变来变去,非常不准确,网络很难收敛。
3、Batch Size增大,梯度变准确,
4、Batch Size增大,梯度已经非常准确,再增加Batch Size也没有用
注意:Batch Size增大了,要到达相同的准确度,必须要增大epoch。
GD(Gradient Descent):就是没有利用Batch Size,用基于整个数据库得到梯度,梯度准确,但数据量大时,计算非常耗时,同时神经网络常是非凸的,网络最终可能收敛到初始点附近的局部最优点。
SGD(Stochastic Gradient Descent):就是Batch Size=1,每次计算一个样本,梯度不准确,所以学习率要降低。
mini-batch SGD:就是选着合适Batch Size的SGD算法,mini-batch利用噪声梯度,一定程度上缓解了GD算法直接掉进初始点附近的局部最优值。同时梯度准确了,学习率要加大。
使用mini-batch梯度下降法时,一次遍历训练集,能让你做m/batch_size个梯度下降。
3、