こんにちは、小林です。
今年は戌年
なので年男です。はい。
さて最近色々な言語を試してみようと思っていましたが、機械学習に興味を持ったので、とりあえずPython3から勉強してみました。
目次
1. なぜMLやDLにはPythonが多く使われているの?
今回Pythonを学ぼうと思ったキッカケも全てこの疑問からです。
”なぜ機械学習やDeep learningにはPythonが必要なの?”
(先に言っておくとMLやDLに必ずしも"Python"というわけではない)
お笑い芸人の小藪さんが最近Instagramで使ってる言葉で
#マジぬんでなん #ぬんで?
がありますね。まさにこんな気持ちです。
話を戻しまして、勉強してみた結果少し理解して来たので下記にまとめてみました。
1.1. なぜ?の前に
そもそもプログラミングの言語には
- インタープリタ型言語(スクリプト言語)
- コンパイラ型言語
がありますね(ざっくり)。大まかに書くと
- インタープリタ型言語=PythonやRubyなど
- コンパイラ型言語=CやC++など
ですね。中身は
- インタープリタ型言語=コードを書いたらそのまま実行できる言語
- コンパイラ型言語=コンパイル→実行ファイルを生成→実行 みたいな言語
の様な感じです。ここで一つ疑問が...
↓
しかし実行が高速
↓
MLとDLはどちらも大量に計算を行うことが特徴
↓
したがって実行の速度が速いほど良いはず...
では、どうしてインタープリタ型言語であるPythonが使われることが多いのでしょうか。
1.2 なぜインタープリタ型言語であるPythonが使われることが多い?
機械学習&ディープラーニングの通常のプロセスとして
↓
結果を見て修正
↓
再実行
というのが大まかな(一般的な)流れですね。
もう少し掘ると
↓
毎回コンパイルという手順を踏むコンパイラ型言語(c++ようなコンパイラ型言語は型に重きを置く)
↓
=生産性が高いとは言えない
一方でPythonは、「型」の宣言が必要無いです。
(一応Python3.6以降で引数&関数の返り値&変数に型記述可能となった)
様々なデータを同時に扱うMLとDLにおいて、型をいちいち定義する必要のあるコンパイラ型言語はコードの作成に時間がかかります。
両方良し悪しはありますが、MLとDLにはPythonの様なインタープリタ型言語が適していると言えますね。
2. Python3の概要
細かい使い方は公式チュートリアルでお願いします。
とりあえず要点として
- 高度な数値計算やデータ分析に大活躍
- Ver2がある(現在macにデフォルトで入っているのはVer2)
- Ver3では後方互換性に影響のある変更がある
- つまり、Ver3のコードはVer2では動かないことがある(逆もしかり)
- Ver3をサポートしていないモジュールは結構ある
比べてみた感じではVer3ではVer2における様々な点(print、unicode、整数除算等)が改善されているなと感じました。しかし、今からPythonをいじるならVer3を学ぶのがベター(Ver2は2020年でサポートが終了予定)なのでは...。
よって今からVer2を使う理由はあまりないと考えても過言ではないと思います。
(しかし知っておくことは大事な気がする=備えあれば憂いなし的な)
そもそもPythonとは
- インタープリタ型言語(=スクリプト言語)
- オブジェクト指向
- コードがシンプルで扱いやすく設計
- C言語などに比べてさまざまなプログラムを分かりやすく書ける
といった特徴(大まかですが)がありますね。まだ機械学習に触れていないので、少し触れていきましょう。
3. とりあえず機械学習の根幹を少し理解しよう(数3等)
さてここから少し数学嫌いな方は目を瞑りたくなるようなお題です。
機械学習の根幹には沢山の数学要素が詰め込まれてます。知っているだけでも
- 微分積分:特に学習に用いられる。未来のデータの値を予測したい時などに使用
- 統計:目標(今までのデータを基にあるものを予測すること)を設定
- 確率:より効果的な手法を求める為
な感じで、上記は最低限ですね。まだまだあります(ただいま絶賛勉強中)。
とりあえずこのマークはよく出てきます。
むむ(もう少しズーム)
こいつです。名前はシグマです(多くの人がお分かりだと思いますが)。
シグマの詳しい事はググってもらえれば、理解出来ると思います。
あとは因数分解やベクトル等をなんとなく分かっていれば、機械学習の簡単な式は理解出来るかな...?
そもそも上記は前々回出した記事の根幹ですね、機械学習をもう一度分かり易く図で表すと
こんな感じです(これは教師あり学習)。説明を加えると
↓
入力と出力をひたすら行う
↓
モデル完成
↓
全く新しいデータを入力
↓
そのモデルが答えを予測して出力
という流れですね。
次にツールを説明しながら数式をサンプルで表示したいと思います。
3.1. Jupyter Notebook
こんな便利なものがあるのか!というのが初めて触った時の感想です。
そもそもJupyter Notebookとは
- 数式描ける(markdownとして出力。長いコードだと反応しない事もある)
- Python3が書ける
- 作成したFile(.ipynb)をGitHubにup→自動的にグラフや式などがレンダリング
少々画質荒めですが、こちらが自動的にグラフや式などがレンダリングした時のgifです。
$$で数式を囲んでMarkdownとして出力すると、このようになります。
(複雑でなければ囲まなくてもokayな場合有り!)
これらはアルゴリズムの確認&ドキュメント作成などに便利ですね(現在自分のメモとして大活躍)。
作成したノートブックは下記のようにHTMLやPDF、スライドとして出力可能です。
拡張子一覧です。
かなり用途が広がりますね。
又、作業したいフォルダが決まっている場合はターミナル上で、
- jupyter notebookと打ち込む
で完了です。
ここで少しjupyter notebookの主要コマンドについてまとめます
上記のようにターミナルでしか動かせないコマンドもあります。
理想は画面にJupyter Notebookとターミナルを画面分割して置くと、変更履歴も確認出来て大分作業が捗ります。
こんな便利な勉強用ノートはなかな無いと思います...。
ここでちらっと触れた行列について軽くgistでまとめると、
こちら.md
上記の数式をMarkdownで読み込ませるとレンタリングされます。
JupyterやPython3等をまだインストールしていない人は、次のAnacondaをまず先にインストールするのがオススメです。
3.2. Anaconda
とりあえず画面はこんな感じです。
Anacondaとは、
- pandasやJupyterも入ってる
- もちろん無料
のような簡単にPython実行環境を整えてくれるものです。
なぜAnacondaを使うのか
↓
しかしそれらのライブラリの多くはPythonに標準で付属されていない
↓
別途インストール&自分で環境を整えなければならない
↓
初めての人にとって環境構築は手間がかかる
↓
そこでAnacondaの出番
という感じですね。
より快適にPythonを動かすにあたりAnacondaのようなディストリビューションは必要不可欠です。
それぞれの説明
ちなみにPythonとconda のみの最小構成Minicondaもあります(名前かわいいな)。
4. とりあえず遊んでみる
話がガラッと変わりますが、とりあえずPython3を使ってゲームをしてみました。
4.1. オセロ
実際にオセロを作成し、遊んでみました(機械学習とは関係ないがPython3に慣れる為)。
ターミナルで動かします。
オセロ起動
スタート(僕がM、相手はS)
むっ...
まあこんなものか
圧勝
っていう感じでした(PCの置き場の優先度はランダム&設定は僕がいじっているので勝てて当然ですが...)。
割とオセロには自信がありましたが、未だ弊社Bossには勝利した事がありません(半端なく強いです笑)。
簡単に流れを説明すると
↓
ランダム(import)に置けるところを探すようにする(無ければskip)
↓
マスが埋まりきらない状態で置ける場所が無くなった場合は強制終了&判定し勝ち負けをprint(稀にある笑)
↓
埋まったところで、差分を判定し勝ち負けをprintする
みたいな感じでした。こちらgitです。
5. 感想
浅い内容でしたが
- MLやDLにpythonが必ず必要、ってわけでもない(Rの様な言語もある)
- Pythonって面白い
- Pythonをもっと勉強したいので、次回はPandasやJupyter上で機械学習を諸々やってみたい
と思いました。
ありがとうございました。
6. ベトナムでのオフショア開発なら・・・
ベトナムへ進出されるなら、若くて優秀なエンジニア達とホーチミンで約9年、オフショア開発・アプリ開発を展開しているバイタリフィ・バイタリフィアアジアへお気軽にご相談ください。又、オフショア開発のリスクや費用を極限まで抑えた『拠点開設プラン』も用意しております。またベトナム向けIT・WEBサービス/アプリの開発支援、ローカライズ、テストマーケティングといった進出支援に加えて、日本や他国向けのオフショア開発やアプリ開発も行っております。ご興味がありましたら、ぜひご連絡下さい。