AI推進準備室 > AIrepVol4
「私的AI研究会」レポート VOL.4 †
※ 最終更新:2021/10/18
ディープラーニングのフレームワーク †
ディープラーニングはニューラルネットワークの技術の延長上にあるため、その理解にはニューラルネットワークそのものの理解が欠かせない。
ニューラルネットワーク概要 †
- ニューラルネットワークの構造
・ニューラルネットワークは、複数ニューロンが集まった“層”と呼ばれる構造を内部にもつ。
・最初の層は、入力層と呼ばれ、データが入力される層になり、最後の層は、出力層と呼ばれ、結果を出力する層になる。
0~9までの手書き文字画像を判別するニューラルネットワーク”を考えてみると、入力層の各ニューロンは、手書き文字画像の1ピクセルを入力値として取り、出力層は、入力画像が0?9それぞれの値である確率を出力することになる。
・入力層と出力層の間の層は、隠れ層(または中間層)と呼ばれる。この隠れ層のデザインの自由度は高く、その自由度の高さがニューラルネットワークの優れた表現能力の要因となっている。
→ ニューラルネットワークの「基礎の基礎」を理解する ~ディープラーニング入門|第1回より
- 「define and run」
・ニューラルネットワーク(線で繋がっていることから計算グラフとも呼ばれる)を構築してからデータを流すアルゴリズム。
・ディープラーニングフレームワークで最も有名な「TensorFlow」や「Keras」はこの方式を採用している。
・ネットワークを固定してからデータを流すため、最適化が容易というメリットがあるが、データによってネットワーク自体を動的に変化させるような構造をとることができない。
- 「define by run」
・データを流しながら計算グラフを構築する方式をとるアルゴリズム。
・ディープラーニングが考案された初期は、主に画像処理を畳み込みニューラルネットワークCNN)で行ってたが、自然言語処理や時系列データ処理といった再帰型ニューラルネットワーク(RNN) が利用されるようなアルゴリズムが増えてきた。
・ループ毎に計算グラフ構造が変化することも考慮したアルゴリズムが多い RNN では define by run 方式の方が直感的な記述が可能になる。
・動的な計算グラフ生成は値を見ながら動作させることが可能なので、デバッグがしやすいという大きなメリットを持つ。
・define by run 方式は Chainerを作った PFN(Preferred Networks社)がまず採用した。そして Facebook がその Chainer をフォークして「PyTorch」を作ったということで「Chainer」と「PyTorch」は define by run方式。
→ ディープラーニング初心者がPyTorchを選んだ3つの理由より
代表的なフレームワークの概要 †
- Tensorflow
・Tensorflow はエンドツーエンドかつオープンソースの深層学習のフレームワークであり、Googleによって2015年に開発・公開された。
・Tensorflow は名前の通り、様々なタスクにデータのフローを流しこみ、プログラムを作成するためのフレームワーク。
・Tensorflow にはニューラルネットワークなどの機械学習のアプリケーションに適用できる多くのシンボリックな数学ライブラリが用意されている。
・Tensorflow の「Tensor」は数学の概念の一つで、行列の一般化(n次元化)したものを意味する。
- Keras
・Keras は Python で書かれた高レベルのニューラルネットワーク向けの効果的な API。
・このオープンソースの深層学習ライブラリは、ディープニューラルネットワークを使った高速な実装ができるように設計されており、CNTK、Tensorflow、Theanoなどがバックエンドとして動作する。
・Keras は Google のエンジニアである François Chollet氏によって作り出され、モジュール化やユーザーフレンドリーで、拡張性があることを重視してる。低レベルの計算は処理せずバックエンドの別のライブラリに渡す。
・2017年に、Keras は Tensorflow に導入された。ユーザーは tensorflow.kerasモジュールからアクセスできる。Kerasライブラリは今まで通り独立して動作することもできる。
- PyTorch
・PyTorch は比較的新しい、Torchベースの深層学習フレームワーク。
・Facebook の AIグループによって開発され、2017年にGithubのオープンソースとして公開された。
・PyTorchはシンプルで使いやすいことで有名。また、柔軟性、メモリの効率的な使用、動的な計算グラフなどについても高い評価を得ている。
・さらに、Pythonを利用すると、コーディングをより管理しやすく、処理速度が速くなる。
→ TensorflowとKeras、PyTorchの比較より
代表的なフレームワークの人気度 †
- Googleトレンドで各ディープラーニングのフレームワーク毎に検索インタレストを調べた結果。(日本のみで縦軸は月の合計)
※ 2019年12月「Chainer」のメジャーアップデート終了 米 Facebookが主導する深層学習フレームワーク「PyTorch」へ順次移行が発表された。
→ ディープラーニング初心者がPyTorchを選んだ3つの理由より
PyTorch の概要 †
PyTorch の特徴・長所 †
- PyTorch は Numpy と似ている
・機械学習ライブラリ・PyTorch は Numpy の基本的な操作方法と酷似している。
・Numpy は、Python における機械学習でのプロセスで必須と言えるライブラリ。
・Numpy の使い方・操作方法を知っているエンジニアは多い傾向にあり、そんなNumpyと似ているPyTorchも同じような操作感で使用できる。
- PyTorchの設計は動的な計算グラフ
・PyTorchの設計的な部分での特徴として、動的な計算グラフであることが挙げられる。
・ニューラルネットワーク(nn)を構築するライブラリの定番製品の多くは、静的な計算グラフを用いている。
・計算グラフはニューラルネットワークにおける設計書にあたる部分であり、この違いがライブラリを活用する上で非常に重要。
・柔軟であるがゆえに複雑なネットワークを実装しやすいという特徴を持つ、動的な計算グラフを導入することでより効率が向上する場面はいくつもある。
・一方で動的な計算グラフよりも静的なものの方が適するケースもあるため、状況に応じて活用することが大切。
・他のライブラリと比較して、簡潔な記述が可能である点も大きな特徴であり長所の1つ。
・機械学習においての手法や論文が学会にて発表されると、その後にそれを応用したPyTorchによる実装例が公開されるケースが多い。
・人工知能の分野においての最先端の研究者が使用している事例も増えており、PyTorchの海外コミュニティも活発であり参考となるソースが多い点もシェアが高い理由の1つと言える。
PyTorch のインストール方法 †
- 事前準備
・PyTorch をインストールするには、まず事前に Pythonをインストールしておく必要がある。
・Python の公式ホームページへとアクセスすれば最新バージョンを簡単にダウンロードすることができる。
・GPU を使用できる構成で PyTorch をインストールする場合、インストール時に CUDA Toolkit のバージョンを指定する必要がある。
- PyTorchのインストール
・公式サイトへとアクセスして、「QUICK START LOCALLY」と書かれた箇所までスクロールして自身のパソコンの環境と照らし合わせる。
・OSや現在の環境にマッチしたビルドバージョン、適したプログラム言語を選択する。
・全て選択を終えたら「Run This Command」と書かれた欄の横に、バージョンや OSに従ったインストール実行のためのコマンドが表示される。
・この文字列をコピーして、コマンドプロンプトへと貼り付けて実行する。
・実行後にPyTorchのバージョン情報が表示されればインストールは成功。
・PyTorch は Windows と Mac の他に、Linux環境でも動作が可能。
・Windows環境においては、Anaconda経由でインストールすることが推奨されている。
・オンライン環境でも試したい場合は、Googleの研究プロジェクトの1つである Google Colab で作動させることもできる。
機械学習の普及を目的としたプロジェクトのライブラリであるため、必要な汎用的なライブラリはほとんどインストールされていて、容易に始められる。
PyTorch の構成 †
- PyTorch のパッケージ構成は、基本的なデータ構造を示す Tensor(テンソル)や色々な数学関数が含まれている torch は、主力のネームスペース。
- Numpyと似た構造を持っているパッケージであり、Numpyでは配列のサイズを shape属性で確認を行うが、PyTorchでは sizeのメソッドで確認ができるなど構造的に類似点が多い
- Tensorとの類似点では print(x + y) が print(torch.add(x + y)) になったりとほぼ同じ構造をしている。
- 自動微分のための関数が含まれている autograd、ニューラルネットワークを構築する上で必要なレイヤーが定義されている torch.nnも重要なパッケージ構成の1つ。
- パラメータ最適化アルゴリズムが実装されている optim や、SGD の繰り返し計算のための関数が含まれている utils.data モデルを書き出すための onnx などが含まれる。
PyTorch の活用例 †
- 基本となるデータ構造 Tensor について
・メインとなるネームスペースである torch に含まれており、多次元配列を扱う。
・Numpy における ndarray とインターフェイス構造がほとんど同じであり、GPUの演算のサポートも行う。
・Tensor の生成は、入れ子構造である list および ndarray を torch.tensor関数に渡す。
- PyTorch を使った重回帰分析の活用事例
・ノートブックを立ち上げて、データの特徴や傾向を探り、データを整えるところは Pandas や Numpy で行う。
・前処理が終わり、データを target(y) と特徴量(X)に切り分け、trainデータと testデータに分けたら Pytorchのモジュール(tourch.nn)をインポートし線形回帰は nn.Linear()を利用する。
・実行コードは下記4つのステップになる
① 反復処理回数を設定。通常2の n乗が使われ、データ数が数百件程度なら 32,64 辺りを試してみる。
② 特徴量と targetを from_numpy()で Numpy配列から Tensor へ変換。
③ 推測値を出力し、コスト関数(Loss)と実際値を比較してコストを算出。
④ 誤差逆伝播(ニューラルネットワークの逆方向に合成関数の偏微分の公式を当てはめていくことで、勾配の計算を効率的に行う方法)の処理を実行する。
- その他デバイスの指定によって GPU に作成したり、dtypeを選択することで倍の精度の Tensorが生成可能。
・GPU上に生成した分については、そのままでは変換・出力できないため一度 CPU に移す必要がある。
- Tensorでは定義したグラフ・計算式に対して、事前に保持した情報をもとに計算を行う自動微分が可能。
・最初にTensorの定義を設定して計算グラフを作成しておき、勾配の計算を行うことにより動作する。
- 自動微分によって、求めた値のグラフを描画することもできる。
→ PyTorchとは?特徴やメリット、PyTorchのインストール方法まで紹介より
更新履歴 †
参考資料 †