编码未知的低复杂度大特征张量训练神经网络的输入表示方案咨询
问题:未知编码的极长基础元素序列的神经网络输入表示优化
这是一个脱离代码与库的元问题。
假设我们有由极基础元素构成的大数组,例如直接从硬盘读取的原始图像数据。核心情况是:输入数据的表示形式非常简单(bits、bytes、8 bit integers等同类形式),但数据点数量极多,例如原本256个32位整数对应的数据可被拆分为256×32=8192个bits。我们不清楚这些基础数据点之间是否存在关联、如何关联,即无法确定其编码格式(是short、整数、浮点数等)。我希望训练神经网络对这些数据点进行解释和解码,但目前无法确定合适的输入数据表示/格式化方法。由于完全不了解编码规则(我已持有输入数组对应的部分标签,例如灰度图像标签),我认为假设数据内部存在固定结构难度高且容易出错:比如将bits合并为bytes可将维度降低8倍,但可能造成结构相关的信息损失,同理将数据拆分为更小的batch也并不适用。
我调研相关内容时找到了部分讨论长序列处理的资料,但其中提出的方法大概率会破坏我所用数据的完整性。
我已完成多组实验:将bits合并为bytes的方案仅能将输入维度降低8倍,输入尺寸仍然很大,未达到预期效果;我也尝试过将全部输入喂入CNN提取特征后传入RNN,效果尚可但扩展性较差,同时也会破坏数据完整性;我还测试了类似U-Net的方案,用CNN提取特征后结合原始输入传入RNN,但仅约2500个输入bits就导致参数量超过3000万,出现复杂度爆炸问题。
期待获得可行的方案建议,也希望上述问题表述清晰易懂。
可行方案建议
- 优先采用Perceiver IO/Perceiver AR架构处理长序列输入
- 该架构通过交叉注意力机制将任意长度的原始bit输入映射到固定数量的潜在向量中,时间复杂度为线性O(n),不会随输入长度增长出现参数量爆炸的问题,完全不需要手动修改原始bit的排列、合并规则,可1:1保留全部输入信息,不存在数据完整性破坏的问题。针对你的场景,2500bit输入的Perceiver模型参数量可控制在300万以内,仅为之前U-Net方案的1/10,可支持最高百万级bit的输入长度。
- 替换固定粒度合并为多粒度可学习嵌入层
- 放弃手动将bit合并为byte的固定规则,在输入层同时对1bit、2bit、4bit、8bit、16bit滑动窗口生成可学习嵌入,多粒度嵌入拼接后作为模型输入,由模型根据标签自动学习不同粒度特征的权重,既不会丢失潜在的跨bit结构信息,也能自动适配数据真实的编码粒度,不需要提前假设编码规则。
- 采用分层滑动窗口注意力降低长序列处理开销
- 若优先选用Transformer类架构,可使用局部滑动窗口注意力机制,仅允许每个bit和前后固定范围内(如前后128个bit)的bit做注意力计算,配合分层下采样的token合并层(由模型学习哪几个bit可以合并为一个token,而非手动合并为byte),可将复杂度降至O(n),同时保留全局结构关联的建模能力。
- 增加编码粒度预测辅助损失加快收敛
- 训练时可额外增加一个辅助分类头,预测每个bit在对应编码单元内的偏移量(如0-7对应8bit字节内的位置),辅助损失和主任务损失加权求和,既可以加快模型收敛速度,也可以在训练完成后通过辅助头的输出反推原始数据的编码规则。
内容的提问来源于stack exchange,提问作者babrs
相关产品推荐
相关产品推荐

