TensorFlowでの神経構造学習の紹介

投稿者：Da-Cheng Juan（シニアソフトウェアエンジニア）およびSujith Ravi（シニアスタッフリサーチサイエンティスト）

TensorFlowにNeural Structured Learningを導入することに興奮しています。これは、初心者と高度な開発者の両方が構造化信号でニューラルネットワークをトレーニングするために使用できる使いやすいフレームワークです。 Neural Structured Learning（NSL）は、視覚、言語理解、および一般的な予測のための正確で堅牢なモデルを構築するために適用できます。
中立的な構造化学習フレームワーク

![0_WnRpPeVuEu3TpL8X.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/d558b942-1a99-800b-b67c-887d461f1cb4.png)


多くの機械学習タスクは、サンプル間の豊富な関係情報を含む構造化データを使用することから恩恵を受けます。たとえば、引用ネットワークのモデリング、ナレッジグラフの推論と文の言語構造に関する推論、分子フィンガープリントの学習には、個々のサンプルだけではなく、構造化された入力から学習するモデルが必要です。これらの構造は、明示的に与えることができます（たとえば、グラフとして）、または暗黙的に推論することができます（たとえば、敵対的な例として）。トレーニング中に構造化信号を活用すると、特にラベル付きデータの量が比較的少ない場合に、開発者はより高いモデル精度を実現できます。構造化信号を使用したトレーニングは、より堅牢なモデルにもつながります。これらの手法は、画像のセマンティック埋め込みの学習など、モデルのパフォーマンスを向上させるためにGoogleで広く使用されています。

Neural Structured Learning（NSL）は、構造化信号でディープニューラルネットワークをトレーニングするためのオープンソースフレームワークです。 開発者がグラフを使用してニューラルネットワークをトレーニングできるようにするニューラルグラフ学習を実装しています。 グラフは、ナレッジグラフ、医療記録、ゲノムデータ、マルチモーダル関係（画像とテキストのペアなど）など、複数のソースから取得できます。 NSLは、敵対的摂動を使用して入力例間の構造が動的に構築される敵対的学習にも一般化します。


NSLを使用すると、TensorFlowユーザーはニューラルネットワークをトレーニングするためのさまざまな構造化信号を簡単に組み込むことができ、さまざまな学習シナリオ（教師あり、半教師あり、教師なし（表現）設定）で動作します。

### ニューラル構造学習（NSL）の仕組み神経構造化学習フレームワーク

![0_sbDVG_o-N4BLzxUL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/09c734bb-a9e5-fd2e-270c-352f6de2eb00.png)


Neural Structured Learning（NSL）では、構造化された信号（グラフとして明示的に定義されているか、敵対的な例として暗黙的に学習されているかを問わず）を使用して、ニューラルネットワークのトレーニングを正則化し、モデルに（予測される損失を最小限に抑えて）正確な予測を学習させます。 同時に、同じ構造からの入力間の類似性を維持します（隣接損失を最小化することにより、上の図を参照）。 この手法は汎用的であり、フィードフォワードNN、畳み込みNN、リカレントNNなどの任意のニューラルアーキテクチャに適用できます。

Neural Structured Learning（NSL）では、構造化された信号（グラフとして明示的に定義されているか、敵対的な例として暗黙的に学習されているかを問わず）を使用して、ニューラルネットワークのトレーニングを正則化し、モデルに（予測される損失を最小限に抑えて）正確な予測を学習させます。 同時に、同じ構造からの入力間の類似性を維持します（隣接損失を最小化することにより、上の図を参照）。 この手法は汎用的であり、フィードフォワードNN、畳み込みNN、リカレントNNなどの任意のニューラルアーキテクチャに適用できます。

###ニューラル構造学習（NSL）を使用したモデルの作成

NSLを使用すると、構造化された信号を活用するモデルの構築が簡単かつ簡単になります。 グラフ（明示的な構造）とトレーニングサンプルが与えられると、NSLはこれらの例を処理し、ダウンストリームトレーニング用のTFRecordsに結合するツールを提供します:

