源于进制转换的数据预处理方法
我们在训练模型的时候又是会遇到抱团的极端数据,他们的存在真是难受的要死:归一化的时候直接压在了一起,最后训练直接精度爆炸(笑啦),那我们怎么做才能避免这个麻烦呢?
我在看苏佬的ROPE编码的时候看到了他对于进制转换的一个独到的理解:数据中可以进行进制转换让他从数值域转化为向量域,也就是利用进制转换把每一项系数拆开变成一个数组。最近我在处理金融数据的时候面对着这种抱团的极端值利用直接的simgoid的时候直接爆炸,利用LSTM进行计算又太吃算力我这4060ti16g根本扛不住(啥时候能有个A100品鉴),然后就发现了这个进制转换似乎保证了可微,而且还可以通过缩小进制来扩大数据之间的距离。

就跟苏佬说的一样:原来训练好的模型已经学会了875>874,而在16进制下同样有875>874,比较规则是一模一样的(模型根本不知道你输入的是多少进制)。唯一担心的是每个维度超过9之后(10~15)模型还能不能正常比较,但事实上一般模型也有一定的泛化能力,所以每个维度稍微往外推一些是没问题的。
那么这玩意怎么用数学公式表达呢?
常见的进制转换公式
你完成之后就需要将他进行向量化
那我们该怎么理解这个向量化呢,为什么他就真的就这么有用吗?接下来我带大家推导一下。
1.那么假设 n 的范围是0到9999,如果直接归一化,相邻整数的差距是0.0001,非常小。而如果我们用100进制(beta=100)和2维向量(d=2)表示:
2.对于整数n进行$a_0=n/100$,$a_0$=n mod100,向量为 [$a_1,a_0$],每个分量范围0到99。
3.然后将每个分量归一化:除以99得到[$a_1/99,a_0/99$]
4.相邻整数在大多数情况下,只有$a_0$变化1(高位不变)。所以归一化后$a_0$的差距为 1/99≈0.0101,比整体归一化的0.0001大了100倍。
看见了吗,这就是进制转换的魅力,他更加高效地做到了保留信息的同时增加数据的可读性与稳定性。
当然,在beta进制分解中,边界条件定义了该方法的有效应用范围,确保数学上的合理性和计算稳定性。
这个分别是输入整数范围、最小维度要求、进制基数限制和0向量单独处理
让我们验证指正一下:
这样保证了算法的合理性与工程性。
也就是说它可以在做到两个独特优势:
保持有效差距
相邻 n 在低位 $a_0$ 上至少差$\frac{1}{\beta-1}$
(如 $\beta=16$ 时差 0.066)比直接归一化的 $10^{-6}$ 大 4 个数量级
进位保留突变
n=255→[0.9375,0.9375,0.9375]而n=256→[0.9667,0.0,0.0]
相对来说要比常规的可以保持序关系的对数缩放解释性更高,特征保存更完好;比分桶嵌入更能保持连续关系,可解释性也更高。
也就是说这种特征处理方式在用户行为建模、时空预测、大模型位置编码等场景中,比传统归一化或分桶方法具有显著优势,特别适合处理包含极端值的大范围整数特征。
当然这种这只是我的数学原理推测,如果有什么想法可以联系我跟我一起探讨捏,毕竟深度学习更像是生物学,需要实证和复现。
——————2025 7.7补充—————-
突然发现进制转变之后可能会导致进位的突变导致的破环顺序问题,这里我再来讨论一下
当前我们可以看到在进制转换中,进位时最高位突变(如 255→256 的向量从[0,15,15]→[1,0,0])确实会导致局部连贯性丢失,因此我给单数据和多维向量制作了两套不同的处理方法。
对于单数据,我们可以直接用权重相乘给他打回去。
打个比方我们有255和256 的向量[0,15,15]和[1,0,0],那我们可以直接使用伟大的ROPE编码(苏佬大神啊),借鉴 RoPE(旋转位置编码)的思想,将进制转换与位置编码统一为 “β 进制表示”。
这样就保留了时序性或者使用其他的可以联系起来突变位置的向量即可。
对于输入为向量的数据也可以使用这个方法,但是我有了个新想法:向量维数个性化定制——每个维度输入的数值一定不同,那么每个维度分别做不同的进制转换(如果大小差别较大),然后较小的用0补齐
最后拼接。
例如
然后加入位置编码和特征权重关联(金融数据中 “收盘价” 比 “成交量” 更关键)然后归一化,这样就能保证保持整体时序性的同时还能分辨出不同的权重(但是我推荐还是随机初始化一个权重矩阵比较好,方便反向传播,类似于qkv的矩阵)
就这么多吧,个人能力有限只是一个普通大学学生,如果有机会我还是会实践一下的。