聚合页做的比较好的教育网站,家具网站建设比较好的,澄迈网站新闻建设房子,自适应网站开发seo又搞了一段时间。还是感觉LongNet那种空洞注意力做编码器有搞头。 RetNet等AFT方法#xff0c;直接生成太长的句子感觉有点难度#xff0c;不过可以一句句生成#xff0c;每次生成短句#xff0c;这样感觉比较合适。
启发
受 MemroyTransformer 和 GLM 启发 想了一个类似…又搞了一段时间。还是感觉LongNet那种空洞注意力做编码器有搞头。 RetNet等AFT方法直接生成太长的句子感觉有点难度不过可以一句句生成每次生成短句这样感觉比较合适。
启发
受 MemroyTransformer 和 GLM 启发 想了一个类似T5的设计包含编码器和解码器 只使用拼接和 CausalSelfAttention 不使用 CrossAttention 可以等价省去 T5的解码器 里面的交叉注意力层
设计思路
流程文字
设定x输入为 1234567890
设定y目标为 0987654321
每个数字都是一个 token预先设定压缩比例为 0.3即输入长度为10的token后面会附加上3个压缩token
------------------编码器部分
输入序列
1234567890
在后面填入3个c压缩token
得到1234567890ccc
经过 GPT2_Layer xN使用ROPE绝对位置编码
取出后面3个c压缩的潜变量作为编码器输出------------------
解码器部分
设定序列
0987654321
在前面填入s开始token作为解码器输入序列
s0987654321
在后面填入e结束token作为解码器输出序列
0987654321e获得 s0987654321 的 emb然后在前面拼接上编码器的输出 c压缩潜变量
得到 cccs0987654321 的潜变量
经过 GPT2_Layer xN使用ROPE绝对位置编码
移除前面的c压缩潜变量
得到 s0987654321 的潜变量
经过 output_embedding获得解码器输出概率
将 解码器输出概率 与 解码器输出序列 0987654321e 计算Loss对 Loss 计算 Backward
流程图
已进行试验
也做了一些简单的实验在不成方圆的 中日互译任务上。 与PF6GPT_style24层模型做对照。
PF6 ck441024维度24层Decoder验证准确率是 0.8251
SqueezeLM ck471024维度16层Encoder8层Decoder压缩率1/4验证准确率是 0.8095 ck481024维度12层Encoder12层Decoder压缩率1/5验证准确率是 0.8050 ck491024维度6层Encoder6层Decoder压缩率1/5验证准确率是 0.8006 ck501024维度6层Encoder6层Decoder压缩率1/10验证准确率是 0.7896
其中这几个权重拥有几乎相同的参数量ck44ck47ck48 参数量为260M
不过确实相同参数量下验证分数相比GPT类的确实差了一点点
如果是训练过程中使用随机压缩率在大的区间例如0.1-0.9之间随机变化收敛会非常慢 如果让使用小区间0.3-0.5收敛速度也有点慢。 如果使用固定压缩率例如0.3收敛速度是最快的
扩展想法
Encoder 上使用CausalAttention每一个C压缩token可能包含了层级的关系可能像矩阵的奇异值分解的那样。保留的奇异值越多就越能还原原始矩阵C压缩token里面可能储存了一部分答案而不只是输入序列的压缩向量。如果把Encoder层设置为16Decoder层数设置为8可能可以让Decoder更多地负责生成句子能力Encoder更加地负责生成目标句子的意义。可以像DeepFake双头解码器那样。实现一对多翻译器一个Encoder接着多个Decoder。实现另外一种多语言翻译模式可以有效隔离不同语言避免混淆。解码器修改或许可以换成RWKV或RetNet之类的AFT模型从而实现O(1)自循环预测。解码器目的修改不要求解码器生成长篇大论只需要生成一句话然后再把生成这句话附加到编码器输入再生成压缩潜变量再由解码器生成下一句话。
变体
更之前有设计过一个变体是编码器和解码器并行的每个编码器层的输出都会收集起来。 然后在解码器部分每层解码器输入都会拼接上 来自编码器的输出。每经过一个解码器层后就把之前的拼接上的编码器输入的给切掉再拼接下一个编码器层的输出。数据处理非常麻烦。 不过幸好初步训练后发现这个很麻烦的操作并不能增加分数训练速度和分数都不够直接把编码器输出拼接到第一层解码器输入那样高。 所以该变体被存档了。