機械学習
機械学習とは、機械が既に持っているデータセットから特徴を理解する方法を学び、新しいデータの特徴もうまく把握できるようにすることだ。
この定義は厳密なものではなく、定義が厳密である必要もない。機械とは単にコンピュータ、つまりプログラミングコードと理解すればいい。既に持っている、つまり学習に使われるデータセットをトレーニングセットと言う。機械学習を試験勉強する学生に例えると以下のようになる。
- 機械: 学生
- トレーニングセット: 過去問
- 特徴: 出題傾向
- 新しいデータ: 実際の試験問題
- 学習: 過去問を解くことで実際の試験問題を解けるようにすること
2021年現在、機械学習を実装する上で最も多く使われる方法は、人工ニューラルネットワークの隠れ層を増やすディープラーニングだ。人工ニューラルネットワークは最近になって飛躍的に性能が向上し、最も良い性能を発揮することもある。ディープラーニングが満足できる性能を示す前までは、統計的理論を基にしたモデルが機械学習の主流だった。
機械学習をするためには数学、統計学、プログラミングを知っている必要がある。理論を理解するために数学、統計学の知識が求められ、これを実装するためにはプログラミングが必要だ。特に機械学習の理論を深く学ぶためには、行列に関する線形代数学の知識だけでなく、測度論、関数解析学などが必要だ。また、最近では幾何学、グラフ理論、偏微分方程式などと人工知能を結びつけた研究も進んでいる。
また、以下の記事はできるだけ数学専攻の人が読みやすいように書かれている。
基礎
学習概念
最適化
- 損失関数
- 勾配降下法、確率的勾配降下法SGD
- 🔒 (24/07/17) 大学院生の降下法
- 🔒 (24/07/13) グリッドサーチ、ブルートフォース、手作業
- モンテカルロ法とは?
古典的機械学習
線形回帰モデル
線形分類モデル
- 線形分類モデル
- 最小二乗法
- フィッシャーの線形判別 Fisher’s Linear Discriminant
- ネイマン-ピアソンの二項分類 Neyman-Pearson Criterion for Binary Classification
- ベイズリスク分類器 Bayes Risk Classifier
クラスタリング
サンプリング
- モンテカルロ積分
- リジェクションサンプリング
- 重要度サンプリング
- マルコフ連鎖モンテカルロMCMC
強化学習
ディープラーニング
チートシート:Flux、PyTorch、TensorFlowで同じ機能をするコード
理論
- 重み
- レイヤー
- 線形層
- 畳み込み層
- スキップ接続
- 活性化関数
- 人工ニューラルネットワークとは
- パーセプトロンの定義
- ディープラーニングとは?
- ディープラーニングの数学的根拠、シーベンコ定理の証明
- ディープラーニングでの連続学習とは
- コンピュータビジョンとは
- ボルツマンマシン
- 制限ボルツマンマシン
- バッチ学習アルゴリズム
- オンライン学習アルゴリズム
- 分類のためのRBM
- Radial Basis Function
正則化技術
- オーバーフィッティングとレギュラライゼーション
- ドロップアウト
- 論文レビュー: Do We Need Zero Training Loss After Achieving Zero Training Error?
様々なニューラルネット
- [MLP多層パーセプトロン]
- [CNN畳み込みニューラルネット]
- PINN物理情報ベースニューラルネット論文レビュー
- [U-net論文レビュー]
- [Juliaでの実装]
PyTorch
一般
- モデル/テンソルが乗っているデバイスを確認する方法
.get_device()
- 与えられた分布でランダムサンプリングする方法
torch.distributions.Distribution().sample()
- Numpy配列でカスタムデータセットを作成して使用する方法
TensorDataset
,DataLoader
- 重み、モデル、オプティマイザを保存して読み込む方法
torch.save(model.state_dict())
ニューラルネット
- マルチレイヤーパーセプトロンの実装
- リストとループで人工ニューラルネットを定義する方法
nn.ModuleList
- モデルの重み値を得る方法
.weight.data
,.bias.data
- 重みの初期化
torch.nn.init
テンソル
- モジュラー演算
fmod
,remainder
- 次元、サイズを扱う方法
.dim()
,.ndim
,.view()
,.reshape()
,.shape
,.size()
- ランダム順列を作成してテンソルの順序をシャッフルする方法
torch.randperm
,tensor[indices]
- 深いコピーをする方法
.clone()
- くっつけるか積み重ねる方法
torch.cat()
,torch.stack()
- パディングする方法
torch.nn.functional.pad()
- ソートする方法
torch.sort()
,torch.argsort()
エラー
- ‘RuntimeError: grad can be implicitly created only for scalar outputs’ の解決方法
- リストに対する ‘TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first’ の解決方法
- ‘RuntimeError: Boolean value of Tensor with more than one value is ambiguous’ の解決方法
- モデルを保存する際の ‘RuntimeError: Parent directory does not exists’ の解決方法
Julia
Flux
- 隠れ層を扱う方法
- MLPを実装して勾配降下法で最適化する方法
- ワンホットエンコーディングする方法
onehot()
,onebatch()
,onecold()
- MLPを実装して非線形関数を近似する方法
- MLPを実装してMNISTを学習する方法
- 🔒(24/08/12) GPUを使用する方法
- ニューラルネットワークのトレーニングモードとテストモードを設定する方法
trainmode!
,testmode!
- ニューラルネットワークを自動微分する方法
主要参考文献
- Christoper M. Bishop, Pattern Recognition annd Machine Learning (2006)
- Simon Haykin, Neural Networks and Learning Machines (3rd Edition, 2009)
- Trevor Hastie, The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd Edition, 2017)
- 오일석, 기계 학습(MACHINE LEARNING) (2017)
- Richard S. Sutton, Reinforcement Learning: An Introduction (2nd Edition, 2018)
全體ポスト
- ジュリア・フラックスでGPUを使用する方法
- PyTorchでAdaBeliefオプティマイザを使う
- 人工ニューラルネットワークにおけるスキップ接続とは?
- 機械学習における重みとは?
- パイトーチでtorch.nnとtorch.nn.functionalの違い
- Julia Fluxでニューラルネットワークトレーニングモード、テストモードの設定方法
- 混同行列と感度、特異度
- 交差検証
- RでROC曲線を描く方法
- ROCカーブを使用して最適なカットオフを見つける方法
- ROC曲線のAUCを利用してモデルを比較する方法
- 人工ニューラルネットワークとは?
- 機械学習における損失関数
- 機械学習における勾配降下法と確率的勾配降下法
- ディープラーニングとは?
- ディープラーニングにおける活性化関数
- ディープラーニングにおけるソフトマックス関数
- ディープラーニングにおけるドロップアウト
- 教師あり学習と教師なし学習
- k-平均クラスタリング
- マシンラーニングにおけるオーバーフィッティングと正則化とは?
- 機械学習でよく使用されるデータセット
- 論文レビュー:ゼロトレーニングエラー達成後にゼロトレーニングロスが必要ですか?
- ディープラーニングにおける連続学習
- コンピュータビジョンとは何か
- パーセプトロンの定義
- シグモイド関数とは?
- ロジスティック関数とは?
- 機械学習における回帰のための線形モデル
- 識別関数とは何か?
- シグモイド関数とは?
- ディープラーニングの数学的基礎、ユニバーサル近似定理の証明
- 機械学習における強化学習とは?
- パーセプトロン収束定理
- 逆伝播アルゴリズム
- PyTorch RuntimeError:「gradはスカラー出力に対してのみ暗黙的に作成できます」の解決法
- PyTorchでMLPを実装する方法
- PyTorchでの重みの初期化方法
- PyTorchでNumpy配列からカスタムデータセットを作成して使用する方法
- PyTorchでの重み、モデル、オプティマイザの保存と読み込み方法
- PyTorchでランダム順列を作成し、テンソルの順序をシャッフルする方法
- PyTorchでリストとループを使用して人工ニューラルネットワークレイヤーを定義する方法
- PyTorchでテンソルをディープコピーする方法
- PyTorchでモデルの重み値を得る方法
- PyTorchでテンソルを結合またはスタックする方法
- ジュリアで機械学習データセットを使用する方法
- PyTorchテンソルをパディングする方法
- PyTorchテンソルの次元とサイズの扱い方
- ジュリアフラックスで隠れ層を扱う方法
- Julia FluxでMLPを実装し、勾配降下法で最適化する方法
- ジュリア・フラックスでワンホットエンコーディングする方法
- Julia FluxでMLPを実装し、MNISTで学習する方法
- PyTorchでリストのタイプエラー「TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.」の解決方法
- Julia FluxでMLPを実装して非線形関数を近似する方法
- 階層的クラスタリング
- 機械学習における線形回帰モデルの勾配降下法学習
- 論文レビュー: 物理情報基盤ニューラルネットワーク(PINN)
- 機械学習におけるReLUとは?
- 機械学習における訓練/検証/テストセット
- ソフトプラス関数とは?
- PyTorchモデル/テンソルがロードされたデバイスを確認する方法
- サポートベクターマシン
- 機械学習における政府号カーネルと再生カーネルのヒルベルト空間
- マシンラーニングにおけるワンホットエンコーディングとは?
- 表現者の定理の証明
- ジュリアのさまざまなディープラーニングフレームワーク
- MNIST Database
- アイリスデータセット
- ディープラーニングにおけるレイヤーとは?
- PyTorchで与えられた分布からランダムサンプリングする方法
- PyTorchで「RuntimeError: Boolean value of Tensor with more than one value is ambiguous」エラーの解決方法
- PyTorchでのテンソルソートに関する関数
- Flux-PyTorch-TensorFlowチートシート
- PyTorchでモデルを保存する際の「RuntimeError: Parent directory does not exists」エラーの解決法
- モンテカルロ積分
- 重要度サンプリング
- 棄却サンプリング
- モンテカルロ法
- データ拡張とは何か?
- マシンラーニングにおけるオンライン学習とバッチ学習とは?
- PyTorchのモジュラー演算
- 勾配降下における運動量法
- 適応的な学習率: AdaGrad, RMSProp, Adam
- TensorFlow-Kerasでシーケンスモデル、関数型APIでMLPを定義してトレーニングする方法