Странное поведение линейной регрессии в PyTorch - PullRequest
0 голосов
/ 20 января 2019

Я столкнулся со специфической проблемой, и мне было интересно, если есть объяснение. Я пытаюсь запустить задачу линейной регрессии и протестировать различные методы оптимизации, и два из них имеют странный результат при сравнении друг с другом. Я строю набор данных, который удовлетворяет 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: потеря = 3,47, вес = 2,02, уклон = 4,68

Эти результаты не имеют смысла для меня, разве opt2 не должны иметь меньшую потерю, чем opt1, поскольку найденный им вес и смещение ближе к реальному значению? Метод opt2 находит веса и смещения ближе к реальному значению (они соответственно 2 и 5). Я делаю что-то неправильно?

1 Ответ

0 голосов
/ 21 января 2019

Это связано с тем, что вы сами рисуете обучающие образцы из случайного распределения .

Тем самым вы в некоторой степени рандомизировали основную истину. Конечно, вы получите значения, которые по своей природе распределены вокруг 2x+5, но вы не гарантируете, что 2x+5 также будет наилучшим образом соответствовать этому распределению данных.
Таким образом, может случиться так, что вы случайно получите значения, которые весьма значительно отличаются от исходной функции, и, поскольку вы используете среднюю ошибку в квадрате , эти значения довольно значительно взвешиваются.

В ожидании (т. Е. Для количества выборок, идущих к бесконечности), вы, вероятно, станете ближе и ближе к ожидаемым параметрам.

Чтобы убедиться в этом, можно построить графики тренировочных выборок на основе набора параметров, а также (идеальной) базовой функции.
Также обратите внимание, что у линейной регрессии есть прямое решение - что очень редко встречается в машинном обучении - это означает, что вы можете напрямую рассчитать оптимальное решение, например, с помощью функции sklearn

...