数式って思ったほど怖くない!?

数式への恐怖心が和らぐことを表現したイラスト

AI × 数学を勉強していると、必ず数式にぶち当たりますよね。数学が苦手な人は、ここでそっと本を閉じてしまうわけです。

これ、非常にもったいない話です。

数式の読み方とか捉え方には、ちょっとしたコツがあります。数式自体を厳密に理解しなくても、この数式が何をやっているのかイメージすることは案外難しくありません。

今日はそんなお話をしてみます。

目次

文字と記号は意味がわかれば怖くない

文字は「具体的な値」を想像してみる

数式が怖く見えるのは、それが「あまりに効率化されすぎた言語」だからです。

まず、数式には必ず x,y,θ,𝐰x, y, \theta, \bold{w} … といった文字が現れます。しかも、普段は見慣れない、読み方もよくわからない字体(ギリシャ文字)が突然出てきたりもします。

しかし、ここで尻込んではいけません。

数式に文字を使うこと自体は中学数学で最初に習ったはずで、あなたはすでにその意味を知っているはずなんです。

そう、「何かしらの値を入れる箱」、変数、もしくは定数に他なりません。

「値」と言っていますが、そこに入るのはただの数字かもしれないし、何らかの文字(を数値で表したもの)かもしれない。時には数字をたくさん集めた集合体(ベクトルとか行列と言います)かもしれない。

でも、実際そこに入るのは「具体的な何か」なんです。

ってことは、数式を考えるとき、そこには何かしらの具体的な値が入っている様子を想像すると、頭の中でその文字を消し去るイメージができませんか?… 文字に関しては、まずそんな見方を心がけてみましょう。

記号は、何かしらの「手順」を簡略化した表現

次に「記号」です。

数学者というのは、驚くほど面倒くさがり屋な人種です。

  • 「1から100まで全部足して……」と書くのが面倒なので \sum(シグマ)とか
  • nn から1つずつ数字を下げて1になるまで全部かけて……」と書くが疲れるので n!n! (階乗)とか
  • xx がほんの少しだけ動いたとき yy がどれくらい動くのか……」とか書いてらんないので dydx\frac{dy}{dx} とか

このように、記号にそのプロセスをすべて詰め込んでしまったわけですね。
つまり、実際に数式に出てくる記号は、ある一定の「手順」を一言で省略表現したものに過ぎないわけです。

記号には必ず意味がありますので、「記号の意味」と「最低限の計算ルール」はあらかじめ知っておく必要があり、まずはこれが大前提です。

ここに関しては残念ながら、ある程度の経験と慣れが必要なところかもしれません。

しかし、実際数式を読む際、いきなり数式だけがバンっと出てくることはありません。
書籍で勉強しているなり、ネットで調べ物をしているなり、何かしらのきっかけがあって、その過程で出てくるはずです。

そうした場合、その数式が語られる背景やストーリーが、その前後に必ずあるはずなので、雰囲気である程度は理解できると思います。

そうでなくても、実際は何度か見ていけば自然と覚えられますし、とりあえず頭でイメージできるだけでも大丈夫です。

身構える必要は全くありません。こんなイメージで一旦は大丈夫です。

  • \sum\int は全部足し合わせてるんだな」
  • eeexp\exp と記述されることもあります)は定数(2.718…というただの数字)ね」

数式という設計書を日本語に翻訳する

数式に対する苦手意識を克服するコツは、数式をそのまま理解しようとせず、まずは日本語に「和訳」してみることです。

また、数式を構成しているパーツを「塊で捉え」、「極端な数値を当てはめてみる」ことで、数式の背後にある意図を驚くほど簡単に理解できるようになります。

数式を読み解く際は、計算しようとするのではなく、まずは「設計書を読む」ような感覚で、意味を日本語に翻訳することから始めましょう。

実践!数式を和訳するための3つのポイント

数式を「解読」するための具体的な戦略をご紹介します。

POINT
「塊」で捉えてキャラ付けする

数式を一文字ずつ追うのは、英単語をアルファベット順に a-p-p-l-e と読むようなものです。意味のある「塊(パーツ)」で捉えましょう。

  • \sum が出てきたら「とりあえず全部足すんだな」と解釈する。
  • exp(...)\exp(…) が出てきたら「なんかプラスのすごい値に変換したいんだな」と捉える。
  • 分母に何かがいたら「これで割って平均化(正規化)したいんだな」と考える。
