PyTorch中线性回归的奇怪行为

时间:2019-01-20 04:51:55

标签: linear-regression pytorch

我正面临一个特殊的问题,我想知道是否有解释。我正在尝试运行线性回归问题并测试不同的优化方法,当彼此比较时,其中两个结果很奇怪。我建立了一个满足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)。难道我做错了什么?

1 个答案:

答案 0 :(得分:0)

这与您从随机分布中提取训练样本本身有关。

这样做,您固有地在某种程度上随机了地面事实。当然,您将获得在2x+5周围固有地分布的值,但是您不保证2x+5也将最适合此数据分布。
因此,您可能会意外地得到与原始函数明显不同的值,并且由于您使用了均值平方误差,因此这些值的权重也显着提高。

在期望值(即,朝向无穷大的样本数量)中,您可能会越来越接近期望的参数。

一种验证方法是根据参数集以及(理想的)基础函数绘制训练样本。
另请注意,线性回归确实具有直接解法-在机器学习中很少见-这意味着您可以直接计算最优解,例如,使用sklearn's function