【初学者向け】機械学習の主要なフレームワークをわかりやすく解説！

# はじめに
初めまして。
株式会社キカガクの安藤です。
ㅤ
AI 開発・機械学習で、プログラミングをするのであれば Python がメジャーです。2020 年におけるプログラミング言語のランキングでは必ずと言っていいほど Python が上位にきます。

Python には多くの**フレームワーク**があり、開発に適したものが豊富に用意されています。
今回は、ディープラーニング (Deep Learning) 用フレームワークをご紹介します。

# 本記事を参考にして欲しい方
本記事では、以下のような方にオススメです。

* **Python の主要なディープラーニング用フレームワークを簡単に確認したい方**
* **初学者の方で学習、実装の為にどのフレームワークを使っていけばいいか分からない方**

※初学者の方に向けた分かりやすさを重視しています。

# 目次
 1. **ディープラーニング・フレームワーク・ライブラリ・ API とは**
 * **フレームワークの種類**
 * **傾向**
 * **まとめ**
 * **お知らせ**
 * **参考**

# 1. ディープラーニング・フレームワーク・ライブラリ・ API とは

最初にディープラーニング・フレームワーク・ライブラリ・ API が分からないと理解しづらいので簡単にご紹介します。
### ディープラーニングとは



**ディープラーニングとは、人間が行うようなタスクをコンピューターに学習させる機械学習の手法です。**コンピューターの中で、脳の神経回路を真似して作られた仕組みであるニューラルネットワークを、何層にも深くしていく事で作られた仕組みの事をいいます。


### フレームワークとは

**フレームワークとは、プログラミングにおいて、全体の処理の流れが予め実装されている枠組みの事を指します。**使用する事で、開発による時間とコストを大幅に削減出来ます。予め実装されている事で、一部の具体的な処理を実装すれば容易にアプリケーションを作成出来ます。


### ライブラリとは
**ライブラリとは、プログラミングにおいて、汎用的に使うプログラムだけを取り出してまとめた物の事を指します。**フレームワーク同様、使用する事で開発による時間とコストを大幅に削減出来ます。ライブラリは単体でプログラムを動かすことはできません。実行する為のものではなく、あくまで便利なソースコードをまとめた物なので、機能を追加する為の部品のような物になります。

### API とは
**API とは、アプリケーションプログラミングインターフェース (Application Programming Interface) の略称です。アプリケーションに他のプログラムの機能を追加・連携させるための物の事を指します。**実装例として普段使っているアプリケーションに LINE 等への連携機能があります。他にも会員登録が必要なサイトでは、Google アカウントを新規アカウント代わりにする事等があげられます。



