TensorFlowとChainerを比較

    「TensorFlow」と「​Chainer」の比較

    「TensorFlow」と「​Chainer」は、人気がある機械学習ライブラリです。

    「TensorFlow」とは

    概要

    TensorFlowは、Googleがオープンソースとして提供している機械学習ライブラリです。

    多くの研究者も利用している注目のライブラリです。

    メリット

    Googleがサービス開発に利用しているライブラリということで、圧倒的な利用者数を集めています。利用者数が多く、コミュニティが大きいため、情報を入手しやすいメリットがあります。

    主なメリット
    ・ニューラルネットだけでなく、機械学習や数値計算すべてをカバー
    ・低レベルの処理も可能
    ・GPUの利用が簡単
    ・複数デバイスによる並列処理が容易(大規模処理を高速に実行しやすい)
    ・高レベルAPIではかなり直感的にニューラルネットワークを構築できる

    デメリット

    ・すべての計算を計算グラフで表現するため、初心者にとっては難易度が高い
    ・計算グラフ構築後の変更が不可能

    「​Chainer」とは

    概要

    Chainerは、Preferred Networksが開発したニューラルネットワークを実装するための日本発のライブラリです。

    メリット

    ・直感的かつシンプル(直感的な計算グラフ構築)
    ・初心者にとって優しいフレームワーク
    ・複雑な計算グラフにも対応できる
    ・単純なネットワークから、複雑なディープラーニングまで幅広くカバー
    ・GPUでの高速処理
    ・Pythonでディープラーニング構造を記述できる
    ・ネットワーク構造を柔軟に記述できる
    ・短いコードで記述できる
    ・デバッグを行いやすい
    ・インストールが簡単

    デメリット

    ・計算速度がやや遅い
    ・利用人口が少ない
    ・後方互換性が無くなるようなアップデートがある

    処理スピード比較

    ​Chainer

    Chainer自体はPythonで実装されていますが、ニューラルネットの大部分を占める行列計算の処理は、C言語で実装されているPython用数値計算ライブラリ「NumPy」によって行われるため、全体としては高速動作を可能にしています。

    TensorFlowとの速度比較においても、「非常に遅い」というほどの差はありません。

    参考元サイト

    「TensorFlow」基本情報

    ■概要

    TensorFlow(テンソルフロー)とは、Googleのディープラーニングライブラリです。データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できます。

    ■「ディープラーニング」とは

    機械学習とは、人間が学習するのと同じように機械が学習することを目指した人工知能研究の1分野です。ディープラーニングは機械学習の中の1つです。

    ディープラーニングとは、ニューロン(神経細胞)が信号の受け渡しをすることにより情報処理をしているという脳の仕組みを、ニューラルネットワークとしてコンピュータ内に実現し、それを多層化したものです。

    ニューラルネットワークは、入力層と出力層の間にある中間層(情報識別層)が多いほど、より正確な認識ができるようになります。

    ディープラーニングは、音声認識、自然言語処理(翻訳)、Google検索エンジン(画像検索/ウェブ検索最適化)、Googleフォト(顔認識/被写体認識)、Gmail(メール分別)、Inbox(メール自動返信文作成)、YouTube、広告事業など、Googleのほとんどのサービスを支えるコア技術となっています。

    →OSS×CloudNews →ざっくりわかる「機械学習」---第2回 「機械学習」「ディープラーニング」の違い

    ■基本説明

    「TensorFlow」の読み方は、日本では「テンソルフロー」が多く、英語圏では「テンソーフロー」が多いようです。

    「Tensor(テンソル)」とは、線形の量を表す概念で、多次元データ構造を表すものです。「TensorFlow」は、多次元データ構造を流れるように処理し、ディープラーニングを行います。

    TensorFlowの特徴として、データフローグラフによる柔軟性、ローレベルオペレータも手書きできる汎用性、高いパフォーマンス、スケーラビリティ、研究レベルから実プロダクトまで扱える効率性などがあります。

    利用方法例として、画像に写っているものを認識して文章化するアルゴリズム、各種数値計算、自然言語処理(翻訳)、など多岐におよび、新しい応用分野が広がり続けています。

    コア部分はC++で実装されていて、ユーザ向けにPythonのインターフェースが用意されています。

    ■経緯

    2011年、Googleは「DistBelief」というディープラーニング基盤を開発し、音声認識/イメージ検索などのサービスの性能向上に大きく貢献しました。しかし、各プロダクトとの結合が強く汎用性が低かったため、公開できませんでした。

    そのような問題を解決し、依存性を排除し、汎用性を高め、性能を高めて開発されたのが「TensorFlow」です。「TensorFlow」の性能は、「DistBelief」の2倍とされています。

    2015年11月、「TensorFlow」がオープンソース公開されました。

    ■ユースケース

    利用方法例として、次のようなものが想定されています。
    ・顔認識
    ・音声認識
    ・被写体認識
    ・画像検索
    ・画像を認識して文章化するアルゴリズム
    ・各種数値計算
    ・自然言語処理(翻訳)
    ・リアルタイム翻訳
    ・Web検索最適化
    ・メール分別
    ・メール自動返信文作成
    ・自動運転車 など

    主な特徴

    ■データフローグラフ

    TensorFlowの処理は、データフローグラフの「構築」+「実行」の2フェーズで行われます。

    データの流れ(フロー)を定義する「グラフ」を基本としてデータの処理を行います。

    ■「Deep Flexibility」(深い柔軟性)

    柔軟にニューラルネットワークを構築できます。C++で低レベル処理を書くこともできます。

    ■「True Portability」(真の携帯性)

    TensorFlowではCPU用/GPU用でコードを分ける必要はありません。移植性にも優れています。

    ■「Connect Research and Production」(研究と製品の接続)

    Googleでは、研究者もエンジニアも同じくTensorFlowを用いているようです。このような使い方をすることで、プロダクト転用が容易になります。

    ■スケーラビリティ

    モバイル端末、PC、ハイエンドサーバなど各マシンのリソースに応じてスケールします。

    ■チュートリアル

    各種チュートリアル用データセットが用意されていて、すぐに試せます。
    ・MNIST:手書きの数字を判別
    ・CNN:画像認識
    ・Word2Vec:各単語の関係を学習
    ・RNN:文章から次の単語予測
    ・Seq2Seq Model:フランス語を英語に翻訳 など

    ■簡易/柔軟な記述方式

    シンプルかつ分かりやすいコーディングで記述できます。自動微分の機能が内蔵されており、計算処理と目的関数を定義するだけで学習できます。

    ■Webインターフェイス「TensorBoard」

    Webインターフェイスで、学習状況確認、ニューラルネットワーク可視化ができます。コードだけでは分かりづらいモデルをグラフ化できます。

    補足情報

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    商用製品:IBM「Watson」など。

    オープンソース製品:「​Chainer」「Caffe」「Microsoft Cognitive Toolkit」など。

    ■オフィシャルサイト

    オフィシャルサイト

    →TensorFlow

    ライセンス情報

    TensorFlowのライセンスは「Apache License 2.0」です。

    詳細について、こちらを参照ください。
    →GitHub →tensorflow →LICENSE

    ダウンロード

    →TensorFlow →Install TensorFlow

    ※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。


    「​Chainer」基本情報

    ■概要

    Chainer(チェイナー)とは、日本製の深層学習フレームワークです。ニューラルネットワークをPythonで柔軟に記述し、学習させることができます。

    ■基本説明

    Chainerは、ニューラルネットワークを誤差伝播で学習するライブラリです。「Preffered Networks」が開発しています。

    Chainerの特徴として「Flexible(柔軟性)」「Intuitive(直感的)」「Powerful(高機能)」の3つを掲げています。

    実行にはCUDAが使われるため、Nvidia製GPUが必要です。

    ■経緯

    2015年6月に公開されました。

    ■オフィシャルサイト情報

    オフィシャルサイト

    →​Chainer(Chainer: A flexible framework for neural networks)

    ライセンス情報

    ​Chainerのライセンスは「MIT License」です。

    詳細について、こちらを参照ください。
    →GitHub →chainer/chainer →LICENSE

    ダウンロード

    「Ubuntu」「CentOS」「Windows」「OS X」などに対応しています。

    →​Chainer →QUICK START

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    オープンソース製品:「TensorFlow」「Caffe」「Theano」など。

    「​Chainer」の主な特徴

    ■さまざまなネットワークアーキテクチャをサポート

    ​Chainerは、「高度で複雑なディープラーニング」だけではなく、「シンプルなネットワーク」にも対応できるライブラリです。

    シンプルなネットワークの場合、他のディープラーニングライブラリではオーバースペックすぎて使いづらい面がありますが、​Chainerは柔軟にカバーできます。

    対応できるネットワークには以下のようなものがあります。
    ・畳み込みニューラルネットワーク
    ・フィードフォワードニューラルネットワーク
    ・リカレントニューラルネットワーク
    ・再帰型ニューラルネットワーク など

    ■Pythonライブラリ

    Chainerは、Pythonのライブラリとして提供されています。Python 2.7以上が必要です。

    ■シンプルで直観的なPython記法

    Chainerはネットワーク構成をPython記法で直観的に記述できます。

    制御構造は、すべてPythonで記述できます。Pythonのコードを用いて、入力配列に何の処理が適用されたのかのみを記憶しておき、それを誤差逆伝播の実行に使います。

    2つの抽象的基本要素(データ「Variable」と関数「Function」)を定義します。「Variable」と「Function」間の計算/条件分岐としてPythonの制御構文をそのまま使用できます。新たな構文などを覚える必要がないため、プログラマはネットワーク構成を直感的に記述できます。設定ファイル/固定データセットは必要ありません。

    「各層をつなぐネットワーク関数」「活性化関数」「誤差関数」などの関数がデフォルトで用意されています。

    「CUDA計算」「複数GPU対応」などの処理はわずかなコードで実装できます。Caffeで2000行以上のコードを、​Chainerでは200行未満で実装できた例もあります。

    ■「Define-by-Run」方式

    ​Chainerは「ネットワーク構築」と「学習」を同時に行う方式です。処理フェーズとして「Define」と「Run」に分かれていません。

    本来なら別に分けることが難しい計算グラフの生成/学習を同時に記述できます。

    Forward計算時に、入力から出力に到達するまでの経路を記録することにより、初めて暗黙的に計算グラフが得られます。

    ■Flexibility(柔軟性)

    畳み込み/リカレントなど、さまざまなタイプのニューラルネットワークをシンプルに実装できる柔軟性があります。

    本来切り分けることが難しい計算グラフの生成/学習を同時に記述できます。このことにより、幅広い種類のニューラルネットワークに柔軟に対応できます。

    ■Intuitive(直感的)

    Chainerは、データを表す「Variable」と関数を表す「Function」という二つの抽象的な基本要素だけを定義します。それらの間の計算/条件分岐はPython制御構文をそのまま使用できるため、プログラマにとって、ネットワーク構成を動的/直感的に記述できます。複数GPUを使用する場合も直感的な記述が可能です。設定ファイル/固定データセットは必要ありません。

    記法が直観的かつシンプルであるため、「単純なネットワーク領域」から「複雑なディープラーニング領域」まで幅広くカバーできます。

    同様なフレームワークである「Caffe」において2000行程度のコードを、「​Chainer」では200行未満で表現できたという話もあります。

    ■Powerful(高性能)

    並列コンピューティングアーキテクチャ「CUDA」をサポートし、GPUを利用した高速な計算が可能です。

    GPUを利用した高速な計算が可能で、事前にコンパイルを行う「Caffe」や「Theano」ベースのライブラリとほぼ互角の性能が得られるとされています。

    多くの手間をかけずに複数GPU動作に対応できます。

    ■インストールが容易

    一般的に、ディープラーニングフレームワークは、多くのツール/ライブラリのインストールが必要であるため、インストールには手間がかかります。しかし、​Chainerは依存ライブラリが少ないため、インストール負荷は少なめです。

    公式Dockerイメージが用意されているので、それを利用すれば、即座にインストールできます。

    また、「pip install chainer」コマンド実行のみでインストールできます。