我正面临一个特殊的问题,我想知道是否有解释。我正在尝试运行线性回归问题并测试不同的优化方法,当彼此比较时,其中两个结果很奇怪。我建立了一个满足y = 2x + 5的数据集,并为此添加了随机噪声。
xtrain=np.range(0,50,1).reshape(50,1)
ytrain=2*train+5+np.random.normal(0,2,(50,1))
opt1=torch.optim.SGD(model.parameters(),lr=1e-5,momentum=0.8))
opt2=torch.optim.Rprop(model.parameters(),lr=1e-5)
F_loss=F.mse_loss
from torch.utils.data import TensorDataset,DataLoader
train_d=TensorDataset(xtrain,ytrain)
train=DataLoader(train_d,50,shuffle=True)
model1=nn.Linear(1,1)
loss=F_loss(model1(xtrain),ytrain)
def fit(nepoch, model1, F_loss, opt):
for epoch in range(nepoch):
for i,j in train:
predict = model1(i)
loss = F_loss(predict, j)
loss.backward()
opt.step()
opt.zero_grad()
当我比较以下命令的结果时:
fit(500000, model1, F_loss, opt1)
fit(500000, model1, F_loss, opt2)
在opt1的最后一个时期:损耗= 2.86,重量= 2.02,偏置= 4.46
在opt2的最后一个时期:loss = 3.47,weight = 2.02,bias = 4.68
这些结果对我来说没有意义,opt2
的损失不应该比opt1
小,因为它发现的权重和偏见更接近于实际价值? opt2
的方法发现权重和偏差更接近实际值(分别为2和5)。难道我做错了什么?
答案 0 :(得分:0)
这与您从随机分布中提取训练样本本身有关。
这样做,您固有地在某种程度上随机了地面事实。当然,您将获得在2x+5
周围固有地分布的值,但是您不保证2x+5
也将最适合此数据分布。
因此,您可能会意外地得到与原始函数明显不同的值,并且由于您使用了均值平方误差,因此这些值的权重也显着提高。
在期望值(即,朝向无穷大的样本数量)中,您可能会越来越接近期望的参数。
一种验证方法是根据参数集以及(理想的)基础函数绘制训练样本。
另请注意,线性回归确实具有直接解法-在机器学习中很少见-这意味着您可以直接计算最优解,例如,使用sklearn
's function