我用pytorch使用三种不同的方法测试了1d输入和1d输出的线性回归。
一个正在使用线性代数的公式
另一个正在使用nn.Linear(1,1)。这两个总是给出相同的解决方案。
但是,当我使用两层时:对于第三种方法,依次使用nn.Linear(1,2)和nn.Linear(2,1),结果一开始并不收敛。在我将学习率设置为小得多,将纪元设置为大得多之后,它终于显示出它的收敛性。
理论上,由于线性变换的组成又是线性变换,因此无论一层还是两层,它们都应给出相同的答案。 凭直觉,我认为更多的神经元和层可以使事情更有效。但这表明了相反的事实,我不明白。
代码在github中。请直接跳到最后一个shell,以获取第三种方法。 笔记本中的第一种和第二种方法都给出了预期的结果。
答案 0 :(得分:0)
答案 1 :(得分:0)
这并不奇怪。如您所知,具有2个Linear
层,可以有效地表达单个Linear
层的功能,因此您引入了一堆冗余的自由度-对这两个层的值的不同分配在相同的有效转化中。因此,优化器可以“走动”不同的解决方案,这些解决方案在损失函数方面看起来是相同的(因为它们在数学上是相同的),而不会收敛到一个。换句话说,如果有无限数量的解决方案,而这些解决方案在您看来都一样,那么您就无法收敛到解决方案。