PyTorchを使うメリットについて、現役のPythonエンジニアが解説【Kerasとの違いがわかります】
こんにちは。フリーランスエンジニアのmasakiです。
今回は、PyTorchを使うメリットについて解説していきます。
この記事に辿り着いた皆さんは、
PyTorchとKerasの違いがよくわからない。
PyTorchを利用するメリットを知りたい。
などとお悩みではないでしょうか?
実は僕自身も、PyTorchについて全く知らなかった時はこのような悩みを抱えていました。
ですが、PyTorchをひたすら勉強したところ、これらの疑問に明確に答えられるようになったので、今回はその情報について共有していきたいと思います。
それでは早速解説していきます。
目次
- PyTorchとは何か
- PyTorchのメリット
- Define by Runとは何か
- PyTorchのデメリット
PyTorchを使うメリットについて解説
PyTorchとは何か
まず、PyTorchとは何かについて説明します。
PyTorchは、Facebook(現在はMeta)が開発したディープラーニングのライブラリです。
PyTorchという名のとおり、Pythonで書かれています。
元々は、Preferred Networks(PFN)という、ディープラーニングの研究開発をおこなっている日本のスタートアップがChainerというライブラリを作っていたのですが、2019年あたりにPyTorchがそれを飲み込みました。
PyTorchのメリット
ディープラーニングといえば、元々はGoogleが開発したKerasというライブラリが有名でした。
インスタンス生成するだけで簡単にモデルを構築でき、fit()でモデルの学習が一発でできます。
実際のサンプルコードを少しだけお見せるすると、例えば以下のような感じです。
model = keras.Sequential()
model.add(Dense(16, activation='relu', input_shape=(64,)))
model.add(Dense(8, activation='relu'))
model.add(Dense(1))
model.compile(optimizer = "rmsprop", loss='mse', metrics=['mae'])
log = model.fit(X_train, Y_train, epochs=100, batch_size=24, verbose=True, validation_data=(X_valid, Y_valid))
なぜこれほど便利で使いやすいKerasというライブラリがあるにも関わらず、現在ではPyTorchが流行っているのでしょうか?
その理由は、Define by Runという言葉で表されます。
それでは、このDefine by Runとは一体何なのかを次は見ていきましょう。
Define by Runとは何か
Define by Runとは、わかりやすく説明すると、値を計算しながら計算過程を自動的に記録する機能のことです。
Kerasの場合は、学習する際にfit()というメソッドを一発叩くだけで学習ができます。
これは非常に便利なのですが、その反面で計算過程がブラックボックス化されているというデメリットがあります。
このデメリットを解消し、計算過程を可視化できるのがPyTorchの良いところです。
ちなみに、計算過程を可視化した図を計算グラフと呼びます。
計算グラフは例えば以下のような感じです。
パッと見だと意味不明かもですがざっくりと説明すると、図中のPowBackward0というのは一番上のxに対して、2乗などの乗数の計算をしています。
同様に、MulBackward0であれば単純な数値の掛け算、AddBackward0であれば単純な数値の足し算をしているといった感じです。
(※どのような数値がかけられているかなどには興味がないので、計算グラフ上には書かれていません。)
また、KerasよりもPyTorchの方が独自の機能を開発しやすいというメリットもあります。
要はPyTorchの方が色んな局面で応用が利きやすいということです。
これらが、現在ディープラーニングのライブラリでKerasよりもPyTorchが主流になってきている主な要因となります。
PyTorchのデメリット
逆に、PyTorchをKerasと比較した時のデメリットとしては、やはりソースコードを書くのが難しいところです。
特にPython初心者の方にとっては少し敷居が高いでしょう。
まとめ
今回は、PyTorchを利用するメリットについて解説しました。
最後にまとめると、PyTorchを使用するメリットは主に以下の2つになります。
- 計算過程を可視化できる
- 独自の機能を開発しやすい
おまけ
僕の運営しているオンライン型プログラミングスクールCodeCafeでもPythonを教えています。
もし興味がある方は以下の詳細ページをご覧ください。
プログラミングスクール CodeCafeの詳細はこちら