読者です 読者をやめる 読者になる 読者になる

人工知能エンジニア修行日記

人工知能エンジニアを目指して修行します

深層学習用の数学プログラミングは『Pythonからはじめる数学入門』より『行列プログラマー』かも

以下、手を動かしていないが、いったん通読完了。

www.oreilly.co.jp

目次

1章 数を扱う
    1.1 基本数学演算
    1.2 ラベル:名前に数を割り当てる
    1.3 さまざまな種類の数
        1.3.1 分数を扱う
        1.3.2 複素数
    1.4 ユーザ入力を受け取る
        1.4.1 例外と不当入力の処理
        1.4.2 分数と複素数を入力
    1.5 数学を行うプログラムを書く
        1.5.1 整数の因数を計算する
        1.5.2 乗算表を生成する
        1.5.3 測定単位を変換する
        1.5.4 2次方程式の解を求める
    1.6 学んだこと
    1.7 プログラミングチャレンジ
        問題1-1 奇数偶数自動判別プログラム
        問題1-2 乗算表生成器の拡張
        問題1-3 単位変換プログラムの拡張
        問題1-4 分数電卓
        問題1-5 ユーザに脱出能力を与える

2章 データをグラフで可視化する
    2.1 デカルト座標平面を理解する
    2.2 リストとタプルの操作
        2.2.1 リストやタプルで繰り返す
    2.3 matplotlibでグラフを作る
        2.3.1 グラフで点を作る
        2.3.2 ニューヨーク市の年間平均気温をグラフ化する
        2.3.3 ニューヨーク市の月間気温傾向を比較する
        2.3.4 グラフのカスタマイズ
        2.3.5 プロットの保存
    2.4 式をプロットする
        2.4.1 ニュートンの万有引力の法則
        2.4.2 投射運動
    2.5 学んだこと
    2.6 プログラミングチャレンジ
        問題2-1 1日の間に気温はどのように変化するか
        問題2-2 2次関数を視覚的に探索する
        問題2-3 投射軌跡比較プログラムの拡張
        問題2-4 支出を可視化する
        問題2-5 フィボナッチ数列と黄金比の関係を調べる

3章 データを統計量で記述する
    3.1 平均を求める
    3.2 中央値を求める
    3.3 最頻値を求め度数分布表を作る
        3.3.1 一番多い要素を見つける
        3.3.2 最頻値を探す
        3.3.3 度数分布表を作る
    3.4 散らばりを測る
        3.4.1 数集合の範囲を決める
        3.4.2 分散と標準偏差を求める
    3.5 2つのデータセットの相関を計算する
        3.5.1 相関係数を計算する
        3.5.2 高校の成績と大学入試の点数
    3.6 散布図
    3.7 ファイルからデータを読み込む
        3.7.1 テキストファイルからデータを読み込む
        3.7.2 CSVファイルからデータを読み込む
    3.8 学んだこと
    3.9 プログラミングチャレンジ
        問題3-1 よりよい相関係数を求めるプログラム
        問題3-2 統計電卓
        問題3-3 他のCSVデータでの実験
        問題3-4 百分位を求める
        問題3-5 グループ度数分布表を作る

4章 SymPyで代数と式を計算する
    4.1 式の記号と記号演算を定義する
    4.2 式を扱う
        4.2.1 式の因数分解と展開
        4.2.2 プリティプリント
        4.2.3 値に代入する
        4.2.4 文字列を数式に変換する
    4.3 方程式を解く
        4.3.1 2次方程式を解く
        4.3.2 1変数を他の変数について解く
        4.3.3 連立方程式を解く
    4.4 SymPyを使ってプロットする
        4.4.1 ユーザが入力した式をプロットする
        4.4.2 複数の関数をプロットする
    4.5 学んだこと
    4.6 プログラミングチャレンジ
        問題4-1 因数ファインダ
        問題4-2 グラフを使った方程式ソルバー
        問題4-3 級数の和
        問題4-4 1変数の不等式を解く
        ヒント:役立つ関数

