はじめに
微分と線形代数は機械学習で用いられる数学の基礎です。従ってこの基礎をしっかりと抑えることで、機械学習に出てくる数式をよく理解できるようになります。
今回は微分と線形代数に関して初歩から順序立てて説明していきます。ここでは中学生から触ってきている正比例「」から始まり、次第に微分や線形代数の世界へと発展させていきます。
この記事を読む前提として必要な知識は、中学生の数学(正比例)と、高校生の数学(ベクトル)までです。あとはやる気次第で微分や線形代数の概念を理解するところまで到達できるはずです。
ベクトルに関しては難しいことを知っている必要はありません。
正比例関数
関数とは
関数というのはつまるところ、何かしらの入力を受け取り、何かしらの出力を返す装置のことを言います。この関係を表すために
という表記をします。これははに作用し、に変化させることを表しています。あるいはがを引数にを返すことを示すため、
などとも表記します。
今はまだこの入出力装置(関数)がどのようなものであるかは明記していません。通常は入力がであった場合には、がどのような処理を施すのかを示すために下記のように記します。
この場合は、を入力した時に、それを倍した処理を施し、を出力するという意味になります。従って、具体的な出力に関しては
と表されます。まとめれば
なのですが、ココらへんのことはあまり細かいことを言わず、いきなり
と書いたり、という処理にフォーカスすることが無いのであれば、
とがに依存することを明記しつつ表記したりします。
(今はの議論をしているので、最初からで良いじゃないかと思うかもしれません。しかし、もっと一般的な話になり、関数を明確に決めずにいく場合は、と書いておいて、後から「においては」などと議論した方が都合が良いのです)
正比例関数の重要な特徴
正比例関数とは先ほど見たような
の形をした関数です。この関数は入力値を定数倍して出力します。
正比例関数には重要な特徴が2つあります。この特徴は「線形」なる概念に発展するための重要なものであるため、必ず覚えておきましょう。
分配法則
これは入力したい数が2つあるとき、その2つの数を「足してから関数に入れること」と「関数に入れたから足すこと」が同じ結果になるということを表しています。
結合法則
これは入力したい数に関して、その数を「定数倍してから関数に入れること」と「関数に入れたから定数倍すること」が同じ結果になるということを表しています。
例
この2つの法則は非常に特徴的であり、これが上手く成り立つことは他にはありません。例えば、ちょっとだけ違う関数
になった途端これは成り立たなくなります。仮に
という関数を考えましょう。これは単に、入力に を足すだけの処理です。この関数にとを入力してみましょう。
当たり前の結果です。しかし、これについて分配法則が成り立つのか見てみましょう。
となり、違う結果が得られました。すなわち上記の形の関数では、足してから入力するのと、入力してから足すのが違うことになってしまうのです。同様に結合法則も成り立ちません。
もしかしたら上手い数字のペアを見つければ成り立つかもしれません。
しかし正比例関数の場合、どのような値を入れても例外なくいつでも分配法則と結合法則が成り立ちます。これは特別なことです。
正比例関数のグラフと傾き
正比例について更に良く知るためにグラフを見ていきます。ここでは機械学習でも重要な「傾き」あるいは「勾配」という概念を理解しましょう。
のグラフ
に関して、関数が正比例関数であるとき、そのグラフは以下のようになります。例としてここではを用いていきましょう。
便宜的に今はのことを忘れて、という表記を用いて説明していきます。
このグラフにおいて、が1だけ増加するとはだけ増加しています。グラフを見れば明らかですし、これは中学生の頃から知っている事実です。しかし勾配や微分という概念にいくためにもう少し詳細に調べてみましょう。
傾き(勾配)
「だけ増加させる」と数値を指定するのではなく、仮に、だけ増加させた場合にはどうなるでしょうか。結果としてははだけ増加することになります。これは正比例関数では、どのようなについても必ず成り立っています。
すなわち、の増加量の2倍だけ、は増加するということです。
従って、の増加量との増加量の関係は
と表すことができるのです。
もっと一般的に正比例関数では
となります。この時、のことを傾き(勾配)と呼びます。これは見た目上、のをに置き換えたような形になっています。
しかし、今後のためにも意識しておいて欲しいのは、「の形になった時のを傾き(勾配)と呼ぶ」ということです。このことを念頭において置くことが、微分という概念を理解していく上で非常に大切になってきます。
そして、この式に関してで両辺を割ると
となります。従って、正比例関数における傾き(勾配)はの増加量分のの増加量で表現できるということです。これもよく知られた事実ですね。これらを踏まえた上で微分という概念に入っていきます。
また、正比例関数は特別な存在であるため、この勾配を正比例関数に限って「比例定数」などとも呼びます。
微分
増分から探る
まずは微分とは一体何かを説明します。先ほどまで傾き(勾配)の話をしてきましたので、その流れで説明していきます。以後、傾き(勾配)のことを「勾配」と呼ぶようにします。「傾き」というのはグラフを見る上で直感的に理解しやすい言葉ですが、「勾配」の方がより一般的に使われる言葉ですので統一していきます。
先程までについて、の増加量を、の増加量をと表記してきました。増加量というのは「増分」とも言います。今後は言葉の類似性から増分と言ってみます。
さて、ここではで話を進めましょう。このときであり、そのグラフは以下のようになっています。
傾きを求めてやろうと、無邪気に増加したらだけ増加する関係を表してやろうとするとどうなるかを見ますからだけ増やしてみます。するとの状態からに増えているため、増分であることが分かります。
の形の時にを勾配と言うのでしたから、今回はが成り立っており、が勾配だと思いたいです。しかしそれは本当でしょうか?のときでも勾配は[2]だと言えるでしょうか(実際にはこのときでありとなる)。どうやら、の大きさ次第で勾配の値が変わってしまいそうです。
正比例では増分をどれくらいの大きさに取っても構いませんでした。しかし、一般的にはそうではなさそうです。
微分は関数の正比例への近似
正比例というのはどうやら人間にとって取っても都合の良い形をしているようです。そうであれば、一般的な関数を正比例の形に近似することはできないでしょうか。
この課題にチャレンジしましょう。
を、なんとかしての形に持って行きたいのです。そんなことを可能にするとっても良い手段があります。以下ののグラフを見てください。
直線に見えます。やりました。 これなら正比例に見えなくもありません。ただしグラフの値を見てください。非常に範囲が狭いです。逆に言えば、非常に狭い範囲に着目すれば、一般的な関数を正比例っぽくできるということです。
今は、を中心にについて見ています。この局所的な世界では、増分の大きさをどのように取っても(もちろん世界が局所的なので、増分も比較的小さい値を取ることになるが)勾配がになっていそうです(厳密には一致しないが、ほとんど同じようなもの)。
ともかく、局所的に見ることが正比例への近似の良い手段となりそうです。
他の場所についても調べてみましょう。
ここではを中心に世界を見ています。勾配はとなっていそうです(グラフの値に注意)。どうやら局所的な世界を作る場所によって、勾配は変わるようです。
つまり、勾配はに依存しているということです。これを表すためにと置くことにして、一般的に(局所的に見ることを前提にして)
ということが言えそうです。
という形式を取ります。ここで局所的な世界の増分を新たな変数として、更にをと置くことで、完全にこの世界をという正比例関数と見てしまうことができます。
すなわち、関数の座標上に、新たにの座表を立てるのです。このような正比例関数(赤い直線)は、局所的な領域が狭まれば狭まるほど(座標の取りうる範囲が狭まるほど)、に一致していきます。
は正比例関数であるので、この局所的な世界で勾配を求めたい場合は
を求めることになります。
高校で習う定義式
局所的な世界は小さく取れば小さく取るほど正確に正比例関数に近似ができるため、通常はを限りなくに近づけていきます。
これをの世界で直接語るために、について以下のような式が定義されています(これは高校で最初に習う微分の式だと思われます)。
これは局所的な世界におけるのことを言っており、「局所的な世界」を表す意味としてが書かれています。ただし、の局所的な世界の勾配を議論していることを明示するために、通常はをと表記します。
従って通常は
と習うでしょう。(同様に局所的な正比例関数は)
微分、導関数、微分係数の言葉の違い
「微分」とか「導関数」とか「微分係数」という言葉が似たような意味で使われます。混同している人も多いかもしれません。
本来、単に「微分」と言ったら、局所的なの増分であるのことになります。これは増分の微小な量であるという雰囲気で覚えればいいでしょう。(をと置き換えた)
しかし、大抵興味あるのはのの方なので、微分した結果求まるのことを微分と呼ぶケースが多いです。本来はのことをの導関数と呼びます(この言葉の違いを知っておくことが、多変数になったときに混乱を招かないために大事であると思う)。
また、局所的な世界はの値によって指定されます。仮にの値をなどと指定してしまえば、局所的な世界の正比例関数がと定まりは何らかの定数になります。このように具体的に微分が決まった時のを微分係数と呼びます(正比例関数ではを比例定数と言った)。
まとめれば、
微分:
導関数:
微分係数:
ということになります。
接線の方程式
関数の接線の方程式に関して、高校生では以下の公式を覚えるかもしれません。
でにおける接線の方程式は
あるいは
と表現されているかもしれません。
これは実は微分そのものになります。微分とは正比例関数のことでした。今、における微分を考えましょう。そうすれば、
となります。これは局所的には正比例関数ですが、こいつの原点は今どこにあるのかというと、という場所になります。
は局所的な世界に定義された正比例関数(直線)でしたが、この局所的な世界を飛び出すことを許してしまえばすぐに接線の方程式が得られます。上記のグラフにおいて、であり、です(座標の原点に着目)。こいつをに代入してやることで、
が得られます。局所的にしか定義していなかった正比例関数を延長してやれば接線が得られるというわけです。
微分のまとめ
微分はに対してという局所的な正比例関数への近似を行います。このときのを微分、を導関数、における導関数を微分係数といい、微分係数は付近の局所的な世界における勾配に相当します。
「正比例関数への近似」と述べてきましたが、これからは格好つけて「線形近似」と言うと良いです。「微分は局所的な線形近似」、「微分は局所的な線形近似」と唱えましょう。
(普通に勾配を求めるものだと思っても良いのですが、関数の線形近似と考えれば近似後の勾配を議論できるのは当たり前ですし、後に多変数になっととき明らかに理解が早い)
微分の計算方法
の微分がなのは良いとして、どうやってを求めるのかという話題があるでしょう。実は、これは普通はかなり難しいのです。
がまさにそれであるのですが、これを計算するのは普通は厳しいです。
例えば下記のような公式
などは、誰かが気づき、証明してくれたものです。中には病的な見た目をした関数もあり、そいつらは微分するのが困難であったり、そもそも微分できるのか(線形近似できるのか)謎なものもあります。
微分の計算そのものはもはや覚えるしかありません。過去の偉人の成果を有りがたく使いましょう。ただし、計算だけをしていると、結局それが何なのかわからなくなってしまうので注意が必要です(そのための入門記事であります)。
導関数は「関数」
関数とは入力を出力に変化させる装置のことでした。そして、入出力関係を明示するときにと表記します。なぜのことを「導関数」と呼ぶのかというと、紛れもなくが関数であるからです。
は「入力を受け取った時に、の局所的な世界の正比例関数の勾配を出力する関数」と捉えるわけです。つまりであり、であることを、めんどうなので省略してとしているわけです。
導関数や微分の別の表記
導関数について更に追記します。の導関数についてはという表現もありますが、ここからを分離させたなるものを考えることができます。本来とかなどの表現で「1つの量」であり、増分から発展した微分なる概念でした。これを
と書くようにしてしまい、「をに作用させる」と呼ぶようにするのです。これが言わば「微分する」ということです。
また、こうなるとの方はもはやどうでも良くなり、の方だけを詳細に語ることでできるようになります。
このを「微分演算子」とか「微分作用素」などと呼び、これ自体を個別に扱うことで演算子法なる便利な微分方程式の解法が生まれました(後にラプラス変換と関連付けられる)。
(実は、流派の違いであって、最初から「微分する」という演算をで表現してなどと作用素の形で書く場合もある。しかし、一番馴染みが良いのはとかという増分から入ることだと思う。)
微分できないときもある
中には線形近似(≒微分)できない関数もあると述べました。
例えばなんかは代表的な例です。こういうのは微分不可能とか言いますが、なぜかというとの付近はどう頑張っても正比例関数に見ることができないためです。
以外だったら正比例関数に近似できます(というか正比例関数)。一箇所でもダメな場所があると微分不可能と呼ばれますが、仮にを全く考慮しなくても良いようなケースなら、右側で勾配、左側で勾配で微分できると考えてもいいでしょう。
上記のような単純な関数ならばいいです。どこを無視して良さそうかも明白です。しかし、もっと複雑な関数や、多変数で図示ができないようなときに、線形近似できるか否かを見た目で判断してしまうのはかなり怪しいので、これを厳密に議論できるようにしたのがε-δ論法です。
スポンサーリンク
線形代数
正比例関数の拡張
さて、次は線形代数の話に入ります。
再び関数の話から行きましょう。こいつはをに変えてくれる入出力装置でありました。正比例関数の場合はこれが
という入出力装置になっているということでした。今まではいっつも入力がという1つの値でした。1つしか入力を受け付けないなんて限定的過ぎると思いませんか。
多入力の関数
2つの入力を受け付ける関数
を考えましょう。正比例関数のノリで拡張をするために、
という形式にしてみましょう。慣れ親しんだ形で書くならば
という形式です(あるいは)。とても単純です。このような計算を、正比例関数の形式に似せるために
と表記することにします。太字はそれぞれとであり、いわゆるベクトルというやつです。「」は内積と呼ばれる計算であり、ベクトルを成分毎に掛け算した後に和を取ります。
もっと入力の数を増やしたいならば、同じようにベクトルの成分の数を増やしていけば良いだけです。見た目の表記を変更する必要はありません。
こうして、正比例を拡張した多入力の関数を獲得することに成功しました。
内積というのは左側が横ベクトルであり、右側が縦ベクトルの順に並んでいます。ベクトルの成分を明示的にするならば
となります。多くの場合、単にベクトルと言った場合には
のように縦ベクトルを表すことが多いです。従って内積計算を以下のように書くことも多いことを覚えておくと良いです。
とは縦ベクトルを横ベクトルに変えることを表す転置と呼ばれるものです。(実は内積というのは結構種類がありますので、「」と単に書いた場合にはその計算内容は文脈によったりします。これに対して横ベクトルと縦ベクトルを並べるのは計算の内容が明確です)
多入力多出力関数
例えば、入力との2つを受け取るときに、2つの数
という結果を返して欲しいとします。多入力の話を応用して、
と置くことで、以下の2つの関数
を準備してやればひとまず一歩前に進むことができます。とを計算すればいいということです。あとは、とを格納するベクトルを考えてやればよく、出力を
と表記してやれば良いことになります。確かに多出力になりました。しかしこれは2つの関数とを使って2つの出力を並べたに過ぎません。そうではなく、1つの関数で多出力を実行するのが今の目標なのです。いま、作った形を少し変形してやります。
これは上の成分も下の成分もとの内積をとっているだけに過ぎないので、まずはで括ってみます。
そうすると、ベクトルを受け取ったら
という謎の係数を掛けて出力する関数を考えることができます。謎の係数の中身は、横ベクトルが2つ格納されているため、この横ベクトルを素直に表記すれば
という形をしていますので、それをそのままと置いて採用することにしましょう。これからは
という計算をしていると考えることにしたのです。今、という新たな関数を手にしました。このときのを行列と呼びます。行列は多入力多出力を達成してくれる関数の一種であるわけです。
行列の計算の仕方
これまでの話で構築してきた新たな関数は、成分を全て明示した場合は以下のような形式をしています。
行列の計算の仕方に奇妙さを覚える人がいるかもしれませんが、今まで見てきたとおり、多入力1出力の計算を内積で表しておいて、あとでそれをくっつけて多入力多出力にしたために上記のような計算となっています(上記ではとの2つのアルファベットを使っているため分かりやすい)。
しかし確かにを手に入れた今、2つの内積をくっつけたという名残は不必要です。従って、行列を
と表すようにします。成分の添字はとなるようにしているわけです。そうなると、行列の計算の記述は
などと現れます。大抵はいきなりこの計算方法を与えれるためややこしく感じるわけです。
n入力m出力
この話の流れを理解していれば、入力出力の関数を行列の形で表現するのは非常に簡単だと感じるはずです。
まず2入力を達成するために成分数2のベクトルを考えました。
そして、2出力を達成するためにベクトルを2つ準備したのです。あとはそれを並べたわけです。
そうともあれば、入力m[tex:]出力は、まずn入力を達成するために
を作り、そんなふうにしてできたベクトルをm個並べて
となります。
すなわちn入力m出力を作りたいならば、m行n列の行列を作ることになります。
行列の重要な性質
行列の計算の成り立ちについて見てきました。多入力多出力を達成する関数を行列が提供してくれることを強調してきましたが、正比例関数っぽい計算を拡張してきたことを忘れてはいけません。
正比例関数には重要な特徴がありました。その特徴が、実はという関数にも見事に成り立ちます。
分配法則
これは入力したい数が2つあるとき、その2つの数を「足してから関数に入れること」と「関数に入れたから足すこと」が同じ結果になるということを表しています。
結合法則
これは入力したい数に関して、その数を「定数倍してから関数に入れること」と「関数に入れたから定数倍すること」が同じ結果になるということを表しています。
線形性
今、単なる1入力1出力の正比例から、多入力多出力の正比例らしきものを手に入れたのです。正比例が特別なのは、上記のような綺麗な性質を持ち合わせているからです(別に正比例という名前に意味があるわけではありません)。
通常、関数が分配法則と結合法則を満たすとき、「線形性を有する」と表現して、その関数を特別扱いしていきます。
数学ではこのような性質(あるいは定理)の方に重要性を見出して、そちらを基礎に再出発することで一般化を進めていくケースが多々あります(これからは正比例とは線形性のごく限られた特殊なケースであるという見方をすることにした)。
ちなみに分配法則と結合法則を同時に表現して
を線形性を有する定義とする場合もあります(どっちも一緒ですが参考程度に)。
グラフ
多入力多出力と見た行列に関して、まずは便宜的に2入力1出力の行列を見ましょう。これは単に内積という関数を見るということです。
今回はという関数を見ることにします。ベクトルを使えば、
という表記になります。この関数のグラフは縦軸をの2つとして以下のような形状をしています。
さてここで理解して欲しいのはこれが平面になっているということです。係数ベクトルの成分が変われば面の方向は変わりますが、はいつでも必ず平面となります。
これは
という関数について、がだけ増えるとはだけ増え、がだけ増えるとはだけ増えるということが、常に成り立っていることを表しています。
当然この点も正比例の拡張だけあって、似たような性質を持ち合わせているというわけです。
これはとを同時に増やしても構いません。単に個々の増加が合わさって、まとめると
となっているのです。
逆のこの式からスタートした場合は、一方のをと置いて、片方を増やしてやれば知りたいの値が分かります。
計算例
において、
とすればです。
とすればです。
とすればです。
とすればです。
で
で
これらの結果を見れば
であり、であることは明白です(片方をだけを変化させた結果)。念ののために同時に変化させた結果を見ましょう。
とで
個々に変化させた時の和になっています。
多入力(多次元)の微分
はじめに
微分の章では「微分は線形近似」というのをかなり強調しました。そして普段は濫用される「微分・導関数・微分係数」についても、わざわざ区別して言いました。
更に線形代数の章では、正比例の拡張(一般形)としてあるいはがあるという話をしました。
これらを強調したことのありがたみは、実は多入力の微分(あるいは多次元の微分)を考えるときになって初めて理解できます。そしてこれらを理解することは、機械学習の分野で数式に立ち向かう上では「必ず」必要です。
では本題に入ります。
多入力関数の微分(全微分)
正比例関数の勾配はどストレートにであることを見ました。そして一般的なでは、微分を考えた時のという世界におけるが勾配と呼ばれるのでした。
さて、多入力の関数を考える上でも、同じように「微分」の世界を考えて、勾配を見ていきたいと思います。その前に、やはり1入力のときと同じように増分から入りましょう。線形代数の章で最後にグラフを見ました。あの結果の通り、という線形関数においては、その増分は
と表記できます。正比例同様、これはどのような大きさのを取ってもいつでも成り立っており、これがグラフが平面である理由でした。
さあ、次はもっと一般の多入力関数を見ていきます
例としてを見ておきましょう。これだけでも何か複雑な曲面になっていそうです。
さて微分とは線形近似のことだと言いました(1入力では正比例近似)。そしてそのアイデアの根幹は「局所的に見る」というものです。上記の関数も局所的に見てみましょう。
局所的に見たら平面的に見えます。微分への扉が少し開いたということです。
さあ。増分をの形に置き換え
としてやりましょう。更に1入力の時と同様に、の位置によってやの値は変わってくるはずです。従って
としておくべきでしょう。もしもこの係数たちが、特にに依存することが無いならば、それはそれでラッキーだったということです。それがハッキリするまでは依存することにしておきましょう。
こののことを全微分と呼びます。
多入力関数の導関数(偏導関数)
普通の線形の式
においては、だけ増加したらであり、だけ増加したらであり、同時に増加したら、こいつらの和
で表されることを述べました。更にを知りたいのであればとしてだけ変化させれば知ることができるのを見ました。従って一般の関数を変化させた場合の全微分(線形近似)
に関しても同じことが言えます(ただし局所的な世界でのみ)。つまり局所的な世界のを知りたいのならばとしてしまい、
を考えることにするのです。これでを求められる形になっています(もはやが傾きの一入力正比例関数に見える)。ここで
として求まるわけですが、元々の関数がという2入力の関数であったわけで、今は便宜的に局所的な近似を行い、しかも片方の変数のことを完全に無視しています。そのことを忘れないためにもの記号をに変更し
と書きます。あるいはのの全微分に関して、に着目していることを明示して、と表記して
と書き、こののことをによる偏導関数と呼びます。また、のように具体的に場所が決まっている時には偏微分係数と呼びます。
に関しても同様の手続きをすることで求めることができます。また、などを求めることを「偏微分する」と言うことが多いです。
具体的な計算
でを求めてみます。
記号の形は変わっていますが、(だけ)を変化させて、の変化がどれくらいかを見積もればよかったのでした。ここではもはやの方は単なる定数であり、
です(慣れれば別に定数で置く必要はない)。勝手に定数で置いていること以外は単なる微分する操作と同じであり、
となります。は元に戻してやりましょう。
となります。
これは一般的にはの偏導関数の具体的な値(偏微分係数の値)が、の値をどこで固定するかにも左右されるということです。
(おまけ)接平面の方程式
微分が線形近似となっているので、全微分という概念は曲面に対して局所的に平面で近似を行います。これまでの話の通り、の全微分は以下
で表されます。との点における座標原点はとなっており、この局所的な座標上でを、局所的な範囲を飛び出て使えるようにしてやれば、
と表すことができます。これは全く接線の方程式の話と同様ですね。
勾配
多入力1出力の線形関数を
と書いたことを思い返せば、も似たような便利な記法にできるはずです。その手続きは、まず以下のように全微分を求めることから始まります。
こうしてしまえば、局所的には単なる線形関数と同じ扱いができます。従って、局所的な新たな変数とを明確に区別した形式
という形式にして、というベクトルとというベクトルを考えてやることで
という表記にしてやることができます。
これがの導関数であり、ようやく勾配が求まりました。多入力では
が勾配(ベクトル)になります。
勾配とはの形にしたときのが勾配に相当するものだとずっと言ってきました(線形近似し、線形代数の表記だからこそ感じることのできる一貫性です)。この勾配は要するにを増やした時にが増える量を最大にする方向を表しています。
機械学習では
という表記が頻繁に出るかもしれません。これは導関数のことであり、微分するという操作を表し、かつ勾配のことを指しています。
特に機械学習では勾配という意味が合いが強く、の増加量(すなわち)を最大にする方向を求めています。実際にはを減少させるのが機械学習の目的であることが多いため、と方向が反転して使われます。
多変数における便利な記法2
あるいは、の成分に関して
の表記を使っておいて、と分離して考えたように
とした演算子を導入することもあります(はナブラと読む)。演算子の導入は便利だからこそされるわけであって、機械学習ではほとんどこの表記はされることはありません(する意味がない。便利な記法1で十分です。けどPRMLはたまに出てくる。)。
ベクトル解析という分野では、このような演算子を導入することによって普通の微分(全微分)以外の色々な微分を考えることができるようになります。
スポンサーリンク
発展:多入力多出力関数の微分
多入力多出力を線形近似から作る
更に線形代数の表記の恩恵を受ける時が来ました。線形代数の章では多入力多出力の線形関数は、多入力1出力の線形関数を並べて実現できることを見ました。
従って、なる多入力の一般的な関数があった場合は、これらの出力を1つ1つ考えて
と並べてから、全微分を内積の形式で表して
と並べることで、で括って
と表記してやることができます。
従って一般的にという関数に対して、微分(線形近似)を行った上で、相性の良い線形代数の表記を使った場合、
という形式の関数(導関数)を考えることができます。この多入力多出力関数の導関数は「多入力一出力」の偏導関数ベクトルを並べたものになっているので、行列の形をしています。つまり、多入力多出力の導関数は、ベクトルを引数に行列を返す関数となっています(従って多入力多出力では「勾配行列」になる)。
もしも関数が全領域で微分可能ならば、このようにとりあえず表記が便利な線形代数の世界で語ることのできる形で局所的に色々議論してから、議論する場所を少しずつずらして網羅してしまえば良いということになります(勿論、どうすれば網羅できるのかが更なる課題になるが)。
ベクトル場とスカラー場
多入力1出力の関数をスカラー場、多入力多出力の関数をベクトル場と表現することがあります。特に物理学や工学で使われる言葉です。場とは何らかの作用が空間的に連続的に起こっているときの影響あるいは影響を受けている空間のことを指して言います。
スカラー場とは、空間上の各点ごとにその影響が1つの値(スカラー値)として出てくる場のことです。例えば地図上の山の高さはスカラー場です(場所を指定したら高さが出てくる)。これは今まで引数を2つ取り、1つの値を第3の軸で表現してきた通り、多入力1出力のことになります。
一方ベクトル場は、空間上の各点ごとにその影響が複数の値(ベクトル値)として出てくる場のことです。例えば川に対して場所を指定すると、場所ごとに水の流れる方向と大きさ(ベクトル)が得られ、ベクトル場だと考えることができます。
これは複数の値を引数に複数の値を出力する関数と見ることができます。
ベクトル解析へ
における導関数がというベクトル場になっていることに着目してみましょう。これは勾配を求める手続きでした。
この導関数は言わば勾配であって、他にも綺麗な体系が作れるのではないかということで、色々なことがベクトル解析で調べられました。実はこれが演算子]の導入で違う話へ発展していきます。
まず勾配はをスカラー値に作用させることでした。
これを勾配(grad)と呼んでいたわけです。
今度は、がせっかくベクトルの形をしているので、ベクトルに作用させても良さそうです。ベクトルとベクトルの計算では、内積がすぐ思いつくでしょう。
これを発散(divergence)と呼びます(私は湧き出しの方が好きですが)。
もう1つがベクトルとベクトルの外積という計算になります。
今は2次元でやっていますが、物理では3次元で、数学ではもっと高次元でやります。
最後に
正比例・微分・線形代数
以下のようなストーリーによって話を進めてきました。
機械学習の場合、ベクトル解析に入る手前(あるいはちょっと入ったくらい)の知識でひとまず十分でしょう。その後の数学の取り回しは、機械学習に触れながら実践的に学んでいけばよく、それができるだけの素養は、もしもここまで読破したのであれば付いていると思います。
確率・統計
機械学習の数学で、1つごっそり抜けているとすれば「確率・統計」に関することが足りていないと言えます。ただガチガチの確率モデル出ない限りは、「●●確率」が何のことか少し覚えるくらいで済むでしょう(大抵、確率を出力しているとみなしている程度の話で、実は確率の理論は後付の方が多い。ニューラルネットもそう)。
基本的な手法の多くは、微分と線形代数を使うことができれば、その延長の計算だと考えて進めることができます。ただし生成モデルなどをやる場合はしっかり確率の計算や考え方などを抑えて置いたほうが良いです。
機械学習の教科書 (数式ベース)
標準的に使われているのは、機械学習ならば以下。
自然言語のことが具体例として出てきますが、機械学習の話題としては広く一般的な内容を取り扱っています。数式も比較的丁寧に展開してくため、手頃な難易度になっています。
深層学習ならば以下の教科書。
ディープラーニングの基本を数式ベースで抑えるための本であり、実装をすぐにできるものでもなければ、最新の手法が載っているわけでもありません。しかし基本はいつでも大事です。
実装ベースの教科書
数式を疎かにせずに、かつコードを書きながらということになればもっと違う良い本もあります。
TensorFlowやKerasを使っていくならば
NumPyでもっとスクラッチしていくならば
数学関連記事