線形代数の基礎 ― ベクトルと行列
「線形代数」と聞くと身構えてしまう方も多いと思いますが、DS検定で問われる範囲は決して難しくありません。機械学習やデータ分析の裏側では、たくさんの数字をベクトルや行列という「数字の束」としてまとめて扱っています。このページでは、ベクトルの内積、行列の積、逆行列、固有値・固有ベクトル、そして深層学習で登場するテンソルの考え方を、具体的な数値例と図解で整理します。
数式は最小限にとどめ、「何のためにこの計算をするのか」というイメージをつかむことを最優先にします。焦らず一歩ずつ進めていきましょう。
1. ベクトルとは ― 数字を「矢印」としてまとめる
ベクトル※1とは、簡単に言うと「複数の数字を順番に並べたもの」です。たとえば、あるお客さんの購買データを「先月の来店回数」「先月の購入金額(千円)」の2つの数字で表すとします。来店3回・購入金額12(千円)なら、これを (3, 12) という2つの数字の組として書けます。これがベクトルです。
ベクトルの面白いところは、これを「矢印」として図に描けることです。横軸に来店回数、縦軸に購入金額をとった平面上に、原点(0, 0)から (3, 12) に向かって矢印を引く。これがベクトルの図解イメージです。数字を並べただけのものが、向きと長さを持った矢印として視覚化できるわけです。
DS検定で重要なのは、このベクトル同士の掛け算にあたる内積※2という計算です。内積は、2つのベクトルの「対応する成分どうしを掛けて、全部足す」だけの単純な計算です。ベクトル a = (3, 12) と b = (2, 5) の内積は、次のように計算します。
a = (3, 12)、b = (2, 5) のとき
a・b = 3×2 + 12×5 = 6 + 60 = 66
成分ごとに掛けて、その結果をすべて足すだけです。答えは1つの数字(スカラー)になります。
「なぜこんな計算をするのか」と思うかもしれませんが、内積には実務での重要な使い道があります。それは線形式(1次式)をベクトルの内積で表現できるということです。たとえば、あるレストランの注文金額を「ハンバーグ 800円×2個 + ドリンク 300円×3杯」のように計算するとき、これは「単価ベクトル (800, 300)」と「個数ベクトル (2, 3)」の内積として、800×2 + 300×3 = 2,500円 とまとめて書けます。単価がいくつあっても、内積という1つの計算の型に当てはめられるのが利点です。
内積は「重み付き合計」を1つの式で表す道具です。売上 = 単価ベクトル・数量ベクトルのように、線形式(足し算と掛け算だけでできる式)は、内積を使ってすっきり書き表せます。機械学習の予測式(重み×入力の合計)も、内積の考え方そのものです。
内積って聞くと難しそうだけど、やってることは「掛けて、足す」だけなんだよね。レシートの合計金額を計算するのと同じ感覚でOK!
2. 行列とは ― ベクトルを「表」にまとめる
ベクトルが数字を1列に並べたものだとすると、行列※3はそれをさらに「表(テーブル)」の形に並べたものです。たとえば、3人の顧客それぞれの「来店回数」「購入金額」を並べると、次のような3行2列の表になります。
| 顧客 | 来店回数 | 購入金額(千円) |
|---|---|---|
| Aさん | 3 | 12 |
| Bさん | 1 | 4 |
| Cさん | 5 | 20 |
この表から「顧客」の列を除いた数字部分だけを取り出すと、3行2列の行列になります。行列は、複数のベクトル(この例では顧客ごとのデータ)を1つのまとまりとして扱うための入れ物だとイメージしてください。エクセルの表そのものが行列だと考えると、ぐっと身近に感じられるはずです。
DS検定で問われる重要な計算が行列の積※4です。行列の積は、先ほどの内積を「表全体」に対して一気に行う計算だと考えるとわかりやすくなります。たとえば、3人の顧客の「来店回数・購入金額」の行列に対して、「来店回数には1点、購入金額(千円)には2点」という重みベクトル (1, 2) を掛けて、各顧客のロイヤルティスコアを一括計算してみましょう。
- Aさん: 3×1 + 12×2 = 3 + 24 = 27点
- Bさん: 1×1 + 4×2 = 1 + 8 = 9点
- Cさん: 5×1 + 20×2 = 5 + 40 = 45点
行列の各行(顧客)と、重みベクトルとの内積を計算しているだけです。3人分の計算を1回の「行列×ベクトル」の演算としてまとめて表現できます。
行列同士の積(行列×行列)も考え方は同じで、「片方の行列の各行」と「もう片方の行列の各列」の内積を、すべての組み合わせについて計算したものです。1件ずつの計算をバラバラに書く代わりに、行列の積という1つの式にまとめられる。これが複数の線形式を行列の積で表現できるということの意味です。連立方程式や、機械学習で大量のデータをまとめて処理する場面で、この考え方が土台になります。
行列の積は「表と表を掛け合わせて、新しい表を作る」計算です。1件ずつの内積計算を大量に繰り返す代わりに、行列の積という1つの操作でまとめて実行できる、というのが行列を使う最大のメリットです。
行列の積、最初はどれとどれを掛けるのか迷子になりがちだよね…。「行×列の内積を、全部の行・列の組み合わせでやる」って覚えておくとスッキリするよ。
3. 逆行列 ― 連立方程式を「一気に」解く道具
算数の授業で習った連立方程式を覚えているでしょうか。「x + 2y = 8、3x + y = 9 を解いてください」のような問題です。実はこの連立方程式は、行列を使って Ax = b(Aは係数の行列、xは求めたい未知数のベクトル、bは右辺の数値のベクトル)という1つの式にまとめて書くことができます。
では、この式から x を求めるにはどうすればよいでしょうか。通常の数式であれば、A×x = b の両辺を A で割れば x = b ÷ A と求まります。行列には「割り算」そのものはありませんが、割り算に相当する働きをするのが逆行列※5です。ある行列Aに対して、掛けると「何も変化させない行列(単位行列)」に戻してくれる特別な行列を、Aの逆行列と呼び、A-1と書きます。
逆行列 A-1 は、数の世界での「逆数」に相当します。3の逆数が 1/3 であり、3 × 1/3 = 1 になるのと同じように、行列Aに逆行列A-1を掛けると「何もしない」単位行列に戻ります。連立方程式 Ax = b は、両辺に左からA-1を掛けることで x = A-1b と解くことができます。
ある工場で、製品Xを1個作るのに原料Aが2kg・原料Bが1kg、製品Yを1個作るのに原料Aが1kg・原料Bが3kg必要だとします。原料Aの在庫が160kg、原料Bの在庫が180kgぴったり使い切るには、製品X・Yをそれぞれ何個作ればよいでしょうか。
この関係を行列で書くと「原料の使用量を表す行列 × 個数のベクトル = 在庫のベクトル」という Ax = b の形になります。逆行列を使えば、この個数のベクトル x を、割り算のようにまとめて計算で求められます(実際に計算すると X=60個、Y=40個という答えが求まります)。
ただし、すべての行列に逆行列が存在するわけではありません。たとえば「原料Aと原料Bの使用比率がまったく同じ」といった、式同士が実質的に同じ情報しか持たない場合、連立方程式の解が1つに定まらず、逆行列も存在しません。このような行列を「逆行列を持たない行列」と呼びます。DS検定では、逆行列の存在によって連立方程式が一意に解けることを理解していれば十分です。
逆行列は「割り算の代わり」ってイメージだけ持っておけば試験は乗り切れるよ。計算そのものより、Ax=bをx=A⁻¹bに変形できる、という流れを覚えるのがコツ!
4. 固有値・固有ベクトル ― 「向きが変わらない」特別な方向
行列は、ベクトルに掛けることで「変換」を行う道具でもあります。たとえば、ある行列をベクトルに掛けると、そのベクトルの向きや長さが変わります。ところが、行列によっては、掛けても向きだけは変わらず、長さだけが伸び縮みする特別なベクトルが存在することがあります。この特別なベクトルを固有ベクトル※6、その伸び縮みの倍率を固有値※7と呼びます。
具体的な数値でイメージしてみましょう。ある行列Aに、ベクトル v = (1, 1) を掛けたところ、結果が (2, 2) になったとします。(2, 2) は (1, 1) をちょうど2倍しただけのベクトルなので、向きはまったく変わっていません。このとき、v = (1, 1) はAの固有ベクトルであり、固有値は2ということになります。
- ベクトル (1, 1) に行列Aを掛けると (2, 2) になった → 向きは同じ、2倍に拡大 → 固有値2
- もし別のベクトル (1, -1) に行列Aを掛けても (1, -1) のまま変わらなかった → 固有値1(向きも長さもそのまま)
- このように、行列ごとに「向きの変わらない特別な方向」が存在し、その方向にどれだけ伸び縮みするかが固有値
固有値・固有ベクトルは、データ分析の現場ではデータの「主な広がりの方向」を見つけるために使われます。たとえば、たくさんの変数を持つデータを少数の重要な軸に要約する主成分分析という手法は、データのばらつきを表す行列の固有ベクトルを使って「データが最も広がっている方向」を見つけ出す仕組みになっています。DS検定のこの段階では、計算そのものよりも「行列に固有の、向きが変わらない特別な方向とその倍率」というイメージを持てれば十分です。
固有ベクトルは「行列を掛けても向きが変わらない特別な方向」、固有値は「その方向にどれだけ伸び縮みするかを表す倍率」です。データの広がりの方向を捉える主成分分析など、多くのデータ分析手法の基礎となる考え方です。
5. テンソル ― 表をさらに積み重ねた「箱」
ベクトルが「1列に並んだ数字」、行列が「表(2次元)に並んだ数字」だとすると、テンソル※8はこれをさらに一般化した考え方です。ベクトルは1次元のテンソル、行列は2次元のテンソルと考えることができ、それ以上の次元数を持つデータの入れ物もすべてテンソルと呼びます。
身近な例で考えると、カラー画像はテンソルの典型例です。1枚の画像は「縦のピクセル数×横のピクセル数×色の数(赤・緑・青の3色)」という3つの軸を持つ3次元のテンソルとして表現されます。動画になると、そこに「時間(フレーム数)」の軸が加わり、4次元のテンソルになります。このテンソルが持つ「軸の数」を次元数、各軸の大きさの組み合わせを形状(シェイプ)と呼びます。
| データの種類 | 次元数 | 形状(シェイプ)の例 |
|---|---|---|
| 1人の顧客の購買データ(来店回数・購入金額) | 1次元(ベクトル) | (2,) |
| 100人分の顧客データの表 | 2次元(行列) | (100, 2) |
| 1枚のカラー画像 | 3次元 | (縦, 横, 3) |
| 32枚のカラー画像のまとまり(ミニバッチ) | 4次元 | (32, 縦, 横, 3) |
深層学習では、このテンソルに対していくつかの代表的な操作を行います。まず転置は、行と列を入れ替える操作です(表を横倒しにするイメージ)。リシェイプは、データの総数は変えずに形状だけを変える操作で、たとえば「100人×2項目」の表を「200個」の1列のベクトルに並べ替える、といった変換です。インデックシングは、テンソルの中から特定の位置のデータを取り出す操作(「3人目の顧客の購入金額だけ取り出す」など)を指します。
そして深層学習で頻繁に登場するのがブロードキャストです。これは、形状の異なるテンソル同士を計算するときに、小さい方のテンソルを自動的に「複製」して形状を揃えてから計算する仕組みです。たとえば「100人×2項目」の行列に、2項目分の平均値ベクトル(1行2列)を引き算したいとき、本来は形状が合わないはずですが、ブロードキャストによって平均値ベクトルが100人分に自動的に複製され、全員から一括で引き算ができます。
100人分の「購入金額」データ(形状: 100人×1項目)から、全体の平均購入金額(1個の数字)を1回だけ引きたいとします。本来は100個の値それぞれから引き算する必要がありますが、ブロードキャストの仕組みにより、平均値という1個の数字を100人分に自動で「コピー」してから引き算してくれるため、1行のコードで100人分の計算が完了します。
テンソルは「ベクトル・行列を一般化した、任意の次元数を持つ数字の箱」です。次元数(軸の数)と形状(各軸の大きさ)を意識し、転置・リシェイプ・インデックシング・ブロードキャストという代表的な操作のイメージを持っておくことが、深層学習を理解する土台になります。
テンソルは名前が仰々しいけど、「表がもっと重なった箱」ってだけなんだよね。画像データが3次元、画像の束が4次元、って具体例で覚えると忘れにくいよ。
まとめ
このページでは、線形代数の基礎となる5つのポイントを見てきました。最後に振り返っておきましょう。
- ベクトルの内積 ― 成分同士を掛けて合計する計算。線形式(重み付き合計)をまとめて表現できる
- 行列・行列の積 ― ベクトルを表としてまとめたものが行列。行列の積は内積の計算を表全体でまとめて行う操作で、複数の線形式を1つの式で表現できる
- 逆行列 ― 数の「逆数」に相当するもの。Ax=bという連立方程式を x=A⁻¹b の形で解くために使う
- 固有値・固有ベクトル ― 行列を掛けても向きが変わらない特別な方向(固有ベクトル)と、その伸縮の倍率(固有値)
- テンソル ― ベクトル・行列を一般化した、任意の次元数を持つデータの入れ物。次元数・軸・形状と、転置・リシェイプ・インデックシング・ブロードキャストといった操作を理解しておく
線形代数は、機械学習のアルゴリズムのほとんどすべての土台になっている考え方です。次のレッスンでは、変化の割合を捉える「微分」と、面積・確率のつながりを捉える「積分」について見ていきます。
- ベクトル … 複数の数字を順番に並べたもの。向きと長さを持つ「矢印」として図示できる。↩
- 内積 … 2つのベクトルの対応する成分同士を掛けて、その合計を求める計算。結果は1つの数値(スカラー)になる。↩
- 行列 … 数字を縦横の表(マス目)の形に並べたもの。複数のベクトルをまとめて扱うための入れ物と考えるとわかりやすい。↩
- 行列の積 … 一方の行列の各行と、もう一方の行列の各列との内積を、すべての組み合わせについて計算して新しい行列を作る演算。↩
- 逆行列 … ある行列に掛けると「何もしない」単位行列に戻る、特別な行列。数の世界の「逆数」に相当し、連立方程式を解く際に使う。↩
- 固有ベクトル … ある行列を掛けても、向きが変わらず長さだけが変化する特別なベクトル。↩
- 固有値 … 固有ベクトルが行列によってどれだけ伸び縮みするかを表す倍率。↩
- テンソル … ベクトル(1次元)・行列(2次元)を一般化した、任意の次元数を持つ数字のまとまり。画像や動画のデータ表現によく使われる。↩