5章 集合と確率を操作する
    5.1 集合とは何か
        5.1.1 集合の構成
        5.1.2 部分集合、上位集合、べき集合
        5.1.3 集合演算
    5.2 確率
        5.2.1 事象Aまたは事象Bの確率
        5.2.2 事象Aおよび事象Bの確率
        5.2.3 乱数生成
        5.2.4 非一様乱数
    5.3 学んだこと
    5.4 プログラミングチャレンジ
        問題5-1 ベン図を使って集合の関係を可視化する
        問題5-2 大数の法則
        問題5-3 お金がなくなるまで何回硬貨を投げられるか
        問題5-4 トランプをよく切る
        問題5-5 円の領域を推定する
        πの値を推定する

6章 幾何図形とフラクタルを描画する
    6.1 matplotlibのパッチで幾何図形を描く
        6.1.1 円を描く
        6.1.2 図形のアニメーションを作る
        6.1.3 投射軌跡のアニメーション
    6.2 フラクタルを描く
        6.2.1 平面上の点の変換
        6.2.2 バーンスレイのシダを描く
    6.3 学んだこと
    6.4 プログラミングチャレンジ
        問題6-1 正方形に円を詰める
        問題6-2 シェルピンスキーの三角形
        問題6-3 エノンの関数を調べる
        問題6-4 マンデルブロ集合を描く
        imshow()関数
        リストのリストを作る
        マンデルブロ集合を描く

7章 初等解析問題を解く
    7.1 関数とは何か
        7.1.1 関数の定義域と値域
        7.1.2 よく使われる数学関数
    7.2 SymPyでの仮定
    7.3 関数の極限を求める
        7.3.1 連続複利(Continuous Compound Interest)
        7.3.2 瞬間変化率
    7.4 関数の微分を求める
        7.4.1 微分電卓
        7.4.2 偏微分を求める
    7.5 高階微分と極大極小の計算
    7.6 勾配上昇法を用いて最大値を求める
        7.6.1 勾配上昇法のジェネリックなプログラム
        7.6.2 初期値について一言
        7.6.3 ステップサイズとイプシロンの役割
    7.7 関数の積分を求める
    7.8 確率密度関数
    7.9 学んだこと
    7.10 プログラミングチャレンジ
        問題7-1 ある点での関数の連続性を検証する
        問題7-2 勾配降下法を実装する
        問題7-3 2曲線で囲まれた領域の面積
        問題7-4 曲線の長さを求める

付録A ソフトウェアのインストール
    A.1 Microsoft Windows
        A.1.1 SymPyの更新
        A.1.2 matplotlib-vennのインストール
        A.1.3 Pythonシェルの開始
    A.2 Linux
        A.2.1 SymPyの更新
        A.2.2 matplotlib-vennのインストール
        A.2.3 Pythonシェルの開始
    A.3 Mac OS X
        A.3.1 SymPyの更新
        A.3.2 matplotlib-vennのインストール
        A.3.3 Pythonシェルの開始

付録B Pythonについて
    B.1 if __name__ == '__main__' 
    B.2 リスト内包表記
    B.3 辞書データ構造
    B.4 複数戻り値
    B.5 例外処理
        B.5.1 複数の例外型を指定する
        B.5.2 elseブロック
    B.6 Pythonでのファイル読み込み
        B.6.1 全行を一度に読み込む
        B.6.2 ファイル名を入力で指定する
        B.6.3 ファイル読み込み時のエラー処理
    B.7 コードの再利用

Pythonを使っていろいろな数学のプログラミングを仕方のポイントを学べる点で有益だった。

ただ、正直、深層学習をやる分には関係のない分野もあり、それよりも、

『ゼロから作るDeep Learning』を学ぶ過程で必要だと感じたことは、

行列プログラミングの徹底的な理解。

その意味では、以下の分厚い行列に特化した参考書のほうがよいかもしれない(こっちは未読)。

www.oreilly.co.jp

