本文主要是介绍Datawhale X 李宏毅苹果书 AI夏令营 Task2打卡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
线性模型(Linear model)
通常模型的修改来自于对问题的理解,即领域知识
基本定义:把输入特征x乘上一个权重,再加上一个偏置就可以得到预测的结果。
优点:简单易理解,可理解性好(权重w可以直观表达了各属性在预测中的重要性)
1 分段线性曲线
1.1 线性模型的局限性
- Linear(线性)的Model太过简单,对于绝大多数的实际情况来说x1与y的关系不是简单的线性关系。
- 随著 x1 越来越高,y 就应该越来越大,可以通过设定不同的 w改变这条线的斜率,可以设定不同的 b改变这一条蓝色的直线跟 y 轴的交点,但是无论怎么改 w 和 b,x1与y永远都是线性关系,永远都是x1越大y就越大。
- 模型的偏差(Model Bias):无论如何调整Model中的参数,都无法用Linear的Model制造类似红色的折线,也就是指模型无法模拟真实情况。
1.2 分段曲线的拟合
图中的各种Curves(曲线)都是由许多线段组成的,称为Piecewise Linear 的 Curves(分段线性曲线)。这些曲线都可以用常数+各种蓝色Function组成。曲线转折越多、越复杂,需要的蓝色Function就越多。
在实际案例的训练数据选择中,有时也会考虑数据本身的周期性等规律,以求更好减小模型在训练数据上的损失。
1.3 连续曲线的拟合
基于分段曲线可以逼近任何连续曲线的原理,我们可以使用Sigmoid函数来逼近Hard Sigmoid函数
当x1的值趋近于无穷大时,指数项会消失,函数收敛于c处,当x1趋近于负无穷小,y的值则趋近于0。
1.3.1 Sigmoid函数
中调整 b、w 和 c 可以制造各种不同形状的 Sigmoid 函数
在拟合连续曲线时,使用的Sigmoid函数数量(超参数的一种)可以自行设定,其数量越多,就可以产生有越多断线的分段线性函数,可以逼近更复杂的函数。
1.3.2 损失函数的计算
在这种拟合情况下,将损失函数设置为L(θ),其中,θ代表某一组W,b,的值,通过带入特征值x,可以得到预估的y,从而得到与真实标签之间的误差e,将所有误差通过一定计算进行总和,可以得到对应损失。
为了优化模型,减小损失,可以在一开始先设置一个初始值θ0,
一般来说,梯度更新的停止条件是计算出梯度为0向量,导致无法再更新参数(较小可能)或者我们主动终止计算。
1.3.3 批量
批量(batch):存有B笔数据(N笔数据被随机分成一个个批量)的一组数据。
在实际情况中,通常是每次先选一个批量计算损失函数L的值,并进行梯度更新。当所有批量都看过一次后,称为一个回合(epoch)。
注:每次更新一次参数叫做一次更新,把所有的批量都看过一遍,叫做一个回合
2 模型变形
2.1 修正线性单元(Rectified Linear Unit,ReLU)
定义:是一种常用的人工神经网络中的激活函数(activation function)。
形式: f(x) = max(0,x)/。它在x大于零的时候激活,输出x;在x小于等于零的时候不激活,输出零。
优点:计算简单、神经元数量少、训练速度快、避免梯度消失的问题等。
它已成为现代神经网络中最为普遍的激活函数之一,用于隐藏层中。
2.2 神经网络(neural network)
过拟合(overfitting):模型在训练数据和测试数据上的能力/结果不一致。
3 机器学习框架
对于训练集,训练过程有3个步骤:
知识竞答
①下面哪种激活函数可以用来逼近Hard Sigmoid函数
A) ReLU
B) Sigmoid
C) tanh
D) softmax
E) ELU
B
②在深度学习中,我们经常遇到过拟合现象。以下哪些方法可以用来解决过拟合现象?
A) 增加训练数据量
B) 减少模型的参数数量
C) 增加模型的层数
D) 使用正则化技术
E) 使用Dropout技术
ABDE
③在预测观看人次的模型中,考虑前 7 天的数据而非前 1 天的数据有什么好处?
A. 可以降低模型的复杂度
B. 可以减少训练时间
C. 可以捕捉数据的周期性变化,降低损失
D. 可以提高模型的非线性能力
E. 可以避免过拟合
C
④教程中提到,模型在训练数据上的性能通常好于在测试数据上的性能。这种现象为什么会发生?
这种现象发生是因为模型直接在训练数据上优化,不可避免会学习到一些训练数据特有的模式,包括可能的噪声。测试数据代表了模型未见过的数据,更能反映模型的泛化能力。在实际应用中,应该更关注模型在测试数据上的表现。
⑤在教程的视频观看次数预测例子中,我们看到了如何从考虑前1天扩展到考虑前7天、28天甚至56天。这种扩展的意义是什么?教程中显示,从28天增加到56天时,在未见过的数据上的性能并没有显著提升,为什么考虑更多天数不一定总能提高预测准确性?
扩展考虑的天数允许模型捕捉更长期的模式,如周期性变化。然而,考虑更多天数并不总是能提高准确性,因为:1) 可能引入无关或噪声信息;2) 增加了模型复杂度,可能导致过拟合;3) 很久以前的数据可能对当前预测不再相关。
⑥在视频观看人数预测模型中,为什么使用100个ReLU比使用10个ReLU效果更好?这种改进是否总是有效的?
每一层ReLU都可以被视为对数据的一次非线性变换,使用更多的ReLU可以增加模型的复杂度,使其能够捕捉更复杂的非线性关系。100个ReLU相比于10个ReLU,可以学习更细致的模式,有更强的表达能力。然而,这种改进并非总是有效,因为过多的ReLU可能导致过拟合,特别是在数据量较小的情况下。此外,还需要考虑计算资源和推理时间的限制。应该在模型性能不再显著提升,或者验证集性能开始下降时停止增加复杂度。
⑦在教程中,我们看到了如何使用ReLU函数构建深层网络。为什么要在每个线性变换后都加入非线性激活函数?如果去掉这些激活函数会发生什么?
非线性激活函数(如ReLU)在每个线性变换后引入非线性变换,使得模型能够学习复杂的非线性关系。如果去掉这些激活函数,多层线性变换可以简化为单个线性变换,这会大大降低模型的表达能力,使其无法捕捉复杂的模式。
⑧在改进模型时,为什么使用ReLU函数比使用Sigmoid函数效果更好?这可能与什么因素有关?
ReLU函数比Sigmoid函数计算更简单,能缓解梯度消失问题,允许模型学习更复杂的非线性关系。在视频观看人数预测这种可能存在突然变化的场景中,ReLU的非饱和性可能更有利于捕捉数据中的急剧变化。
与Sigmoid激活函数相比,ReLU有几个明显的优点。首先,ReLU在处理正数时非常简单,它直接将正数传递出去,这使得计算更高效。相比之下,Sigmoid函数在处理正数时会变得非常平缓,导致梯度变得非常小,这使得训练过程变得缓慢。这种平缓的性质还可能导致训练过程中会出现梯度消失的问题,即模型在训练时更新参数的速度变得非常慢。
其次,ReLU函数的计算过程非常简单,只需检查输入是否大于零,这使得模型训练速度更快。而Sigmoid函数需要进行复杂的数学运算,这会增加计算的复杂性和时间。
⑨在使用梯度下降法优化模型时,为什么使用小批量而不是整个数据集?这种方法有什么优势和劣势?
优势:
小批量更新可以充分利用现代计算硬件(如GPU)的并行处理能力,而且不需要等待整个数据集的梯度计算完成就可以更新参数,从而加快训练速度。其次,处理整个数据集可能需要大量内存,而小批量可以在有限的内存中进行训练,使得训练过程更加可行。另外还引入了一定的随机性,有助于逃离局部最小值。
劣势:
由于小批量梯度下降每次更新都是基于一个子集的估计,这可能导致收敛路径不如全批量梯度下降平滑,有时可能会出现震荡或不稳定。此外,选择小批量的大小是一个需要经验的过程,不同的大小可能对训练过程的效率和模型性能产生影响。过小的批量可能导致梯度估计不准确,过大的批量可能导致内存不足或训练速度慢。
参考资料
Datawhale (linklearner.com)
机器学习——线性模型(内附详细公式推导)_简单描述几个线性模型建立的过程-CSDN博客
这篇关于Datawhale X 李宏毅苹果书 AI夏令营 Task2打卡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!