ChainerとKerasの違い

2018年9月12日(水)にディープラーニングハンズオンセミナーKerasコースを開講いたしました。
今まではディープラーニングハンズオンセミナーChainerコースのみでしたので、今回はChainerとKerasの違いについて以下に記載いたします。

ChianerとKerasは両者ともにPythonのディープラーニングフレームワークにあたります。
フレームワークとは、ある目的に応じて必要な機能などをまとめてくれたものになります。
今回の場合は、Pythonでディープラーニングを行うにあたり、必要な機能をまとめてくれているのがChainerとKerasになります。フレームワークを使用すると裏側で行われている複雑な計算などを理解することなく実装することができるため非常に便利です。

Chainer

Chainerとは日本の企業であるPreferred Networks社(以下、PFN)が開発しているディープラーニングフレームワークになります。PFNは、AI領域において日本のTOPを走る企業といっても過言ではない企業です。PFNが作り上げているChainerの特徴について以下に書きます。

利点

  • 数値の流れが分かり、デバッグが容易
  • 計算速度が速い

数値の流れが分かり、デバッグが容易

Chainerは『Define by Run』という方式を採択しています。この方式のメリットとしてモデルの変更が容易、デバッグが容易であることが挙げられます。

計算速度が速い

Chainerは線形代数演算の際に、行列計算としてPythonのライブラリであるNumpy(GPUの場合はCupy)を用いています。
このNumpyの特徴として計算速度が速いというのがあり、そのNumpyをベースに実装しているためChainer自体も計算速度が速いのが特徴です。

欠点

  • プログラミングの理解力が必要
  • アップデートが早い
  • 世界的にユーザー数が少ない

プログラミングの理解力が必要

ニューラルネットワークのモデルを書いていくにあたりChainerではClassを書いたり、既存のClassを上書きしたりする必要などがあるため、Kerasと比較するとある程度のプログラミング力は必要になります。

アップデートが早い

Chainerのメジャーバージョンアップが4ヶ月に1度ほど行われております。これは他のフレームワークと比較するとかなり早いため、そのたびにキャッチアップするアップデート内容を必要があります。

世界的にユーザー数が少ない

日本製のフレームワークということもあり、検索した際にヒットする記事が少ないです。エラーが出た際の対処法を調べてもピンポイントで出てこないことも多く、慣れてる方はChainerのGithubコードの中身を見て解決していくなどの方法を取っています。最近、PFNではこの問題を改善していくためにドキュメントを整備していく施策をとっていく方向性ではあるみたいです。

Keras

Kerasとは、TensorFlowやTheanoをベースにして実装されているフレームワークになります。Tensorflowなどから学んでしまうと少し敷居が高かったりするため、Tensorflowなどをより簡単に実装したものであり初心者の方にオススメされています。

利点

  • ディープラーニングを簡易に設計できる
  • 可視化ツールが充実してる
  • ユーザー数が多い

ディープラーニングを簡易に設計できる

非常に簡単かつ直感的にディープラーニングの実装をすることができます。これがKeras最大の利点です。Chainer以外のフレームワークと比較しても、コードの簡単さは一番です。

可視化ツールが充実してる

TensorFlowの1つの機能として提供されているTensorboardという可視化ツールをKerasでも扱うことができます。これを使うことにより、計算途中の結果の確認、画像データの可視化が可能になります。ChainerにもChainerUIという可視化ツールが存在します。

ユーザー数が多い

Tensorflowに次ぐユーザー数がいるため、Webで検索すると欲しい情報が書いてる記事がヒットします。(英語を読める必要もあります)

欠点

  • 処理速度が遅い
  • 内部構造のブラックボックス化
  • 複雑なことができない

処理速度が遅い

Kerasを始めに触っていればあまり気にならない部分ではありますが、Chainerと比較してしまうと処理速度が遅く感じてしまう部分があります。

内部構造のブラックボックス化

実装の容易さを追求したため、内部構造がわかりにくく何をおこなっているかが見えにくい形になっています。

複雑なことができない

こちらも簡易性を追求したがために複雑なことを行うのが難しいです。

 

どちらがオススメか

今後深くディープラーニングを学んでいきたい方は、Chainerをオススメします。

ドキュメントが少ないという欠点はありますが、複雑で難しい内容を実装していく方はChainerが良いです。Chainerには画像処理特化のChainerCV、分散処理特化のChainerMN、強化学習特化のChainerRLなどのChainerファミリーと呼ばれるChainerの派生系フレームワークも非常に魅力的で実践的です。

すぐにディープラーニングの実装方法を知り、手軽に実装したい方はKerasが良いです。

ディープラーニングを深めていく予定はなく、とりあえずディープラーニングを実装してどんな感じであるかを体感したいかたにはKerasが非常にオススメです。ドキュメントも豊富なため、初学者には非常に優しいです。

 

 

ディープラーニングハンズオンセミナーはこちら