0章 関数(とその他の数学とコンピュータに関する予備知識)
    0.1 集合に関する用語と記法
    0.2 デカルト積
    0.3 関数
        0.3.1 関数 vs プロシージャ vs 計算問題
        0.3.2 関数に関連する2つの計算問題
        0.3.3 特定の定義域と余定義域を持つ関数の集合に関する記法
        0.3.4 恒等関数
        0.3.5 関数の合成
        0.3.6 関数の合成の結合則
        0.3.7 逆関数
        0.3.8 可逆関数の合成関数についての可逆性
    0.4 確率
        0.4.1 確率分布
        0.4.2 事象及び確率の和
        0.4.3 関数への無作為な入力
        0.4.4 完全秘匿
        0.4.5 完全秘匿で可逆な関数
    0.5 ラボ:Python入門..集合、リスト、辞書、内包表記
        0.5.1 簡単な式
        0.5.2 代入文
        0.5.3 条件式
        0.5.4 集合
        0.5.5 リスト
        0.5.6 タプル
        0.5.7 その他の繰り返し処理について
        0.5.8 辞書
        0.5.9 1行プロシージャを定義する
    0.6 ラボ:Pythonと逆インデックス..モジュールと制御構造
        0.6.1 既存のモジュールの利用
        0.6.2 モジュールの作成
        0.6.3 ループと条件文
        0.6.4 字下げによるPythonのグループ化機能
        0.6.5 ループからの脱出
        0.6.6 ファイルからの読み込み
        0.6.7 ミニ検索エンジン
    0.7 確認用の質問
    0.8 問題

1章 体
    1.1 複素数入門
    1.2 Pythonにおける複素数
    1.3 体への抽象化
    1.4 Cと遊ぼう
        1.4.1 複素数の絶対値
        1.4.2 複素数を足すこと
        1.4.3 複素数に正の実数を掛けること
        1.4.4 複素数に負の実数を掛けること:180度の回転
        1.4.5 iを掛けること:90度の回転
        1.4.6 複素平面上の単位円:偏角と角度
        1.4.7 オイラーの公式
        1.4.8 複素数の極表示
        1.4.9 指数の第1法則
        1.4.10 ラジアンの回転
        1.4.11 変換の合成
        1.4.12 2次元を越えて
    1.5 GF(2)で遊ぼう
        1.5.1 完全秘匿な暗号化システム、再訪
        1.5.2 ワンタイムパッド
        1.5.3 ネットワークコーディング
    1.6 確認用の質問
    1.7 問題

2章 ベクトル
    2.1 ベクトルとは何か?
    2.2 ベクトルは関数
        2.2.1 Pythonの辞書を用いたベクトルの表現
        2.2.2 スパース性
    2.3 ベクトルで何が表現できるか?
    2.4 ベクトルの加法
        2.4.1 平行移動とベクトルの加法
        2.4.2 ベクトルの加法の結合則と可換則
        2.4.3 矢印としてのベクトル
    2.5 スカラーとベクトルの積
        2.5.1 矢印のスケーリング
        2.5.2 スカラーとベクトルの積の結合則
        2.5.3 原点を通る線分
        2.5.4 原点を通る直線
    2.6 ベクトルの和とスカラーとの積の組み合わせ
        2.6.1 原点を通らない線分と直線
        2.6.2 スカラーとベクトルの積とベクトルの和に対する分配則
        2.6.3 はじめての凸結合
        2.6.4 はじめてのアフィン結合
    2.7 辞書によるベクトルの表現
        2.7.1 セッターとゲッター
        2.7.2 スカラーとベクトルの積
        2.7.3 加法
        2.7.4 ベクトルの反転、ベクトルの和、差の可逆性
    2.8 GF(2)上のベクトル
        2.8.1 完全秘匿性、再再訪
        2.8.2 GF(2)を用いた1か0の秘密共有
        2.8.3 ライツアウト
    2.9 ドット積
        2.9.1 総費用と利益
        2.9.2 線形方程式
        2.9.3 類似性の測定
        2.9.4 GF(2)上のベクトルのドット積
        2.9.5 パリティビット
        2.9.6 簡単な認証方式
        2.9.7 この簡単な認証方式への攻撃
        2.9.8 ドット積の代数的性質
        2.9.9 簡単な認証方式への攻撃、再訪
    2.10 Vecの実装
        2.10.1 Vecを扱う構文
        2.10.2 実装
        2.10.3 Vecの利用
        2.10.4 Vecの表示
        2.10.5 Vecのコピー
        2.10.6 リストからVecへ
    2.11 上三角線形方程式系を解く
        2.11.1 上三角線形方程式系
        2.11.2 後退代入
        2.11.3 後退代入の最初の実装
        2.11.4 このアルゴリズムはどのような場合に役に立つか?
        2.11.5 任意の定義域のベクトルを用いた後退代入
    2.12 ラボ:ドット積を用いた投票記録の比較
        2.12.1 動機
        2.12.2 ファイルから読み込む
        2.12.3 ドット積を用いてベクトルを比較する2つの方法
        2.12.4 ポリシーの比較
        2.12.5 平均的でない民主党員
        2.12.6 宿敵
        2.12.7 更なる課題
    2.13 確認用の質問
    2.14 問題