POINT
極端な数値をぶち込んでみる

数式の「振る舞い」を知るには、極端な値を代入してみるのが一番の近道です。

  • 0を代入してみる: そのパーツが消えたらどうなるか?
  • 無限大()(\infin)を代入してみる: その値が爆発的に増えたとき、全体はどう動くか?
  • マイナスの値を代入してみる: 逆方向に動くのか、あるいはエラー(計算不能)になるのか?

これをやるだけで、「あぁ、この変数は全体のブレーキ役なんだな」といった数式の役割が見えてきます。

POINT
変数に「具体的なもの」を入れて想像してみる

xxyy のままだから抽象的で眠くなるのです。自分の興味があるものに置き換えてみましょう。

y=wxy = wx
  • xx : 今日のコーヒーの摂取量
  • ww : コーヒーが自分に与える影響力(重み)
  • yy : 仕事の集中度

実際にいくつかやってみましょう。

【実例1】平均を求める式

よく見かける平均の式を、あえて「数式アレルギー」が出るような書き方で表してみましょう。

x=1ni=1nxi\bar{x} = \frac{1}{n}\sum^{n}_{i=1}x_{i}

一見すると呪文のようですが、これを「塊」で和訳するとこうなります。
(塊は「後ろから考える」のもコツの一つです)

