Machine learning 通过嵌入层反向传播

Machine learning 通过嵌入层反向传播,machine-learning,nlp,pytorch,encoder-decoder,style-transfer,Machine Learning,Nlp,Pytorch,Encoder Decoder,Style Transfer,我有一个句子数据集,分为两类。我根据这些数据训练了一个分类器,将给定的句子分为两类。接下来,我想训练一个Pytorch生成器(编码器-解码器)模型,使用预先训练好的分类器将给定的句子从类1转换为类2。所以基本上这是NLP中的一种风格转换。以下是我的模型的框架: Encoder: Embedding layer --> LSTM [outputs= o, h] Decoder: Embedding layer --> LSTM --> Linear --> Rel

我有一个句子数据集,分为两类。我根据这些数据训练了一个分类器,将给定的句子分为两类。接下来,我想训练一个Pytorch生成器(编码器-解码器)模型,使用预先训练好的分类器将给定的句子从类1转换为类2。所以基本上这是NLP中的一种风格转换。以下是我的模型的框架:

Encoder:
  Embedding layer --> LSTM [outputs= o, h]

Decoder:
  Embedding layer --> LSTM --> Linear --> Relu --> log_softmax [output= probability for each word in vocab]

Classifier:
  Encoder --> Linear layer1 --> Linear2 --> sigmoid [output = class probability]

Generator:
  Encoder --> Decoder --> topK(1) [outputs = token for each word in generated sentence as floats]
我想做的是,使用来自预训练分类器模型的错误信号来训练生成器。这个模式是否有效是一个单独的问题(我当然很想听到这里有经验的成员的反馈)。但是,这里主要关注的是生成器返回一个句子标记(单词)数组作为浮点数,然后将其传递给(冻结的)分类器模型,该模型包含嵌入层作为第一层,该层只接受长数据类型。但是,将float转换为长张量会破坏梯度历史。从我对类似嵌入相关问题的理解来看,通过类型转换保留渐变是不可能的。那么我有什么选择呢?有解决办法吗?例如,精明的读者会注意到,即使是“topK/argmax”操作也会破坏渐变历史,为此,我计划在训练时使用线性层来查找argmax。对于“嵌入”问题也有类似的解决方案吗?我确信人们也会尝试类似的事情,但我在seq2seq+分类器上找不到任何资源

注意:我发布代码并不是为了保持文章整洁以便更好地理解。如果需要,我可以提供相关章节