随時更新していくので今後少しずつ内容を増やしていきます。
ディープラーニングのフレームワーク・ライブラリ
とりあえず僕の知っている主なものを挙げると
- PyTorch
- TensorFlow
- Keras
などがある。PyTorchは公式サイトに
An open source machine learning framework that accelerates the path from research prototyping to production deployment.
と書いてあり、太字の部分の訳は「オープンソース機械学習フレームワーク」なのだが、使ってみた感じそこまでフレームワークしてない気がする。僕の感覚としてはライブラリに近い感じ。
フレームワークというとゲームプログラミングなどの大部分のプログラムの流れは完成していて、固有の処理を付け足すだけというものを想像するのだが、PyTorchはそうではない。
ディープラーニング全体の流れをコードで実装する必要がある。
ディープラーニングのフレームワーク・ライブラリは数あれど、フレームワークとライブラリはなんとなくごっちゃに語られている模様。例えばPyTorchをライブラリだという人もいたり。
Kerasは既にTensorFlowに取り込まれているので、TensorFlow(Keras)とするべきかもしれない。
各フレームワークの所感
以前Kerasを含まないTensorFlowを勉強した際、非常に複雑面倒でなんじゃこれという感じだった。
ただ、実装が容易なKerasを取り込んだTensorFlowはPyTorchより簡単になったのではないだろうか。
TensorFlow(Keras)を最近使っていないので正確なことは言えないが、PyTorchは研究向けであり、細かいカスタマイズができる反面、チャチャッと使うには少々面倒な雰囲気が出ている。(自分が公式チュートリアルを読んだ感じ)
【追記】当初のTensorFlowのDefine-and-Runの思想が根強く残っており、KerasのAPIを利用したとしても自分オリジナルの機能を作ろうとすると途端に難しくなる。
TensorFlowはデータを流す前にネットワークを定義しなければならないため、テンソルを流しつつ値を見てデバッグなどが難しい。その点、PyTorchはDefine-by-Runなのでデータを流しつつデバッグしながらネットワークを少しずつ組み立てられる。
ただ、自分オリジナルの機能を作らないのであれば、Keras + TensorFlowはお手軽ではある。
ディープラーニングフレームワークの学び方
各フレームワークそれぞれ公式のチュートリアルが充実しているので、チュートリアルの基礎的っぽい部分から少しずつ熟読して覚えていくのが良いと思う。
英語の場合が多いが、Chromeで翻訳すればおおよそ内容はつかめる程度に翻訳してくれる。
最初に学ぶのに個人的におすすめはPyTorch。
これはKeras + TensorFlowとPyTorchを両方触ってみた所感。
PyTorchのチュートリアルを基礎っぽい部分から一つずつクリアしていき、書いてあるコードはコピペでもいいのでローカルで実行してみて、printデバッグで流れているTensorのshapeやらデータタイプやら、中身やらを確認しながら進めると理解が深まる。
この点、Keras + TensorFlowだと流れている途中のTensorを確認するのは難しい。
チュートリアルで基礎を身に着けたら、自分の興味あることをググって出てきた記事を読み、コードはローカルで実行して知識を増やしていく。
プログラミングに関しては数冊の本よりネットの方が情報が何倍も多いのでネットの情報をうまく活用できるスキルを身につけると良いかも。
ググる力!!!
本は後で買う
本は最新のものを買ってもすぐに古くなるので、常に最新の情報が載っている公式チュートリアルで学ぶのがお金の節約になっておすすめ。
それに、例えばPyTorchの本を買っても内容のほとんどが公式チュートリアルの二番煎じだったりする。
プログラミング関連の本はたまに公式のチュートリアルの英語をほぼ日本語にしてちょっと加筆したような本があるので注意。
どうしても本で学びたいのであれば、KerasやTensorFlow、PyTorchなどのフレームワークの使い方を説明する本よりもディープラーニングの仕組みを丁寧に説明した「ゼロつくシリーズ」がおすすめ!
アマゾンの評価も非常に高いし、内容も非常に良かったのでおすすめです!
1回通読しただけじゃよく分からないかもしれませんが、PyTorchなどのフレームワークを使うことを実践とするなら、この本は理論を説明しています。
実践と理論をバランスよく反復すると両方徐々に理解できてきます。
RNN
YouTube動画資料
Transformer / Attentionの参考記事
追記
最近ちょっと考えが変わってディープラーニングや機械学習の内部の仕組みを理解することがそんなに大事ではないと思うに至った。
理論や実装の細部にこだわる・理解することは大事だが、もっと大きな視点で技術ブロックを組み合わせて面白いものを作ることが大きな価値を持つのではないか。などと・・
追記2
とは言ったが、やはり実際にディープラーニングのモデルを改造しようとすると理論的な知識が必要になってくる。
大きな視点で技術ブロックを組み合わせる技術、それぞれの技術ブロックの最低限理解しておくべき仕組みを理解しておくこと、両方大事かもしれない。