塊(パーツ)直訳(数学的意味)和訳(具体的にイメージ
xix_{i}ii 番目のデータ ii 番目の人の点数
i=1n\sum^{n}_{i=1} i=1i=1 から nn まで足し合わせるnn 人全員の点数の合計
1n\frac{1}{n}データの個数 nn で割る合計点を人数分の nn で割る
和訳した結果

全員の点数をガッとまとめて( \sum )人数で割った(1n\frac{1}{n} 倍)したもの、これが平均「 x\bar{x} 」だ

【実例2】シグモイド関数

AIを勉強していると必ず出てくるシグモイド関数。

σ(x)=11+ex\sigma(x) = \frac{1}{1+e^{-x}}
塊(パーツ)直訳(数学的意味)和訳(具体的にイメージ
ex=1exe^{-x} (= \frac{1}{e^{x}}) 指数関数の逆数xx が極端に大 → 塊の値はほぼ0
xx が極端に小 → 塊の値は無限大
1+ex1 + e^{-x}1 + 正の値(= 1より大きい値)塊の値はどんなに小さくても、1より大きい数
11+ex\frac{1}{1+e^{-x}}「1 より大きい値」の逆数塊の値は 0 〜 1 の間の数
最低限の計算ルールと事前知識:指数関数の性質
  • ee はただの数字です( ネイピア数と言って、2.718…. という無理数)
  • exe^{x} は指数関数で xx が大きくなるにつれ無限に大きい値になり、 xx が小さくなるにつれ 0 に限りなく近づきます(指数関数的に大きくなる、とか日常会話でもたまに言いますよね)
  • exe^{-x} は 指数関数の逆数、つまり 1ex\frac{1}{e^{x}} と同義なので、意味合いが真逆になり、 xx が大きくなるにつれ 0 に限りなく近づき、 xx が小さくなるにつれ無限に大きい値になります
  • また、e0=1e^{0} = 1 です。(どんな数字も「0乗は1」)
  • 指数関数(とその逆数も)は、必ず正(プラス)の値になり、負(マイナス)の値をとることは決してないことも性質として覚えておきましょう。
和訳した結果

xx に何を入れても、 σ(x)\sigma(x) は必ず 0〜1の間の数に変換されるんだな

【実例3】ソフトマックス関数

これもAIを勉強していると必ず出てくるソフトマックス関数。ちょっと難易度高めですが大丈夫です。

σ(z)i=eizj=1kejz\sigma(z)_{i}=\frac{e^{z}_{i}}{\sum_{j=1}^{k}e^{z}_{j}}
塊(パーツ) 直訳(数学的意味) 和訳(具体的にイメージ
ziz_{i}ii 番目のデータの入力スコア(①)ii 番目の人の点数(①)
exie^{x_{i}}①を指数変換(②)①を強制的にプラスの値に変換
(マイナスの人がいるかも?)(②)
j=1kexj\sum_{j=1}^{k}e^{x_{j}} k k 個の全ての②の合計kk 人全員分の②を合計
eizj=1kejz\frac{e^{z}_{i}}{\sum_{j=1}^{k}e^{z}_{j}}全データでの ii 番目データの比率全体での ii 番目の人の点数の比率
和訳した結果

全体 100% のうち、ii 番目の人の点数が何%を占めるか、という比率を表しているんだな
(実際にソフトマックス関数は、モデルの出力を確率分布に変換する非常に重要な関数です)

ゆるめと

ここでは変数に「zz」という文字が使われていて、慣れないとちょっとした混乱ポイントかもしれません。こういうところを恐れないでくださいね。所詮は変数です。見慣れた「xx」と読み替えて大丈夫です。

【実例4】Attention(アテンション)機構

応用編になりますが、こちらもAI理解では重要な仕組みを表す数式です。

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V

この数式を意味まで含めて読み解くのは、その背景などの理解がないと難しいですので、一旦、数式の「構造だけ」をみてみることにします。

また、前提となる最低限の計算ルールもちょっと重めなので、ここはAI × 数学の学習をある程度進めてからの方がいいかもしれません。「構造だけ」と割り切って気にならない人は、一旦納得して読み進めてください。

なお、複雑さを一定排除するため、上記の数式を一部変更して、こちらで考えていこうと思います。
QQという行列を、𝐪\bold{q} というベクトルに変えていますが、本質は同じです)

Attention(𝐪,K,V)=softmax(𝐪KTdk)VAttention(\bold{q},K,V)=softmax(\frac{\bold{q}K^{T}}{\sqrt{d_{k}}})V
塊(パーツ) 直訳(数学的意味) 和訳(具体的にイメージ
𝐪KT\bold{q}K^{T}
ベクトル × 行列の各列 の内積計算𝐪\bold{q} 」と「 VV の各列ベクトル」との内積を計算していて、結果は「類似度が並んだベクトル」になる(①)
dk\sqrt{d_{k}}ベクトル次元数の平方根ただの数値
𝐪𝐊𝐓dk\frac{\bold{qK^{T}}}{\sqrt{d_{k}}}スケーリング ①のベクトルの各値を全体的に小さくしている(値が大きくなりすぎないように調整?)(②)
softmax(𝐪KTdk)softmax(\frac{\bold{q}K^{T}}{\sqrt{d_{k}}})確率分布(重み)に変換②のベクトルの各値を合計1となるように比率に変換
softmax(𝐪KTdk)Vsoftmax(\frac{\bold{q}K^{T}}{\sqrt{d_{k}}})V重みに従って加重平均を計算②の比率で VV の各要素を重みづけして新しいベクトルを作っている
最低限の計算ルールと事前知識:ベクトルと行列の積
  • 行列(n, m) と行列(m, n) の積は、行列(n, n)になる
  • ベクトルと行列の積はベクトルになる(あるベクトルに行列をかけると、別のベクトルに変換される)
  • 行列は、複数のベクトルを縦、または横に並べてまとめたもの
  • ベクトルとベクトル(転置)の積は内積になる
  • 内積の計算結果はスカラー(ただの数値)となり、これはベクトルとベクトルの類似度と解釈できる
    (掛け合わされるベクトル同士の向きが似ているほど、内積計算結果の数値が大きくなる)
和訳した結果

入力ベクトル(𝐪\bold{q})と、ある行列(KK)に含まれている各ベクトルとの似ている度合いを測り、それを計算しやすい大きさに整えて(dk\sqrt{d_{k}}で割る)から確率分布に変換(softmax)し、その割合で別の行列(VV)の各ベクトルを合成して、別の新しいベクトルを作っているのか。

構成だけだと無機質すぎて、逆にわかりづらいかもしれませんね。ただ、数学的にどんな計算をしているかを追うことは、さほど難しくないということは、おわかりいただけたでしょうか。

ゆるめと

Attention機構については、いずれ別のところで触れたいと思っています。実際は、QKVQ、K、V ってそもそも何?というところから追っていかないと、数式の本当の意味は見えてきませんものね。

まとめ

  • 数式は、実は見た目ほど怖いものではありません。
  • 数式は、一定の事象や手続きを簡略表現した、いわば「手順書」にすぎません。
  • 日本語にざっくり翻訳してイメージさえ持てれば、もう8割は理解できたようなものです。
  • 今後難しそうな式が出てきても、見た目にビビらず、解読にチャレンジしてみてください。
  • 案外、スッーと理解できたりするかもしれませんよ?

最後まで読んでいただき、ありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
目次