训练具有非常小复杂度的非常大的特征张量的神经网络

Training neural networks with very large feature tensors of very little complexity

这是一个元问题,与代码或库无关。

假设我们有一大堆非常原始的元素,比如直接从我们的硬盘驱动器读取的图像。重要的是,我们输入数据的表示非常简单(位、字节、8 位整数,沿着这些线),但是有很多数据点(而不是 256 个 32 位整数,我们可能有 256x32= 8192 位)。假设我们都不知道这些简单数据点如何(或是否)相关(即它们是否是短裤、整数、浮点数……),因此它们的编码是未知的。 我想训练一个神经网络来解释和解码这些数据点,但我正在努力想办法 represent/format 我的输入数据。 由于我对编码一无所知(我确实有某种类型的输入数组标签,例如灰度图像),我想在我的数据中假设结构很困难并且容易出错。例如,从位计算字节并将我的维度减少 8 倍很容易,但我认为这可能会导致结构信息丢失。出于同样的原因,可能不适合将数据分成更小的批次。

我对此进行了调查并找到了类似 this 的文章,但任何建议的方法很可能会损害我的数据的完整性。

我做了一些将位组合成字节的实验,但这仍然留下非常大的输入(因为它们只减少了 8 倍)并且没有产生我希望的结果。我的另一个想法是将所有输入输入 CNN 以提取特征并通过 RNN 传播这些特征(取得了合理的成功),但这也不能很好地扩展并且也会损害数据的完整性。另一种方法是做类似 U-Net 的事情,我用 CNN 检测特征,然后将这些特征与原始输入一起传播到 RNN,但这会导致复杂性激增(> 30.000.000 个参数,仅约 2500 个输入位)。

期待建议,希望问题解释清楚

虽然一开始令人生畏,但当您对“原始”数据进行操作时,请务必注意,几乎所有问题都是如此,这只是我们人类的感知偏差。需要映射为猫的“像素强度”是一个非常复杂的转换,与从位映射到浮点数的方式相同。因此,第一个直觉是“什么都不做,只是把它当作任何其他输入”。

话虽这么说,拥有良好的先验知识可能会有所帮助,因此值得问问自己什么架构可以被视为可学习的解码器,可以表示解码为短整型、整数、浮点数等。最幼稚的方法是应用所有可能的解码,然后在其上添加attention/transformer,以便网络可以学习如何解码您的数据。在最简单的情况下,您也可以通过线性层连接解码值(这样网络就可以学会忽略它的一部分)。