機械学習
機械学習machine learningとは、機械が既に持っているデータセットから特徴featureを把握する方法を学び、新しいデータの特徴もよく把握できるようにすることである。
上記の定義は特に厳密なものではなく、定義が厳密である必要もない。機械とは簡単に言えばコンピュータ、つまりプログラムコードと理解すればよい。既に持っている、すなわち学習に使われるデータセットをトレーニングセットtraining set、訓練データセットと呼ぶ。機械学習を試験勉強をする学生に例えると以下のようになる。
- 機械:学生
- トレーニングセット:過去問題
- 特徴:出題傾向
- 新しいデータ:実際の試験問題
- 学習:過去問題を解くことで実際の試験問題を解けるようにすること
2021年現在、機械学習を実装するのに最も多く使われている方法は、人工ニューラルネットワークの隠れ層を増やすディープラーニングdeep learning、深層学習である。人工ニューラルネットワークは最近になって飛躍的に性能が向上し、最高の性能を誇ることもある。ディープラーニングが満足のいく性能を示す前までは、機械学習の主流は統計的理論に基づいたモデルであった。
機械学習を扱える人になるためには、数学、統計学、プログラミングができなければならない。理論を理解するために数学、統計学の知識が要求され、これを実装するためにはプログラミングができなければならないからである。特に機械学習理論を深く学ぶためには、行列に関する線形代数学の知識だけでなく、測度論、関数解析学なども必要である。また最近では、幾何学、グラフ理論、偏微分方程式などと人工知能を連携した研究も進められている1。
また、以下の文章はできるだけ数学専攻者が読みやすいように作成された。
基礎
学習概念
最適化
サンプリングsampling、標本抽出
- モンテカルロ法とは?
- モンテカルロ積分
- 拒否サンプリング
- 重要度サンプリング
- マルコフ連鎖モンテカルロMCMC
古典的機械学習
線形回帰モデル
線形分類モデル
- 線形分類モデル
- 最小二乗法
- フィッシャー線形判別器 Fisher’s Linear Discriminant
- ネイマン-ピアソン二値分類 Neyman-Pearson Criterion for Binary Classification
- ベイズリスク分類器 Bayes Risk Classifier
クラスタリング
細分野
強化学習
コンピュータビジョン
ディープラーニング理論
- レイヤー
- 線形層
- 畳み込み層
- スキップコネクション
- 活性化関数
- 人工ニューラルネットワークANNとは
- [ANN人工ニューラルネットワーク、DNN深層ニューラルネットワーク、FNNフィードフォワードニューラルネットワークの意味と違い]
- パーセプトロンの定義
- ディープラーニングとは?
- 自動微分
- ディープラーニングの数学的根拠、シベンコの定理の証明
- ディープラーニングにおける継続的学習とは
- 過学習と正則化
- ボルツマンマシン
- 制限付きボルツマンマシン
- バッチ学習アルゴリズム
- オンライン学習アルゴリズム
- 分類のためのRBM
- ラジアルベーシス関数
- [MLP多層パーセプトロン]
- [CNN畳み込みニューラルネットワーク]
- Autoencoder
- PINN論文レビュー
- DeepONet 論文レビュー
- PyTorchでの実装
- Juliaでの実装
- [U-Net 論文レビュー]
- Juliaでの実装
- KANコルモゴロフ・アーノルドニューラルネットワーク 論文レビュー
ディープラーニングフレームワーク
Python 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を学習する方法
- 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)
全體ポスト
- 자동미분과 이원수
- 줄리아에서 이원수를 이용하여 자동미분 전진모드 구현하기
- インターネットで無料公開された人工知能、機械学習、ディープラーニングの教材
- 混同行列と感度、特異度
- 交差検証
- 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を定義してトレーニングする方法
- PyTorchでAdaBeliefオプティマイザを使う
- 人工ニューラルネットワークにおけるスキップ接続とは?
- 機械学習における重みとは?
- パイトーチでtorch.nnとtorch.nn.functionalの違い
- グリッドサーチ、ブルートフォース、肉体労働
- 大学院生の降下法
- ジュリア・フラックスでGPUを使用する方法
- Julia Fluxでニューラルネットワークトレーニングモード、テストモードの設定方法
- 論文レビュー:コルモゴロフ・アーノルドニューラルネットワーク(KAN)
- ソルト・アンド・ペッパーノイズ