如果是一条一条训练,那么自然常规方法即可
如果是批量的训练那么自然就要 使用pading
那么padding 必须要使用padding mask 尤其是在编码的时候
如果使用的是框架自带的em 那么可以设置padding_index 同时 ce loss
也要设置ignor_index
同时 还要确保 你的网络没有使用某些激活函数或者是归一化后padding 部分可能就不是0 了 那么就要去掉或者是使用mask 进行置零操作
例如 layernorm 这个激活函数可能就会导致这个问题,总之在设计的时候,自己一部一部debug 看一下,训练的时候自己也可以一步步debug 查看输出结果 后酌情加mask 还有要区分attention mask 和 padding mask 的区别 。
还有训练一条一条训练可能一轮就可,实现批量几轮的效果,
但是时间会长一些,对于大数据集不友好。所以要使用批量就要使用padding 使用padding 就要注意padding mask 为了防止padding 部分起作用那么结果出来就都是padding
还有注意要加开始和结束符号 首先输入数据前要加开始 输出的时候要加结束符号。padding 尽可能使用0。
还有就是学习效率不适合一直不变呀适当的轮数下降学习率