PyTorchは、Torchの機械学習(ML)ライブラリーとPythonベースの高レベルAPIを組み合わせた、ニューラル・ネットワークを構築するために使用される、ソフトウェアベースのオープンソースのディープラーニング・フレームワークです。その柔軟性と使いやすさから、学術・研究コミュニティーの主要な機械学習フレームワークとなっています。
PyTorchは、単純な線形回帰アルゴリズムから、コンピューター・ビジョンや自然言語処理(NLP)などのタスクに使用される複雑な畳み込みニューラル・ネットワークから生成変換モデルまで、多様なニューラル・ネットワーク・アーキテクチャーをサポートしています。PyTorchは、広く知られているプログラミング言語「Python」をベースに組み込まれており、事前構築済み(さらには事前学習済み)モデルの広範なライブラリーを提供しています。データサイエンティストは、コードと数学関数に費やす時間と労力を最小限に抑えながら、高度なディープラーニング・ネットワークを構築・実行することができます。
また、データサイエンティストは、コード全体が実装されるのを待たずに、コードの一部をリアルタイムに実行してテストすることができます(大規模な深層学習モデルでは、非常に長時間かかることがあります)。これにより、PyTorchはラピッド プロトタイピングに優れたプラットフォームであり、デバッグ・プロセスも大幅に高速化できます。
Facebook AI Research(現Meta)によって開発されたPyTorchは、2017年にオープンソースになり、2022年からはPyTorch Foundation(より大きなLinux Foundationの一部)に管理されています。同組織は、ディープラーニング・コミュニティーがPyTorchエコシステムのさらなる開発に協力するための中立的な組織として機能しています。
IBMは、2023年にPyTorch Foundationの主要メンバーとなり、すでに2つの主要プロジェクトに協力してきました。数十億のパラメーターを備えた、柔軟なAI基盤モデルの効率的なトレーニングを可能にすることと、AIトレーニングのチェック・ポイント作成の費用対効果を大幅に改善することです。IBMのwatsonxプラットフォームは、PyTorchを活用して、エンドツーエンドのトレーニングからモデルのファイン・チューニングまで、AI基盤モデルのためのエンタープライズ・グレードのソフトウェア・スタックを提供しています。
PyTorchの数学的およびプログラミング構造により、ディープ・ニューラル・ネットワークの複雑さやパフォーマンスを制限することなく、機械学習のワークフローが簡素化および最適化されます。
Pythonは、データサイエンスで広く使用されている汎用の高水準プログラミング言語であり、ディープラーニング・ネットワークのモデリングを行うデータサイエンティストは、直感的に作業できます。Pythonのシンプルな構文は読みやすく、習得にそれほど時間がかからず、Windows、macOS、Linux、Unixなどのオペレーティング・システム上で実行できます。Pythonは3年以上にわたり、GitHub上で2番目に使用されているプログラミング言語であり、2019年にJavaを上回りました。2022年には22.5%増加し、その人気は高まり続けると予想されています。1
この柔軟性とシンプルさは、Python開発者の強力なオンラインコミュニティーを育むのに役立っており、数学演算用のNumerical Python(NumPy)、データ操作用のPandas、データの可視化用のmatplotlibなど、さまざまなPythonライブラリーとAPI、教育リソースで協力されています。また、このコミュニティーは、機械学習のコーディングの単調さや当て推量を減らし、機械的な作業ではなく、開発者やデータサイエンティストがイノベーションに集中するための膨大なPytorchライブラリーを作成しています。
機械学習アルゴリズムでは、音や画像などの表面上は数値でない情報に適用されるアルゴリズムであっても、データは数値で表現する必要があります。PyTorchでは、テンソルによってこれを実現します。テンソルは、プラットフォーム上の計算に使用されるデータの基本単位です。
機械学習の文脈では、テンソルは数学の簿記装置のように機能する、数値の多次元の配列です。言語的には、「テンソル」は、よりよく知られた数学的実体を含む、一般的な用語です。
PyTorchのテンソルは、NumPyのndarrayと同様に機能します。ただし、中央処理装置(CPU)上でのみ実行できるndarrayとは異なり、テンソルは画像処理装置(GPU)上でも実行できます。GPUでは、CPUよりも劇的に高速な計算が可能になります。これは、ディープラーニングに必要な膨大なデータと並列処理において、大きな強みになります。
PyTorchのテンソルは、モデルの入出力をエンコードするだけでなく、モデル・パラメーター、つまり機械学習で「学習」される重み、バイアス、勾配もエンコードします。テンソルのこの特性により、PyTorchの最も重要な機能の1つである自動微分が可能になります。
PyTorchは深層学習モデルの構成要素としてモジュールを使用するため、各アルゴリズムを手動でコーディングするという面倒な作業を行うことなく、ニューラル・ネットワークを迅速かつ簡単に構築できます。
モジュールには、他のネストされたモジュールを含めることができます(多くの場合、実際に含まれます)。これにより、より精巧な多層ニューラル・ネットワークの作成が可能になるだけでなく、これらの複雑なディープラーニング・モデルを単一の名前付きモジュールとして簡単に保存し、異なるマシン、CPU、またはGPU間で転送できるようになります。PyTorchモデルは、Torchscriptを使用して、C++のようなPython以外の環境で実行することもでき、研究でのプロトタイプと実稼働環境のギャップを埋めるのに役立ちます。
PyTorchでディープラーニング・モデルを構築および最適化するために使用されるモジュールには、大きく分けて次の3つの主要なクラスがあります。
nnモジュールは、ニューラル・ネットワークの層として展開されます。torch.nnパッケージには、畳み込み、プーリング、回帰などの一般的な操作を実行するモジュールの大規模なライブラリーが含まれています。例えば、torch.nn.Linear(n,m)は、n個の入力とm個の出力を持つ線形回帰アルゴリズムを呼び出します(最初の入力とパラメーターは、後続のコード行で確立されます)。
autogradモジュールは、ニューラル・ネットワーク内で動作する関数に対して、勾配降下法を介してモデル・パラメーターを最適化するために使用される勾配を自動的に計算する、簡単な方法を提供します。require_grad=Trueを指定してテンソルを追加すると、そのテンソルに対するすべての操作を追跡する必要があることをautogradするため、自動微分が可能になります。
Optimモジュールは、最適化アルゴリズムをそれらの勾配に適用します。Torch.optimは、特定の最適化ニーズに合わせて、確率的勾配降下法(SGD)や二乗平均平方根伝播(RMSprop)などのさまざまな最適化手法のモジュールを提供します。
動的計算グラフ(DCG)は、深層学習モデルをPyTorchで表現する方法です。抽象的に言えば、計算グラフは、数学システム内のさまざまな操作間のデータの流れをマッピングします。深層学習の文脈では、計算グラフは基本的に、ニューラル・ネットワークのコードをフローチャートに変換し、各ノードで実行される操作と、ネットワーク内の異なる層間の依存関係(入力データを出力データに変換するステップとシーケンスの配置)を示します。
動的計算グラフ(PyTorchで使われているようなもの)が静的計算グラフ(TensorFlowで使われているようなもの)と異なる点は、DCGは計算の正確な仕様と計算間の関係を実行時まで延期することです。言い換えると、静的計算グラフを実行するには、ニューラル・ネットワーク全体のアーキテクチャーを完全に決定してコンパイルする必要があるのに対し、DCGはその場で反復および変更できます。
このため、DCGはデバッグやプロトタイピングに特に有用です。モデル全体をリセットすることなく、モデルのコードの特定の部分を変更したり、切り離して実行できるからです。高度なコンピューター・ビジョンやNLPタスクに使用される極めて大規模な深層学習モデルでは、時間と計算リソースの両方を無駄に浪費することになります。バックプロパゲーション中に動的計算グラフを逆方向に簡単に生成できるため、この柔軟性の利点はモデルのトレーニングにも及びます。
静的計算グラフは、固定構造によって計算効率を高めることができますが、柔軟性は限られています。例えば、さまざまなサイズの画像を処理できる畳み込みニューラルネットワーク(CNN)のように、入力データに応じて層数を変化させるモデルを組み込むことは、極めて困難です。
ニューラル・ネットワークのトレーニング(特に教師あり学習)に広く使用されている方法の1つは、バックプロパゲーションです。まず、順方向パスでは、モデルにいくつかの入力(x)を与えて、いくつかの出力(y)を予測します。その出力から逆算して、損失関数を使用して、さまざまなx値でのモデルの予測の誤差を測定します。その損失関数を微分して導関数を見つけることにより、勾配降下法を使用して、ニューラル・ネットワークの重みを一度に1層ずつ調整できます。
PyTorchのautogradモジュールは、微分の連鎖律を使用した自動微分技術を強化し、より単純な導関数に分割し、後で結合することで複雑な導関数を計算します。Autogradは、計算グラフで実行されるすべての操作の勾配を自動的に計算して記録し、バックプロパゲーションの作業を大幅に軽減します。
すでにトレーニング済みのモデルを実行する場合、autogradは計算リソースを不必要に使用することになります。require_grad=Falseを指定してテンソル演算を追加すると、勾配の追跡を停止するように、PyTorchに通知されます。
深層学習モデルのトレーニングに必要な膨大なデータセットの操作は、複雑で計算量が多くなる場合があります。PyTorchは、データの読み込みを容易にし、コードを読みやすくするために、データセットとデータローダーという2つのデータ・プリミティブを提供します。
PyTorchのコア機能は、PyTorchコミュニティーのメンバーによって開発されたツール、ライブラリー、拡張機能なロバストなエコシステムによって補完されています。プリインストールされたTorchライブラリーを補完するために、目的別モジュール、事前構築されたニューラル・ネットワーク、さらには事前トレーニングされたモデルを含む、多くのオープンソース・ライブラリーが利用可能です。
Torchvisionは、さまざまな画像分類、オブジェクト検出、画像セグメンテーションタスクのためのモジュール、ネットワーク・アーキテクチャー、およびデータセットを含むツールキットです。
TorchText は、自然言語処理で使用するためのデータセット、基本的なテキスト処理変換、事前トレーニングされたモデルなどのリソースを提供します。
Open Neural Network Exchange(ONNX)は、AIフレームワーク間の相互運用性を保証し、ユーザーがPyTorchモデルを他のプラットフォームに簡単に移行できるようにします。
PyTorch.orgで多くの役立つチュートリアルをご覧いただけます。例えば、この中級のチュートリアル、ビデオゲームをプレイするAIをトレーニングすることで、深層強化学習の基礎を学ぶことができます。
PyTorchは、ローカル・システムとクラウド・プラットフォームの両方に、さまざまな構成でインストールして実行できます。
PyTorchをローカルで実行するには、Anacondaパッケージマネージャー、Homebrew、またはPythonのWebサイトのいずれかからPythonをインストールする必要があります。
PyTorchは、コマンド「conda install pytorch torchvision -c pytorch」を使用して、Anaconda経由でローカルにインストールするか、コマンド「pip3 install torch torchvision」を使用して、pip経由でローカルにインストールできます。Anacondaは、すべてのPyTorchの依存関係(Pythonを含む)を1つのサンドボックス・インストールで提供しているため、推奨されます。2
PyTorchは、Amazon Web Services、Google Cloud、Microsoft Azureなどのクラウド・プラットフォーム上でも実行できます。
PyTorchのCUDA(Compute Unified Device Architecture)のサポートを利用するために、NVIDIA GPUを使用することが推奨されます(必須ではありません)。
1 「Octoverse 2022: The top programming languages」、Github社、2022年11月17日
2 「PyTorch: Get Started – Start Locally」