線形代数と機械学習
線形代数は、ベクトルや行列を用いて、線形の関係を解析する数学の分野であり、機械学習においても重要な基礎的な数学的ツールの一つとなる。これは主に大量のデータの計算の効率化の為に活用されるが、そのほかにも、以下に示すような活用例もある。
- 特徴量の表現: 機械学習では、データを特徴量として表現する。特徴量はベクトルとして扱われることが多く、特徴量ベクトルを用いてデータを数学的に表現し、処理するために線形代数の演算が使用される。
- モデルのパラメータ推定: 機械学習のモデルは、データから最適なパラメータを推定することによって構築される。このパラメータ推定は、通常、最小二乗法や“最尤推定の概要とアルゴリズムおよびその実装について“で述べている最尤推定などの最適化問題として定式化され、シンプルなモデルのケースでは線形代数の行列演算を使用して解かれることが多い。
- データの前処理: 機械学習では、データを前処理してモデルに適した形式に変換する必要がある。例えば、データの正規化やスケーリング、次元削減などの処理において、線形代数の演算が使用される。
- 線形モデル: 線形代数は、線形モデル(例えば、線形回帰やロジスティック回帰など)の理論的な基盤としても使用されている。機械学習においては、複雑なモデルを考える前に、比較的計算量も少なく、パラメータの影響も追跡しやすい線形モデルを利用することが多い。このモデル化の際に線形代数の概念が重要な役割を果たす。
- 行列計算: 機械学習では、大規模なデータを効率的に処理するために、行列計算が頻繁に使用される。例えば深層学習のモデルの計算や、ベイズ推定の確率計算などで、行列の積や和による計算を効率化するため、線形代数の理論が用いられる。
ここでは、この線形代数の概要と、各種言語でのライブラリ、参考図書について述べる。
線形代数とは
線形代数は、線形空間と線形変換を中心とした理論を研究する代数学の分野の一つとなる。またそれらの応用として行列・行列式・連立一次方程式に関する理論となる。
線型空間とは、線型代数学において定義される抽象的な数学的概念で、ベクトルとスカラーという二つの集合が定める一組の演算に関する条件を満たす空間(次元(座標系)を持ち、点、線、面、体などの幾何学的な対象を扱う抽象的な概念)のことを指す。簡単に言えば、ベクトルという対象が加法とスカラー倍という二つの演算を持ち、以下の条件を満たす集合のことを指す。
- ベクトルの加法:線型空間内の任意の2つのベクトルに対して、それらの和がまた線型空間内に存在すること。
- スカラー倍:線型空間内の任意のベクトルに対して、スカラーとの積がまた線型空間内に存在すること。
- 加法に関する結合法則:ベクトルの和に関して結合法則が成り立つこと。
- 加法に関する交換法則:ベクトルの和に関して交換法則が成り立つこと。
- 零ベクトルの存在:線型空間内に零ベクトル(全ての要素が0のベクトル)が存在すること。
- 逆ベクトルの存在:線型空間内の任意のベクトルに対して、それに逆ベクトルが存在すること。
- スカラー倍に関する分配法則:スカラー倍に関して分配法則が成り立つこと。
- スカラー倍に関する結合法則:スカラー倍に関して結合法則が成り立つこと。
- 1を持つスカラーの存在:線型空間内にスカラー1が存在し、1をスカラー倍した結果が元のベクトルになること。
これらの公理的集合論に関しては”集合論の概要と参考図書“や”論理学をつくる 第3部-論理をもう一つの目で見る 読書メモ“等を参照のこと。
線型空間は、ベクトルの演算や線型方程式の解法、固有値・固有ベクトルの概念などを含む線型代数学の基本的な枠組みを提供し、数学や物理学、工学などの多くの科学分野での幅広い応用がなされている。
線形代数学の中で重要な位置を占めるもう一つの概念が、線形変換となる。
線形変換とは、線型空間から別の線型空間への写像(関数)のことを指す。簡単に言えば、ベクトルを別のベクトルに写す操作となる。
線形変換は、先述の線型空間の性質を保つため、ベクトル空間内での線型性を保ち、線型空間の構造を保持しながら、ベクトルの変換を行うという特徴を持つ。それらを用いることで、幾何学的な変換(平行移動、回転、拡大縮小など)が、信号処理、画像処理、経済学、物理学などの分野で利用されたり、線形変換に行列を用いることで、合成や、逆変換、固有値などの効率的な算出を可能にし、複雑な多項式方程式や代数方程式を解くことができる。
これらは前述の機械学習のみならず物理学、工学、暗号学、コンピュータサイエンスなどの幅広い分野で応用されている。
線形代数を扱うライブラリ
このような線形代数をコンピューター上で行う為、様々なプログラミング言語において、線形代数を扱うライブラリが開発されている。以下に代表的なものを示す。
- Python : Pythonで線形代数を扱うライブラリとしては、科学計算を行うための基本的なライブラリである”NumPy“、”SciPy“、機械学習ライブラリである”scikit-learn“、深層学習用の高速行列演算を行える”TensorFlow“、”PyTorch“等がある。
- R : Rで線形代数を扱うライブラリとしては、効率的な行列演算を提供する”Matrix“、基本的な線形代数関数を提供する”LinAlg“、統計学関連での線形代数機能を提供する”MASS“、機械学習での線形代数機能を提供する”caret“、”glmnet“等がある。
- C : C言語を扱うためには、低レベルのプログラミングが必要とされるが、高速な計算を実現できることから、特に大規模なデータを対象としたケースで用いられる。線形代数を扱うライブラリとしては、科学計算ライブラリである”GSL (GNU Scientific Library)“、高性能な数値線形代数ライブラリである”LAPACK (Linear Algebra PACKage)“、”Eigen“、行列計算ライブラリである”BLAS (Basic Linear Algebra Subprograms)“等がある。
- Java : 線形代数を効率的に扱うための多くのライブラリが多くある。具体的には、数学関連の機能を提供する”Apache Commons Math“、行列を効率的に計算する”Jama (Java Matrix Library)“、”JBLAS“、”EJML (Efficient Java Matrix Library)“等がある。またJavaのJNIインターフェースを介してCのライブラリを直接利用することもできる。
- Clojure : ClojureはJVM上で動くLISPである為、前述のJavaのライブラリはそのままネィティブに動作させることができ、またJavaのJNIインターフェースを介してCのライブラリを直接利用することもできる。更にマクロ機能等の言語の柔軟性を用いて”ClojureとPythonの連携と機械学習“や、”ClojureとRの連携による統計的学習“などに述べられているようにPythonやRのライブラリも利用することができる。Clojureネイティブの線形代数ライブラリとしては行列を扱う”core.matrix“、”clatrix“、一般的な線形台数を扱う”incanter“などがある。
- Javascript : ブラウザ上で動作するWebアプリケーションやグラフィックスに用いる為のJavascriptでの線形代数ライブラリも準備されている。具体的には数学的演算ライブラリである”math.js“、またグラフィックス向けの行列計算ライブラリである”gl-matrix“などがある。
参考図書
以下に線形代数の参考図書を示す。
まずは「高校数学でわかる線形代数 竹内淳」
はじめに
第1章 行列は方程式を解くためのツール
「線形」とは、どんな意味だろう?
行列を扱う数学を、「線形代数」と呼ぶ
「線形」
Linear-algebra
変数と変数の関係が「直線(linear)」
直線でないもの(非線形)
2次や3次の関数も線形に変換できる
算数の鶴亀算を行列で書くと
鶴亀算の世界(1次の式の世界)
行列を用いた表現
計算ルール
計算式
まとめると
別の書き方
定義
aijを元あるいは成分と呼ぶ
a11,a22,a33の項は「対角項」
対角項以外は「非対角項」
対角項の和を「トレース」
普通の方程式の解き方:消去法
拡大係数行列を使った方程式の解き方
行列を使って方程式を解くには?
行列Aと列ベクトルbを元まとめにした行列
例
拡大係数行列
行の基本変形
ある行を数倍にする(割り算も可)
ある行を別の行に足す
ある行を吸い梅したものを、別の行に足す
行と行を交換する
ステップA
ステップB
ステップC
ステップD
最終ステップ
拡大係数行列を使って 方程式を解く場合に許される 「列の基本変形」
列と列を交換する (ただし、一番右の列は不可)
小行列:行列の中の小さな行列
小行列
行列の中に含まれる部分的な行列
単位行列
対角線上に1が並んでいるもの
記号Eで表す
階数
「解は1組だけ、あるいは無数に存在するか、あるいは存在しないのか」を判定するために使う数
階段行列
正方行列ちや、拡大係数行列Bは、行の基本変形を繰り返すと、階段行列に変形できる
例
階数
階段行列の「ゼロでない行数」
ランク
階数と解の重要な関係
正方行列をA、拡大係数行列をBとすると
解がある
Aの階数=Bの階数
解がない
Aの階数<Bの階数 拡大係数行列は行列Aニ美雨一列の列ベクトルを加えているのでAの階数>Bの階数は存在しない
階数と方程式の関係
解は1組か?あるいは無数に存在するか?
第2章 単位行列と逆行列
単位行列
逆行列
逆行列と方程式の関係
行の基本変形を使った逆行列の求め方
行の基本変形は行列の掛け算で表せる
行の基本変形を行列の掛け算に置き換える
複数の行の基本変形を一つの行列にまとめよう
第3章 行列式の登場
行列と同じくらい大事な式
行列式を考案したのは日本人
若き関孝和
サラス
行列式の性質
行列の掛け算の行列式
江戸自体の数学書と遺題継承
算聖・関孝和
正則な行列の逆行列は?
余因子行列とは
転置行列の行列式は同じ
正則であるための条件
クラメールの公式
ライプニッツとクラメール
自明でない解を持つ条件
自明でない解の一例
終結式と行列式
2次方程式の終結式
シルベスター
第4章 行列の数値計算
クラメールの公式はほとんど使われていない?
ガウスの消去法
表計算ソフトで行列を計算してみよう
行列の掛け算
ガウスの消去法の計算
ガウスの消去法を使った逆行列の導出
数値計算の世界での一歩
第5章 空間とベクトルの不思議な関係
ベクトルとスカラー
3次元での1次従属とは?
別の基底の取り方
シュミットの直交化
1次独立かどうかを明らかにする行列
ベクトル空間
方程式と一次従属の関係
第6章 固有値問題って何?
固有値問題
固有値問題の実例
行列の対角化
異なる固有値に属する雇用ベクトルは1次独立である
行列の固有値が重解だった場合
3次の正方行列が重解を持つ場合
対角化が可能であるかどうかの見分け方
相似な行列
相似な行列のさらに面白い性質
第7章 複素数を含む行列
複素数とは
複素数を座標に表示する方法
複素数=複素数のとき複素共役も統合が成り立つ
複素数の内積とは
共役転置行列
エルミート行列
エルミート
エルミート行列の固有値は必ず素数になる
エルミート行列の異なる固有値に属する固有ベクトルは直行する
エルミート行列はユニたり行列を使って対角化できる
第8章 量子力学との関わり
行列と量子力学
シュレディンガー方程式
物理量の求め方
ブランケット表示
シュレディンガー方程式の解の例
規格化条件
電子のエネルギーを求める
エルミート演算子
エルミート演算子の固有値は実数である
エルミート演算子の異なる固有値は直行する
演算子の行列表現
エルミート行列へ
次に「世界標準MIT教科書 ストラング: 線形代数イントロダクション」
第1章 ベクトル入門
1.1 ベクトルと線型結合
線形代数の核心はベクトルに対する2つの操作にある
ベクトルを足すと𝓋+𝓌が得られる
ベクトルに数𝒸と𝒹を掛けると、𝒸𝓋と𝒹𝓌が得られる
1.2 長さと内積
1.3 行列
第2章 線型方程式の求解
2.1 ベクトルと線型方程式
2.2 消去の考え方
2.3 行列を使った消去
2.4 行列操作の規則
2.5 逆行列
2.6 消去=分解: A=LU
2.7 転置と置換
第3章 ベクトル空間と部分空間
3.1 ベクトルの空間
3.2 Aの零空間:Ax=0を解く
3.3 階数と行簡約階段行列
3.4 Ax=bの一般解
3.5 線型独立、基底、次元
3.6 4つの部分空間の次元
第4章 直交性
4.1 4つの部分空間の直交性
4.2 射影
4.3 最小2乗近似
4.4 直交基底とグラム・シュミット法
第5章 行列式
5.1 行列式の性質
5.2 置換と余因子
5.3 クラメルの定理、逆行列、体積
第6章 固有値と固有ベクトル
6.1 固有値入門
6.2 行列の対角化
6.3 微分方程式への応用
6.4 対称行列
6.5 正定値行列
6.6 相似行列
6.7 特異値分解(SVD)
第7章 線形変換
7.1 線形変換の概念
7.2 線形変換の行列
7.3 対角化と擬似逆行列
第8章 応用
8.1 工学に現れる行列
8.2 グラフとネットワーク
8.3 マルコフ行列、人口、経済学
8.4 線形計画
8.5 フーリエ級数・関数に対する線形代数
8.6 統計・確率のための線形代数
8.7 コンピュータグラフィックス
第9章 数値線形代数
9.1 ガウスの消去法の実際
9.2 ノルムと条件数
9.3 反復法と前処理
第10章 複素ベクトルと行列
10.1 複素数
10.2 エルミート行列とユニタリ行列
10.3 高速フーリエ変換
主要な練習問題への解答
復習に役立つ質問集
用語解説:線形代数のための辞書
行列の分解
Matlab教育プログラムコード
最後に「世界標準MIT教科書 ストラング:微分方程式と線形代数」
序文
第1章 1階常微分方程式
1.1 4つの例: 線形 対 非線形
1.2 必要な微積分学
1.3 指数関数etとeat
1.4 4つの特殊解
1.5 実および複素のシヌソイド
1.6 成長と減衰のモデル
1.7 ロジスティック方程式
1.8 変数分離形と完全形の微分方程式
第2章 2階微分方程式
2.1 理工学における2階導関数
2.2 複素数についての重要な事実
2.3 定数係数A,B,C
2.4 強制振動と指数応答
2.5 電気回路と機械的な系
2.6 2階の方程式の解
2.7 ラプラス変換Y(s)とF(s)
第3章 図形および数値的方法
3.1 非線型微分方程式y'=f(t,y)
3.2 湧き出し、吸い込み、鞍点、および渦巻き
3.3 2次元と3次元での線形化と安定性
3.4 基本的なオイラー法
3.5 より高精度のルンゲ・クッタ法
第4章 連立一次方程式と逆行列
4.1 連立一次方程式の2つの見方
4.2 連立一次方程式の消去法による求解
4.3 行列の掛け算
4.4 逆行列
4.5 対称行列と直交行列
第5章 ベクトル空間と部分空間
5.1 行列の列空間
5.2 Aの零空間:Av=0の解
5.3 Av=bの一般解
5.4 線形独立性、基底および次元
5.5 4つの基本部分空間
5.6 グラフとネットワーク
第6章 固有値と固有ベクトル
6.1 固有値の導入
6.2 行列の対角化
6.3 線形微分方程式y'=Ay
6.4 行列の指数関数
6.5 2階の常微分方程式と対称行列
第7章 応用数学とATA
7.1 最小2乗と射影
7.2 正定値行列とSVD
7.3 初期条件を境界条件で置き換える
7.4 ラプラス方程式とATA
7.5 ネットワークとグラフ・ラプラシアン
第8章 フーリエ変換とラプラス変換
8.1 フーリエ級数
8.2 高速フーリエ級数
8.3 熱伝導方程式
8.4 波動方程式
8.5 ラプラス変換
8.6 畳み込み(フーリエおよびラプラス)
行列の分解
行列式の性質
線形代数早わかり
コメント
[…] 線形代数の概要とライブラリと参考図書 […]