TL; DR (要約)
行列は単なる数字の箱じゃない!データに意味を与える「アクション(動詞)」です。
AIがデータを操るための、3つの基本的な「演算ルール」を掴みましょう。
① 和・差
(比較・変化の抽出)
同じ形の行列同士で、同じ位置の要素を足し引き。検査値の経時変化や、画像差分の計算に使われます。
② 積
(変換・特徴抽出)
AIで最も重要! データを行列で「変換」し、新たな特徴を抽出。ニューラルネットワークの計算そのものです。
③ 転置
(視点の入れ替え)
行列の行と列を「ひっくり返す」操作。積の計算ができるように、行列の形を整える名脇役です。
この章の学習目標と前提知識
前回の講座では、AIがデータを「かたち」として認識するための基本単位、スカラー、ベクトル、そして行列について学びました。行列が、患者さんのデータセットや医療画像といった、まとまった情報を格納する「器」であることを理解しましたね。
今回は、その「器」に入れたデータに対して、私たちが何ができるのかを探っていきます。線形代数における行列の演算は、データ同士を比較したり、組み合わせたり、あるいは全く新しい意味を持つデータに「変換」したりするための、強力な「動詞」の役割を果たします。
ここでは、その中でも特に基本的で重要な3つの演算、「和・差」「積」「転置」について、そのルールと医療分野での応用イメージを解説します。
1. 行列の和と差 — データセット同士の比較
行列の足し算と引き算は、最も直感的に理解できる演算です。
- ルール: 2つの行列の形状(行数と列数が完全に同じ)が一致している場合にのみ、計算が可能です。計算は、それぞれの行列の同じ位置にある要素同士を足したり引いたりするだけです。
- イメージ: 2つの同じフォーマットのデータセットを重ね合わせ、各項目の差分や合計を見るような操作です。
医療での応用例
- 経時的変化の抽出: ある患者さんの今年の検査結果を行列\(A\)、去年の検査結果を行列\(B\)とします。
\(A - B\)を計算すれば、この1年間でどの検査値がどれだけ変化したのかを示す「変化量行列」が瞬時に得られます。 - 画像差分抽出: 2枚の脳MRI画像(行列)があり、その差分を計算することで、腫瘍の増大や縮小、あるいは新たな病変の出現といった変化があった部分だけを強調して抽出できます。これは「差分画像」として、診断支援に役立ちます。
2. 行列の積 — 最も重要で、最も強力な「変換」
行列の掛け算は、少し特殊なルールを持ちますが、AIや深層学習において最も重要と言っても過言ではない演算です。これは、単なる要素同士の掛け算ではありません。
- ルール: 行列\(A\)と行列\(B\)を掛けて
\(A \times B\)を計算するには、「\(A\)の列数と\(B\)の行数が一致している」必要があります。この条件を満たさないと、計算はできません。 - イメージ: 片方の行列(例:入力データ)を、もう片方の行列(例:重み・変換ルール)を使って、新たな特徴を持つデータに「変換(マッピング)」する操作です。
医療での応用例
行列の積は、ニューラルネットワークの計算そのものです。入力された患者データ(行列)に、ネットワークが学習した「重み」(行列)を掛けることで、中間的な特徴量が計算されます。この行列の積を何層にもわたって繰り返すことで、AIは元のデータからは想像もつかないような複雑なパターンを抽出し、最終的な診断予測へと繋げていきます。入力データを「変換」し続けることで、より本質的な情報を取り出しているのです。
3. 行列の転置 — 行と列の視点を「ひっくり返す」
行列の積という、少し頭を使う演算の後は、もう少し肩の力を抜いてみましょう。ここで紹介する転置 (Transpose) は、操作自体は非常にシンプルですが、AIの実装では驚くほど頻繁に登場する、名脇役のような存在です。
転置とは、一言でいえば、行列の行と列を丸ごと入れ替える操作のこと。行列\(A\)の転置は、右肩にTを付けて \(A^T\) と表記します。
百聞は一見に如かず、です。具体的な行列でその動きを見てみましょう。
【図の解説】
この図が転置の全てを表しています。
- 対角線は動かない: 左上から右下へ貫く「対角線上」の要素(この例では①と⑤)は、位置が変わりません。ここが回転の「軸」になります。
- 行が列に、列が行に:
- 行列Aの1行目
[①, ②, ③]は、転置行列 \(A^T\) の1列目になっています。 - 行列Aの1列目
[①, ④]は、転置行列 \(A^T\) の1行目になっています。
- 行列Aの1行目
このように、全ての行と列がきれいに入れ替わっているのが分かりますね。結果として、元の行列の形状が \(m \times n\)(m行n列)だった場合、転置行列の形状は \(n \times m\)(n行m列)に変わります。
これはまさに、皆さんが普段お使いのExcelで「形式を選択して貼り付け」の中から「行/列の入れ替え」オプションを使ったときと、全く同じことが起きています。患者さんを行に、検査項目を列に並べていた表を、ボタン一つで検査項目を行に、患者さんを列にした表に作り替える、あのイメージです。
なぜ「転置」が必要なのか?
では、なぜわざわざこんな「ひっくり返す」だけの操作が必要なのでしょうか?それ単体で新しい医学的知見が生まれるわけではありません。その真価は、行列の積を「つなぐ」ための、縁の下の力持ちとしての役割にあります。
思い出してみてください。行列の積を計算するには、「前の行列の列数と、後ろの行列の行数が一致する」という厳しいルールがありました。このルールを満たせないと、計算はエラーになってしまいます。
例えば、ある患者データ行列 \(X\) の形状が (100, 50) で、AIモデルの重み行列 \(W\) の形状が (20, 50) だったとします。このままでは、\(X\) の列数(50)と \(W\) の行数(20)が違うため、積 \(X \times W\) は計算できません。
しかし、ここで転置が活躍します。\(W\) を転置して \(W^T\) を作ると、その形状は (50, 20) に変わります。すると、\(X\) の列数(50)と \(W^T\) の行数(50)が見事に一致し、\(X \times W^T\) という積が計算可能になるのです。
このように、転置は計算の「つじつま合わせ」をするための、地味ながら不可欠なテクニックなのです。AIの論文などで数式に \(A^T\) という記号が出てきたら、「ああ、これは後の計算のために、行列の形を整えているんだな」と考えると、式の意図がぐっと読み解きやすくなるはずです。
Python (NumPy)での実践
これらの基本的な演算を、NumPyを使ってコードで確認してみましょう。
import numpy as np
# --- 準備:2つの同じ形状の行列を作成 ---
# 2人の患者の[LDL, 血糖値]データ(2024年版と2025年版)
matrix_2024 = np.array([[140, 99], [165, 110]])
matrix_2025 = np.array([[135, 105], [150, 115]])
# --- 1. 行列の和と差 ---
# 和:各要素が足される
sum_matrix = matrix_2024 + matrix_2025
# 差:各要素が引かれる(変化量を計算)
diff_matrix = matrix_2025 - matrix_2024
print("--- 和と差 ---")
print(f"2年間の合計値:\n{sum_matrix}\n")
print(f"1年間の変化量:\n{diff_matrix}\n")
# --- 2. 行列の積 ---
# 2行2列の行列Aと、2行3列の行列Bを作成
# Aの列数(2)とBの行数(2)が一致しているので、積 AB は計算可能
matrix_a = np.array([[1, 2], [3, 4]]) # (2, 2)
matrix_b = np.array([[5, 6, 7], [8, 9, 10]]) # (2, 3)
# 行列積は @ 演算子(またはnp.dot())を使う
product_matrix = matrix_a @ matrix_b
print("--- 行列の積 ---")
print(f"行列A (2,2):\n{matrix_a}\n")
print(f"行列B (2,3):\n{matrix_b}\n")
print(f"積 AB の結果 (2,3):\n{product_matrix}\n")
# --- 3. 行列の転置 ---
# 2行3列の行列Bを転置する
transposed_b = matrix_b.T
print("--- 行列の転置 ---")
print(f"元の行列B (2,3):\n{matrix_b}\n")
print(f"転置行列B^T (3,2):\n{transposed_b}")
▼上記コードの実行結果
--- 和と差 ---
2年間の合計値:
[[275 204]
[315 225]]
1年間の変化量:
[[ -5 6]
[-15 5]]
--- 行列の積 ---
行列A (2,2):
[[1 2]
[3 4]]
行列B (2,3):
[[ 5 6 7]
[ 8 9 10]]
積 AB の結果 (2,3):
[[21 24 27]
[47 54 61]]
--- 行列の転置 ---
元の行列B (2,3):
[[ 5 6 7]
[ 8 9 10]]
転置行列B^T (3,2):
[[ 5 8]
[ 6 9]
[ 7 10]]
まとめ:演算はデータに意味を与える「アクション」
今回は、線形代数の基本的な「動詞」である3つの演算を学びました。
- 和・差: 同じ形のデータセットを比較し、変化を抽出する。
- 積: データを別の意味空間に変換し、特徴を抽出する。AIの計算の心臓部。
- 転置: データの視点を入れ替え、計算のための形状を整える。
これらの演算を組み合わせることで、AIは入力されただけの「静的なデータ」に様々なアクションを起こし、そこに潜むパターンや意味を引き出していきます。特に、行列の積のルール(形状の制約)を理解することは、今後の学習において非常に重要です。
次回は、これまた重要な概念である「0.2.3: 逆行列と行列式」について探っていきます。
参考文献
- Strang G. Introduction to Linear Algebra. 5th ed. Wellesley, MA: Wellesley-Cambridge Press; 2016. Chapter 2.
- Goodfellow I, Bengio Y, Courville A. Deep Learning. Cambridge, MA: MIT Press; 2016. Chapter 2.
- Deisenroth MP, Faisal AA, Ong CS. Mathematics for Machine Learning. Cambridge, UK: Cambridge University Press; 2020. Chapter 2.
- Bishop CM. Pattern Recognition and Machine Learning. New York: Springer; 2006. Appendix C.
- Poole D. Linear Algebra: A Modern Introduction. 4th ed. Cengage Learning; 2014.
ご利用規約(免責事項)
当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。
第1条(目的と情報の性質)
- 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
- 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
- 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
- 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。
第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。
第3条(医療行為における責任)
- 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
- 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
- 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。
第4条(情報の正確性・完全性・有用性)
- 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
- 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。
第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。
第6条(知的財産権)
- 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
- 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。
第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。
第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。
第9条(免責事項)
- 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
- 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
- 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
- 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。
第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。
第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。
For J³, may joy follow you.

