DUICUO

トランスフォーマーを超えて: PyNeuraLogicに基づくニューラルシンボリックプログラミング

翻訳者|朱賢宗

校正:孫淑娟


トークン視点からの注目度計算グラフ可視化トークン間の関係性に注目

ここ数年、数多くのTransformerベースのモデル引用文献1 が登場し自然言語処理やコンピュータビジョンなど、多くの分野成功を収めてきました本稿では、深層学習モデル(特にTransformer )を、深層学習とシンボリック人工知能を組み合わせたハイブリッドアーキテクチャとして表現するための、簡潔で解釈可能かつスケーラブルな方法を探求します。これを実現するために、 PythonベースのニューラルシンボリックフレームワークあるPyNeuraLogicを用いてモデル設計を実装します

[注記]この記事の著者はPyNeuraLogic フレームワーク設計者の一人でもあります

「ハイブリッドアーキテクチャ、豊富な事前知識、洗練された推論技術という3つの重要な要素がなければ、完全に自動化された方法で豊富な認知モデルを構築することはできません。」 引用2

- ゲイリー・マーカス(シリコンバレーの新しいロボット工学スタートアップ企業 Robust.AI の CEO 兼創設者

記号表現とディープラーニングを組み合わせることで、既存のディープラーニングモデルにおける、既成概念にとらわれない解釈可能性や推論手法の不足といった欠陥を補うことができますカメラのメガピクセル数を増やしても必ずしも写真の質が向上するわけではないのと同様に、パラメータの数を単純に増やすことは、望ましい結果を得るための最善の方法ではないかもしれません

PyNeuraLogic フレームワークのワークフロー全体アーキテクチャ

神経記号概念の高レベルな可視化は、リレーショナルニューラルネットワーク(LRNN 引用文献3を参照)を強化し、 (Py)NeuraLogicを用いて実装できます。ここでは、線形とそれに続く加算集約というシンプルなテンプレート(論理手順)を示します各(入力)サンプルに対して、固有のニューラルネットワークが構築されます

PyNeuraLogicフレームワークは特別に設計された論理プログラミング微分可能なパラメータを含む論理プログラムに基づいています。このフレームワークは、小規模な構造化データ(分子など)や複雑なモデル(Transformerやグラフニューラルネットワークなど)に適していますただし、 PyNeuraLogicは非リレーショナルデータ大規模なテンソルデータには最適な選択肢ではないことに注意が必要です

このフレームワークの主要コンポーネントは、テンプレートと呼ばれる微分可能な論理手順です。テンプレートは、ニューラルネットワークの構造を抽象的に定義する論理ルールで構成されており、モデルアーキテクチャの設計図と考えることができます。テンプレートは入力データの各インスタンスに適用され、入力サンプルに固有のニューラルネットワークを生成します(グラウンディングとニューラライゼーション)。このプロセスは、異なる入力サンプルに合わせて調整できない定義済みのアーキテクチャを持つ他のフレームワークとは全く異なります。このフレームワークの詳細な説明については、グラフニューラルネットワークの観点からPyNeuralogicに焦点を当て別の記事を参照してください

シンボリックトランスフォーマー

クラシックトランスフォーマーモデル

Transformerアーキテクチャは、エンコーダ(左)とデコーダ(右)という2つのブロックで構成されています。2つのブロックは共通点がありデコーダは拡張されたエンコーダですそのため、この記事ではデコーダの実装はエンコーダと似ているため、エンコーダの解析のみに焦点を当てます

ディープラーニングモデルは、入力トークンを大きなテンソルに一括処理したテンソル演算として実装されることが多いです。これは理にかなっています。なぜなら、ディープラーニングフレームワークやハードウェア(GPUなど)は、通常、形状やサイズの異なる複数のテンソルではなく、より大きなテンソルを処理するように最適化されているからです。Transformerも例外ではなく、個々のトークンのベクトル表現を大きな行列に一括処理し、モデルをこれらの行列に対する演算として表現することがよくあります。しかし、このような実装では、Transformerのアテンションメカニズムが示すように、個々の入力トークン間の関係性が隠蔽されてしまいます

注意メカニズム

アテンション機構は、すべてのTransformerモデルの中心となるものです。特に、そのクラシックバージョンでは、いわゆるマルチヘッドスケールドドットプロダクトアテンション機構が利用されています。わかりやすくするためにスケールドドットプロダクトアテンションを、単一のヘッドを用いた単純な論理的手順に分解してみましょう

スケーリングドット積アテンション方程式

アテンションの目的は、ネットワークが入力のどの部分に焦点を当てるべきかを決定することです。アテンションは、入力キーKとクエリQの適合度を表す重み付き値Vを計算することで実現されます。この特定のバージョンでは、重みはクエリQとキーKのドット積のソフトマックス関数を入力特徴ベクトルの次元d_kの平方根で割ることによって計算されます

 ( R . weights ( V . I , V . J ) <= ( R . d_k , R . k ( V . J ). T , R . q ( V . I ))) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,
( R . attention ( V . I ) <= ( R . weights ( V . I , V . J ), R . v ( V . J )) | [ F . product ]

PyNeuraLogicでは、上記の論理規則を用いてアテンションメカニズムを完全に捉えることができます。最初の規則は重みの計算を記述しており、j番目のキーベクトルとi番目のクエリベクトルの転置を乗じた次元の平方根を計算します。次に、ソフトマックスを用いて、iとすべての可能なjを与えられたすべての結果を集約します

次に、2 番目のルールは、重みベクトルと対応する j 番目の値ベクトルの積を計算し、異なる j 番目の対応する i 番目のトークンごとに結果を合計します

注意マスク

訓練と評価の過程では、通常、入力トークンが注目できる対象を制限します。例えば、トークンが次の単語注目するように制限したい場合があります。PyTorchのような一般的なフレームワークはマスキング技術を用いてこれを実現します。マスキング技術では、スケールされたドット積の要素のサブセットを非常に小さな負の数に設定します。これらの数値は、ソフトマックス関数に、対応するトークンペアに重みとしてゼロを割り当てるように強制します

 ( R .重み( V . I , V . J ) <= (
R . d_kR . k ( V . J ). TR . q ( V . I )、 R . special . leq ( V . JV . I )
)) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,

この記法を用いると、制約としてシングルトン関係を追加するだけでこれを実現できます。重みを計算する際、インデックス j がインデックス i 以下になるように制限します。マスキングスキームとは異なり、スケールされたドット積は必要に応じてのみ計算します

通常のテンソル表現と記号表現における注意の可視化

従来のディープラーニングフレームワークはマスキング(左側)によって注意を制約します。まずQK^T行列全体を計算した後、値の低いセル(白い十字のセル)を重ねることでをマスクし、関連するトークン(青いセル)のみ注意を払っているように見せかけます。PyNeuraLogicでは、シンボリック制約(右側)を適用することで必要なスカラー値のみを計算し、不要な計算を回避します。この利点は、以下のバージョンの注意においてさらに顕著になります

より良い注目の集約

もちろん、シンボリックなマスクは完全に任意に決めることができます。GPT -3(あるいはChatGPTなどのその応用[引用4 ] )は、スパーストランスフォーマーに基づいています。スパーストランスフォーマーのアテンション(段階的バージョン)は、 2種類のアテンションヘッドに分けられます

  • 最初のn個のトークン(0≤i−j≤n のみに注目する
  • 最初n番目のトークンのみに焦点を当てます((i-j)%n=0 )

両方のタイプのヘッダーの実装には、わずかな変更のみが必要です(例: n=5 の場合)

 ( R .重み( V . I , V . J ) <= (
R . d_kR . k ( V . J ). TR . q ( V . I )
R . special . leq ( V . D , 5 )、 R . special . sub ( V . I , V . J , V . D )
)) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,

( R .重み( V . I , V . J ) <= (
R . d_kR . k ( V . J ). TR . q ( V . I )
R . special . mod ( V . D , 5 , 0 )、 R . special . sub ( V . I , V . J , V . D )
)) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,

関係的注意方程式

実際、この注意は、関係的注意と同様に、グラフのような(関係的な)入力にも拡張できます。このタイプの注意は、ノードが隣接ノード(エッジで接続されたノード)のみに焦点を合わせているグラフ上で機能します。この場合、クエリQ、キーK、値Vは、ノードベクトル埋め込みに追加されたエッジ埋め込みとなります

 ( R . weights ( V . I , V . J ) <= ( R . d_k , R . k ( V . I , V . J ). T , R . q ( V . I , V . J ))) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,
( R . attention ( V . I ) <= ( R . weights ( V . I , V . J ), R . v ( V . I , V . J )) | [ F . product ]

R . q ( V . I , V . J ) <= ( R . n ( V . I )[ W_qn ], R . e ( V . I , V . J )[ W_qe ]) ,
R . k ( V . I , V . J ) <= ( R . n ( V . J )[ W_kn ], R . e ( V . I , V . J )[ W_ke ]) ,
R . v ( V . I , V . J ) <= ( R . n ( V . J )[ W_vn ], R . e ( V . I , V . J )[ W_ve ])

私たちのでは、このアテンションは先に示したスケールドドット積アテンションとほぼ同じです。唯一の違いは、エッジを捕捉するための用語が追加されていることです。グラフをアテンション機構への入力として使用するのは自然な流れのように思えます。Transformerはマスクが適用されていない場合)全結合グラフ上で動作するグラフニューラルネットワークであることを考えると、全く驚くことではありません。従来のテンソル表現では、これはそれほど明白ではありません。

トランスエンコーダ

ここまででアテンション機構の実装について説明しました実際 Transformerエンコーダブロック全体を構築する上で欠けている部分は、非常に直感的です

埋め込み

Relational Attentionにおける埋め込みの実装方法については既に説明しました従来のTransformerでも埋め込みはほぼ同じです入力ベクトルをキー、クエリ、値の3つの埋め込みベクトルに投影するだけです

 R . q ( V . I ) <= R . input ( V . I )[ W_q ] 
R . k ( V . I ) <= R . input ( V . I )[ W_k ]
R . v ( V . I ) <= R . input ( V . I )[ W_v ]

接続性、標準化、フィードフォワードネットワークを省略

クエリ埋め込みは、接続をスキップすることでアテンション出力に追加されます。結果のベクトルは正規化され、多層パーセプトロン(MLP)に入力されます

 ( R . norm1 ( V . I ) <= ( R . attention ( V . I ), R . q ( V . I ))) | [ F . norm ] 

MLP の場合、論理ルールとしてエレガントに表現できる 2 つの隠し層を持つ完全接続ニューラル ネットワークを実装します

 ( R . mlp ( V . I )[ W_2 ] <= ( R . norm ( V . I )[ W_1 ])) | [ F.レル] 

スキップ接続が正規化された最後のものは、前のものと同じです

 ( R . norm2 ( V . I ) <= ( R . mlp ( V . I ), R . norm1 ( V . I ))) | [ F . norm ] 

組み立てられた

ここまでで、 Transformerエンコーダに必要なすべてのコンポーネントを構築しました。デコーダも同じコンポーネントを使用するため、実装は似ています。さて、上記のすべてのコードブロックを組み合わせて、微分可能論理プログラムを作成しましょうこのプログラムはPythonスクリプト埋め込み PyNeuraLogic使用してニューラルネットワークにコンパイルできます

 R . q ( V . I ) <= R . input ( V . I )[ W_q ] 
R . k ( V . I ) <= R . input ( V . I )[ W_k ]
R . v ( V . I ) <= R . input ( V . I )[ W_v ]

R . d_k [ 1 / math . sqrt ( embed_dim )] ,
( R . weights ( V . I , V . J ) <= ( R . d_k , R . k ( V . J ). T , R . q ( V . I ))) | [ F . product , F . softmax_agg ( agg_terms = [ V . J ])] ,
( R . attention ( V . I ) <= ( R . weights ( V . I , V . J ), R . v ( V . J )) | [ F . product ]

( R . norm1 ( V . I ) <= ( R . attention ( V . I ), R . q ( V . I ))) | [ F . norm ]
( R . mlp ( V . I )[ W_2 ] <= ( R . norm ( V . I )[ W_1 ])) | [ F.レル]
( R . norm2 ( V . I ) <= ( R . mlp ( V . I ), R . norm1 ( V . I ))) | [ F . norm ]

結論

本稿では、Transformerアーキテクチャを分析し、 PyNeuraLogicと呼ばれるニューラルシンボリックフレームワークを用いた実装例を紹介します。このアプローチにより、わずかなコード変更のみで様々なタイプのTransformerを実装することができ、新しいTransformerアーキテクチャへの迅速な移行と開発方法を示しますさらに、本稿では、様々なバージョンのTransformerと、グラフィカルニューラルネットワーク(GNN)を用いたTransformerとの顕著な類似点についても指摘します。

参考文献

[1]: Vaswani, A.、Shazeer, N.、Parmar, N.、Uszkoreit, J.、Jones, L.、Gomez, A.、Kaiser, L.、および Polosukhin, I.. (2017)。必要なのは注意だけです

[2]: マーカス・G. (2020). 「AIの次の10年:堅牢な人工知能に向けた4つのステップ

[3]: グスタフ・シューレク、フィリップ・ジェレズニー、オンドジェ・クジェルカ (2021)。リフトされたリレーショナル ニューラル ネットワークを備えたグラフ ニューラル ネットワークを超えて。機械学習、110(7)、1695–1738

[4]:Brown, T., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D., Wu, J., Winter, C., Hesse, C., Chen, M., Sigler, E., Litwin, M., Gray, S., Chess, B., Clark, J., Berner, C., McCandlish, S., Radford, A., Sutskever, I., & Amodei, D.. (2020). 言語モデルは少数ショット学習者である

[5]: Child, R., Gray, S., Radford, A., & Sutskever, I. (2019). スパーストランスフォーマーを用いた長いシーケンスの生成.

  1. Diao, C., Loynd, R. (2022). リレーショナル・アテンション:グラフ構造タスクのための一般化トランスフォーマー.

翻訳者紹介

Zhu Xianzong 氏は、51CTO コミュニティ エディター、51CTO 専門ブロガー兼講師、維坊の大学のコンピュータ サイエンスの教師、そしてフリー プログラミング コミュニティのベテランです。

原題: Beyond Transformers with PyNeuraLogic 、著者: Lukáš Zahradník