[論文レビュー] Deep Learning with Dynamic Computation Graphs
動的計算グラフを持つニューラルネットワークの効率的な学習と推論を可能にする動的バッチ処理を導入し、TensorFlow Fold という組合せ子ライブラリを提示してこのようなモデルを簡潔に構築する。
Neural networks that compute over graph structures are a natural fit for problems in a variety of domains, including natural language (parse trees) and cheminformatics (molecular graphs). However, since the computation graph has a different shape and size for every input, such networks do not directly support batched training or inference. They are also difficult to implement in popular deep learning libraries, which are based on static data-flow graphs. We introduce a technique called dynamic batching, which not only batches together operations between different input graphs of dissimilar shape, but also between different nodes within a single input graph. The technique allows us to create static graphs, using popular libraries, that emulate dynamic computation graphs of arbitrary shape and size. We further present a high-level library of compositional blocks that simplifies the creation of dynamic graph models. Using the library, we demonstrate concise and batch-wise parallel implementations for a variety of models from the literature.
研究の動機と目的
- DCG を静的データフローグラフで訓練する際の非効率性を動機づけて対処する。
- 異なる形状のグラフ間および単一グラフ内の演算をバッチ処理するための動的バッチ処理を提案する。
- 高速プロトタイピングと実験のための高レベルの組合せ子ライブラリを用いてDCGモデルの実装方法を示す。
- CPUおよびGPUハードウェア上での実証的な速度向上と実用的な実現可能性を示す。
提案手法
- 動的バッチ処理を、入力グラフのバッチ全体で同じ深さにある同じ演算をまとめるスケジューリング手法として定義する。
- 入力DCGを、動的グラフを模倣するために gather および concat 演算を使用する静的グラフへ書き換える。
- 静的グラフを通じたバックプロパゲーションを可能にするため、グラフ深さを繰り返す while_loop を使って TensorFlow でDCGを実装する。
- 高レベルでDCGモデルを組み立てるための、blocks, maps, folds, reduces などの構成要素を備えた組合せ子ライブラリ TensorFlow Fold を開発する。
- 表現力とバッチ処理の利点を示すために、TreeRNNs、Tree-LSTMs、フィードフォワード・アテンション、分子グラフ畳み込みなどの例を提示する。
実験結果
リサーチクエスチョン
- RQ1標準的な静的グラフライブラリで異なるグラフトポロジー間のバッチ処理が不可能であることを、動的バッチ処理は補えるのか?
- RQ2提案された静的グラフのエミュレーションを用いてDCGをバッチ処理する際の性能のトレードオフ(速度とオーバーヘッド)はどうなるのか?
- RQ3TensorFlow Fold の組合せ子ライブラリは、簡潔でスケーラブルなDCGモデル開発をどれだけ実現できるか?
- RQ4動的バッチ処理を用いて実装されたDCGモデルは、感情分析や分子グラフ処理のようなタスクで最先端レベルまたは競合的な結果をどの程度達成できるのか?
主な発見
- 動的バッチ処理は、素朴な単一木処理に比べて大幅なスピードアップをもたらし、バッチ処理を完全に行った場合には大規模な木でGPUで最大160倍速くなる。
- 動的バッチ処理は各演算を一度だけ展開し深さごとにバッチを実行することでカーネル起動のオーバーヘッドを削減し、より少なくて大きいGPUカーネルを生む。
- 追加の concat および gather 操作によるオーバーヘッドコストがあるが、全体的な利得は有利なままで、特に大きなバッチサイズ時や木内バッチ処理を完全に活用する場合に有利である。
- TensorFlow Fold の組合せ子ライブラリは DCG モデルの簡潔な実装を可能にし、コードサイズを削減して迅速なモデルバリアントを可能にすることで実験を加速する。
- 実験には感情分析の TreeRNNs、Tree-LSTMs、分子のグラフ畳込みアプローチが含まれ、幅広さと実用性を示している。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。