- 機械学習 : 法則やルールを予めユーザが与えることで、未知のデータに対して解答を作る
- 深層学習 : 何の指示も与えずに、AIが自分でデータの特徴やルールを学習していく (ディープラーニング)
前者は人がルールを与えるため、準備が大変だが、学習の方向性はコントールし易い。(まあ飛車が点数高いからそうなるよね。評価関数を変更しよう)。 後者は学習のコントロールが難しい。(正解かもだけど、なんで初手3八金なん?)
- 教師あり学習 : 訓練データ(入力と出力のセット)を元に、入力に対して答えを返すモノを作る。正解を知っている教師によって、「これはこう作業してね」と教育する「OJT研修」。 (過去データから未来の値を予測できる)
- 教師なし学習 : 出力値(正解)を必要としない分類。正解とかこまけぇこたぁいいんだよ派。とにかく集団に線引して、「似てる奴ら」を集める。 (クラスタリングができる)
- 強化学習 : 「状態を知る」「行動する」「行動で報酬を得る」ことができる主体を「エージェント」とする。ユーザは報酬関数(Q関数)を定義する。後はエージェントが報酬が最大になる行動を自ら学習(試行錯誤で最適化)していく。 (自動でゲームをクリアできる)
- NumPy : ベクトルや行列などの基本的なデータ型を高速に行うPythonの数値計算モジュール。独自バイナリ(npz)だが、機械学習のサンプルデータの多くはnpzで配布されるくらいのデファクト
- Pandas : データ操作のためのPythonライブラリ(BSDライセンス)。コアはc実装。npzやCSVの相互変換からSQLぽい集計処理もできるため、データの前処理に便利なツール
- Matplotlib : データの描画ライブラリ。グラフや画像として表示できる。Pandasよりも複雑な出力が可能
- SciPy : サイエンス系のPythonライブラリ。積分、線形代数、フーリエ変換、信号処理、画像処理、遺伝的アルゴリズムとかできる
- scikit-learn : 機械学習全般のアルゴリズムが実装されたライブラリ。機械学習のデファクト
- statsmodels : 統計モデルに特化したライブラリ。scikit-learnより統計機能が豊富
- PyTorch : FB製の機械学習用ライブラリ。動的な計算グラフ。APIがシンプルかつNumPyに似て使い易い。海外で人気があり最新の論文がすぐにコード化される
- Dlib : C++で書かれた機械学習向けのオープンソース(Boost)な汎用ライブラリ。顔認識も可能。OpenCVでも顔は検出できるが、Dlibは特徴点が多いため表情の検出ができる
- TensorFlow : Google製の機械学習用コアライブラリ(Apache License 2.0)。避けては通れないデファクト
- Keras : ニューラルネット用のPythonライブラリ(MIT)。TensorFlow等のコアライブラリをバックエンドに持てる高レベルライブラリ
- TensorBoard : TensorFlowをブラウザで操作できる。入力指定、コード実行、plot表示がブラウザで完結できる。(BoardのHTTPサーバがTensorFlowに入っている)
- Jupyter : ブラウザで対話的にPythonコードを実行するツール。機械学習に限らない汎用ツール。コード群を「セル」という単位に分割することで、セル単位での実行が可能。実行結果はキャッシュされるため、重い処理(データ読み込み、学習実行)は1回だけ実行してにして、グラフ出力部分だけ何度も修正実行したりできて便利
- Google Colab : Googleの機械学習環境。Googleアカウントがあれば無料で使えるJupyterみたいなもの。サーバ不要、ライブラリは大概準備済み。GPUもTPUも使える。ぶっちゃけこれでいいと思う
- Python : データの取り扱いはPandas、表現力はKerasが強力で、データの利便性や関連ツールの安定性まで考えるとPythonが最適。
- その他 : 「別言語でやりたい」が主目的でない限り、Pythonが無難。速い言語でも、実速度はTensorFlowに律速するため、恩恵は薄い。
個人で頑張って作り始めてもきっと途中で燃え尽きるし、例え完成したとしてもその間に進化したTensorFlowの前では型落ちツールになり消える
- TensorFlow : 2.0がまさに出つつある過渡期。世の中のサンプルは1.xで、2.0は当然枯れておらず情報もないのでハマりがち。少し待ちたい
- Python : 2のサポートが2020/1/1に終了。3への移行中に環境構築問題で手間取るので、情報が揃うのを少し待つのはアリ
半年待って Ubuntu 20.04 LTS
Python3
TensorFlow2
の高速道路を走り始めるのがコスト面では効率的
keras vs pytorch
ディープラーニングの精度はプログラミングよりもデータ数に依存する
ディープラーニングの作業の大半はデータワーク
データワークには大量のラベル付きデータが必要 (生データを学習用に使えるように整理すること)
大量データは前提で、効率的にかつ継続的にラベリングを行うことが重要
効率的なラベリングのために専用ツールの開発の必要 (エンジニアリングは必要)