Pytorch入門
PyTorchは数あるPython向けの機械学習ライブラリの1つであり、近年人気が高まっているものでもあります。Pythonを使ったAI開発を考えている方の多くが聞いたことはあるはずですが、どのように使えばよいかよく分からない方も多いのではないでしょうか。
本記事では、PyTorchの概要を説明しつつ、入門としての基本的な使い方やより深く学ぶための方法を解説していきます。
PyTorchとは
PyTorchとは、2016年からリリースされているPython向けの機械学習ライブラリです。Facebookで開発された本ライブラリは、他のPythonライブラリと同様にオープンソースであり、誰でも無料で使用することができます。その自由度の高さや使いやすさから、世界中のユーザの中で人気が高まっており、アップデートも盛んに行われています。
これからPythonを使ってディープラーニングを含むAI開発を行いたいと考えている方にとって、その概要や使い方を知っておいて損はないでしょう。
【参考】:Pytorch
PyTorchで何ができる
PyTorchを使うとどのようなことができるのでしょうか。機械学習向けに開発されただけあり、線形回帰などの基本的な回帰計算や、ニューラルネットワーク生成などディープラーニング関連の処理も容易に行うことができます。
他の大手の機械学習ライブラリが備えている自動微分、GPU連携機能も含まれているため、他のライブラリに比べて劣っているということもありません。
ただし、PyTorch はニューラルネットワークの構築方式に「define by run」を採用しており、ここがKerasやTensorFlowなど他のメジャーなライブラリが採用している「define and run」と異なる点です。どちらの方式もメリットはあるので、使用目的に応じてライブラリを使い分けましょう。
Pytorchのメリット
PyTorchを使用するにあたってのメリットは以下の通りです。
◼︎直感的にコーディングを行える PyTorchがサポートするデータ型のTensorはNumpyと使い方が非常に似ているため、使い勝手が良く、Pythonを扱ったことがあればスムーズにコーディングを行うことができるでしょう。TensorがGPU演算にそのまま使える点もそれを助けています。
◼︎ニューラルネットワークのデバッグがし易い ニューラルネットワークの構築方式に「define by run」を採用しており、ネットワークにデータを流しながら構築を行うことができます。他のライブラリでは「define and run」であらかじめネットワークを構築する必要があり、デバッグがし辛く、初心者にとっては扱いづらいという点があります。
◼︎最先端のアルゴリズムを活用できる 上記のメリットもあり、PyTorchは研究分野で非常に活発に使われています。そのため、最先端の研究結果を自分で試してみることができ、AI関連の技術についても最先端を取り込むことも可能です。
PyTorchの基礎知識
PyTorch についての概要を説明してきました。次に、実際に使っていくにあたって知っておくべき基礎知識を説明します。
PyTorchの基本構成
PyTorchは他のライブラリと同様にパッケージをインポートして使用する形であり、torchというモジュールがベースです。その下に、機械学習に関連した以下の代表的なパッケージが付属しています。
- autograd・・・自動微分を行うためのパッケージ
- nn・・・ニューラルネットワークを構築するためのパッケージ
- optim・・・パラメータ最適化アルゴリズムが含まれるパッケージ
- utils.data・・・主にデータ操作を行うユーティリティ関数が含まれたパッケージ
- onnx・・・Open Neural Network Exchangeと呼ばれるニューラルネットワークを他ライブラリと共有できる機能を持ったパッケージ
もちろん上記はほんの一部で、公式ページでは膨大なパッケージから構成されていることが分かります。
【参考】:PyTorchの構成
データ構造Tensor
PyTorchではデータ操作を容易に行うために、独自のデータ形式Tensorが定義されています。torchの下に構成されているtensorは、GPU上でもそのまま使用できる上に、numpyのndarrayを扱うようにデータ操作を行えるため、非常に使い勝手がよい型です。2次元のベクトルや行列も簡単に定義できます。
例えば、以下のような形です。
vector_sample = torch.tensor([1,2])
matrix_sample = torch.tensor([1,2],[3,4])
ランダムなデータも以下のようにtensor型で作成可能です。
rand_sample = torch.rand(3,4)
この例では、3×4のサイズで各要素が0~1の間でランダムとなる行列を生成することができます。
GPUとの連携
機械学習、とりわけディープラーニングを扱っていくには、高速演算を行えるGPUとの連携が欠かせません。PyTorchでもコード内で明示的にGPU演算を行うことができます。
Tensor型はそのままの状態でGPUへデータを転送することができるだけでなく、初期化の時点でGPU上にTensorを作成することもできます。
tensor_gpu = torch.tensor([1,2], device=torch.device('cuda'))
以下がGPUとCPU間でのデータやり取りの例です。
tensor_cpu = tensor_gpu.to('cuda')
tensor_gpu = tensor_cpu.to('cpu')
PyTorchの使い方
PyTorchの基礎を解説した次は、実際のコーティングにおける使い方を説明していきます。ここでは、データセットに対してニューラルネットワークで機械学習を行っていく例を紹介します。
datasetの定義方法
まずは基本として、機械学習に使用するデータセットの定義方法です。PyTorchではDataset型と呼ばれる独自のデータセット型が用意されており、この型を使用して機械学習を進めることが基本です。この型では、通常のデータセットと同じく特徴量Xとラベルyから構成されていますが、それぞれTensor型になっているところが特徴的です。
Dataset型を定義するには、Numpyの配列で特徴量Xとラベルyのデータを用意し、下記のように処理する必要があります。
Sample_dataset = torch.utils.data.TensorDataset(X, y)
配列と同じようにdataset型のインデックスを指定すれば、ラベルと対応した特徴量を取得することができます。
DataLoaderによるミニバッチの作成
データセットが用意できたら、元の学習データから一部を取り出してミニバッチを作るケースが多いと思います。このミニバッチの作成には、DataLoderというクラスを使用します。元のdatasetからDataLoaderでミニバッチを作るには、下記のようなコーディングをすればいいでしょう。
batch_size = 32
load_batch = torch.utils.data.DataLoader(Sample_dataset , batch_size, shuffle=True)
shuffleがTrueなのでランダムにデータが抽出される形です。
ニューラルネットワークの生成
学習データが用意できたら、学習モデルであるニューラルネットワークを作成していきましょう。ここでは最もシンプルなSequentialモデルで作成していきます。例として、Sequentialモデルに活性化関数をReLUとして、以下のように定義します。
neural_network = torch.nn.Sequential(
torch.nn.Linear(64, 32),
torch.nn.ReLU(),
torch.nn.Linear(32, 24)
torch.nn.ReLU(),
torch.nn.Linear(24, 8)
)
データの伝搬
最後に、データの伝搬を行う方法を紹介します。先ほど作成したニューラルネットワークに対してミニバッチを下記のように伝搬させます。
output = neural_network(load_batch)
ニューラルネットワークの学習ができていれば、これで出力結果を得ることができます。
Pytorchをより学ぶために
PyTorchに関する入門とも言える使い方を紹介しましたが、まだまだ使える機能はありますし、日々アップデートもされています。もっと使いこなせるようになるためにはどうすればよいでしょうか。具体的な方法を紹介していきます。
PyTorchのチュートリアル
まず始めに見るべきは公式のチュートリアルです。それなりのボリュームがあり、基礎からディープラーニング含めたアルゴリズムの適用まで学ぶことができます。公式サイトでは英語ですが、日本語訳がされており、英語が分からなくても安心して取り組むことができます。コーディングをしながら学ぶことができる点もポイントです。
いきなりチュートリアルを始めるのも良いですが、本記事である程度全体を把握しておくことで、よりスムーズに学ぶことができるでしょう。注意点として、Google Colaboratoryを使用する前提の構成となっています。
【参考】:PyTorchチュートリアル
PyTorchの入門書
チュートリアルを全てこなすだけでは物足りない場合には、書籍を活用してより理解を深めるとよいでしょう。書籍1冊の中には、多くの知識が凝縮されているため、読破すればかなりの知識を身に付けることができます。
加えて、チュートリアルにはなかった新たな視点も見つけることができるでしょう。入門書としては「最短コースでわかる PyTorch &深層学習プログラミング」がおすすめです。付録のマップで学習の立ち位置が分かるほか、サポートサイトに用意されたサンプルコードも充実しています。
■最短コースでわかる PyTorch &深層学習プログラミング ▪著者:赤石 雅典 ▪ページ数:584ページ ▪出版社:日経BP ▪発売日:2021/9/21 【参考】:最短コースでわかる PyTorch &深層学習プログラミング
オンライン講座
チュートリアルの時点でつまづいてしまっても諦めてはいけません。公式のチュートリアルは必ずしも分かりやすい内容になっているわけではないので、特に初心者の方には難しいかもしれません。
そういった場合には、オンライン講座を利用してみるのも1つの手です。自ら文字を読むよりも動画付きの講義を受講する方がより頭に入りやすいこともあります。Udemyの「【Hands Onで学ぶ】PyTorchによる深層学習入門」では、5時間に渡るオンデマンド動画を視聴しながらPyTorchを使ったディープラーニングを学ぶことができます。ハンズオンの講義なので、コーディング技術についても身に付けることが可能です。
【参考】:【Hands Onで学ぶ】PyTorchによる深層学習入門
PyTorchで最先端のAI技術を身に付けよう
本記事では、PyTorchの概要や基礎知識から使い方までを入門として説明しました。インストールしたはいいものの、具体的にどのように使うのか、何ができるのか分からなかった方も、イメージが掴めたのではないでしょうか。
PyTorchは近年人気が高まってきており、特に研究分野で使用されることが増えてきています。そのため、論文などを通じて最先端のアルゴリズムを気軽に試すことも可能です。教科書では学べない最先端の技術を学ぶことができる点も、PyTorchの魅力的な点の1つです。みなさんも、使いやすく最新のAI技術も利用できるPyTorchを積極的に勉強していきましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから