马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
各人好,我是微学AI,本日给各人先容一下人工智能算法工程师(中级)课程14-神经网络的优化与计划之拟合题目及优化与代码详解。在呆板学习和深度学习范畴,模子的训练目的是找到一组参数,使得模子可以或许从训练数据中学习到有效的模式,并对未知数据做出正确推测。这一过程涉及到办理两种重要的拟合题目:欠拟合(Underfitting)和过拟合(Overfitting)。
一、拟合题目概述
在呆板学习范畴,拟合题目是指通过训练数据找到最佳模子参数,使得模子在未知数据上的表现尽大概好。拟合题目重要包罗欠拟合和过拟合两种征象。
欠拟合征象
界说:欠拟合指的是呆板学习模子在训练集上的表现不佳,无法充实学习到数据的内在规律,导致模子的推测本领低下。这就好比一个门生在测验中,由于知识把握不牢固,对已知标题标解答都做不好,更不消说应对新标题了。
缘故因由分析:
模子复杂度低:如果模子太简单,如用线性模子去拟合非线性的数据分布,那么模子就无法捕捉到数据中的复杂模式,就像用直尺去丈量曲线长度一样,永世无法得到正确的结果。
训练数据不敷:模子须要富足的数据来学习和概括数据的特性。如果数据量太少,模子大概没偶尔机打仗到数据的全貌,就像从一本书中只读了几页就想明白整本书的内容一样困难。
特性选择不当:如果使用的特性与目的推测无关或相干性弱,模子就难以从中学习到有效的信息,相称于在办理题目时选择了错误的工具。
过拟合征象
界说:过拟合是指模子在训练数据上表现得过于精彩,以至于对训练数据中的噪声或偶尔性细节也举行了学习,这导致模子在面对未见过的数据时,泛化本领降落。这就像一个门生太过依赖于影象特定的例题,而没有真正明白背后的原理,因此在遇到轻微厘革的题目时就束手无策。
缘故因由分析:
模子复杂度过高:如果模子过于复杂,如高阶多项式回归,它大概会过分顺应训练数据中的每一个细节,包罗噪声和非常值,而不是学习数据的广泛规律。
训练数据包罗噪声:现实天下的数据通常带有噪声,如果模子试图学习这些噪声,就会导致过拟合。这类似于试图从嘈杂的情况中听清对话,噪声会干扰对真实信息的明白。
训练数据量不敷:纵然模子复杂度适中,但如果训练数据量不敷,模子仍旧大概过拟合。这是由于数据量不敷时,模子大概会把偶尔出现的模式误以为是广泛规律。
办理战略
增长模子复杂度:对于欠拟合,可以通过增长模子复杂度来提拔模子的学习本领,如使用更高阶的多项式或更复杂的神经网络结构。
增长训练数据量:无论是欠拟合照旧过拟合,增长训练数据量都能资助模子更好地学习数据的分布,进步泛化本领。
特性工程:优化特性选择,确保模子可以或许基于故意义的特性举行学习。
正则化:使用L1或L2正则化等技能来限定模子复杂度,防止过拟合。
交织验证:通过交织验证来评估模子的泛化本领,确保模子不但在训练数据上表现好,也能在未见数据上给出正确推测。
早停法:在训练过程中监控 验证集的性能,一旦发现验证集上的性能不再提拔,就克制训练,克制过拟合。
二、正则化方法
为了办理过拟合题目,通常采取正则化方法对模子举行束缚。常见的正则化方法有L1正则化和L2正则化。
1. L1正则化
L1正则化的目的函数为:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + α ∑ j = 1 n ∣ θ j ∣ J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^2 + \alpha\sum_{j=1}^{n}|\theta_j| J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+αj=1∑n∣θj∣
此中,第一项为丧失函数,第二项为L1正则化项, α \alpha α为处罚系数, θ j \theta_j θj为模子参数。
2. L2正则化
L2正则化的目的函数为:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + α 2 ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^2 + \frac{\alpha}{2}\sum_{j=1}^{n}\theta_j^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+2αj=1∑nθj2
此中,第一项为丧失函数,第二项为L2正则化项, α \alpha α为处罚系数, θ j \theta_j θj为模子参数。
三、正则化参数的更新
在优化目的函数时,我们须要对正则化参数举行更新。以下为L2正则化的参数更新公式:
θ j : = θ j − α ( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ θ j ) \theta_j := \theta_j - \alpha\left(\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)} + \lambda\theta_j\right) θj:=θj−α(m1i=1∑m(hθ(x(i))−y(i))xj(i)+λθj)
此中, λ = α m \lambda = \frac{\alpha}{m} λ=mα为正则化参数。
四、Dropout
Dropout是一种有效的正则化方法,通过在训练过程中随机扬弃部分神经元,来淘汰模子对特定训练样本的依赖。以下是Dropout的实现步调:
(1)在训练过程中,按照肯定概率随机扬弃神经元;
(2)在测试过程中,将全部神经元的输出乘以概率因子。
五、代码实现
以下是基于PyTorch的拟合题目及优化代码实现:
- import torch
- import torch.nn as nn
- import torch.optim as optim
- # 定义模型
- class LinearRegression(nn.Module):
- def __init__(self, input_dim, output_dim):
- super(LinearRegression, self).__init__()
- self.linear = nn.Linear(input_dim, output_dim)
- def forward(self, x):
- return self.linear(x)
- # 生成数据
- x = torch.randn(100, 1)
- y = 3 * x + 2 + torch.randn(100, 1)
- # 实例化模型
- model = LinearRegression(1, 1)
- # 定义损失函数和优化器
- criterion = nn.MSELoss()
- optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.01) # L2正则化
- # 训练模型
- num_epochs = 100
- for epoch in range(num_epochs):
- model.train()
- optimizer.zero_grad()
- outputs = model(x)
- loss = criterion(outputs, y)
- loss.backward()
- optimizer.step()
- if (epoch+1) % 10 == 0:
- print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')
- # 测试模型
- model.eval()
- with torch.no_grad():
- predicted = model(x).detach().numpy()
- print(f'预测值:{predicted}')
复制代码 通过本文的先容,信任各人对拟合题目及优化方法有了更深入的相识。在现实应用中,可根据数据特点选择符合的正则化方法,以进步模子的泛化本领。
|