データ解析のサポートや数値計算処理などのAI・機械学習の分野では、さまざまなライブラリが存在し広く活用されています。中でも利用者が多いPythonの機械学習ライブラリで、使い勝手の良さで高い人気を誇るのが「PyTorch」です。
本記事では、PyTorchの基礎知識やメリット・デメリット、基本的な使い方などを解説します。
入門者もわかりやすいPyTorchの基礎知識
最初に、PyTorchとは何かを初心者でもわかりやすく解説します。
■PyTorchとは
「PyTorch」は「パイトーチ」と読み、プログラミング言語で多用されているPythonの、オープンソースの機械学習ライブラリです。ベースとなるライブラリの「Torch」と「Python」を組み合わせたため、Pytorchと呼ばれています。Facebookの人工知能研究グループAI Research labが開発し、2016年10月にリリースされました。
機械学習ライブラリにはほかにも、Googleが開発したTensorFlowやKerasなどがあります。機械学習の分野ではPython利用者が増えており、それに伴い使いやすくて自由度の高いPyTorchの人気が群を抜いて上昇しています。
■PyTorchの特徴
●高機能なプログラムを簡単に記述できる
PyTorchで最も特徴的なのが、プログラム記述がシンプルなので高機能プログラムも簡単に記述できるという点です。直感的にコードを書くことができ、Pythonの拡張モジュールである「NumPy」と操作方法が似ていることから、Python利用者になじみやすいライブラリとなっています。
●動的な計算グラフを導入することでより効率が向上する
もうひとつの特徴は、ほかのライブラリが静的な計算グラフを利用するのに対し、PyTorchは動的な計算グラフ(Define-by-Run)を採用している点です。PyTorchはニューラルネットワークを構築するライブラリで、計算グラフとはニューラルネットワークにおける設計書にあたる部分です。PyTorchで動的に計算グラフを構築することで、柔軟かつより複雑なネットワークを実装しやすくなり作業効率が向上します。
静的と動的の計算グラフはいずれかが優れているというわけではなく、静的グラフの方が適するケースもあるので、状況に応じて活用することが重要です。
■Pytorchの構成とデータ構造
●代表的な構成要素
Pytorchは複数の要素で構成されていますが、代表的な要素は以下となります。
torch:メインのネームスペースでTensor(テンソル)や様々な数学関数が含まれる
torch.autograd:自動微分関数が含まれる
torch.nn:ニューラルネットワーク構築のための様々なデータ構造やレイヤーが定義されている
●PytorchはTensorというデータ構造が基本
PytorchはTensorというデータ構造を基本としています。Tensorはデータ型ごとに定義されている任意の多次元配列で、関数「torch.tensor」を利用することで作成が可能です。GPU上で計算する際は「torch.cuda.FloatTensor」を使用するなど、環境に応じて使い分ける必要があります。
PyTorchのメリット
PyTorchのメリットを以下にまとめました。
■NumPyに近い操作性
「NumPy」とは、Pythonでの機械学習の計算をより速く、効率的に行えるようにする拡張モジュールのことです。PyTorchはNumPyに近い操作性なので、NumPyを利用しているユーザーなら、すぐに使えるメリットがあります。
■優れた柔軟性・拡張性
ディープラーニングモデルを様々なフレームワーク間で交換するためのONNX(Open Neural Network Exchange:オニキス)フォーマットがサポートされているので、ディープラーニングフレームワークで学習させたモデルをほかのフレームワークで利用することができます。また、自動微分の機能が実装されており、関数の勾配ベクトルを自動的に求めることができるので、勾配を使った最適化を簡単に行うことができます。
■コミュニティが活発で参照リソースが豊富
PyTorchは、海外を中心としたコミュニティが活発なので、参照できる情報が豊富に存在するのもメリットといえます。機械学習の最先端の手法や論文が発表されると、その数週間後にはPyTorchでの実装例などがGitHubで公開されることも少なくないようです。今後は人気の上向きに伴い、日本語でのリソースも増えていくことでしょう。
■GPUサポート
GPU(Graphics Processing Unit)の業界最大手のひとつであるNVIDIAが提供する、ソフトウェアライブラリのCUDA(Compute Unified Architecture)を活用できます。強力なGPUサポートを使って、配列(テンソル)演算が可能となります。
■主要クラウドを利用できる
PyTorchは、インストール使用だけではなく、Alibaba CloudやAmazon Web Services、Google Cloud Platform、Microsoft Azureなどのクラウドを利用できるので、シームレスな開発運用が実現します。
PyTorchのデメリット
PyTorchにはデメリットもあります。確認しておきましょう。
■日本語の情報が少ない
PyTorchは現状では日本語の情報が少なく、コミュニティなどから最新情報を入手するには、ある程度の英語力が必要となります。
■APIが低レベル
PyTorchのAPI(Application Programming Interface)は、配列を直接操作する低レベルAPIで、細かい操作や機能が提供される半面、プログラミングの難易度が上がります。そのため使用するには、ある程度の慣れが必要となります。
■研究用途が多い
PyTorchは、研究者の学術研究や論文に多く利用されており、一般用途は少ないのが現状です。一般用途では高レベルAPIが求められるので、これが一般利用増の足かせとなっています。
PyTorchのインストールと基本的な使い方
ここからは、PyTorchのインストールと基本的な使い方を紹介します。
1.インストール方法
■事前にPythonをインストールしておく
PyTorchをインストールする前に、Pythonを端末にインストールしておく必要があります。Pythonは最新版であることが必須条件です。初めて導入する場合は、Pythonの公式ホームページから最新バージョンをインストールしましょう。
■PyTorchをインストールする
PyTorchの公式サイトにアクセスします。PyTorchはWindows・MacOS・Linuxでインストール可能です。
https://pytorch.org/get-started/locally/
■使っているOSやPyTorchのバージョンに合ったインストールコマンドを選択
●PyTorch Build
PyTorch Buildは、どのようなバージョンをインストールするかを示します。特にこだわりがない場合は、安定版のStable1.6.0を選びましょう。
●Your OS
Linux、Mac、Windowsの3つの中から選択します。
●Package
何を使ってインストールするのかを選ぶことができます。Conda、Pip、LibTorch、Sourceの4つの中から選ぶことができ、Windowsにインストールする場合は、Condaが推奨されています。
●Language
Languageでは、使用するプログラミング言語を選択できます。Pythonもしくは、C++/Javaの2種類から選びます。
●CUDA
CUDAのバージョンを選択することができます。ここを間違えるとGPUを使用する設定にしているにも関わらず、GPUを使用せずに動作させてしまうことになります。必ず自分のPCのGPUがCUDAに対応しているか確認してみましょう。
■コマンド実行
項目をすべて選択したら、「Run this Command」の中でインストールコマンドが表示されます。このコマンドを実行すれば、インストールが開始されます。
2.基本的な使い方
■基本操作
最初に、Pythonでtorchライブラリをインポートします。
import torch
データ処理には、「torch.utils.data.DataLoader」と「torch.utils.data.Dataset」の2種類が用意されており、「torch」をインポート後に、以下の関数で読み込みます。
※nn:ニューラルネットワークのモジュール
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
■GPUの利用
GPUとCUDAが利用可能か確認するには、以下の関数を利用します。
import torch
torch.cuda.is_available()
■モデル(Network)の構築
モデルの作成では、使用するネットワークを定義します。PyTorchでは、tourch.nn.Moduleというクラスを継承し、自分でオリジナルのネットワークを作成していくのが一般的です。__init__関数で必要なネットワーク層を定義します。コンストラクタは、nn.Flatten()、nn.Sequential()、nn.Linear()、nn.ReLU()等を用います。クラスのforward関数では、データがネットワークを通過する方法を指定しましょう。
■Tensorの生成と変換
Tensorを作る方法は複数あります。torch.tensor関数に入れ子構造の多次元のlistやndarrayを渡す方法のほか、NumPyと同様にarange、linspace、logspace、zeros、onesなどの定数で作る関数が用意されています。
■学習と最適化
モデルは、学習ループで学習データセットに対して予測を行いパラメータを調整します。その後、テストデータセットに対してモデルのパフォーマンスをチェックします。学習プロセスは数回の反復を経て、予測精度を高めていきます。
まとめ
AI分野の最新の研究成果に多く触れたり、深層学習を行ったりするには、PyTorchを理解していることが欠かせないスキルとなります。PyTorchの知識や技術があると就職や転職に有利となるので、ぜひ身に着けておきましょう。
コメント