ディープラーニングは、日常のさまざまなタスク、特に画像認識など、ある程度の「人間性」が関わる分野で広く使用されています。他の機械学習アルゴリズムとは異なり、ディープ ネットワークの最も顕著な特徴は、より多くのデータが取得されるにつれてパフォーマンスが向上し続けることです。したがって、より多くのデータが利用できる場合、期待されるパフォーマンスは向上します。
ディープネットワークが最も得意とするタスクの 1 つは、機械翻訳です。現在、これはこのタスクを実行できる最も先進的なテクノロジーであり、Google 翻訳でも使用されるほど十分に実現可能です。機械翻訳では、モデルをトレーニングするために文レベルの並列データが必要です。つまり、ソース言語の各文が、ターゲット言語に翻訳された言語である必要があります。なぜこれが問題となるのか想像するのは難しくありません。一部の言語ペアでは、大量のデータを取得するのが難しいためです (したがって、深層学習を使用することができます)。
この記事の構成方法
この記事は、Facebook によって公開された「単一言語コーパスのみを使用した教師なし機械翻訳」という最近の記事に基づいています。この記事は論文の構成に完全に従っているわけではありませんが、記事をより理解しやすくするために独自の解釈をいくつか追加しました。
この記事を読むには、損失関数やオートエンコーダーなど、ニューラル ネットワークに関する基本的な知識が必要です。
機械翻訳の問題
上で述べたように、機械翻訳でニューラル ネットワークを使用する場合の最大の問題は、2 つの言語の文のペアのデータセットが必要であることです。英語やフランス語などの広く話されている言語では機能しますが、他の言語の文のペアでは機能しません。データ上で言語が利用可能な場合、これは教師ありタスクになります。
解決策
この論文の著者は、このタスクを教師なしタスクに変換する方法を考え出しました。このタスクに必要なのは、英語の小説とスペイン語の小説など、2 つの言語それぞれの 2 つのコーパスだけです。注意すべきことは、この 2 つの小説は必ずしも同じではないということです。
最も直感的な観点から、著者は 2 つの言語間の潜在的な空間を学習する方法を発見しました。
オートエンコーダーの概要
オートエンコーダーは、教師なしタスクに使用されるニューラル ネットワークの広範なクラスです。これは、元の入力と同一の入力を再作成することによって機能します。これを実現する鍵となるのが、ボトルネック層と呼ばれるネットワークの途中にあるネットワーク層です。このネットワーク層は、入力に関するすべての有用な情報を取得し、不要な情報を破棄するために使用されます。
概念的なオートエンコーダ、中間モジュールは圧縮表現を保存するボトルネック層です
つまり、ボトルネック層では、ボトルネック層の入力(エンコーダによって変換された)が配置される空間は、と呼ばれます潜在空間(潜在空間)。
オートエンコーダーのノイズ除去
オートエンコーダーが入力を入力時とまったく同じように再構築するようにトレーニングされている場合、何もできない可能性があります。この場合、出力は完全に再構築されますが、ボトルネック層には有用な機能はありません。この問題を解決するために、ノイズ除去オートエンコーダーを使用します。まず、実際の入力はノイズの追加によりわずかに乱れます。次に、ネットワークを使用して元のイメージ (ノイズのあるバージョンではない) が再構築されます。このようにして、ノイズとは何か (そしてその本当に有用な特徴は何か) を学習することで、ネットワークは画像の有用な特徴を学習できます。
ノイズ除去オートエンコーダーの概念的な例。ニューラル ネットワークを使用して、左の画像を再構築し、右の画像を生成します。この場合、緑色のニューロンが一緒になってボトルネック層を形成します
なぜ共通の潜在空間を学習するのでしょうか?
潜在空間はデータの特徴を捉えることができます (この例では、データは文です)。したがって、言語 A への入力時に言語 B への入力と同じ特徴を生成する空間を取得することができれば、それらの間で翻訳することが可能です。モデルはすでに正しい「特徴」を備えているため、言語 A のエンコーダーによってエンコードされ、言語 B のデコーダーによってデコードされ、この 2 つが効率的な翻訳作業を行うことができます。
おそらくご想像のとおり、著者はノイズ除去オートエンコーダーを使用して特徴空間を学習しています。彼らはまた、自動エンコーダーに共通の潜在空間 (彼らはこれを整列潜在空間と呼んでいます) を学習させて教師なし機械翻訳を実行する方法も発見しました。
言語におけるノイズ除去オートエンコーダー
著者はノイズ除去エンコーダーを使用して、教師なしの方法で特徴を学習します。彼らが定義した損失関数は次のとおりです:
式 1.0 自動ノイズ除去エンコーダ損失関数
式 1.0 の解釈
I は言語です (この設定では 2 つの言語が存在する可能性があります)。 X は入力、C(x) は x にノイズを追加した後の結果です。ノイズによって作成された関数 C をすぐに取得します。 e() はエンコーダ、d() はデコーダです。最後の項 Δ(x hat,x) は、トークン レベルでのクロス エントロピー エラー値の合計です。入力シーケンスがあり、出力シーケンスが得られるので、各トークンが正しい順序であることを確認したいと思います。したがって、この損失関数が使用されます。これは、i 番目の入力ラベルと i 番目の出力ラベルが比較されるマルチラベル分類と考えることができます。このうち、トークンはそれ以上破壊できない基本単位です。この例では、トークンは単語です。式 1.0 は、ネットワークが出力 (ノイズの多い入力が与えられた場合) と元の影響を受けていない文の間の差を最小限に抑える損失関数です。
□ と ~
□ の記号表現は、私たちが期待する表現です。この場合、入力の分布は言語 l に依存し、損失の平均がとられることを意味します。これは単なる数学的形式であり、操作中の実際の損失 (クロスエントロピーの合計) は通常どおりになります。
この特別な記号 ~ は「確率分布から」を意味します。
この記事ではこの詳細については説明しません。このシンボルについて詳しくは、ディープ ラーニング ブックの記事の第 8.1 章をご覧ください。
ノイズの追加方法
画像の場合はピクセルに浮動小数点数を加算するだけでノイズを追加できますが、言語の場合は他の方法を使用する必要があります。そこで、著者らはノイズを発生させる独自のシステムを開発しました。これらはノイズ関数を C() として示します。文を入力として受け取り、その文のノイズを含むバージョンを出力します。
ノイズを追加するには 2 つの異なる方法があります。
まず、確率 P_wd で入力から単語を単純に削除できます。
次に、次の制約を使用して、各単語を元の位置からシフトできます。
σ は、i 番目のマークのシフトされた位置を表します。したがって、方程式 2.0 は、「トークンは左または右に最大 k 個のトークン位置を移動できる」ことを意味します
著者は、K 値を 3 に、P_wd 値を 1 に設定します。
クロスドメイントレーニング
2 つの言語間の翻訳を学習するには、入力文 (言語 A) を何らかの処理を通じて出力文 (言語 B) にマッピングする必要があります。著者はこのプロセスをクロスドメイントレーニングと呼んでいます。まず、入力文(x)をサンプリングする。次に、前の反復のモデル (M()) を使用して、変換された出力 (y) が生成されます。それらを組み合わせると、y=M(x) が得られます。続いて、上記と同じノイズ関数 C() を使用して y に干渉し、C(y) が得られます。言語 A のエンコーダはこの摂動バージョンをエンコードし、言語 B のデコーダは言語 A のエンコーダの出力をデコードして、C(y) のクリーン バージョンを再構築します。モデルは、式 1.0 と同じクロス エントロピー誤差値の合計を使用してトレーニングされます。
敵対的トレーニングを使用した共通潜在空間の学習
これまでのところ、共通潜在空間を学習する方法については言及されていません。前述のクロスドメイン トレーニングは、同様の空間を学習するのに役立ちますが、モデルに同様の潜在空間を学習させるには、より強力な制約が必要です。
著者は敵対的トレーニングを使用しています。彼らは、各エンコーダーの出力を取得し、エンコードされた文がどの言語に属しているかを予測する別のモデル (ディスクリミネーターと呼ばれる) を使用しました。次に、弁別器から勾配が抽出され、弁別器をだますようにエンコーダがトレーニングされます。これは概念的には標準の GAN (敵対的生成ネットワーク) と何ら変わりません。弁別器は各タイム ステップで特徴ベクトルを受け取り (RNN が使用されるため)、それがどの言語から来たものかを予測します。
それらを組み合わせる
上記の 3 つの異なる損失 (自動エンコーダー損失、変換損失、弁別器損失) を追加すると、すべてのモデルの重みが同時に更新されます。
これはシーケンス間の問題であるため、著者は長期短期記憶ネットワーク (LSTM) を使用します。LSTM ベースのオートエンコーダーが 2 つ (言語ごとに 1 つずつ) 存在することに注意してください。
大まかに言うと、このアーキテクチャをトレーニングするには 3 つの主要な手順が必要です。彼らは反復的なトレーニングプロセスに従います。トレーニング ループのプロセスは次のようになります:
1. 言語 A のエンコーダーと言語 B のデコーダーを使用して翻訳を取得します。
2. 破損した文が与えられた場合に、破損していない文を再生成できるように各オートエンコーダーをトレーニングします。
3. 翻訳を改善し、ステップ 1 で取得した翻訳を破棄して再作成します。このステップでは、言語 A のエンコーダが言語 B のデコーダと一緒にトレーニングされます (言語 B のエンコーダは言語 A のデコーダと一緒にトレーニングされます)。
ステップ 2 とステップ 3 が別々にリストされている場合でも、重みは一緒に更新されることに注意してください。
このフレームワークの開始方法
前述したように、モデルは以前の反復からの独自の翻訳を使用して、翻訳機能を向上させます。したがって、リサイクルプロセスを開始する前に、ある程度の翻訳スキルを身につけておくことが重要です。著者は、FastText を使用して単語レベルの二か国語辞書を学習しています。この方法は非常に簡単で、必要なのはモデルに開始点を与えることだけであることに注意してください。
フレームワーク全体を以下のフローチャートに示します
翻訳フレームワーク全体の高度な作業
この記事では、教師なし機械翻訳タスクを実行できる新しいテクノロジーについて説明します。複数の異なる損失を使用して単一のタスクを改善すると同時に、敵対的トレーニングを使用してアーキテクチャの動作に制約を適用します。