3章 ベクトル空間
    3.1 線形結合
        3.1.1 線形結合の定義
        3.1.2 線形結合の利用
        3.1.3 係数から線形結合へ
        3.1.4 線形結合から係数へ
    3.2 線形包
        3.2.1 線形包の定義
        3.2.2 他の方程式を含む線形方程式系
        3.2.3 生成子
        3.2.4 線形結合の線形結合
        3.2.5 標準生成子
    3.3 ベクトルの集合の幾何学
        3.3.1 R上のベクトルの線形包の幾何学
        3.3.2 同次線形系の解集合の幾何学
        3.3.3 原点を含むフラットの2通りの表現
    3.4 ベクトル空間
        3.4.1 2つの表現に共通するものは何か?
        3.4.2 ベクトル空間の定義と例
        3.4.3 部分空間
        3.4.4 *抽象ベクトル空間
    3.5 アフィン空間
        3.5.1 原点を通らないフラット
        3.5.2 アフィン結合
        3.5.3 アフィン空間
        3.5.4 線形系の解集合によるアフィン空間の表現
        3.5.5 2通りの表現について、再訪
    3.6 同次線形系とその他の線形系
        3.6.1 同次線形系と対応する一般の線形系
        3.6.2 解の個数、再訪
        3.6.3 平面と直線の交差について
        3.6.4 チェックサム関数
    3.7 確認用の質問
    3.8 問題

4章 行列
    4.1 行列とは何か?
        4.1.1 伝統的な行列
        4.1.2 行列の正体
        4.1.3 行、列、要素
        4.1.4 Pythonにおける行列の実装
        4.1.5 単位行列
        4.1.6 行列の表現間の変換
        4.1.7 matutil.py
    4.2 列ベクトル空間と行ベクトル空間
    4.3 ベクトルとしての行列
    4.4 転置
    4.5 線形結合による行列とベクトルの積及びベクトルと行列の積の表現
        4.5.1 線形結合による行列とベクトルの積の表現
        4.5.2 線形結合によるベクトルと行列の積の表現
        4.5.3 ベクトルの線形結合による表現の行列とベクトルの方程式による定式化
        4.5.4 行列とベクトルの方程式を解く
    4.6 ドット積による行列とベクトルの積の表現
        4.6.1 定義
        4.6.2 応用例
        4.6.3 線形方程式の行列とベクトルの方程式としての定式化
        4.6.4 三角系と三角行列
        4.6.5 行列とベクトルの積の代数的性質
    4.7 ヌル空間
        4.7.1 同次線形系と行列の方程式
        4.7.2 行列とベクトルの方程式の解空間
        4.7.3 はじめてのエラー訂正コード
        4.7.4 線形符号
        4.7.5 ハミングコード
    4.8 スパース行列とベクトルの積の計算
    4.9行列と関数
        4.9.1 行列から関数へ
        4.9.2 関数から行列へ
        4.9.3 行列の導出例
    4.10 線形関数
        4.10.1 行列とベクトルの積で表現できる関数
        4.10.2 定義と簡単な例
        4.10.3 線形関数とゼロベクトル
        4.10.4 線形関数による直線の変換
        4.10.5 単射な線形関数
        4.10.6 全射な線形関数
        4.10.7 FCからFRへの線形関数の行列による表現
        4.10.8 対角行列
    4.11 行列と行列の積
        4.11.1 行列と行列の積の行列とベクトルの積及びベクトルと行列の積による表現
        4.11.2 グラフ、隣接行列、そして道の数え上げ
        4.11.3 行列と行列の積と関数の合成
        4.11.4 行列と行列の積の転置
        4.11.5 列ベクトルと行ベクトル
        4.11.6 全てのベクトルは列ベクトルと解釈される
        4.11.7 線形結合の線形結合、再訪
    4.12 内積と外積
        4.12.1 内積
        4.12.2 外積
    4.13 逆関数から逆行列へ
        4.13.1 線形関数の逆関数も線形である
        4.13.2 逆行列
        4.13.3 逆行列の利用
        4.13.4 可逆行列の積は可逆行列である
        4.13.5 逆行列についての補足
    4.14 ラボ:エラー訂正コード
        4.14.1 チェック行列
        4.14.2 生成子行列
        4.14.3 ハミングコード
        4.14.4 復号化
        4.14.5 エラーシンドローム
        4.14.6 エラーの検出
        4.14.7 全てをまとめる
    4.15 ラボ:2次元幾何学における座標変換
        4.15.1 平面上の点の表現
        4.15.2 座標変換
        4.15.3 画像表現
        4.15.4 画像の読み込みと表示
        4.15.5 線形変換
        4.15.6 平行移動
        4.15.7 スケーリング
        4.15.8 回転
        4.15.9 原点以外の点を中心とした回転
        4.15.10 反転
        4.15.11 色の変換
        4.15.12 より一般的な反転
    4.16 確認用の質問
    4.17 問題

