行列積Matrix Multiplication

表の行と列を対応させて掛けて足す計算

ポイント
  • 行列積は表を二枚重ねて新しい表を一枚作る計算です。行と列を対応させて掛け合わせ、その和を一つの升目に書き込みます。
  • ニューラルネットワークが一つの層を通り抜けることが、まさにこの計算です。入ってきた数字の並びと重みの並びが出会い、次の層の升目一つになります。
  • AIが行っていることのほとんどは、この掛けて足す作業の繰り返しです。計算そのものは易しく、繰り返す回数が途方もなく多いことが難しさの理由です。
  • 升目ごとの計算は互いに関係がなく、いくらでも分担できます。GPUが必要になる理由がここにあります。
  • どんな表でも掛け合わせられるわけではありません。前の表の横幅と後ろの表の縦幅が一致して初めて対応が取れます。
目次

1たとえで理解する

放課後、クラス全員のたこ焼きをまとめて注文しました。手には紙が二枚あります。一枚は注文表です。行一つが生徒一人で、その行にたこ焼きの個数と唐揚げの個数を書き込んであります。もう一枚は値段表です。列一つが値段で、隣の列にはカロリーが書かれています。

これで生徒ごとの支払い額を求めます。注文表からその生徒の行を左手でなぞり、値段表から値段の列を右手でなぞります。たこ焼きの個数にたこ焼きの値段を掛け、唐揚げの個数に唐揚げの値段を掛けます。こうして対応させて掛けた値を全部足し、新しい紙の升目一つに書き込みます。

指を動かしながらすべての升目を埋めると、新しい表が一枚できあがります。この作業が行列積です。

2くわしく

升目一つを埋める順序

新しい表の升目一つを埋めるには、行一つと列一つがあれば足ります。前の表から行一つ、後ろの表から列一つです。二つの並びの最初どうしを掛け、二番目どうしを掛け、最後まで同じように掛けたあと、出てきた値を全部足します。その合計が升目一つに入る数字です。

そのため新しい表の縦の長さは前の表の行の数と一致し、横の長さは後ろの表の列の数と一致します。生徒が三十人で求めたい項目が値段とカロリーの二つなら、結果は三十行二列の表になります。

升目一つを埋めるのにかかる掛け算の回数は、対応させた並びの長さと同じです。メニューが五種類なら掛け算五回と足し算四回です。計算そのものは基礎的な算数ですが、升目が増えると、この算数を途方もない回数だけ繰り返す必要が出てきます。

ニューラルネットワークの一層がこの計算そのものです

ニューラルネットワークは数字の並び一つを受け取り、別の数字の並びに変えて送り出します。この変換がまさに行列積です。入ってきた数字の並びが注文表の行で、層が持つ重みが値段表です。重みの表の列一つが、次の層の升目一つを作ります。

重みの表に書かれた数字は学習で決まった値です。学習が終わればこの表は固定されます。質問を入れるたびにモデルが行っているのは、新しい数字の並びをこの表に通すことだけです。

層が百個あれば、この通過を百回繰り返します。前の層から出た結果の表が次の層の入力の表になり、再びその層の重みの表と出会います。アテンションも、画像モデルの畳み込みも、中身を見れば結局は大きさと形が違うだけの掛けて足す計算です。

計算は易しいのに回数が恐ろしいです

モデルが持つ重みの個数が数十億という話は、値段表の升目が数十億あるという意味です。一かけらを処理するたびにその升目を一度は通らなければならないので、答え一行を作る間に掛けて足す作業が兆の単位で起こります。

一人が電卓を叩いていては一生かかります。だからAIの話にはいつも演算量と電気代がついて回ります。性能を上げようと層を増やし表を大きくすると、掛け算の回数はそれよりも速く膨らみます。

升目ごとに独立しているのでGPUが活きます

幸いこの計算には良い性質が一つあります。新しい表のどの升目も、隣の升目の結果を待ちません。一行目一列目を埋める人と、三行目五列目を埋める人が言葉を交わす必要がないのです。

そのため計算機を何千台にも分けて一斉に任せられます。GPUが行っているのはこれです。難しい計算が得意な装置ではなく、易しい計算を同時に大量にこなす装置です。グラフィックメモリの容量がよく問題になるのも、表をまるごと載せておかなければならないためです。

形が合わないと掛けられません

注文表の横の升目が五つなのに値段表の縦の升目が四つだと、対応が取れません。最後の一つが相手のないまま残ります。そのため前の表の横幅と後ろの表の縦幅は必ず一致していなければなりません。

モデルを作るとき層ごとに表の大きさを合わせる作業が大きな比重を占めるのはこのためです。順序を入れ替えるのも自由にはできません。注文表に値段表を掛けるのと、値段表に注文表を掛けるのとでは、違う結果になったり、そもそも掛けられなかったりします。

3もう少し正確に

行列は数字を縦横に並べた表で、行列積は前の行列の行と後ろの行列の列を成分ごとに掛けて足した値を、結果の行列の位置に置く演算です。この演算は順序を入れ替えることはできませんが、まとめ方は変えられるので、複数の層をあらかじめ一つにまとめておく最適化が可能です。

たとえがずれる点もあります。たこ焼き屋の計算では値がすべて正の数で単位もはっきりしていますが、ニューラルネットワークの重みは負の値も多く、単位もありません。掛けた値を足すと打ち消し合うこともあります。また実際のモデルは一人ずつ計算せず、複数人の注文表を一枚に積み重ねて一度に通します。このまとめる単位がバッチです。層と層の間には、掛け算だけでは作れない曲がった変化を加える活性化関数も挟まります。それがなければ、層をいくら重ねても表一枚に合わさってしまいます。

4やってみる

5よくある誤解

  • 行列積が升目どうしを一つずつ掛けることだと思われがちですが、実際には行と列をまるごと対応させて掛けたあと足した値を升目一つに書き込みます。

  • AIの中では非常に複雑な数学が動いていると考えられがちですが、実際には掛け算と足し算がほとんどすべてで、その回数だけが想像を超えて多いのです。

  • GPUはCPUより賢いから速いと思われがちですが、実際には互いに関係のない易しい計算を同時に大量にこなすよう作られているだけです。

7ひとこと要約

つまり行列積は行と列を対応させて掛け足した値を升目に書き込む計算で、AIが行っていることはこの計算を途方もない回数だけ繰り返すことです。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02