機械学習とPython
===
2018/07/21 Python東海 第36回勉強会
antimon2(後藤 俊介)
----
## お品書き
+ 自己紹介
+ 機械学習名古屋の紹介
+ 機械学習とは?
+ 機械学習と Python
+ 機械学習と Python **以外**
---
# 自己紹介
----
## 自己紹介
+ 名前:後藤 俊介
+ 所属:**[有限会社 来栖川電算](https://www.kurusugawa.jp)**
+ コミュニティ:**[機械学習名古屋](https://machine-learning.connpass.com/)**, [Python東海](https://connpass.com/series/292/), Ruby東海, Rails Girls Nagoya(コーチ), …
+ 言語:[Julia](https://julialang.org), **Python**, Scala(勉強中), Ruby, …
+ ![Twitter](https://i.imgur.com/HqouMIg.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [@antimon2](https://twitter.com/antimon2) / ![Facebook](https://i.imgur.com/01nPd37.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [antimon2](https://www.facebook.com/antimon2)
+ ![Github](https://i.imgur.com/yBKtii5.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [antimon2](https://github.com/antimon2/) / ![Qiita](https://i.imgur.com/FxHMi64.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [@antimon2](http://qiita.com/antimon2)
<aside class="notes">今日はまじめに 機械学習とPython の話っ</aside>
----
[![有限会社来栖川電算](https://i.imgur.com/8Kuhfel.png)
https://www.kurusugawa.jp](https://www.kurusugawa.jp)
<aside class="notes">スポンサー枠、てわけじゃないのでさらっとっ</aside>
---
# 機械学習名古屋の紹介
----
## 機械学習名古屋とは?
+ Python東海 から生まれた勉強会
+ ハンズオンと発表中心
+ 最近は論文読み会もやってる
<aside class="notes">難しくないよーこわくないよー</aside>
----
[![機械学習名古屋 グループページ - connpass](https://i.imgur.com/e89g2DL.jpg)
https://machine-learning.connpass.com/
](https://machine-learning.connpass.com/)
<aside class="notes">勉強会の告知・募集サイトっ!</aside>
----
[![機械学習名古屋 Facebookページ](https://i.imgur.com/1z8pCpb.png)
https://www.facebook.com/mlnagoya
](https://www.facebook.com/mlnagoya)
<aside class="notes">勉強会の案内や実績を発信していきますっ!</aside>
---
# 機械学習とは?
----
## イメージ?
+ AI(人工知能)ってどんなイメージ?
+ 機械学習ってどんなイメージ?
+ ディープラーニングってどんなイメージ?
----
![AIに支配される人達のイラスト](https://i.imgur.com/5og1KXD.png)<!-- .element: style="background:#eee" -->
《出展: [https://www.irasutoya.com/2016/08/ai.html](https://www.irasutoya.com/2016/08/ai.html) 》
<!-- .element: style="font-size:30%" -->
----
![ディープラーニングってやつでなんとかして!](https://pbs.twimg.com/media/Csj90QqVIAELo3S.jpg)<!-- .element: style="background:#eee" -->
《出展: [https://twitter.com/\_329\_/status/777150020378169345](https://twitter.com/_329_/status/777150020378169345) 》
<!-- .element: style="font-size:30%" -->
----
## 人工知能 (Artificial Intelligence / AI)
> **人工知能**(じんこうちのう、英: artificial intelligence、AI)とは、「計算機(コンピュータ)による知的な情報処理システムの設計や実現に関する研究分野」を指す。
<!-- .element: style="font-size:80%;text-align:left" -->
[Wikipedia:人工知能](https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD) より。
<!-- .element: style="font-size:60%" -->
----
## 機械学習 (Machine Learning / ML)
> **機械学習**(きかいがくしゅう、英: machine learning)とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。
<!-- .element: style="font-size:80%;text-align:left" -->
[Wikipedia:機械学習](https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92) より。
<!-- .element: style="font-size:60%" -->
----
## ディープラーニング (深層学習 / Deep Learning)
> **ディープラーニング**または**深層学習**(しんそうがくしゅう、英: deep learning)とは、(狭義には4層以上の)多層のニューラルネットワーク(ディープニューラルネットワーク、英: deep neural network)による機械学習手法である。
<!-- .element: style="font-size:80%;text-align:left" -->
[Wikipedia:ディープラーニング](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0) より。
<!-- .element: style="font-size:60%" -->
----
![包含関係 AI ⊃ ML ⊃ DL](http://images.nvidia.com/content/APAC/blog/jp/whats-difference-ai-ml-dlai/Deep_Learning_Icons_R5_LR_JP.png)<!-- .element: style="background:#eee" -->
《出展: [https://blogs.nvidia.co.jp/2016/08/09/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai](https://blogs.nvidia.co.jp/2016/08/09/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai) 》
<!-- .element: style="font-size:30%" -->
----
### 機械学習とは (1)
+ **人工知能** (Artificial Intelligence / AI) の一研究分野。
+ **コンピュータビジョン** (Computer Vision / CV)、**パターン認識** (Pattern Recognition / PR)、**自然言語処理** (Natural Language Processing / NLP) 等、人工知能の他の研究分野と互いに関連あり。
+ ↑の関連各分野に対して、**数学的基礎付け** の役割を果たしているのが「機械学習」、と言える。
<aside class="notes">※少し堅い説明っ</aside>
----
### 機械学習とは (2)
+ コンピュータにデータを **学習** させて、それを元に色々な **仕事** をさせること。
+ ポイントは、その主な **判断処理** をコンピュータ自身に考えさせる、ということ!
+ 色々な **仕事** とは…
<aside class="notes">※少しやらかい説明っ</aside>
----
### 例:推測
![例:某会員数予測グラフ](https://i.imgur.com/Ji0RT2G.png)<!-- .element: style="background:#eee;max-width:80%" -->
《出展: [http://v4.eir-parts.net/v4Contents/View.aspx?…](http://v4.eir-parts.net/v4Contents/View.aspx?template=ir_material_for_fiscal_ym&sid=48151&code=9468) 》
<!-- .element: style="font-size:30%" -->
<aside class="notes">※株価予想、売家価格予想、などっ</aside>
----
### 例:分類
![CIFAR-10](https://i.imgur.com/zXISGEV.png)<!-- .element: style="background:#eee" -->
《出展: [http://parneetk.github.io/blog/cnn-cifar10](http://parneetk.github.io/blog/cnn-cifar10) 》
<!-- .element: style="font-size:30%" -->
<aside class="notes">※文字認識、画像認識(猫画像判別、笑顔判定等)などなどっ</aside>
----
### 例:クラスタリング
※イメージ:
![クラスタリング(グループ分け)イメージ図](https://gist.github.com/antimon2/df46b5c0e04017098e5b/raw/e8e7bb0f0713895fe9f34d9e853e8ac7eca73479/clustering_image.png)
<aside class="notes">※似たような特徴を持つものどうしを同じグループに分ける手法<br>※判別(分類)との違いは、どのように分類するかという「答え(正解例)」が予め用意されていないこと!<br>
→データから特徴量を読み取って、それを元に「どのようにグループ分けするか」もコンピュータが考えるっ</aside>
----
### 応用例:レコメンドシステム
※イメージ:
![レコメンドシステムイメージ](https://gist.github.com/antimon2/df46b5c0e04017098e5b/raw/a8560135574f0d2b913f7c2347df129ab5c01adc/recommend_image.png "レコメンドシステムイメージ")
出典:amazon
<aside class="notes">っ</aside>
----
### 応用例:チャットボット
![りんな](https://i.imgur.com/Gk9kyuA.jpg)
出典:[https://www.rinna.jp](https://www.rinna.jp)
<aside class="notes">っ</aside>
---
# 機械学習とPython
----
## いきなりですが、<br>クイズです。
----
### 機械学習 と Python、<br>歴史が古いのはどっち?
----
正解:**機械学習**
----
## 1950〜60年代
|AI|プログラミング|
|:-|:-|
|**1956**: **ダートマス会議** で<br>**Artificial Intelligence (AI)** という<br>言葉が初めて採用される<br><br>《第一次AIブーム》<ul><li>**《推論・探索》**</li><li>既に **機械学習**という<br>言葉は存在!</li></ul>|**1957**: 科学技術計算言語 **FORTRAN** 完成<br>**1960**: **ジョン・マッカーシー** が<br>**LISP** を発表<br><br>その他、ALGOL, COBOL,<br>BASIC 等の<br>高水準言語が続々登場|
<!-- .element: style="font-size:75%" -->
<aside class="notes">1960年代: この頃既に <b>パーセプトロン</b>(ニューラルネットワーク)の概念あり(最初のパーセプトロンはLISPで実装された)<br>あと<b>ジョン・マッカーシー</b>はダートマス会議の中心人物でもある</aside>
----
## 1970年代
|AI|プログラミング|
|:-|:-|
|《AIの冬第1期》<br><br><ul><li>マシン性能の限界</li><li>[フレーム問題](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E5%95%8F%E9%A1%8C "Wikipedia: フレーム問題")</li><li>…</li></ul>|**1972**: **C言語** 発表<br>**197x**: **MATLAB** 登場<br><br>その他、Prolog, ML,<br>Smalltalk, awk 等、<br>様々なパラダイムの<br>言語が続々登場|
<!-- .element: style="font-size:75%" -->
<aside class="notes">フレーム問題:簡単に言えば『情報処理能力が有限ならば現実に起こりうる問題全てに対処することができない』ということ。</aside>
----
## 1980年代
|AI|プログラミング|
|:-|:-|
|《第二次AIブーム》<br><br><ul><li>**《知識表現》**</li><li>**機械学習** の活発化</li><li>バックプロパゲーション<br>→ニューラルネット</li><li>[エキスパートシステム](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)</li></ul>|**1983**: **C++** 登場<br><br>その他、Objective-C,<br>Perl, Eiffel 等が<br>登場|
<!-- .element: style="font-size:75%" -->
<aside class="notes"><ul><li><b>バックプロパゲーション</b>の(再)発見によるニューラルネットワークの発展</li><li>エキスパートシステム:特定領域の知識に基づいて問題解決するシステム</li></ul></aside>
----
## 1990年代
|AI|プログラミング|
|:-|:-|
|《AIの冬第2期》<br><br><ul><li>『知識表現』の限界</li></ul>|**1991**: **Python** 発表<br>**1995**: **R言語** 発表<br><br>その他、Haskell, Ruby,<br>Lua, Java, JavaScript 等、<br>現在も幅広く利用される<br>多くの言語が登場|
<!-- .element: style="font-size:75%" -->
<aside class="notes"><ul><li><b>『知識表現』の限界</b>:知識を与えれば与えただけ賢く←どうやって与える?どういう表現で教える?という根本的な問題にぶち当たって下火に</li></ul></aside>
----
## 1990年代後半〜
|AI|Python|
|:-|:-|
|-|**1995**: Numeric 公開(NumPy の前身の1つ)<br>**2000**: Python 2.0 公開<br>**2001**: 科学計算ライブラリ [SciPy](https://www.scipy.org/) 登場<br>**2003**: [matplotlib](https://matplotlib.org) 公開<br>**2006**: SciPy から分離する形で [NumPy](https://www.numpy.org/) 公開<br>|
<!-- .element: style="font-size:75%" -->
<aside class="notes">これ以降は Python(とその周辺ライブラリ)にのみ焦点あてますっ<br>あとこの時期、Numarray(NumPy の前身の1つ)の発展に合わせて Python の仕様変更(スライス表記の革新)が起きている、これ豆ねっ</aside>
----
## 2000年代後半〜
|AI|Python (+α)|
|:-|:-|
|《**第三次AIブーム**》<br><br><ul><li>**《機械学習・表現学習》**</li><li>**2006**:<br>**ディープラーニング** の発明</li><li>**2010**: **ビッグデータ**の活用</li><li>**2012**: Google による<br>猫画像の認識が話題に</li></ul>|**2007**: **[scikit-learn](http://scikit-learn.org)** 公開<br>**2008**: Python 3.0 公開<br>**2010**: [Theano](http://deeplearning.net/software/theano/) 公開<br>**2011**: [Pandas](https://pandas.pydata.org) 公開<br>**2012**: [Julia](https://julialang.org) 登場<br>**2014**: [Jupyter](https://jupyter.org) プロジェクト発表|
<!-- .element: style="font-size:75%" -->
<aside class="notes">AI(のブーム)としては冬真っ只中!その脇で Python(や周辺ライブラリ等)がどんどん発展っ!</aside>
----
## 2015年〜
|AI & Python|
|:--|
|**2015**: **[Chainer](https://chainer.org)**、**[TensorFlow](https://tensorflow.org)**、MXNet(現 **[Apache MXNet](https://mxnet.apache.org/)**)等<br>続々登場・公開<br>**2016**: AlphaGo が囲碁で人間に勝利<br>**2016**: **[Keras](https://keras.io)** 公開<br>**2017**: Google Home 初め **AIスピーカー** が各社から販売<br>**2017**: 自動運転「レベル3」市販車で実現<br>**2018**: Python 3.7 公開|
<!-- .element: style="font-size:75%" -->
<aside class="notes">ちなみに ponanza が将棋でプロ棋士に勝利したのは2013年、チェスは1996年っ</aside>
----
## 機械学習 ♡ Python
+ 機械学習が先、Python が後
+ AI冬の時代に、Python が技術計算用途でどんどん発展
+ 第三次AIブームに乗って、Python のライブラリがさらに拡充
---
# <small>機械学習と</small><br><small>Python</small> <big>以外</big>
----
## ![R](https://www.r-project.org/logo/Rlogo.png)<!-- .element: style="background:#eee;max-width:80%" -->
----
### R
+ 科学技術計算と統計に強い言語(環境)
+ アカデミック分野でよく使われている
+ 統計パッケージ初めライブラリ充実<br>(もちろん機械学習も)
----
### R vs Python
|R|Python|
|:-----|:-----|
|研究者向け|エンジニア向け|
|パッケージかなり充実|2000年代後半から<br>パッケージ拡充、<br>もうRにも負けないくらい|
|遅い|←よりは速い|
<!-- .element: style="font-size:80%" -->
----
### 結論
+ 統計をやりたい非エンジニアは **R** でOK
+ 機械学習をやりたいエンジニアは **Python**
----
## ![Julia](https://upload.wikimedia.org/wikipedia/commons/6/69/Julia_prog_language.svg)<!-- .element: style="background:#eee;max-width:80%" -->
----
### Julia
+ 科学技術計算に強い新言語!
+ JITコンパイルで処理が高速
+ もうすぐ v1.0 出ます!
<aside class="notes">Julia 良いよ Julia っ</aside>
----
### Julia vs Python
|Julia|Python|
|:-----|:-----|
|速い|←よりは遅い<br>ただし行列計算等は<br>NumPy割と速い|
|パッケージ未成熟|パッケージけっこう充実|
|情報少ない<br>発展途上|安定してきているし、<br>情報は豊富|
<!-- .element: style="font-size:80%" -->
<aside class="notes">あとPythonでも Cython 使ったり PyPy 使ったりで高速化図れたりしますっ</aside>
----
### 結論
+ 今すぐ機械学習やりたいなら **Python**
+ 未来に投資したいなら **Julia**
+ 一緒に未来を作りたいなら **Julia**
----
## ![MATLAB](https://i.imgur.com/3JYJliD.png)<!-- .element: style="background:#eee;max-width:80%" -->
----
### MATLAB
+ 数値解析ソフト(インタプリタ言語)
+ 線型代数計算に強い
+ 歴史が古い
<aside class="notes">先述の Julia の線型代数系の機能(行列の書式・スライス記法等)は MATLAB 由来っ</aside>
----
### MATLAB vs Python
|MATLAB|Python|
|:-----|:-----|
|パッケージ充実|パッケージけっこう充実|
|FORTRAN よりも簡単迅速|←よりも簡単迅速|
|有償※<br><small>(MathWorks社が開発販売)</small>|無償|
<!-- .element: style="font-size:75%" -->
<aside class="notes">※フリーの互換ソフト(例:GNU Octave)もあり<br>あとRもそうですが「GUI」とか「データ可視化」も言語機能にありっ</aside>
----
### 結論
+ 会社/学校で昔から使っているなら<br>**MATLAB** もアリ?
+ 今すぐ(お金をかけずに)機械学習<br>やりたいなら黙って **Python**
----
## ![Java](https://i.imgur.com/xGTLlLO.jpg)<!-- .element: style="background:#eee;max-width:80%" -->
----
### Java
+ 30億のデバイスで動く!
+ **[javaml](https://ja.osdn.net/projects/sfnet_java-ml)**、**[DeepLearning4J](https://deeplearning4j.org)** で機械学習もできる
+ (一部の人には Python よりも)お手軽
<aside class="notes">「30億のデバイスで動くけど客先で動かない」には触れないでおきますっw</aside>
----
### Java vs Python
|Java|Python|
|:-----|:-----|
|<!--ガチガチの-->静的型付け<br>オブジェクト指向言語|<!--ゆるーい-->動的型付け<br>言語|
|エンタープライズ向け?|幅広く緩やかに|
|Oracleェ…|しがらみ少ない!|
<!-- .element: style="font-size:80%" -->
<aside class="notes">Javaに関しては多少主観入ってますっ</aside>
----
### 結論
+ 特別『現行のシステムと密な連携を』とか言った業務要件があるなら **Java** も止めはしない
+ 今から(何のしがらみもなく)機械学習やりたいなら **Python** オススメ
<aside class="notes">ただ登場のタイミングによっては Java も機械学習のメインフレームに乗ってたかもなのですっ</aside>
----
## ![C++](https://i.imgur.com/5VJlWBs.png)<!-- .element: style="background:#eee;max-width:80%" -->
----
### C++
+ なんでもできる!なんでもなれる!?
+ **[Caffe](https://caffe.berkeleyvision.org)** / **[Caffe2](https://caffe2.ai)** で機械学習もできる!
+ ネイティブコード!
----
### C++ vs Python
|C++|Python|
|:-----|:-----|
|とにかく速い!<br><small>自分でチューニングすれば</small>|()|
|()|←よりも生産性は良い|
|()|←よりも敷居は低い|
<!-- .element: style="font-size:80%" -->
<aside class="notes">C++に関してはかなーり主観入ってますっ</aside>
----
### 結論
+ **C++** はシロウトが手を出すな
+ 今すぐ(お手軽に)機械学習やりたいなら<br>黙って **Python**
----
## その他
|言語|備考|
|:---|:---|
|**Scala**|**Apache Spark** でまだ可能性アリ|
|**Lua**|**Torch**一択なら可能性アリ|
|**Fortran**|裏で頑張れ|
|**Ruby**|完全に出遅れ|
|**LISP**|遺産|
<!-- .element: style="font-size:60%" -->
<aside class="notes">機械学習やる上ではって話です念のためっ</aside>
----
## 結論
+ 今から/今すぐ、お手軽に/お気軽に 機械学習<br>始めたいなら **Python** オススメ
+ がっつり機械学習やりたい人にも **Python**<br>オススメ
---
# 参考
----
## 参考記事 (1)
+ [人工知能、機械学習、ディープラーニングの違いとは | NVIDIA](https://blogs.nvidia.co.jp/2016/08/09/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai)
+ [3分で分かる、AI(人工知能) なぜ今回のAIブームは本物と言えるのか【機械学習・ディープラーニング】](http://w73t.com/ai1/)
----
## 参考記事 (2)
+ [人工知能の歴史 - Wikipedia](https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD%E3%81%AE%E6%AD%B4%E5%8F%B2)
+ [プログラミング言語年表 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%B9%B4%E8%A1%A8)
----
## 参考記事 (3)
+ [なぜ機械学習にPythonが選ばれるのか - Qiita](https://qiita.com/yaju/items/5502115d7e3d06e6bbdd)
+ [python以外で機械学習に使える言語 - Qiita](https://qiita.com/guri120/items/49c7653e301a06593f15)
----
## 補足
+ 推論するだけなら、Python 以外の言語でも全然OK
+ 「学習済モデル」と「それを利用するライブラリ」さえ用意できていれば。
+ 例:[Ruby](https://www.ruby-lang.org) + [Menoh](https://github.com/pfnet-research/menoh)([menoh-ruby](https://rubygems.org/gems/menoh))とか
<aside class="notes">このスライドは『モデル構築(=(手法選択選択orネットワーク構築)+学習)』→『応用(推論等)』までできる『AIエンジニア』(を目指す人)を主眼に置いたものなのでっ</aside>
---
# おしまい
ご清聴ありがとうございます。
{"metaMigratedAt":"2023-06-14T17:06:47.040Z","metaMigratedFrom":"YAML","title":"機械学習とPython","breaks":"true","slideOptions":"{\"transition\":\"slide\",\"theme\":\"league\"}","contributors":"[{\"id\":\"80062a4b-8dad-49ac-95bf-848ce0686e9e\",\"add\":18775,\"del\":4586}]"}