使用不同大小的训练集进行反向传播?

数据挖掘 机器学习 神经网络 反向传播 线性代数
2022-02-15 22:12:03

我正在尝试创建一个 NN,其输入是(长度 m)3d 向量数组

xi=[xi,1,xi,2,xi,3],i=1:m

并且其输出是一个类似大小的数组:

hθ,i=[hθ,i1,hθ,i2,hθ,i3],i=1:m

但是,我唯一的训练数据不是 3d 向量,而是这些向量的幅度/范数(不知道向量分量()本身):λs

yi=||[λi,1,λi,2,λi,3]||,i=1:m

所以,我的概念是使用成本函数:

J=12m(||hθ,i||||yi||)2

请注意,这与更常见的二次成本函数之间的差异(与输出的形状相同,我会使用它。J=12m(hθ,iyi)2yi

在我上面提到的典型成本函数案例中,反向传播算法总是从计算输出层误差开始(基于该成本函数的简单导数就是)。从那里你跟随到取决于的下一层错误。δL=aLyiδL

我的问题是我的输出层错误应该是什么?我已经尝试使用我的新成本函数仅使用的导数(我不会在这里写出该导数,因为它有点毛茸茸),但我似乎不能简单地将其插入为我的输出错误并继续正常的反向传播并获得任何合理的结果?JaL

如果你不能建议我应该如何处理我的 BP 算法,那么也许是因为你认为我的成本函数是一个非首发?作为说明:我已经使用线性模型而不是 NN 向自己证明了这个概念,并使用这个数据集和线性导数而不是 BP 来训练它。尽管考虑到数据的非线性,但准确性很低,所以我想使用 NN 方法。

2个回答

您的成本函数意味着您希望网络根据输入向量的大小来预测输出向量的大小。那是你想做的吗?如果不是,例如,如果您想准确预测输出向量分量,您需要相信这些仅基于输入的大小是可预测的。如果您认为这不可能,那么您需要找到新数据。如果你这样做了,那么一个正常的错误函数应该没问题(例如 MSE),你可以使用在任何 NN 库中实现的正常背景。如果你的性能很差,可能是因为输入向量的范数没有携带足够的信息来做出好的预测。

在 tensorflow 或 pytorch 等现代库中,您可以轻松构建自定义损失函数和/或自定义层。

例如,最后一层可能是一个冻结层,它计算其 3d 输入的平方长度。但是,即使最终输出(长度)被正确学习,也不能保证这个人工层的输入会收敛到你所期望的。您可能需要寻找其他方法或其他信息来恢复输出向量,而不仅仅是它们的长度。