AI・機械学習論1#
この資料は、宇都宮大学データサイエンス経営学部の専門科目「AI・機械学習論1」の授業資料です。 この講義では、データ分析の基本的なタスクである回帰・分類を中心に機械学習の基礎について学修します。
資料の使い方#
本資料は一部、理解の補助のためにPythonのコードを含んでおり、Google Colaboratoryや受講者の手元のJupyterNoteBook環境での使用を想定している。 ※リンク切れの管理などが煩雑なので、Google Colaboratoryで開くためのバッジは貼っていない。各自でipynbファイルをColabやローカルのJupyter Notebookで開いて利用してほしい。
本資料はJupyter Notebook形式で作成されたソースファイルをJupyter Bookを用いて変換することで作成されたコンテンツになっている。この形式の資料を授業内ではブックないしBookと表記・呼称する。
.ipynb
形式のソースファイルの管理と共有には、GitHubと呼ばれる環境を利用していて、ソースファイルはこちらからも閲覧できる(この授業を受講したりプログラムを実行するのに皆さんがGitHubのアカウントを取得したりこのリンクを開いたりする必要は特段ない)。
授業のスタンス#
今日の機械学習技術は、オープンソースソフトウェア(OSS)として公開されているライブラリを用いることで
ユーザーは根底にある数学などの基礎部分や実装に係るテクニカルな部分について特段意識することなく「とにかくまずは試してみる」ことが容易になりつつある。
もちろん、この事自体は歓迎すべきことであるし、Pythonが汎くデータ分析や機械学習分野で用いられている背景にも、パッケージなどのエコシステムに依るところが大きい。
一方で、基礎的な内容・理論を理解し自身で実装をし、時にはバグを生み出す経験についても何物にも代え難く重要であるように思う。 例を2つ挙げよう。(例の内容が重要な訳ではないので、以下に出てくる用語がわからなくても心配する必要はない)
データ分析の手法の一つに 主成分分析(PCA) という手法がある。
例えばsklern
というデータ分析や簡単な機械学習の手法をカバーするライブラリを使うことで手元のデータに対して PCAを用いた分析を行うことができるが、sklearn
内のPCAを行う関数では標本分散ではなく不偏分散が用いられている。
GPy
というライブラリを用いると機械学習やベイズ最適化などの文脈でも登場するガウス過程と呼ばれる手法が利用できる。
GPy
では予測誤差の分散がデフォルトで1.0(場合によっては大きすぎる値)に設定されている。
このように手法やモデル(PCAやガウス過程)とライブラリの中身・ソースコードをじっくり眺めるか、 自作した関数とライブラリとを簡単なデータを用いて比較するなどしない限りは気が付きもしない"暗黙の仮定"や"デフォルト仕様"がライブラリには潜んでいる。 本当に自身が意図した(あるいは意図されている)定義に則った計算・処理をプログラムがやっているのかは、 ライブラリをツールとして使うだけでは決して分からないし、関連した問題やバグに直面した場合に適切な対処をしたり 正しい結果を導き出すことが困難になってしまう。
「XXXを(ツールとして)使えれば良い」というのは多くの状況では問題がないように思えるが、 全ての人が常にそうした立場を取るとプログラムやプロジェクト/サービスひいては社会は行き詰まってしまう。
「理由はよくわからないしバグらしき挙動もあるけど、人をめったに轢いたりしない自動運転技術用のアルゴリズムが出来たから明日から公道で運用します!!」
という社会は皆さんもきっと嫌だろう。
この授業ではいわゆる車輪の再発明を大いに推奨し大いに評価する。
この授業を履修した受講生が受講を通して「"理解して"使う」「基礎に立ち返る」「見栄えはともかく"正しく"動作するものを作る」 ことの重要性を体感してもらえることを祈っている。
上述の通り、この授業は機械学習フレームワークを用いた応用を志向した授業ではないが、 近年の大規模言語モデル(LLM)の発展により、機械学習の基礎を学ぶ上でのハードルは大きく下がっている。 例えば各種のライブラリの使い方を尋ねたり、ドキュメントを翻訳させてみると、驚くような精度で回答を得られることもある。実際の実装についてはドキュメントを当たるのが一番だが、こうしたLLMの活用も検討してみると良いだろう。 しかし一方で、LLMが生成したコードにはバグが含まれていることもあるし、そもそもLLMが生成したコードが正しいかどうかを判断するためには基礎的な知識が必要である。ここで、Brave New World (邦題: 『素晴らしい新世界』)で名高いAldous Huxleyの言葉を引用しよう。
Technological progress has merely provided us with more efficient means for going backwards.
革新的な技術をどう活用するか、それをどう評価するか、我々はまさに問われている。
Notation: 数式の表記#
この資料では、以下のようなNotationを用いる。 必ずしも準拠していない恐れもあるが、その際はご容赦願いたい。
記号 |
意味等 |
---|---|
\(a, b, c, ..., x\) |
スカラー値 |
\(\mathbb{R}\) |
実数全体の集合 |
\(a \in \mathbb{R}\) |
aは集合\(\mathbb{R}\)の要素である |
\(\{ \ldots \}\) |
波括弧, 集合を表す |
\([ \ldots ] \) |
角括弧, 列ベクトルを並べて行列を表現する際などに用いる |
\(\mathbb{R}^n\) |
\(n\)次元実数ベクトル空間 |
\(\mathbf{a}, \mathbf{x}\) |
ベクトル, 太字のイタリック体を用いる |
\(\mathbf{A}, \mathbf{X}\) |
行列, 太字の大文字を用いる(例外あり) |
\(x^T, \mathbf{A}^T\) |
転置行列 |
\(\mathbf{A}^{-1}\) |
逆行列 |
\(\mathbf{x} \cdot \mathbf{y}\) |
ベクトルの内積 |
\(\mathbf{x}^T \mathbf{y}\) |
ベクトルの内積(行列の一種であることをより意識した書き方) |
\(\mathbf{I}_m\) |
\(m\)次元単位行列 |
\(\mathbf{0}_m\) |
\(m\)次元ゼロ行列 |
\(\mathrm{dim}(V)\) |
ベクトル空間\(V\)の次元 |
\(\mathrm{rank}(\mathbf{A})\) |
行列\(\mathbf{A}\)の階数(rank) |
tr \((\mathbf{A})\) |
行列\(\mathbf{A}\)のトレース(trace) |
\(\det (\mathbf{A})\) |
行列\(\mathbf{A}\)の行列式(determinant) |
\(| \cdot |\) |
絶対値、または行列式 |
\(|| \cdot ||\) |
ノルム (指定が無ければユークリッドノルム) |
\(X \sim P\) |
確率変数\(X\)が分布\(P\)に従うことを表す |
\(\mathcal{N}(\mu, \sigma)\) |
平均\(\mu\)、分散\(\sigma^2\)の正規分布 |
\(\mathcal{N}(\boldsymbol{\mu}, \mathbf{\Sigma})\) |
平均\(\boldsymbol{\mu}\)、共分散行列\(\mathbf{\Sigma}\)の多変量正規分布 |
LaTeX記法を用いて数式を表現する方法については、プログラミング演習1の資料に簡単な解説がある。
参考文献#
本資料の作成にあたって幾つかの文献を参考にした。下記にそれらを示す。もちろん、皆さんの学習にも大いに役に立つはずである。
Pattern Recognition and Machine Learning, C.M. Bishop, 2006. リンク
通称PRML, 機械学習の教科書として有名な書籍。回帰・分類の基礎からベイズやカーネル法,近似推論やMCMCまでカバーしていて非常に参考になるが、この授業の受講生が前から通読するのはあまりおすすめしない。微積・線形代数,確率・統計,ベイズ統計,機械学習などを一通りきちんと勉強した後に見返すと「あ、PRMLに書いてあるな」と気がつく、そんな本。ベイズ的な機械学習の本だと思う。Mathematics for Machine Learning, Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong リンク
Gaussian Processes for Machine Learning, C.E. Rasmussen and C.K.I. Williams, 2006. リンク ガウス過程に関する教科書。ガウス過程を用いた機械学習の基礎から応用までをカバーしている。ガウス過程に関する本としては最も有名な書籍である。
Dive into Deep Learning, Aston Zhang, Zachary C. Lipton, Mu Li, and Alexander J. Smola, 2020. リンク 深層学習に関するオープンアクセスの書籍。理論的な説明と実装の両方をカバーしている。深層学習に関する本としては最も有名な書籍の一つである。
ゼロから作るDeep Learning: Pythonで学ぶディープラーニングの理論と実装, 斎藤 康毅, 2016. リンク 実装や理論・考え方の説明のバランスが良く、初学者にもおすすめの書籍。