Google Brain エンジニアの講演: TensorFlow とディープラーニング

Google Brain エンジニアの講演: TensorFlow とディープラーニング

この記事は、Google Brain エンジニアの Zhou Yuefeng 氏が QCon Shanghai 2017 および DevFest 2017 で行ったスピーチの記録であり、GDG が編集して公開したものです。

私の名前は Zhou Yuefeng です。Google Brain のエンジニアです。現在は TensorFlow と TensorFlow 分散システムの開発、および機械学習を使用して TensorFlow を最適化する研究プロジェクトに取り組んでいます。

今日は、まずディープラーニングの例を紹介し、次に TensorFlow とは何かを簡単に紹介し、TensorFlow の最新機能のいくつかを紹介します。これには、リリース間近の機能やまだ完成していない機能も含まれます。時間があれば、新機能に焦点を当てて説明します。今回は、Google Brain の 2 つの研究プロジェクトについて簡単に紹介します。

機械学習

今日、機械学習が世界を変えたことがわかります。機械科学者はディープラーニングの手法を使用して糖尿病や網膜症を検出しており、網膜症の検出精度は 95% で、眼科医の 91% の精度を上回っています。機械学習は、人間の専門家に匹敵する精度を達成しました。

同時に、機械学習は自動運転の方向にも活用でき、交通をより安全かつ効率的にすることができます。

[[208626]]

第二に、機械学習は言語の壁を乗り越え、より便利なコミュニケーションを実現できます。従来の機械翻訳システムでは、異なる言語のフレーズを一致させ、複雑なルールや手書きのルールを介して1つの言語を別の言語に変換する必要があることはわかっています。このシステムは非常に大きく、維持が難しく、精度も十分ではありません。そのため、最近、ニューラルネットワークベースの方法が登場しました。私たちはそれをTensorFlowで実装しました。この方法により、機械翻訳と人間の翻訳のギャップを狭め、翻訳をより正確で自然なものにすることができます。

同様に、機械学習は人間にも喜びをもたらします。写真を自動的に修正したり、人物の前景を強調したり、背景をぼかしたりする機能を実現できます。この機能は、まもなく携帯電話で見られるようになるでしょう。

次に、機械学習の産業への応用を見てみましょう。最初の例は、食料品の即日配達サービスを提供するINSTACARTです。顧客はWebアプリケーションを通じて多くの地元の小売店から欲しい商品を選択し、食料品を購入します。このソフトウェアには多くの顧客がいます。顧客が購入する際に直面する問題は、何百万もの小売店や製品から欲しい商品を選ぶことです。そこで、買い物客が希望する商品をより早く見つけられるように、INSTACART は TensorFlow を使用してディープラーニング モデルを構築し、商品リストを最も効果的に並べ替えました。この方法により、買い物客が商品を見つける時間を大幅に節約できます。

2つ目の例はUBERです。UBERはTensorFlowとTensorFlowをベースにしたオープンソースプロジェクトを利用して、「Michelangelo」という社内機械学習プラットフォームを構築しました。Googleはこのプラットフォームを利用して、AIの社内利用を配車依頼と同じくらい便利にしたいと考えています。このシステムは、データ管理、データ取得、モデルのトレーニング、評価、展開に至るまでのさまざまな側面をカバーしています。さらに、このシステムは TensorFlow ディープラーニングをサポートするだけでなく、他の機械学習モデルもサポートしています。

3 番目の例は KEWPIE です。これは TensorFlow を使用して、離乳食の品質を向上させる人工知能システムを構築しています。食品に対して人工知能分析を実行し、製品内の許容可能な成分を識別し、製品内の許容されない成分を排除することで、離乳食の品質を確保します。

[[208628]]

TensorFlowとは

上記のすべてを実現するための基本的なフレームワークが TensorFlow です。

私たちは、TensorFlow を誰もが利用できる機械学習プラットフォームにしたいと考え、2015 年末に TensorFlow をオープンソース化しました。私たちはこれを高速かつ柔軟で、本番環境に対応したフレームワークにしたいと考えています。研究に便利に使用でき、実稼働環境に迅速に導入できます。 TensorFlow は本質的には大規模なコンピューティング フレームワークであり、その操作はコンピューティング ベクトル グラフに抽象化されます。ここで計算グラフを見るとわかるように、上のノードは計算または状態を表します。いくつかの計算を完了したり、いくつかの状態を終了すると、データは 1 つのノードから別のノードに流れます。このグラフは任意の言語で構築できます。グラフが構築されると、コンパイル、最適化、実行のために TensorFlow コアに渡されます。