5章 基底
    5.1 座標系
        5.1.1 ルネ・デカルトのアイデア
        5.1.2 座標表現
        5.1.3 座標表現及び行列とベクトルの積
    5.2 はじめての非可逆圧縮
        5.2.1 方法1:最も近いスパースベクトルに置き換える
        5.2.2 方法2:画像ベクトルを座標で表現する
        5.2.3 方法3:複合的な方法
    5.3 生成子を探す2つの欲張りなアルゴリズム
        5.3.1 グローアルゴリズム
        5.3.2 シュリンクアルゴリズム
        5.3.3 欲張って失敗する場合
    5.4 最小全域森とGF(2)
        5.4.1 定義
        5.4.2 最小全域森に対するグローアルゴリズムとシュリンクアルゴリズム
        5.4.3 線形代数での最小全域森
    5.5 線形従属性
        5.5.1 余分なベクトルの補題
        5.5.2 線形従属性の定義
        5.5.3 最小全域森における線形従属性
        5.5.4 線形従属、線形独立の性質
        5.5.5 グローアルゴリズムの考察
        5.5.6 シュリンクアルゴリズムの考察
    5.6 基底
        5.6.1 基底の定義
        5.6.2 FDの標準基底
        5.6.3 全てのベクトル空間が基底を持つことの証明への準備
        5.6.4 ベクトルの有限集合は全てその線形包の基底を含むということ
        5.6.5 Vの任意の線形独立なベクトルの部分集合はVの基底の形にすることができるか?
    5.7 一意的な表現
        5.7.1 基底による座標表現の一意性
    5.8 はじめての基底の変換
        5.8.1 表現からベクトルへの関数
        5.8.2 ある表現から別の表現へ
    5.9 遠近法によるレンダリング
        5.9.1 3次元空間内の点
        5.9.2 カメラと画像平面
        5.9.3 カメラ座標系
        5.9.4 3次元空間内のある点のカメラ座標から対応する画像平面上の点のカメラ座標へ
        5.9.5 3次元空間内の座標からカメラ座標へ
        5.9.6 ピクセル座標系へ
    5.10 基底を求める計算問題
    5.11 交換の補題
        5.11.1 交換の補題
        5.11.2 最小全域森に対するグローアルゴリズムの正当性の証明
    5.12 ラボ:透視補正
        5.12.1 カメラ基底
        5.12.2 ホワイトボード基底
        5.12.3 ピクセルからホワイトボード上の点への写像
        5.12.4 ホワイトボード上にない点から対応するホワイトボードの上の点への写像
        5.12.5 基底の変換行列
        5.12.6 基底の変換行列の計算
        5.12.7 画像表現
        5.12.8 透視補正した画像の生成
    5.13 確認用の質問
    5.14 問題

