機械学習では、NumPyやPyTorchなどのライブラリを使って、ベクトルとスカラーを足したり、行列とベクトルを組み合わせたりする処理が頻繁に登場します。このようなブロードキャスティングと呼ばれる仕組みは、純粋数学で学ぶ線形代数の考え方と矛盾しないのか疑問に感じる人も少なくありません。
実際には、ブロードキャスティングは線形代数の演算そのものを変更しているわけではなく、数学的な定義を拡張して、計算を便利に表現している仕組みです。この記事では、機械学習で使われるブロードキャスティングと線形代数との関係について解説します。
線形代数における本来のベクトルや行列の演算
まず、純粋数学としての線形代数では、演算には明確なルールがあります。
例えば、2つのベクトルを足す場合、同じ次元である必要があります。
例として、
(1,2,3)+(4,5,6)=(5,7,9)
のように、それぞれ対応する成分同士を足します。
一方で、
(1,2,3)+(4,5)
のような異なる次元のベクトル同士の加算は、通常の線形代数では定義されません。
行列同士の加算でも同じで、行数と列数が一致している必要があります。
ブロードキャスティングとは何をしているのか
機械学習で使われるブロードキャスティングは、サイズの異なる配列同士を計算できるように、自動的に形を合わせる仕組みです。
例えば、
(1,2,3)+(10)
という計算を考えます。
数学的には、3次元ベクトルとスカラーの加算はそのままでは定義されません。しかし、ブロードキャスティングではスカラーを、
(10,10,10)
というベクトルとして扱い、
(1,2,3)+(10,10,10)=(11,12,13)
として計算します。
つまり、スカラーをベクトル空間上の特別な要素として拡張して考えていると言えます。
スカラーとベクトルの加算は数学的にも考えられる
スカラーとベクトルの加算は、厳密な線形代数の基本演算には含まれません。しかし、数学では適切な空間を定義すれば、このような演算を扱うことができます。
例えば、スカラーaを、すべての成分がaであるベクトルとして写像することを考えます。
a→(a,a,a,…,a)
このような対応関係を定めれば、ベクトルとの加算は通常のベクトル加算として扱えます。
つまり、ブロードキャスティングは数学的に無秩序な操作ではなく、「どのように拡張して解釈するか」というルールを決めた上で行われています。
行列とベクトルのブロードキャスティングの考え方
行列とベクトルの演算でも、同じ考え方が使われています。
例えば、機械学習では画像データやニューラルネットワークの重みなどで、行列や多次元配列を扱います。
2×3の行列に対して、3次元ベクトルを加える場合を考えると、
[[1,2,3],[4,5,6]]+(10,20,30)
のような計算では、ベクトルが各行にコピーされたものとして扱われます。
結果として、
[[11,22,33],[14,25,36]]
になります。
これは数学的には「行列の各行に同じベクトルを加える」という別の演算として定義できます。
機械学習ではなぜブロードキャスティングが必要なのか
機械学習では、大量のデータを効率的に処理する必要があります。そのため、同じ処理を何度も繰り返すよりも、配列全体に対して一括で計算する方が高速です。
例えば、画像データの明るさ調整では、すべての画素に一定値を加える処理があります。
画像全体を表す行列に対して、1つの明るさ補正値を加える場合、ブロードキャスティングを利用すると簡単に記述できます。
プログラム上では短いコードで書けますが、内部では数学的に定義された形に変換されて処理されています。
ブロードキャスティングは線形代数のルールを破っているのか
結論として、ブロードキャスティングは線形代数のルールを破っているわけではありません。
ただし、純粋な線形代数で定義される「ベクトルの加法」や「行列の加法」と同じものではありません。
ブロードキャスティングは、プログラミングや数値計算のために、数学的な操作を拡張した便利な記法です。
例えば、通常の数学で「3人分の食事に1個の調味料を均等に追加する」と表現する場合、調味料1個を3人分に広げる暗黙の操作を行うことがあります。ブロードキャスティングも、それを計算規則として明確化したものと考えると分かりやすくなります。
まとめ|ブロードキャスティングは数学の拡張として理解できる
機械学習で利用されるブロードキャスティングは、線形代数の基本ルールを無視したものではありません。
本来なら次元が一致しないため定義されない演算について、「スカラーをベクトルとして拡張する」「ベクトルを複数行に適用する」といった規則を追加して計算しています。
そのため、ブロードキャスティングは純粋数学の考え方と矛盾するものではなく、数学的な概念をコンピュータ上で効率的に扱うための自然な拡張と考えることができます。


コメント