TensorFlow は、オリジナルの CPU や GPU から今後登場する CLOUD CPU まで、多くのハードウェア プラットフォームをサポートしているほか、Android、iOS、さらには組み込みデバイスもサポートしています。

TensorFlow を Github にオープンソース化してから、過去 2 年間で TensorFlow を中心に多くのアクティブなオープンソース コミュニティが誕生しました。現在、67,000 を超えるスターと、TensorFlow の名前が付いた Github プロジェクトが 17,000 件以上あります。TensorFlow はさまざまな大学のコースやオンライン コースに引き続き登場しており、多くの大学でも TensorFlow をベースにしたコースが開発されています。さらに、TensorFlow の入門チュートリアルとして使用できる TensorFlow 中国語 Web サイト (https://tensorflow.google.cn) もリリースしました。

TensorFlow の新機能

それでは、TensorFlow の優れた機能を見てみましょう。 1 つ目は Eager Execution です。Eager Execution は新しいプログラミング モードです。前のスライドで TensorFlow に基づく静的グラフを示しました。

Eager Execution は静的グラフのいくつかの問題を解決します。どのような問題を解決するのでしょうか? まず、上の図に示すように、多くのコードを節約できます。第二に、積極的な実行を通じてコードを記述すると、エラーをすぐに見つけることができるため、以前に比べてコード記述とエラーチェックの効率が大幅に向上します。 3 つ目は、Tensor を使用して制御フローを記述できるため、ループや判断に TF を使用する必要がないことです。最も重要な点は、このグラフを別の言語で記述した場合、それを TensorFlow コアに渡すことは、別の種類のコードを記述することと同じであるということです。このスライドは、Eager Execution のシンプルさを完全に示す簡単な例です。

第 2 世代 TPU は、今年の Google I/O カンファレンスで発表されました。第 2 世代 TPU は、推論とトレーニングの両方を実行できます。 TPU は非常に高度な辞書操作を実行できます。複数世代の TPU を組み合わせて、スーパーコンピュータのようなコンピューティング コアを構築することもできます。第 2 世代 TPU の助けにより、RESNET-50 モデル全体を 20 時間でトレーニングできます。以前は、TPU を 1 つだけトレーニングすると、モデルのトレーニングに 1 週​​間かかることもありました。本日、第 2 世代の TPU が Google Cloud にリリースされ、誰でも使用できるようになります。

次に、TensorFlow 上位 API についてお話しします。ニューラル ネットワークのトレーニング速度に加えて、TensorFlow 上位 API をより便利に使用してニューラル ネットワークを作成する方法についても、誰もが関心を持っています。 Keras はそのような API の 1 つであり、多くのバックエンドをサポートしています。多くの視聴者が Keras を使用したことがあると思います。本質的には、Keras は API 開発仕様のようなものです。 TensorFlow には TF (Keras) がありますが、これはカスタム TensorFlow バックエンドを使用して API 仕様を実装する方法にすぎません。このバックエンドを使用すると、Keras を Estimator または Secving と統合して、配布のサポートを向上させることができます。

TensorFlow には Estimator と呼ばれる別の概念が導入されています。これは、Google の内部プロダクション環境で広く使用されている比較的軽量な API です。Estimators は、Canned Estimator と呼ばれる、誰でも使用できる多くのモデルを提供します。それらの関係は次のとおりです。Estimators と tf.keras は、さまざまなモデルをカプセル化するために使用できる Canned Estimator を上位レイヤーにカプセル化します。

Keras インターフェースに慣れている場合は、model_to_estimator という高レベルの API 変換ツールが提供されています。コンパイルされた Keras モデルを取得したら、この model_to_estimator を呼び出して Estimator を取得し、Keras を Estimator に変換できます。

Estimator は、分散トレーニング用のインターフェースも提供します。分散トレーニングに TensorFlow を使用している場合は、分散モードをよくご存知かもしれません。当社の Estimator は、分散トレーニングを適切にサポートします。単一マシンのコードを記述するだけで、異なるマシンで実行されるプログラムを構築できます。トレーニング プログラムは、Estimator.train を呼び出すことで実行プロセスを完了できます。Estimator.evaluate を呼び出すだけで、クラスター全体でトレーニングを開始できます。

TF、KERAS、TFLAYERS などの API のドキュメントをご覧いただけます。また、公式サイトで改良されたプログラマーズ ガイドも公開しましたので、ぜひご覧ください。

次の機能は TensorFlow Lite です。これは、モバイル デバイスで実行される TensorFlow のサブセットです。モバイルデバイスは現在、どこにでも存在し、ますます重要になっています。モバイルデバイスでは、野生の犬の品種を判別したり、植物に病気があるかどうかを判別したりできます。人工知能はモバイルデバイス上のいくつかのアプリケーションの開発に使用できるため、TensorFlow Lite をリリースしました。

なぜモバイル デバイスで推論を行う必要があるのでしょうか。先ほど説明したアプリケーション シナリオに加えて、モバイル デバイスで推論を行う必要があるのはなぜでしょうか。これは、特殊な環境で一連の推論を行う必要があることが多いためです。多くの場合、特に野外で、ネットワーク帯域幅が非常に低く、ネットワーク遅延が非常に大きくなります。推論ごとにリモート サーバーに要求が送信されると、モバイル デバイスのバッテリー容量に大きな負担がかかります。モバイル デバイスで推論を実行できるようにする必要性が急務となっていますが、課題は数多くあります。主な課題は、モバイル デバイスのメモリ、コンピューティング リソース、帯域幅などが限られていることです。プログラミングの観点から見ると、プラットフォームの制約が厳しいため、開発はますます複雑になっています。たとえば、Android では CPU や命令を使用して低レベルのコードを書くことができますが、iOS には独自のプラットフォームとツールがいくつかあります。異なるプラットフォーム上のこれらのツールはハードウェアと API の開発を困難にし、異なる API の存在さえも開発を複雑にするため、TensorFlow Lite を設計しました。

TensorFlow Lite と比較すると、TensorFlow は主に一部の大型デバイスに焦点を当てています。 TensorFlow Lite は小型デバイス アプリケーションの効率を高めます。では、小さな例を通して TensorFlow Lite がどのように機能するかを見てみましょう。

これが TensorFlow Lite のライフサイクルです。まず、標準的な方法で TensorFlow を実行します。実行後、Graphdef と Checkpoint を取得します。これを TensorFlow Lite が提供するコンバーターを使用して、TensorFlow Lite のモデル形式に変換します。 TensorFlow Lite 形式のこのモデルを使用すると、モバイル デバイスに転送できます。 TensorFlow Lite ビューアーに接続すると、このモデルをモバイル デバイスに読み込むことができます。ディスプレイが NeonKerels を直接スケジュールする場合、それが他のデバイス上にある場合は、ハードウェア アクセラレータ インターフェイスを使用して、独自のハードウェアの最適化を定義することもできます。

次の機能は入力パイプラインです。これは、使用するのが非常に面倒なので、初心者と専門家の両方にとって興味深いものになるでしょう。

これには 2 つの主なモードがあり、1 つは Feeding で、Python を使用してゼロ距離を柔軟に処理できるという利点がありますが、パフォーマンスは非常に低いです。さらに、これは単一のスレッドで実行され、トレーニングの各ステップはデータ処理の完了を待つ必要があるため、GPU にとって非常に非効率的です。もう 1 つのより効率的な方法は、データ処理を一連の操作にすることです。これは、キューをデータ保存用の一時スペースとして使用します。前処理済みのデータと一部の中間の前処理済みデータをキューに配置し、Python を使用してキューの入力と制御を制御します。しかし、問題があります。この Python には重みインタープリタロックがあるため、キュー入力のパフォーマンスが大幅に制限されます。

もう 1 つの問題は、作成したデータ処理モジュールを頻繁に使用できず、トレーニング中に入力データを変更する方法がないことです。そこで私たちは入力パイプラインを開発し、さまざまな理由からそれを遅延リストとして設計しました。多くのデータは似ており、データ量も比較的大きい可能性があるため、LAZY として定義できます。遅延リストとして定義した後は、関数型プログラミング言語の map と filter を使用して前処理パイプラインを定義できます。多くの言語で map と filter の操作を見ることができます。それでは、そのインターフェースを見てみましょう。また、Iterator と呼ばれる 2 番目のインターフェースもあり、これを使用すると、要素データを簡単に取得できます。多くの一般的なプログラミング言語のイテレータと同様に、このイテレータにはさまざまなデータを構成できます。これは PPT の例です。ぜひご覧ください。

学ぶことを学ぶ

ニューラル ネットワークが問題を解決するとき、いくつかの新しい問題ももたらします。つまり、ニューラル ネットワーク アーキテクチャの設計には、多くの専門知識と時間を費やす必要があります。たとえば、これは Google 画像分類用の .NET アーキテクチャです。ニューラル ネットワーク アーキテクチャの設計は、初期の畳み込みアーキテクチャから現在の複雑なアーキテクチャへと進化してきました。研究者による長年にわたる実験と改良の繰り返しにより、このような複雑なモデルが実現しました。

研究者が常にコンピューターの前にいるのではなく、強力なコンピューティング リソースを使用して、機械が適切なニューラル ネットワーク アーキテクチャを自動的に見つけられるようにするのはどうでしょうか。Google では、サブネットワークを生成するために RNN リカレント ニューラル ネットワークを使用する方法を採用しています。このアイデアは、ニューラル ネットワークをトレーニング済みのシーケンスにマッピングできるという事実から生まれました。RNN はこの種の問題を解決するのに非常に優れているため、RNN を使用してサブネットワークを生成し、このサブネットワークを実際のデータでトレーニングします。 RNN コントローラーはトレーニング精度に基づいて更新されます。次の反復では、RNN はより精度の高いサブネットワークを出力します。これは RNN リレー アーキテクチャの例です。この例は複雑に見えるかもしれませんが、実際には理解するのは難しくありません。

また、同じ方法を使用して最適化関数を生成し、生成された最適化関数を一般的に使用される関数と比較してみました。この表から、生成された関数が既存の関数の精度を超えていることがわかりますが、これらの生成された関数は非常に直感的ではないため、learn 2 learn問題に対処するためのより直感的な方法があるのではないかと考え始め、進化アルゴリズム、つまり遺伝的アルゴリズムを考えました。単純な単細胞生物が、独立した思考を持つ非常に複雑な多細胞生物に進化することができるので、同じ理論をモデル構築に適用できるでしょうか。そこで、私たちはそのようなアルゴリズムを設計しました。毎回、最初に、1000 個のトレーニング済みモデルを含む集団を確立しました。進化の各ステップで、1000 個のモデルからランダムに 2 つのモデルを選択し、それらの精度を比較しました。精度の低いモデルは破棄され、精度の高いモデルが残ります。さらに、モデルは、モデルのコピーを作成し、モデルを単純に変更することで複製されます。これは、遺伝子変異のように見えます。変異したコピーをトレーニングし、集団に配置します。

分散トレーニングの詳細です。モデルの突然変異には多くの種類があります。先ほど構造上の変更をいくつか説明しましたが、変更されないものもありますが、初期化の突然変異は非常に重要なので、さらにトレーニングするか、再トレーニングする必要があります。突然変異の選択は、均一な確率分布を持つモデルです。

進化時間の最新の進捗状況を見てみましょう。横軸は時間、縦軸は精度を表しています。各点は集団内のモデルを表し、灰色の点は排除されたモデルです。右上隅の青い点は生き残ったモデルであり、3 日間のトレーニング後にこの位置にあります。 3日間のトレーニングを終えると、比較的高い精度が得られます。 10 日間のトレーニング後、精度が安定していることがわかります。これは、比較的理想的なモデルが見つかったことを意味します。

デバイスの配置

強化学習法を使用してデバイスの配置を実行する「デバイス配置」という別の研究プロジェクトを見てみましょう。現在、機械学習では多くのモデルと多くのデータが使用されるため、モデルを一緒にトレーニングするには多くのデバイスが必要です。

たとえば、翻訳モデルは非常に大きくなります。通常、トレーニングには 128 個の GPU を使用します。まず、デバイスの配置について簡単に説明します。デバイスの配置とは、コンピューティングとデバイスを一致させることです。現在は、いくつかの手動の方法や単純なアルゴリズムを使用しています。アルゴリズムを設定するときは、デバイスとモデルを完全に理解している必要があります。このアルゴリズムは、あるモデルから別のモデルに単純に一般化されるものではありません。しかし、現在非常に流行しているアプローチは、これらのルールベースのシステムを機械学習ベースのシステムに変換することなので、私たちも同様のアプローチを使用しました。デバイス配置モデルを解決するために強化学習を使用します。learn 2 learn 方式にヒントを得て、同様のモデルを作成します。

ニューラル ネットワークを入力として受け取り、ネットワークにコンピューティング リソースの量を通知するネットワークがあります。すると、ネットワークがニューラル モデルを通知します。ニューラル モデルを実行し、実行時間に基づいてニューラル ネットワークを調整します。同様の機械翻訳アーキテクチャを使用します。モデルは比較的大きくて遅いため、データの並列処理を使用してトレーニングしました。

次に、学習結果を見てみましょう。これは、ニューラル翻訳システムにおけるデバイス配置の結果です。上の白い点はCPU上で動作しているノード、下の色のついた点は異なるGPU上で動作しているノードを表しています。約20%の改善が達成されていますが、まだ非常にわかりにくいです。現在は入力側でCPUが使用されており、後からGPUが使用される予定です。

*** 2 つの図は、私たちのニューラル翻訳システムでは各 GPU の計算が非常にバランスが取れているのに対し、右側の人間の専門家が設計した計算は非常に不均衡であることを示しています。GPU2 では非常に長い時間がかかり、他の GPU ではほとんど時間がかかりません。ただし、専門家の設計では一般的に時間の一部しか考慮されないため、これは理解できます。 Inception V3 では、結果はあまりバランスが取れていません。ただし、Inception V3 に過度に依存しているためか、結果では実行時間が全体的に Inception V3 よりも改善されています。後で分析したところ、データのコピーにかかる時間が短縮されたことが原因であることがわかりました。したがって、全体的に実行時間が改善されます。

終わり

2 つの例についてお話ししました。アルゴリズムや機械学習を使用して機械学習モデルを最適化する方法を検討し、ある程度の進歩を遂げました。近い将来、より優れたコンピューティング リソースがあれば、将来のアーキテクチャはすべてコンピューターによって生成されるようになると私たちは考えています。Google は探索の第一歩を踏み出しており、皆さんも参加していただければと思います。ここで終わりにします。ありがとうございました。

<<:  ディープラーニングの面接で知っておくべきこと

>>:  Scikit-learn を使用して機械学習用のテキストデータを準備する方法

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

次世代人工知能の開発方向(第1部)

[[349500]]人工知能は半世紀以上前から存在していますが、人工知能の分野は過去 10 年間で...

韓国のUNISTが協力し、今後5~15分間の交通状況を予測するAIシステムを開発

[[270835]]海外メディアの報道によると、韓国の蔚山科学技術院の高成安教授率いる研究チームは、...

「電子ミバエ」がマスク氏を警戒させた!その背後には、コンピューターで実行できる13万個のニューロンからなる脳全体の地図がある。

脳科学研究は大きな前進を遂げました!プリンストン大学の科学者らは最近、成体動物の全脳コネクトームマッ...

百度のCTO王海鋒が百度ブレイン7.0をリリース: イノベーションを統合し障壁を下げる

火星の環境について知りたいですか?たった一文であなた自身のデジタル人物を生成したいですか?こうした最...

...

インターネットの後半、人工知能の春は始まったばかり

最近、インターネット企業における「人員最適化」問題が友人の間で話題になっており、多くの人がパニックに...

ChatGPTの医療版ライブレビュー!治療計画は実際の医師のものと96%一致しています

同国初の大規模医療モデルはすでに患者を「診察」している。最近、病院内の AI 医師の実際の監視データ...

2021年のAIに関する10の大胆な予測の科学的分析 学術見出し

2020年は忘れられない年です。今年に入って、新型コロナウイルスの感染拡大に伴い、人工知能(AI)が...

AIの新たな方向性:敵対的攻撃

[[249559]]近年のAI分野を調査していく中で、近年、世界中の研究者の視野の中に敵対的攻撃とい...

Google が新モデル EfficientNet をオープンソース化: 画像認識効率が 10 倍に向上、パラメータが 88% 削減

畳み込みニューラル ネットワークは通常、限られたリソースで開発され、その後、条件が許せば、より高い精...

自動運転企業のほとんどは失敗する運命にある

「まだ非常に初期段階です。」これは、自動運転技術の現在の開発について、多くの業界関係者がYiou氏に...

...

...

...

画像解析アプリケーション向けの大規模サンプルフィルタリングソリューション

画像解析アプリケーションでは、大量の画像サンプルを効果的かつ自動的にフィルタリングすることが重要な基...