ゼロから作るDeep LearningをJuliaで学びたかった
自分用まとめ
章節に沿いながら大雑把にまとめてコードをJuliaに書き換えていく
書籍本文の内容はほとんど記載しません
書籍
ゼロから学ぶDeep Learning ~Pythonで学ぶディープラーニングの理論と実装~
https://www.oreilly.co.jp/books/9784873117584/
https://github.com/oreilly-japan/deep-learning-from-scratch
目次
1章 Julia入門
1.1 Julia とは
1.2 Juliaのインストール
1.2.1 Juliaのバージョン
1.2.2 使用する外部ライブラリ
1.3 Juliaインタプリンタ
1.3.1 算術計算
1.3.2 データ型
1.3.3 変数
1.3.4 配列の生成
1.3.5 N次元配列
1.3.6 配列の算術演算
1.3.7 ブロードキャスト
1.3.8 ディクショナリ
1.3.9 ブーリアン
1.3.10 if文
1.3.11 for文
1.3.12 関数
1.4 Juliaスクリプトファイル
1.5 Plots
1.5.1 Plotsのインポート
1.5.2 単純なグラフ描画
1.5.3 Plotsの機能
2章 パーセプトロン
2.1 パーセプトロンとは
2.2 単純な論理回路
2.2.1 ANDゲート
2.2.2 NANDゲートとORゲート
2.3 パーセプトロンの実装
2.3.1 簡単な実装
2.3.2 重みとバイアスの導入
2.3.3 重みとバイアスによる実装
2.4 パーセプトロンの限界
2.4.1 XORゲート
2.4.2 線形と非線形
2.5 多層パーセプトロン
2.5.1 既存ゲートの組み合わせ
2.5.2 XORゲートの実装
2.6 NANDからコンピュータへ
2.7 まとめ
3章 ニューラルネットワーク
3.1 パーセプトロンからニューラルネットワークへ
3.1.1 ニューラルネットワークの例
3.1.2 パーセプトロンの復習
3.1.3 活性化関数の登場
3.2 活性化関数
3.2.1 シグモイド関数
3.2.2 ステップ関数の実装
3.2.3 ステップ関数のグラフ
3.2.4 シグモイド関数の実装
3.2.5 シグモイド関数とステップ関数の比較
3.2.6 非線形関数
3.2.7 ReLU関数
3.3 多次元配列の計算
3.3.1 多次元配列
3.3.2 行列の積
3.3.3 ニューラルネットワークの行列の積
3.4 3層ニューラルネットワーク
3.4.1 記号の確認
3.4.2 各層における信号伝達の実装
3.4.3 実装のまとめ
3.5 出力層の設計
3.5.1 恒等関数とソフトマックス関数
3.5.2 ソフトマックス関数の実装上の注意
3.5.3 ソフトマックス関数の特徴
3.5.4 出力層のニューロンの数
3.6 手書き数字認識
3.6.1 MNISTデータセット
3.6.2 ニューラルネットワークの推論処理
3.6.3 バッチ処理
3.7 まとめ
4章 ニューラルネットワークの学習
4.1 データから学習する
4.1.1 データ駆動
4.1.2 訓練データとテストデータ
4.2 損失関数
4.2.1 2乗和誤差
4.2.2 交差エントロピー誤差
4.2.3 ミニバッチ処理
4.2.4 [バッチ対応版] 交差エントロピー誤差の実装
4.2.5 ミニバッチ処理
4.3 数値微分
4.3.1 微分
4.3.2 数値微分の例
4.3.3 偏微分
4.4 勾配
4.4.1 勾配法
4.4.2 ニューラルネットワークに対する勾配
4.5 学習アルゴリズムの実装
4.5.1 2層ニューラルネットワークの構造体
4.5.2 ミニバッチ学習の実装
4.5.3 テストデータで評価
4.6 まとめ
5章 誤差逆伝播法
5.1 計算グラフ
5.1.1 計算グラフで解く
5.1.2 局所的な計算
5.1.3 なぜ計算グラフで解くのか?
5.2 連鎖率
5.2.1 計算グラフの逆伝播
5.2.3 連鎖率と計算グラフ
5.3 逆伝播
5.3.1 加算ノードの逆伝播
5.3.2 乗算ノードの逆伝播
5.3.3 リンゴの例
5.4 単純なレイヤの実装
5.4.1 乗算レイヤの実装
5.4.2 加算レイヤの実装
5.5 活性化関数レイヤの実装
5.5.1 ReLUレイヤ
5.5.2 Sigmoidレイヤ
5.6 Affine/Softmaxレイヤの実装
5.6.1 Affineレイヤ
5.6.2 バッチ版Affineレイヤ
5.7 誤差逆伝播法の実装
5.7.1 ニューラルネットワークの学習の全体図
5.7.2 誤差逆伝播法に対応したニューラルネットワークの実装
5.7.3 誤差逆伝播法の勾配確認
5.7.4 誤差逆伝播法を使った学習
5.8 まとめ
6章 学習に関するテクニック
6.1 パラメータの更新
6.1.1 冒険家の話
6.1.2 SGD
6.1.3 SGDの欠点
6.1.4 Momentum
6.1.5 AdaGrad
6.1.6 Adam
6.1.7 どの更新手法を用いるか?
6.1.8 MNISTデータセットによる更新手法の確認
6.2 重みの初期値
6.2.1 重みの初期値を0にする?
6.2.2 隠れ層のアクティベーション分布
6.2.3 ReLUの場合の重みの初期値
6.2.4 MNISTデータセットによる重み初期値の比較
6.3 Batch Normalization
6.3.1 Batch Normalization のアルゴリズム
6.3.2 Batch Normalization の評価
6.4 正則化
6.4.1 過学習
6.4.2 Weight decay
6.4.3 Dropout
6.5 ハイパーパラメータの検証
6.5.1 検証データ
6.5.2 ハイパーパラメータの最適化
6.5.3 ハイパーパラメータの最適化の実装
6.6 まとめ
7章 畳み込みニューラルネットワーク
7.1 全体の構造
7.2 畳み込み層
7.2.1 全結合層の問題点
7.2.2 畳み込み演算
7.2.3 パディング
7.2.4 ストライド
7.2.5 3次元データの畳み込み演算
7.2.6 ブロックで考える
7.2.7 バッチ処理
7.3 プーリング層
7.3.1 プーリング層の特徴
7.4 Convolution/Poolingレイヤの実装
7.4.1 4次元配列
7.4.2 im2colによる展開
7.4.3 Convolutionレイヤの実装
7.4.4 Poolingレイヤの実装
7.5 CNNの実装
7.6 CNNの可視化
7.6.1 1層目の重みの可視化
7.6.2 階層構造による情報抽出
7.7 代表的なCNN
7.7.1 LeNet
7.7.2 AlexNet
7.8 まとめ
8章 ディープラーニング
8.1 ネットワークをより深く
8.1.1 よりディープなネットワークへ
8.1.2 さらに認識精度を高めるには
8.1.3 層を深くすることのモチベーション
8.2 ディープラーニングの小歴史
8.2.1 ImageNet
8.2.2 VGG
8.2.3 GoogleNet
8.2.4 ResNet
8.3 ディープラーニングの高速化
8.3.1 取り組むべき問題
8.3.2 GPUによる高速化
8.3.3 分散学習
8.3.4 演算精度のビット削減
8.4 ディープラーニングの実用例
8.4.1 物体検出
8.4.2 セグメンテーション
8.4.3 画像キャプション生成
8.5 ディープラーニングの未来
8.5.1 画像スタイル変換
8.5.2 画像生成
8.5.3 自動運転
8.5.4 Deep Q-Network(強化学習)
8.6 まとめ