```
python pack_nbrs.py — max_nbrs=5 \
labeled_data.tfr \
unlabeled_data.tfr \
graph.tsv \
merged_examples.tfr 
```
次に、NSLはAPIを提供して、カスタムモデルを「ラップアラウンド」して、処理済みの例を消費し、グラフの正則化を可能にします。 コード例を直接見てみましょう。

```
import neural_structured_learning as nsl
# Create a custom model — sequential, functional, or subclass. 
base_model = tf.keras.Sequential(…)
# Wrap the custom model with graph regularization. 
graph_config = nsl.configs.GraphRegConfig(
 neighbor_config=nsl.configs.GraphNeighborConfig(max_neighbors=1)) 
graph_model = nsl.keras.GraphRegularization(base_model, graph_config)
# Compile, train, and evaluate. 
graph_model.compile(optimizer=’adam’, 
 loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[‘accuracy’]) 
graph_model.fit(train_dataset, epochs=5) 
graph_model.evaluate(test_dataset)
```
5行未満の追加行（はい、コメントを含む！）で、トレーニング中にグラフ信号を活用するニューラルモデルを取得します。 経験的に、グラフ構造を使用することで、モデルはあまり精度を失うことなく、ラベル付けされていないデータでトレーニングできます（たとえば、元の監視の10％または1％）。

### 明示的な構造が指定されていない場合はどうなりますか？

明示的な構造（グラフなど）が利用できない場合、または入力として指定されていない場合はどうなりますか？ NSLは、開発者が生データからグラフを作成するためのツールを提供します。 あるいは、NSLは、暗黙の構造化信号として敵対者の例を「誘導」するAPIも提供します。 敵対的な例は、モデル1とそのような例のトレーニングを意図的に混同するように構築され、通常、小さな入力摂動に対してロバストなモデルをもたらします。 以下のコード例を見て、NSLがどのように敵対的な例を使ったトレーニングを可能にするかを見てみましょう。

```
import neural_structured_learning as nsl
# Create a base model — sequential, functional, or subclass. 
model = tf.keras.Sequential(…)
# Wrap the model with adversarial regularization. 
adv_config = nsl.configs.make_adv_reg_config(multiplier=0.2, adv_step_size=0.05) 
adv_model = nsl.keras.AdversarialRegularization(model, adv_config)
# Compile, train, and evaluate. 
adv_model.compile(optimizer=’adam’,
 loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) 
adv_model.fit({‘feature’: x_train, ‘label’: y_train}, epochs=5) adv_model.evaluate({‘feature’: x_test, ‘label’: y_test})
```
追加の行が5行未満の場合（コメントも含む）、暗黙的な構造を提供する敵対的な例でトレーニングするニューラルモデルを取得します。 経験的に、悪意のあるが人間が検出できない摂動が入力に追加されると、敵対的な例なしで訓練されたモデルは、大幅な精度の低下（たとえば、30％低下）に悩まされます。

始める準備はできましたか？

https://www.tensorflow.org/neural_structured_learning/ にアクセスして、NSLを今すぐお試しください！

####謝辞

私たちは、Chun-Sung Ferng、Arjun Gopalan、Allan Heydon、Yicheng Fan、Chun-Ta Lu、Philip Pham、Andrew Tomkinsの中心的な貢献に感謝します。 また、技術的な提案についてはDaniel 'Wolff' DobsonとKarmel Allison、チュートリアルの作成についてはMark Daoust、Billy Lamberta、Yash Katariya、そしてフィードバックについてはGoogle Expanderチームに感謝します。

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/9848b418-e42a-e397-41d6-954907699f48.jpeg)

Q: これはGoogle Coralで使用できますか？

- Promo: Coral Edge TPU 海外代理店 https://store.gravitylink.com/global