如何用前馈神经网络处理回归任务中的可变长度输出?
可变长度浮点回归序列的解决办法
1. 加辅助分类任务,联合训练
- 给每个输出位置配个二元标签,1代表有效数据,0代表无效
- 损失函数用**回归损失(比如MSE)+ 分类损失(交叉熵)**加权组合:
- 回归损失只算标签为1的位置,不让填充值干扰模型学习有效序列的规律
- 分类损失逼着模型分清有效和无效的边界,解决平滑过渡到填充值的问题
- 推理的时候:先看分类结果,连续几个位置分类为0就截断,取前面的回归输出就行
2. 特殊填充值+掩码损失
- 选个离有效数据范围远的数当填充标记,比如你提到的-100,前提是归一化后有效数据碰不到这个数值
- 训练时用掩码损失:做个和输出序列维度一致的掩码数组,有效位置设1,填充位置设0,损失乘上掩码后只计算有效位置的误差
- 推理的时候:设置一个阈值(比如小于-90),碰到低于阈值的数值就截断,避免有效数据里偶尔出现的小值被误判
3. 用序列生成模型+结束标记
- 把任务改成序列生成模式,在每个样本的有效序列末尾加个特殊结束标记(EOS),比如你归一化后有效数据区间是[-1,1],就用2.0作为EOS标记
- 用Transformer或者GRU这类支持序列生成的模型,训练时让模型学会生成完有效序列就输出EOS,后续位置无需关注
- 推理的时候:生成序列直到碰到EOS标记就停止,不用凑够最大长度46
4. 动态输出长度设计
- 不固定输出长度,让模型先预测有效序列的长度,再生成对应长度的序列
- 具体操作:
- 一个分支预测有效长度(可以做回归,也可以把长度分成30-35区间内的几个类别做分类)
- 另一个分支生成最大长度的序列
- 推理时先拿预测的长度,从生成的序列里截取前对应长度的部分即可
- 注意要让长度预测和序列生成的分支协同训练,避免长度预测结果偏差过大
内容的提问来源于stack exchange,提问作者AYUSH SHARMA
相关产品推荐
相关产品推荐

