機械学習についてのなぐり書き
AIについて僕が持っていることについてまとめます。
言語・ライブラリ
言語
Pythonが非常に有名かつ主流
ライブラリ
- TensorFlow
- Google製
- PyTorchと同じくらい使われている
- PyTorch
- Facebook製
- TensorFlowと同じくらい使われている
- Keras
- TensorFlow、CNTK、Theanoのラッパー
- Kerasの本家と、TensorFlowにカスタマイズしたKerasがある
- TensorFlow使うなら、TensorFlowのKerasを使うと良い
実行環境
Colaboratory
自前のGPU/TPU用意するより、Colaboratoryのほうが便利
本業で機械学習やる場合はまた別
有料版のColaboratory Proもある
GPU・TPU
TPUは小数の計算の精度を犠牲にして速くしている
迷ったらTPU使えば良い
TPUの凄さは、記事にもなっている。
機械学習の手法
(狭義の)機械学習
機械学習の手法を挙げます。
LightGBM
LightGBM 徹底入門 – LightGBMの使い方や仕組み、XGBoostとの違いについてがわかりやすい。
非常によく使われていて、しかも奥が深い。
分析問題に対しては、後述する深層学習よりも精度が上になることが多い。
XGBoost
LightGBMより前に開発されたLightGBMと同じようなもの。 初心者に限って言うなら、XGBoostを使うならLightGBMを使ったほうが良さそう。
sklearnのモデル選択方法
状況に合ったモデルを選ぶための図 割と参考になる
classification
- 教師あり学習・分類
- 予め、このデータはAというように分類されている
- 例:写真を入力したら猫か犬か判定するAI
regression
- 教師あり学習・数値予測
- 例:その日の店の売上
clustering
- 教師なし学習・分類
- データが与えられ、そのデータを分類する
- K-means法とかが有名
- dimensionality reduction
- 次元削減
- データの特徴を、より少ないバイト数で表現できるようにする
- 深層学習の中間層を用いて次元削減するという話を聞いたこともある
深層学習(ディープラーニング)
画像認識など、分析以外のタスクが得意
分析問題を解くときも、アンサンブルとして使うことが多い
深層学習で使う関数たち
詳しくは、絵やグラフつきのサイトがわかりやすい。
- 最適化関数
- 学習の進め方を決める関数
- Adam, RMSpropなど
- 活性化関数
- 一つ前の層からきた値を、出力するために使う関数
- sigmoid, tanh, relu, softmaxなど
- softmaxは分類のときに出力層に使うことが多い
- Kerasの公式ドキュメントにいろいろな活性化関数がある
- 損失関数
- 目標とする出力との違いを数値化する関数
- この関数の値をもっとも小さく(または大きく)するように学習が進む
- 学習の方向は最適化関数が決める
- 基本的な使い分けはこのサイトがわかりやすい
- 評価関数
- 深層学習では、1度だけではなく、何度も何度も学習を繰り返す
- 1回の学習ごとに今のスコアを表示する
- 評価関数は学習自体には何の影響もない
- 人間が、学習中もスコアを確認できるようにしているだけ
- 損失関数は計算したスコアを学習に利用するが、評価関数は計算したスコアを学習に使わない
- つまり、評価関数と損失関数はほぼ同じもの
- accuracy, f値などがある
- accuracyは複数ラベルの分類には使えない
深層学習でのパラメーター
- batch size
- 1回の学習(1 epoch)では、データすべてを一度に使うのではなく、複数回に分けて使う
- 大量の画像データを一度にメモリに乗せるのは大変
- batch sizeで32を指定すると、32枚の写真ごとに計算する
- 【Deep Learning】 Batch sizeをどうやって決めるかについてまとめるがわかりやすい
- 1回の学習(1 epoch)では、データすべてを一度に使うのではなく、複数回に分けて使う
- ニューロン数(ノード数)・隠れ層数
- Drop Out
- 過学習を防ぐために使う
- 0.25~0.5ぐらいがよい
GAN(敵対的生成ネットワーク)
Aさんは、Bさんを騙せるようにがんばります
Bさんは、Aさんに騙されないようにがんばります
お互いに切磋琢磨しあって、結果的にAさんの生成した画像は本物と見分けがつかないレベルになります
詳しい説明は下の参考サイトに譲ります。
参考サイト:今さら聞けないGAN(1)基本構造の理解
その他
アンサンブル
複数のモデルを使って最終的な出力を出すこと。
例えば、LightGBMとディープラーニングなど
Optuna
ハイパーパラメータチューニングを自動で行ってくれます
かなり便利です
学習手段
本
- Kaggleで勝つ!
- とりあえず読む
- 詳解 ディープラーニング
- Tensorflow1.0のときのものなのであまり...
- 内容は詳しいし、わかりやすい
- Androidアプリ開発の教科書
- 基本的なやり方がよく分かる
- Androidアプリを作り始める人にはオススメ
- 実践的にアプリを作ろうとすると足りない
- Cクイックリファレンス
- 辞書的な使い方で役に立つ
- メジャーアップデートが来るとかいう噂を聞く
- C言語総合講座15講
- 理論編しか読んでいないが、下のprogramming place plusで足りない知識が身についた
- プログラミングコンテストチャレンジブック
- プログラミングの宝箱 アルゴリズムとデータ構造
- 上のプログラミングコンテストチャレンジブックの重要な部分だけピックアップしている感じ
- わかりやすかった
- アルゴリズムデザイン・アルゴリズムイントロダクション
- アルゴリズムの辞書
- 初めて読んだとき、両方とも数学の知識がないと手も足も出なかった(当時中3)
- それ以来読んだことはない
- 理科系の作文技術
- 論文だけでなく、文章を書く上で非常に役に立つ
- 絶対読むべき
- 数学文章作法
- 数学ガールの人が著者らしい
- こちらも理科系の作文技術と同じくらい読んだほうが良い
サイト
全体
- Qiita
- 困ったらここに行けばいい
- Teratail
- エンジニア版のyahoo知恵袋
- Progate
- プログラミング初心者が学ぶのには良いと思う
- 既に他の言語をマスターしていて、新しく言語を学ぶには冗長すぎる
Android
公式リファレンス
- 正確で手厚いが、情報量が多いので慣れるまでは解説サイトを見たほうが良い
-
- メジャーな機能についてはだいたい解説されている
- サンプルコードもほとんど動く
Python
- 検索するとだいたい出てくる
- 特定のサイトを使うことはあまりない
C/C++
Kaggle
コミュニティ
- kaggle-ja@slack
- kaggleのコミュニティで、初心者が簡単に質問できる