私はケラスでカスタム損失機能を実装しています。モデルはautoencoder
です。第1層は埋め込み層であり、(batch_size, sentence_length)
の入力を(batch_size, sentence_length, embedding_dimension)
に埋め込みます。次に、モデルは埋め込みを特定の次元のベクトルに圧縮し、最終的に埋め込みを再構築する必要があります。(batch_size, sentence_lenght, embedding_dimension)
ケラス:損失関数のレイヤーのウェイトを使用する方法は?
しかし、埋め込みレイヤは訓練可能であり、損失は埋め込みレイヤの重みを使用する必要があります(私は自分の語彙のすべての単語埋め込みを合計しなければなりません)。
たとえば、私がおもちゃのexemple: "猫"を訓練したい場合、 sentence_length is 2
とし、embedding_dimension is 10
とvocabulary size is 50
とすると、埋め込み行列の形状は(50,10)
となります。埋め込みレイヤの出力X
の形状は(1,2,10)
です。次に、それはモデルに入り、出力はX_hat
であり、形状は(1,2,10)
です。モデルは、ベクトル「X_hat[0]
」がベクトル「X[0]
」に最もよく似ている確率を最大にするように訓練されていなければならず、「cat」の場合と同じものです。しかし、X
とX_hat
の間のコサイン類似度を計算しなければならず、コサイン類似度の合計はX_hat
であり、埋め込み行列内のすべての埋め込み(50、ボキャブラリサイズは50なので)は、埋め込み層の重み。
しかし、トレーニングプロセスの繰り返しごとに埋め込みレイヤの重みにアクセスするにはどうすればよいですか?
ありがとうございました!
である第一の出力を使用します埋め込みの出力を損失関数にするモデルをハックしますが、レイヤーの重みを取ると、より複雑な作業が追加されているようです.... –
このようにしたいですか?正規化の合計が爆発する可能性があります。あなたの方法が記述されている論文はありますか?多分あなたはそこにsoftmax出力を持っています。 –
私はこの文書をNIPS 2017. https://arxiv.org/pdf/1708.04729.pdfで受け入れようとしています。たぶん私は論文をよく理解していないかもしれませんが、方程式1を見てください。分母は、埋め込み行列であるWeに埋め込まれた語彙のすべての単語に対して余弦の類似性を取ります。 – mat112