6章 次元
    6.1 基底ベクトルの個数
        6.1.1 モーフィングの補題とその結果
        6.1.2 モーフィングの補題の証明
    6.2 次元とランク
        6.2.1 定義と例
        6.2.2 幾何学
        6.2.3 グラフの次元とランク
        6.2.4 GF(2)上のベクトル空間の濃度
        6.2.5 Vに属する任意の線形独立なベクトルの集合からVの基底への拡張
        6.2.6 次元原理
        6.2.7 グローアルゴリズムの終了
        6.2.8 ランク定理
        6.2.9 簡単な認証、再訪
    6.3 直和
        6.3.1 定義
        6.3.2 直和の生成子
        6.3.3 直和の基底
        6.3.4 ベクトルの分解の一意性
        6.3.5 補空間
    6.4 次元と線形関数
        6.4.1 線形関数の可逆性
        6.4.2 可逆な最大部分関数
        6.4.3 次元定理
        6.4.4 線形関数の可逆性、再訪
        6.4.5 ランクと退化次数の定理
        6.4.6 チェックサム問題、再訪
        6.4.7 行列の可逆性
        6.4.8 行列の可逆性と基底の変換
    6.5 アニヒレーター
        6.5.1 表現の間の変換
        6.5.2 ベクトル空間のアニヒレーター
        6.5.3 アニヒレーター次元定理
        6.5.4 Vの生成子からVoの生成子へ、及びその逆
        6.5.5 アニヒレーター定理
    6.6 確認用の質問
    6.7 問題

7章 ガウスの掃き出し法
    7.1 階段形式
        7.1.1 階段形式から行ベクトル空間の基底へ
        7.1.2 階段形式における行ベクトルのリスト
        7.1.3 行を0でない要素がはじめて現れる位置でソートする
        7.1.4 行基本変形
        7.1.5 行基本行列を掛ける
        7.1.6 行基本変形による行ベクトル空間の保存
        7.1.7 ガウスの掃き出し法を通じた基底、ランク、そして線形独立性
        7.1.8 ガウスの掃き出し法が失敗する場合
        7.1.9 ピボット化と数値解析
        7.1.10 GF(2)上におけるガウスの掃き出し法
    7.2 ガウスの掃き出し法の他の応用
        7.2.1 逆行列を持つ行列MでMAが階段形式になるものが存在すること
        7.2.2 行列の積を用いずにMを計算する
    7.3 ガウスの掃き出し法による行列とベクトルの方程式の解法
        7.3.1 行列が階段形式の場合の行列とベクトルの方程式の解法..逆行列を持つ場合
        7.3.2 ゼロ行を処理する
        7.3.3 無関係な列を処理する
        7.3.4 単純な認証方式への攻撃とその改善
    7.4 ヌル空間の基底を見つける
    7.5 整数の素因数分解
        7.5.1 素因数分解へのはじめての試み
    7.6 ラボ:閾値シークレットシェアリング
        7.6.1 最初の試み
        7.6.2 うまくいく方法
        7.6.3 本手法の実装
        7.6.4 uの生成
        7.6.5 条件を満たすベクトルの探索
        7.6.6 文字列の共有
    7.7 ラボ:整数の素因数分解
        7.7.1 平方根を用いた最初の試み
        7.7.2 最大公約数を求めるためのユークリッドの互除法
        7.7.3 平方根を用いた試み、再訪
    7.8 確認用の質問
    7.9 問題

8章 内積
    8.1 消防車問題
        8.1.1 距離、長さ、ノルム、内積
    8.2 実数上のベクトルの内積
        8.2.1 実数上のベクトルのノルム
    8.3 直交性
        8.3.1 直交性が満たす性質
        8.3.2 ベクトルbの平行成分と直交成分への分解
        8.3.3 直交性が持つ性質と消防車問題の解
        8.3.4 射影と最も近い点の探索
        8.3.5 消防車問題の解
        8.3.6 *外積と射影
        8.3.7 高次元版の問題の解法に向けて
    8.4 ラボ:機械学習
        8.4.1 データ
        8.4.2 教師あり学習
        8.4.3 仮説クラス
        8.4.4 訓練データにおける誤差を最小化する分類器の選択
        8.4.5 ヒルクライミングによる非線形最適化
        8.4.6 勾配
        8.4.7 最急降下法
    8.5 確認用の質問
    8.6 問題

