代表的なツール、ライブラリの紹介
機械学習モデルを構築する際に欠かせないのが、
しかし、一言で機械学習ライブラリといっても、
データ処理
- NumPy
Numpyは2005年にPythonの数値計算ライブラリとして誕生しました。 Pythonはもともと数値計算に強みを持つ言語ではありませんでしたが、NumPyの登場によって演算処理性能が飛躍的に向上しました。
Pythonは作成した処理を実行するタイミングでコンピュータが理解できる機械語に翻訳するインタプリタ言語です。一方、C言語などはコンパイラ言語と呼ばれ、実行ファイルを作成する段階で翻訳するため実際に処理を実行する際の処理速度が速いという特徴があります。
NumPyはC言語を使って作成されたライブラリであるため、優れた演算処理能力を実現しています。 さらに、ベクトル演算等の多次元配列を扱うことができるなど複雑な演算を素早く大量にできるという点から機械学習分野でも重宝されているライブラリです。
- pandas
Pandasは2008年に開発が始まり、2009年末にオープンデータとして公開されたPythonのデータ解析用ライブラリです。
Pandasはデータフレーム(DataFrame)というテーブルデータに近いデータ構造を表現することができるため、CSVファイルやExcelといった一般的に使用されているファイル形式からデータを読み込むことが可能です。また、棒グラフや散布図など簡単なグラフを表示する機能も備えているため、取得したデータを様々な視点から見ることができます。
さらにデータ加工や解析を行う関数が豊富に用意されているため、データの前処理が不可欠な機械学習においても重要なライブラリの一つです。
データ可視化
- matplotlib
matplotlibはPythonのデータ可視化用ライブラリであり、NumPyにも対応しているため大規模なデータの可視化も可能です。
matplotlibは2003年のリリース以降も頻繁に新しいバージョンを公開しており、当初はヒストグラムや円グラフなど2次元の描画がメインでしたが、現在は3次元の描画も数多く提供しています。 機械学習やデータ分析において、データの可視化は数字の羅列からひと目見て分かる状態を作り、必要な情報をすぐに理解できることは非常に重要な要素です。
- seaborn
引用 : seaborn公式
seabornはmatplotlibをもとに開発されたデータ可視化用のライブラリで、より美しく洗練された描画と短いコードで簡単に可視化することができるという特徴があります。 このようにmatplotlibよりも優れた可視化ライブラリのような特徴を持っていますが、ユーザー数はmatplotlibの方が多いため参照できる情報量という面ではseabornは劣ってしまいます。
画像処理
- OpenCV
OpenCVは画像処理に関する処理をまとめたコンピュータービジョンライブラリです。
コンピュータービジョンとは画像や動画への理解に焦点を置いたコンピュータサイエンス分野の一つで、人間の視覚と視覚情報の理解をコンピュータが実現することを目的としています。 このライブラリの中には2500以上のアルゴリズムがあり、画像の表示や二値化(モノクロ)などの比較的簡単な操作から顔の検出や物体の識別などの機械学習アルゴリズムまでカバーしています。 また、豊富な画像処理に加えてインストールが容易にできる点やAR・VRに応用できる汎用性の高さなど多くのメリットがあります。
- Pillow
Pillowは2011年に開発が終了したPIL(Python Image Library)から派生した画像処理ライブラリです。
OpenCVが簡単な画像処理から物体検出や分類など機械学習アルゴリズムまでカバーしている一方、Pillowはトリミングやカラー変更など比較的単純な画像処理をOpenCVよりも簡単にできるという特徴があります。
高度な画像処理を素早く実行する必要がある場合にはOpenCV、単純な画像処理を簡単に行うのであればPillowを使うなど、必要に応じて使い分けることができます。
自然言語処理
-
MeCab
Mecab(めかぶ)は日本で開発された形態素解析エンジンです。
自然言語処理にはいくつかの手法があり、形態素解析はそのうちの一つです。具体的には、文章を「形態素」と呼ばれる最小単位の単語に分割することでそれぞれの形態素が持つ意味をデータとして抽出する技術です。
Mecabは書き言葉や単語を機会が読める形に置き換えた「辞書」や文章の使用方法を集めて記録した「コーパス」に依存しない汎用性の高さやChaSenなど他の形態素解析ツールに比べて高速に処理できることを特徴としています。
-
GINZA
引用:GINZA公式
GINZAは2019年にGitHubで公開された日本語自然言語処理ライブラリです。
GINZAはSpaCyという最先端機械学習技術を組み込んだ自然言語処理フレームワークとSudachiPyという形態素解析器の二つを利用して開発されており、処理速度と解析精度の両方に強みを持っています。
また、Python version3.6以上の環境であれば1行でインストールが可能であるなど、導入が非常に容易であることも特徴の一つです。
機械学習ツール
- Scikit-learn
Scikit-learn(サイキット・ラーン)は2010年に公開されたPythonで実装された機械学習ライブラリです。ディーププラーニングや強化学習はカバーしていないものの機械学習全般のアルゴリズムを扱うことができるライブラリであるため高い人気を誇っています。
公式ドキュメントのユーザーガイドでは「分類」「回帰」「クラスタリング」など利用可能な機械学習アルゴリズムの利用方法を記載しているほか、サンプルデータセットも用意されているため実験的に機械学習を使用したい場合など利用のハードルが低いことも特徴として挙げることができます。
深層学習
- PyTorch
PyTorchは深層学習(ディープラーニング)に特化したPython用機械学習ライブラリです。
元々存在していたTorchという機械学習フレームワークをPythonで実装できるようにしたものがこのライブラリです。 PyTorchは基本的な操作方法がNumPyに似ているため、Pythonの使用経験がある方や初学者にも比較的扱いやすいという特徴があります。
また、設計の部分でPyTorchは動的な計算グラフ(define by run)を採用しています。これにより、深層学習に必要なニューラルネットワークの構築後にデータを流す静的な計算グラフとは異なり、データを流しながら計算グラフが構築できるため柔軟な変更や複雑なネットワークの構築が可能になります。 これらの特徴から、比較的新しいライブラリであるにも関わらず従来の機械学習ライブラリと並ぶ勢いでシェアを拡大しています。
- TensorFlow
TensorFlowは深層学習(ディープラーニング)まで対応した機械学習ライブラリです。
TensorFlowには強化学習のための「TensorFlow Agents」や可視化用の「TensorBoard」など追加ライブラリやツールが豊富にあるため、ニーズに合わせて様々なライブラリを活用することができます。
また、PCやウェブ、モバイル、エッジデバイスなどそれぞれの環境に対応したバージョンが存在しているため、どのような環境でもトレーニングとデプロイができる点も特徴の一つです。
- Keras
Kerasは前述のTensorFlow上で実行可能なニューラルネットワークライブラリです。TensorFlow以外にCNTKやTheano上でも実行することが可能ですが、Keras公式でもTensorFlowが推奨されています。
Kerasはプロトタイプを素早く簡単に作成し、迅速な実験を行うことに重きを置いて開発されたライブラリであるため、ディープラーニングやニューラルネットワークに関する深い知識を要することなく構築することができます。
- Kubeflow
Kubeflowはkubernetes上で機械学習を行うツールキットです。
機械学習モデルを実用化する場合、開発後の運用を考慮してモデルの精度を監視する仕組みや継続的にデータを取り入れ、必要に応じて改善・再作成することが求められます。
さらに一連のワークフローに加えて、スケーラブルな基盤の構築や学習を試行する中で精度が上がったものを追跡して実行履歴を管理するなど再現性を担保する必要があります。
しかし、この基盤を一から作ることは非常に手間がかかる作業です。そこでKubeflowを使うことにより、Kubernetes上で機械学習フローをシンプルかつスケーラブルでポータブルにデプロイすることができます。
強化学習
- OpenAI Gym
OpenAI Gymは強化学習アルゴリズムの開発や比較を行うためのライブラリです。
強化学習を行うには、エージェントと環境を定義する必要があります。エージェントは学習者のような立場で、特定の状態に対して何らかの行動を起こします。一方の環境はエージェントの行動を観測して報酬を与えます。
これらを開発者が全て定義するとなると手間がかかるだけでなく、性能比較が難しくなるなど効率が低下する恐れがあります。
OpenAI Gymはエージェントと環境間の通信のための標準APIと強化学習環境を提供することで、簡単に効率よく強化学習の開発や比較を行うことができるライブラリです。また、エージェントが常に同じ環境で学習できるように厳密なバージョン管理が行われたり、Monitorという機能で学習ログを記録して学習と適応の過程を追跡することができるなどの特徴もあります。
深層強化学習
- Chainer RL
Chainer RLは深層学習フレームワークであるChainerを用いて作成された深層強化学習ライブラリです。
深層強化学習アルゴリズムが多数用意されているほか、ChainerRL Visualizerという可視化ツールも備えているためエージェントの挙動を視覚的に把握することができます。
ChainerRLが扱う深層強化学習とは深層学習と強化学習を組み合わせた学習です。
強化学習は最適な行動を学習する際に状態と報酬をもとに行動を選択しています。しかし、従来の強化学習は連続値という身長や体重、距離など際限なく続く値をそのまま扱うことができず、0.1から1.0は1、1.1から2.0は2のように一定の範囲に収束させる必要がありました。これによって生まれる課題が違う値にも関わらず同じ値としてみなされることで精度が落ちるということです。
そこで従来の強化学習に深層学習で利用されるニューラルネットワークを用いることで、連続値を精度を落とさずに扱うことができるようになりました。