почему линейная регрессия сходится медленнее, если мы используем два слоя линейного модуля? - PullRequest
0 голосов
/ 12 июня 2019

Я проверил линейную регрессию 1d входа и 1d выхода с помощью pytorch, используя три различных способа.

  • Один использует формулу из линейной алгебры,

  • другой использует nn.Linear (1,1).Эти два всегда дают одинаковое решение.

  • Однако, когда я использую два слоя: nn.Linear (1,2) и nn.Linear (2,1) последовательно для третьего подхода, результат сначала не сходится,После того, как я установил намного меньшую скорость обучения и намного большее число эпох, это, наконец, показывает его сходимость.

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

Код в github .Пожалуйста, сразу перейдите в последнюю оболочку для третьего подхода.Ожидаемый результат приведен в первом и втором подходах в записной книжке.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Это не удивительно.С 2 Linear слоями, которые, как вы знаете, эффективно выражают то, что мог бы сделать один Linear слой, вы вводите кучу избыточных степеней свободы - разные присвоения значений двум слоям, что приводит к одному и тому же эффективномупреобразование.Поэтому оптимизатор может «обходить» различные решения, которые с точки зрения функции потерь выглядят одинаково (потому что математически равны одинаковы), не сходясь к одному.Другими словами, вы не можете сходиться к решению, если их бесконечное число, и все они выглядят одинаково для вас.

0 голосов
/ 13 июня 2019

Я не проверял ваш код, но кажется, что 2-й курс 0.00003 слишком мал, и для изучения требуется больше времени.

Единственное, что вы можете сделать раньше, это нормализовать данные:

enter image description here

А потом, как и в первом примере, я смог быстро учиться.

enter image description here

...