9章 直交化
    9.1 複数のベクトルに直交する射影
        9.1.1 ベクトルの集合に対する直交性
        9.1.2 ベクトル空間への射影とそれに直交する射影
        9.1.3 ベクトルのリストに直交する射影の第一歩
    9.2 互いに直交するベクトルに直交する射影
        9.2.1 project_orthogonalが正しいことの証明
        9.2.2 project_orthogonalの拡張
    9.3 直交する生成子の集合の作成
        9.3.1 プロシージャorthogonalize
        9.3.2 orthogonalizeが正しいことの証明
    9.4 計算問題「ベクトルの線形包の中で最も近い点」を解く
    9.5 直交化の他の問題への応用
        9.5.1 基底の計算
        9.5.2 部分集合から成る基底の計算
        9.5.3 aug_orthogonalize
        9.5.4 丸め誤差がある場合のアルゴリズム
    9.6 直交補空間
        9.6.1 直交補空間の定義
        9.6.2 直交補空間と直和
        9.6.3 線形包またはアフィン包で与えられたR3における平面に対する法ベクトル
        9.6.4 直交補空間、ヌル空間、アニヒレーター
        9.6.5 方程式で与えられたR3の中の平面に対する法ベクトル
        9.6.6 直交補空間の計算
    9.7 QR分解
        9.7.1 直交行列と列直交行列
        9.7.2 列直交行列の積はノルムを保存する
        9.7.3 行列のQR分解の定義
        9.7.4 Aが線形独立な列ベクトルを持つための条件
    9.8 QR分解による行列の方程式Ax = bの解法
        9.8.1 正方行列の場合
        9.8.2 正方行列の場合の正しさ
        9.8.3 最小二乗問題
        9.8.4 列直交行列の列ベクトルによる座標表現
        9.8.5 Aの行が列より長い場合のQR_solveの使用
    9.9 最小二乗法の応用
        9.9.1 線形回帰(直線へのフィッティング)
        9.9.2 放物線へのフィッティング
        9.9.3 2変数の放物線へのフィッティング
        9.9.4 産業スパイ問題の近似値への応用
        9.9.5 センサーノード問題の近似値への応用
        9.9.6 機械学習の問題への最小二乗法の利用
    9.10 確認用の質問
    9.11 問題

10章 特別な基底
    10.1 最も近いkスパースベクトル
    10.2 与えられた基底に対する表現がkスパースであるような最も近いベクトル
        10.2.1 正規直交基底による座標表現を求める
    10.3 ウェーブレット
        10.3.1 解像度の異なる1次元「画像」
        10.3.2 Vnの直和への分解
        10.3.3 ハールウェーブレット基底
        10.3.4 V1の基底
        10.3.5 一般のnについて
        10.3.6 ウェーブレット変換の最初のステップ
        10.3.7 ウェーブレット分解の以降のステップ
        10.3.8 正規化
        10.3.9 逆変換
        10.3.10 実装
    10.4 多項式の評価と補間
    10.5 フーリエ変換
    10.6 離散フーリエ変換
        10.6.1 指数法則
        10.6.2 n個のストップウォッチ
        10.6.3 離散フーリエ空間:基底関数のサンプリング
        10.6.4 フーリエ行列の逆行列
        10.6.5 高速フーリエ変換(FFT)アルゴリズム
        10.6.6 FFTの導出
        10.6.7 FFTのコーディング
    10.7 複素数上のベクトルの内積
    10.8 巡回行列
        10.8.1 巡回行列とフーリエ行列の列の積
        10.8.2 巡回行列と基底の変換
    10.9 ラボ:ウェーブレットを用いた圧縮
        10.9.1 正規化されていない順変換
        10.9.2 順変換の正規化
        10.9.3 抑制による圧縮
        10.9.4 非正規化
        10.9.5 正規化されていない逆変換
        10.9.6 逆変換
    10.10 2次元画像の処理
        10.10.1 補助プロシージャ
        10.10.2 2次元ウェーブレット変換
        10.10.3 2次元順変換
        10.10.4 いくつかの補助プロシージャ
        10.10.5 2次元逆変換
        10.10.6 画像圧縮の実験
    10.11 確認用の質問
    10.12 問題

