こんにちは、AI研究所の石川です。
AI関係ではデータ解析のサポートや数値計算処理など、機械学習の分野においてさまざまなライブラリが存在し活用されています。
今回はその中でも2016年リリースのライブラリ“PyTorch”に注目していきましょう。
PyTorchについての概念・基礎知識をはじめとしてその特徴やインストール方法、さらには活用事例などに関しても解説します。
PyTorchの概要
PyTorchとは、高水準汎用プログラミング言語の1つであるPythonに向けた機械学習ライブラリです。
開発元は、Facebookの人工知能研究グループAI Research labによるものであり、2016年10月に公開されました。
オープンソースという形で公開され日々更新・修正が加えられ続けており、2022年8月現在、Stableでは バージョン1.12.1、LTSではバージョン1.8.2となっています。
原型となったのはtorchと呼ばれる機械学習ライブラリであり、深層学習の対象となるライブラリがPythonであるため、2つの名前を組み合わせて「PyTorch」と名付けられました。
PyTorchの注目ポイントは?
他のライブラリと比べてPyTorchは新しく歴史は浅めであるのにも関わらず、リリース当初の2016年より着実にシェア率を伸ばしています。
アメリカ国内においても、日本国内においてもそれぞれ機械学習ライブラリの分野で初期段階から注目を浴び、わずか2年ほどで他のメジャーなライブラリと肩を並べるところにまで急成長しました。
もちろん人気度がその良し悪しを決定づけるものではありませんが、歴史の長いライブラリに迫るシェア率を短期間で得られたという点においては注目すべきポイントでしょう。
PyTorchの特徴・長所
それではそんなPyTorchの特徴や長所をご紹介します。
PyTorchはNumpyと似ている?
機械学習ライブラリ・PyTorchの大きな特徴かつ人気の理由として挙げられるのが、Numpyの基本的な操作方法と酷似しているという点です。
大本であるPythonにおける機械学習でのプロセスで必須と言えるのが、Numpyというライブラリです。
そのためNumpyの使い方・操作方法を知っているエンジニアは多い傾向にあり、そんなNumpyと似ているPyTorchも同じような操作感で使用できます。
新しいライブラリであるにも関わらず2年ほどで驚くほどシェアを伸ばしたのは、既存のライブラリと共通事項が多いがゆえに新規導入の抵抗感が少ないという点が大きいでしょう。
PyTorchの設計は動的な計算グラフ
PyTorchの設計的な部分での特徴として、動的な計算グラフであることが挙げられます。
ニューラルネットワーク(nn)を構築するライブラリの定番製品の多くは、静的な計算グラフを用いています。
計算グラフはニューラルネットワークにおける設計書にあたる部分であり、この違いがライブラリを活用する上で非常に重要です。
柔軟であるがゆえに複雑なネットワークを実装しやすいという特徴を持つ、動的な計算グラフを導入することでより効率が向上する場面はいくつもあるでしょう。
一方で動的な計算グラフよりも静的なものの方が適するケースもあるため、状況に応じて活用することが大切です。
他のライブラリと比較して、簡潔な記述が可能である点も大きな特徴であり長所の1つです。
機械学習においての手法や論文が学会にて発表されると、その後にそれを応用したPyTorchによる実装例が公開されるケースが多いことからも、分かりやすく汎用性が高いことが窺い知れます。
人工知能の分野においての最先端の研究者が使用している事例も増えており、PyTorchの海外コミュニティも活発であり参考となるソースが多い点もシェアが高い理由の1つと言えるでしょう。
PyTorchのインストール方法
それでは、そんなPyTorchのインストール方法について解説していきます。
PyTorchをインストールする場合はこちらを参考にしてください。
①Pythonのインストール
PyTorchをインストールするには、まず事前にPythonを端末にインストールしておく必要があります。
この時Pythonは最新版であることが必須条件となるため、必ずバージョンの確認をしておきましょう。
Anaconda経由でインストールした場合は、condaコマンドにて、最新バージョンを指定すればアップデートが可能です。
初めて導入するという方については、Pythonの公式ホームページへとアクセスすれば最新バージョンを簡単にダウンロードすることができます。
また、PyTorchも他フレームの例に漏れずGPUの使用をサポートしています。
GPUを使用できる構成でPyTorchをインストールする場合、インストール時にCUDA Toolkitのバージョンを指定する必要があります。
ここを間違えてしまうとGPUを使用する設定にしているにも関わらず、GPUを使用せずに動作させてしまうことになります。
まずは、自分のPCのGPUがCUDAに対応しているか確認してみましょう。
②PyTorchのインストール
Pythonのインストールが完了したら、いよいよPyTorchのインストールへと移行します。
公式サイトへとアクセスして、「QUICK START LOCALLY」と書かれた箇所までスクロールして自身のパソコンの環境と照らし合わせてください。
OSや現在の環境にマッチしたビルドバージョン、適したプログラム言語を選択します。
全て選択を終えたら「Run This Command」と書かれた欄の横に、先程設定したバージョンやOSに従ったインストール実行のためのコマンドが表示されます。
この文字列をコピーして、コマンドプロンプトへと貼り付けて実行しましょう。
Macの場合は、ターミナルを起動して同様にペーストすれば実行できます。
実行後にPyTorchのバージョン情報が出現すれば、インストールは成功です。
PyTorchはWindowsとMacの他に、Linux環境でも動作が可能となっています。
海外コミュニティではWindows環境においては、Anaconda経由でインストールすることが推奨されています。
なお、インストールの際に表示されていたSTART LOCALLYとは、日本語に翻訳するとローカル環境で始めるという意味です。
もしオンライン環境でも試したい場合は、Googleの研究プロジェクトの1つであるGoogle Colabで作動するのも良いでしょう。
機械学習の普及を目的としたプロジェクトのライブラリであるため、必要なライブラリの相当数が既に事前に構築されています。
汎用的なライブラリはほとんどインストールされているため、容易に始められるのが大きなメリットです。
PyTorchの構成
本格的に活用する前に、PyTorchのパッケージ構成を知っておきましょう。
基本的なデータ構造を示すTensor(テンソル)や色々な数学関数が含まれているtorchは、主力のネームスペースです。
Numpyと似た構造を持っているパッケージであり、Numpyでは配列のサイズをshape属性で確認を行いますが、PyTorchではsizeのメソッドで確認ができたりと構造的に類似点が多いのも、PyTorchが扱いやすいとされる要因となっています。
もう一つ、Tensorとの類似点を挙げるとprint(x + y)がprint(torch.add(x + y))になったりとほぼ同じ構造をしています。
自動微分のための関数が含まれているautograd、ニューラルネットワークを構築する上で必要なレイヤーが定義されているtorch.nnも重要なパッケージ構成の1つです。
他にもパラメータ最適化アルゴリズムが実装されているoptimや、SGDの繰り返し計算のための関数が含まれているutils.data、モデルを書き出すためのonnxなどが含まれています。
PyTorchの活用事例
PyTorchを活用する上で欠かせないのが、基本となるデータ構造であるTensorについてです。
メインとなるネームスペースであるtorchに含まれており、多次元配列を扱います。
先述のNumpyにおけるndarrayとインターフェイス構造がほとんど同じであり、GPUの演算のサポートも行う部署です。
Tensorの生成は、入れ子構造であるlistおよびndarrayをtorch.tensor関数に渡します。
PyTorchを使った重回帰分析の活用事例を紹介します。
ノートブックを立ち上げて、データの特徴や傾向を探り、データを整えるところはPandasやNumpyで行います。
前処理が終わり、データをtarget(y)と特徴量(X)に切り分け、trainデータとtestデータに分けたら、いよいよPytorchの出番です。
Pytorchのモジュール(tourch.nn)をインポートし、線形回帰はnn.Linear()を利用します。
続いて実行コードは下記4つのステップになります。
- 反復処理回数を設定。通常2のn乗が使われ、データ数が数百件程度なら32,64辺りを試す。
- 特徴量とtargetをfrom_numpy()でNumpy配列からTensorへ変換。
- 推測値を出力し、コスト関数(Loss)と実際値を比較してコストを算出。
- 誤差逆伝播(ニューロンネットワークの逆方向に合成関数の偏微分の公式を当てはめていくことで、勾配の計算を効率的に行う方法)の処理を実行する。
他にもデバイスの指定によってGPUに作成したり、dtypeを選択することで倍の精度のTensorが生成可能です。
ただGPU上に生成した分については、そのままでは変換・出力できないため一度CPUに移してください。
Tensorでは定義したグラフ・計算式に対して、事前に保持した情報をもとに計算を行う自動微分が可能です。
最初にTensorの定義を設定して計算グラフを作成しておき、勾配の計算を行うことにより動作します。
自動微分によって、求めた値のグラフを描画することもできます。
ここで一つ動画を紹介します。
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役であり、AI関連の教育と研究開発に従事し、東北大学大学院理学研究科修了の理学博士を持つ我妻幸長さんの動画です。
少し長いですが、ディープラーニングとは?という基礎から応用までを動画でわかりやすく解説してくれています。
PyTorchは簡潔な記述と動的な計算グラフが魅力
リリースが2016年のライブラリでありながら、多数のシェア数を誇るのは、記述が簡潔であることと動的な計算グラフという特徴が大きく関係しています。
加えてNumpyと酷似していて導入しやすいという点も、大きな導入理由となっています。
MiniBatch学習に便利なDataLoaderも便利!
深層学習によって学習を行う際には、オンライン学習とBatch学習の中間であるMiniBatch学習を使うことが一般的です。
簡単にMiniBatch化について説明するとDatasetから得たTrainデータを小さいサイズで分割し、それによって得られたTrainデータ(MiniBatch)で訓練し、学習modelを作ることです。
また、Datasetを自作する場合は、Datasetを継承したクラスを作成し、キーが渡された時にそれに対応するサンプルを返す_getitem_(self, index):およびサンプル数を返す_len_(self):のように実装します。
近年は扱うデータ数が増加しているため、通常のBatch学習の実行はメモリサイズの面から見て現実的でないケースが多く、MiniBatch学習を利用しないわけにはいかなくなっています。
他にも、Tensorや自動微分のネットワークの構築など、さまざまな機能を有しているためプロジェクトの目的やデータ特性に応じて使い分けると良いでしょう。
PyTorchについてまとめ
今回はPyTorchの概要からインストール方法、活用事例までご紹介しました。
是非この機会にPyTorchを始めたいと思っている方は参考にしてください。