新しい案件、誰に振るかな…。求められるのは 実装力・折衝力・ドメイン知識・スピード の4つ。Aさんは実装8・折衝3だから…重みつけて足すと…うーん。次、Bさんは…(電卓を叩く)。メンバー20人ぶん、これ一人ずつやるのか…。
凡田さん、それ 一人ずつやらなくていい ですよ。メンバー全員の 「強みの数値」 を縦に積んで 1枚の表(行列) にすれば、案件の要求ベクトルとの掛け算 「1回」 で、全員ぶんのフィット度がまとめて出ます。
え、20回ぶんの計算が1回の掛け算に化けるの?
それが 行列・ベクトルの積 です。しかも ── ニューラルネットが 1つの層 でやっているのも、まさにこの計算なんですよ。

- 行列・ベクトルの積とは、ひとことで 「内積を、行の数だけまとめて一気にやる」 演算。重み行列 × 入力ベクトル = 出力ベクトルで、出力の各マスは「その行と入力の内積」1回ぶん。凡田が一人ずつ電卓で出していた採点を、表(行列)にして全員分を一括で出すのと同じ。
- なぜ大事かというと、これが ニューラルネット 「1層」 の計算そのもの だから。「入力に重みを掛けて足す」を出力ニューロンの数だけやる = 行列ベクトル積。AI の中身は、この掛け算を何十層も積み重ねたもの。
- そして GPU はこの 「まとめて掛ける」 のが死ぬほど得意。一人ずつより、行列で一括にした方が桁違いに速い ── これが「AI の計算が行列だらけ」な理由で、AI が速い理由でもある。
内積 (#005) は「ベクトル2本から1つの数を作る」演算だった。本記事はそのすぐ上の階 ── 「内積を、行の数だけまとめてやる」 行列・ベクトルの積を扱う。これが分かると、ニューラルネットの1層の中で何が起きているか が、計算レベルで見えるようになる。
定義 — 内積を「行の数だけ」まとめたもの
行列・ベクトルの積は、新しい難しい計算ではない。知っている「内積」を、行列の各行について繰り返すだけ だ。
重み行列 W × 入力ベクトル x = 出力ベクトル y。出力 y の i 番目のマスは、「W の第 i 行」と「x」の内積。
つまり、出力ベクトルのマスの数 = 行列の行の数。各マスを作るのに、内積を1回ずつ使う。具体例で見れば一目だ ── 下の図で、出力の「5」は 行列の第2行 [0,1,1,2] と入力 [2,0,3,1] の内積(0·2+1·0+1·3+2·1=5)。第1行なら 3、第3行なら 9。行のぶんだけ内積を並べたものが、出力ベクトルだ。
ポイントは 「行列の1行 = 1つの出力を作るための重みのセット」 ということ。凡田の采配でいえば、行列の1行 = メンバー1人の 「強みプロファイル」。それと案件の要求ベクトルの内積が、そのメンバーのフィット度になる。行を縦に積めば、全員ぶんが1回の掛け算で出る。
これがニューラルネットの「1層」
ここが本記事の核心だ。ニューラルネットの全結合層(線形層)がやっている計算は、まさにこの行列ベクトル積1回 に他ならない。
ニューロン (#008) 1個は、「入力それぞれに重みを掛けて、全部足す」 ── つまり 入力ベクトルと、自分が持つ重みベクトルの内積 を計算している。出力ニューロンが3個あれば、内積を3回。これを 重みを3行ぶん積んだ行列 × 入力ベクトル と書けば、層まるごとの計算が、たった1回の行列ベクトル積 になる。
「重み」(#009) は、見る粒度で姿が変わる
ここで 「重み」という言葉が指すもの を、粒度で整理しておくと一気に腑に落ちる:
| 粒度 | 正体 | この記事の例 |
|---|---|---|
| 線1本(入力1個 → 出力1個 をつなぐ1本) | ただの数(スカラー) | 入力「2」から出力①へ伸びる線の重み = 1 |
| ニューロン1個ぶん | 数の並び(ベクトル)= 行列の1行 | 出力①の重み = [1, 2, 0, 1] |
| 層まるごと | 表(行列) | 重み行列 W = 3行 × 4列 |
いちばん細かい 線1本 は、「ある入力を、ある出力でどれだけ効かせるか」を表す数字ひとつ。下の図2の線1本1本が、それぞれこの数字を持っている。それを 1つの出力ぶん(横一列)集めるとニューロン(= 行)、全出力ぶん集めると層(= 行列)。テンソル (#047) でやった スカラー → ベクトル → 行列 が、そのまま重みにも当てはまる ── 「重みって、実は行列だったのか」というわけだ。
だから ── MLP(#037) も、アテンション(#030) の Q/K/V (#035) を作る部分も、中身を開ければ 「行列 × ベクトル(やその束)」の繰り返し。AI の計算の大半は、この一種類の演算でできている。行列ベクトル積が分かれば、ニューラルネットの 「1層の中身」 は分かったも同然だ。
なぜ「行列で」まとめるのか — 速さの理由
「一人ずつ内積すればいいなら、なぜわざわざ行列にするのか?」── 答えは 速さ だ。
内積を一人ずつ順番に計算するのは、凡田が電卓を20回叩くのと同じ。一方、GPU は 「たくさんの掛け算と足し算を同時に」 やるのが死ぬほど得意 な専用チップで、行列ベクトル積はその得意技そのもの。20人ぶんでも、1000人ぶんでも、ほぼ一瞬で並列に 片づける。さらに入力を バッチ (#047) でまとめれば、行列 × 行列の積になり、もっとまとめて処理できる。
「AI の計算は行列だらけ」と言われるのは、これが理由だ。計算をあえて行列の形に揃えることで、ハードの並列性を最大限に引き出している。AI が速いのは、賢いアルゴリズムというより、計算を 「まとめて掛けられる形」 に整えてあるからでもある。
コンサル感覚 — 「一人ずつ」を「一括」に変える視点
本記事の核心メッセージは 「同じ計算を多数の対象に繰り返すなら、それは 「行列1回」 にまとめられる」。凡田の采配がそうだったように、この視点は実務でも効く:
① 「一人ずつ手作業」 を見つけたら、まとめる余地がある: 各案件・各顧客・各メンバーに同じ採点や判定を繰り返しているなら、それは 「評価軸 × 対象」の表(行列)1枚 に置き換えられるサイン。Excel の表計算も、業務システムのバッチ処理も、AI の層も、本質は同じ「まとめて一括」だ。
② AI 案件の 「重い処理」 の正体を説明できる: クライアントに「なぜ GPU が要るのか」を聞かれたら、「AI の中身は巨大な掛け算表(行列ベクトル積)の繰り返しで、それを一括並列でやるのが GPU だから」 と返せる。モデルの賢さの裏に、地道な行列計算がある、と伝わる。
③ クライアント説明の一言: 「ニューラルネットって中で何してるんですか?」には、「入力に重みを掛けて足す、を大量にまとめてやってます。表(行列)と数の並び(ベクトル)の掛け算の繰り返し、それだけです」。難解な箱の中身が、急に手触りのある計算に見えてくる。
いや〜、さっきの行列の話、地味に効いたわ。20人を一人ずつ電卓で…ってやってた俺、何だったの。
あら、私は13年それを Excel の SUMPRODUCT で一行ずつ…でも下にコピーすれば一気でしたわね。…まさかあれ、行列の掛け算でしたの?
まさにそれです。SUMPRODUCT が内積、それを縦にコピー = 行列ベクトル積。大蔵さんは13年前から1層ぶんの計算を手でやってたんですよ。GPU はそれを、何千行でも一瞬でやるだけなんです。