11章 特異値分解
    11.1 低ランク行列による行列の近似
        11.1.1 低ランク行列の利点
        11.1.2 行列のノルム
    11.2 路面電車の路線配置問題
        11.2.1 路面電車の路線配置問題の解
        11.2.2 行列のランク1近似
        11.2.3 最適なランク1近似
        11.2.4 最適なランク1近似の表現
        11.2.5 最も近い1次元アフィン空間
    11.3 最も近いk次元ベクトル空間
        11.3.1 特異値と特異ベクトルを求めるための「思考実験的」アルゴリズム
        11.3.2 特異値と右特異ベクトルの性質
        11.3.3 特異値分解
        11.3.4 右特異ベクトルを用いた最も近いk次元空間の求め方
        11.3.5 Aの最適なランクk近似
        11.3.6 最適なランクk近似の行列による表現
        11.3.7 0でない特異値の数とrank Aとの一致
        11.3.8 数値的なランク
        11.3.9 最も近いk次元アフィン空間
        11.3.10 Uが列直交であることの証明
    11.4 特異値分解の利用
        11.4.1 特異値分解の最小二乗問題への応用
    11.5 主成分分析
    11.6 ラボ:固有顔
    11.7 確認用の質問   55211.8問題

12章 固有ベクトル
    12.1 離散力学過程のモデル化
        12.1.1 2つの利息付きの口座
        12.1.2 フィボナッチ数
    12.2 フィボナッチ行列の対角化
    12.3 固有値と固有ベクトル
        12.3.1 相似と対角化可能性
    12.4 固有ベクトルによる座標表現
    12.5 インターネットワーム
    12.6 固有値の存在
        12.6.1 正定値行列と準正定値行列
        12.6.2 異なる固有値を持つ行列
        12.6.3 対称行列
        12.6.4 上三角行列
        12.6.5 一般の正方行列
    12.7 冪乗法
    12.8 マルコフ連鎖
        12.8.1 人口動態のモデル化
        12.8.2 ランディのモデル化
        12.8.3 マルコフ連鎖の定義
        12.8.4 メモリの取り出しにおける空間の局所性のモデル化
        12.8.5 文書のモデル化:不思議の国のハムレット
        12.8.6 それ以外のもののモデル化
        12.8.7 マルコフ連鎖の定常分布
        12.8.8 定常分布が存在するための十分条件
    12.9 ウェブサーファーのモデル化:ページランク
    12.10 *行列式
        12.10.1 平行四辺形の面積
        12.10.2 超平行体の体積
        12.10.3 平行四辺形を用いた多角形面積の表現
        12.10.4 行列式
        12.10.5 行列式関数を用いた固有値の特性化
    12.11 *いくつかの固有定理の証明
        12.11.1 固有値の存在
        12.11.2 対称行列の対角化
        12.11.3 三角化
    12.12 ラボ:ページランク
        12.12.1 概念の導入
        12.12.2 大きなデータセットの使用
        12.12.3 冪乗法を用いたページランクの実装
        12.12.4 データセット
        12.12.5 検索の処理
        12.12.6 ページランクの偏り
        12.12.7 おまけ:複数単語検索の処理
    12.13 確認用の質問
    12.14 問題

13章 線形計画法
    13.1 規定食の問題
    13.2 規定食の問題を線形計画としてとらえる
    13.3 線形計画法の起源
        13.3.1 用語
        13.3.2 線形計画法の異なる形式
        13.3.3 整数による線形計画法
    13.4 線形計画法の幾何学:多面体と頂点
    13.5 多面体の頂点であるような最適解の存在
    13.6 線形計画法の列挙アルゴリズム
    13.7 線形計画法における双対性入門
    13.8 シンプレックスアルゴリズム
        13.8.1 アルゴリズムの終了方法
        13.8.2 現在の解を表現する
        13.8.3 ピボットステップ
        13.8.4 単純な例
    13.9 頂点を見つける
    13.10 ゲーム理論
        13.10.1 線形計画としての定式化
        13.10.2 ノンゼロサムゲーム
    13.11 ラボ:線形計画法を用いた学習
        13.11.1 訓練データの読み込み
        13.11.2 線形計画の準備
        13.11.3 主制約条件
        13.11.4 非負制約条件
        13.11.5 行列A
        13.11.6 右辺のベクトルb
        13.11.7 目的関数ベクトルc
        13.11.8 これまでの作業の統合
        13.11.9 頂点の探索
        13.11.10 線形計画を解く
        13.11.11 結果の利用
    13.12 圧縮センシング
        13.12.1 より高速にMRI画像を得る
        13.12.2 少年を救うための計算
        13.12.3 前進
    13.13 確認用の質問
    13.14 問題

かなりヘビーな内容の印象だが、ベクトル・行列・テンソルを極めることでディープラーニングの肝を押さえられると感じた。

DL/MLと平行して行列プログラミングも取り組んでいくことにする。