※フレームワーク・ライブラリ・ API の違いをより詳しく理解したい方は、以下のページを参考にしてみてください。
参考：[14. Chainer の基礎 — ディープラーニング入門：Chainer チュートリアル](https://tutorials.chainer.org/ja/14_Basics_of_Chainer.html#note1)
参考：[フレームワークの意味とは？](https://www.geekly.co.jp/column/cat-technology/2003_013#API)
ㅤ



# 2. フレームワークの種類
## **TensorFlow（読み方：テンソルフロー、テンサーフロー）/ Keras（読み方：ケラス)**
![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTaIeTTAkEoCKllp2VTUDYgfZ0P9XB6jtRmWg&usqp=CAU)![](https://media-exp1.licdn.com/dms/image/C560BAQG2-bElRVrSqw/company-logo_200_200/0/1547450366259?e=2159024400&v=beta&t=OpI315QOVOkFjDgZPAGF_Kw7N490Y6bkILBCrjliQUQ)

### TensorFlow とは
**TensorFlow とは、Google 社により開発されたオープンソースのディープラーニング用フレームワークです。**
ユーザー数が世界で多い為、よく使われているフレームワークとも言われています。個人はもちろん商用利用でも無料で使えるものです。公式サイトには、チュートリアルや事例、初学者の方がゼロから学ぶためのストーリーも紹介されていますのでご覧ください。
参考：[ニューラルネットワークの実装（分類） - KIKAGAKU](https://free.kikagaku.ai/tutorial/basic_of_deep_learning/learn/tensorflow_classification)
公式：[TensorFlow](https://www.tensorflow.org/?hl=ja)


### 特徴

**ハイレベルかつ豊富なサポートがあり、ビジネスでの複雑な問題等にも対処しやすいフレームワークです。**また多くの OS (Linux、macOS、Windows etc) 上でほとんど変更なしに実行が行えます。利用者同士のコミュニティもあり、相談や問題解決ができる場もあるので、初学者の方が取り組みやすい環境です。

使えるプログラミング言語は Python の他にも、C 言語、C++、Java、Go が対応しています。公式チュートリアルでは Python を利用しての説明が進められているので、Python での実装が取り組みやすいです。

使用例としては、Google の言語翻訳、音声検索、画像検索に使用されています。
他にも購入者に対してのオススメ機能であったり、ネットワークの異常検知、簡易的な購入証明機能、不正検出、テキスト分類が公式であげられています。
Twitter では、タイムラインのランク付けをすることで重要なツイートを見逃さないようにする機能を作成しています。
参考：[事例](https://www.tensorflow.org/about/case-studies?hl=ja)

### Keras とは
**TensorFlow 上で使用出来る、機械学習をより簡単に実装するための高機能 API です。** 
Netflix 、Uber 等のディープラーニングを実装している多くのスタートアップ企業に採用されています。他にも CERN 、NASA 等の大規模な科学組織の研究者にも採用されており、ビジネス面だけではなく研究面でも人気の API です。
公式：[Keras](https://keras.io/about/)

### 特徴
**プログラミングの経験が少なくても、簡単にコードが記述出来る設計である為、初学者でも扱いやすいです。**
機械側ではなく、人間側に分かりやすく設計された API なので、実装に必要なコード数を最小限に抑えて作られています。

使用言語は Python です。元々 Python 自体が他のプログラミング言語と比べ簡潔に記述することが出来ますが、そこからまた比較的短いコードで記述出来ます。
記述が簡易化され高速実装が出来るので、一度簡単に実装確認をしたい場合に使われたりします。


### 初学者・ビジネス向け
TensorFlow/Keras では、以下のような特徴があるため、初学者やビジネス利用の方々にオススメです。

**TensorFlow**

* **ドキュメントが最も多く、サポートも充実**
* **利用者による相談や問題解決が出来るコミュ二ティ環境がある**

**Keras**

* **TensorFlow を利用している API の為、Keras も同様にドキュメントが多くサポートも充実**
* **短いコードで実装が出来る**













## **PyTorch（読み方：パイトーチ）**
<img width="200" alt="代替テキスト" src="https://i1.daumcdn.net/thumb/C264x200/?fname=https://blog.kakaocdn.net/dn/1OknC/btqITtSKaXI/iI6GbmVCy1OaM2vohgOpE0/img.png">

### PyTorch とは
**PyTorch は 2016 年に Facebook 社により開発されたオープンソースのディープラーニング用フレームワークです。**
こちらの [GitHub のリポジトリ](https://github.com/pytorch/pytorch)で活発に開発が行われています。オープンソースソフトウェア (OSS: open source software) であるため、誰でも PyTorch の全てのコードを見ることができます。

また 2019 年 12 月 5 日に Preferred Networks 社が開発した Chainer というライブラリが PyTorch に移行するにあたり、元々伸びていた需要が加速しました。

参考：[ニューラルネットワークの流れ - KIKAGAKU](https://free.kikagaku.ai/tutorial/basic_of_deep_learning/learn/pytorch_beginners)
公式：[PyTorch](https://pytorch.org/)


### 特徴
**他の様々なフレームワークと比較して、研究開発の分野で盛んに使用されており、新技術の実装やテストではしばしば PyTorch が使用されます。**また PyTorch をベースとした画像処理や自然言語処理などに対応したパッケージや、実装の仕方のドキュメントも豊富に用意されています。

Keras ではコードの記述が簡略化されていましたが、PyTorch では実装の流れを簡略化せずに記述していく為、実際にディープラーニングの処理の流れが把握出来ます。

### 実装内容を理解したい・研究向け
PyTorch では、以下のような特徴があるため、実装内容を理解したい・研究向けで利用したい方々にオススメです。

* **ディープラーニングの処理の流れを簡略化せず記述していく為、仕組みの理解を深めながら取り組める**
* **研究開発の分野にて活発に利用されている為、参考文献、ドキュメントが豊富にある**





# 3. 傾向
PyTorch と TensorFlow における検索の傾向を確認してみます。まずは世界で見た検索傾向は下図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629028/808049a4-af33-88e5-b4b5-54241ddace94.png)
続いて、日本で見た検索傾向は下図になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629028/07e74b11-a8d7-a119-d730-6eb7f55c3db8.png)
出典：[Google Trends](https://trends.google.co.jp/trends/explore?date=2018-02-10%202021-02-10&geo=JP&q=PyTorch,TensorFlow)


世界全体では、2018 年 2 月 10 日時点の段階で TensorFlow が圧倒しています。ただ 2021 年 2 月 10 日時点での傾向を確認してみると TensorFlow と PyTorch がほぼ均衡している事が確認出来ます。
また日本の方でも最終的には均衡しており、時期によっては逆転している時期もあります。

これは上記にもありましたが、Chainer が PyTorch へ移行した事、また研究論文も充実してきていることから上昇している可能性があります。



# 4. まとめ
今回は、ディープラーニング用フレームワークで代表的なものとして、TensorFlow/Keras、PyTorch をご紹介しました。


他にも沢山のフレームワークがありますが、初学者の方はまずはドキュメントが充実している TensorFlow/Keras、PyTorch を使用しての実装がオススメです。

そしてご自身が簡単に実装していきたいのか、仕組みの理解を深めながら実装していきたいのかを考えた上で選択していただければ、効率よく学習に取り組んでいけます。

所感では、、、

* **初学者・ビジネス：TensoFlow/Keras**
* **研究：PyTorch**

という印象です。もちろん TensorFlow でも研究は積極的に行われておりますし、ビジネス用として PyTorch が使われている事例も増えてきているので、それらも踏まえた上で考えてみましょう。 
皆様のお力に少しでも貢献出来ましたら幸いです。


# 5. お知らせ
![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_130181_36206be5-499a-66df-a401-a28a66f2b3d2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/ae15a062-1ce3-d038-f4e3-dda17f498b9d.jpeg)
動画を通じて、ディープラーニングが一から学習できる大人気コースの脱ブラックボックスが無料になりました。
**手書きの数学とハンズオン形式のプログラミング**によって、初学者でも安心して一から学習できます。
機械学習やディープラーニングを基礎から実践を学びたい方は、ぜひ教材の１つとしてご利用ください！
[▶︎ 脱ブラックボックスコースを無料で学び始めたい方はこちら！](https://www.kikagaku.ai/)

# 6. 参考
* [PyTorch 事例①](https://project.nikkeibp.co.jp/idg/atcl/19/00157/121800001/)
* [PyTorch 事例②](https://project.nikkeibp.co.jp/idg/atcl/19/00157/121800002/?ST=idg-cio-appli&P=1)
* [PyTorch 事例③](https://project.nikkeibp.co.jp/idg/atcl/19/00157/121800003/)
* [PyTorch VS TensorFlow](http://horace.io/pytorch-vs-tensorflow/)