ブロードキャスト積
【英語版はこちら】
東京大学の松井です。名古屋工業大学の横田先生とブロードキャスト積「
概要
numpyにおいて行列とベクトルの要素積を計算する場合、ベクトルが行列と形状が揃うように自動的に複製されます。これはブロードキャストと呼ばれる機能です。
# A.shape == (3, 2)
A = np.array([[1, 2],
[3, 4],
[5, 6]])
# v.shape == (1, 2)
v = np.array([[7, 8]])
# Broadcast & multiply
A * v
# > array([[ 7, 16],
# > [21, 32],
# > [35, 48]])
一方で、通常の数式では当然ながらこのように書くことは出来ません。
と書くことはできません。アダマール積の前後の行列・ベクトルの形状が揃わないからです。 ところが、近年のコンピュータビジョンの多くの論文ではこの点を無視してnumpyの式をそのまま記載する論文が非常に多いです。これは数学的に間違った議論となってしまうため、よくありません。
そこで、我々はnumpyにおけるブロードキャスト積を正しく表現してくれる演算子であるブロードキャスト積
このように、最初のnumpyと同じ結果を得ることができました。ブロードキャスト積を用いることで、numpyの表記を正しく数式で表現することが出来ます。
具体例
高さが
しかし、この処理は実は間違いです。なぜなら、テンソルの形状が違うため要素積が適用できないからです。これを正しく記述するならば、マスク
特性
私達はこのブロードキャスト積に関し、周辺化やフロベニウスノルムに関する特性を導きました。詳細は論文をご覧ください。
最適化
さらに、私達はこのブロードキャスト積を用いた行列の近似を提案しています。すなわち、
さらにこれを拡張することで、「ブロードキャスト積によるテンソル分解」が可能であることを示しました。
実験により、ある種の人工データに関しては、ブロードキャスト積による分解はCP分解やTucker分解よりも高い精度でテンソルを近似できることを示しました。これはブロードキャスト積はテンソル分解における新たな切り口となる可能性があることを示唆します。詳しくは論文をご覧ください。
是非使ってみてください!
是非ブロードキャスト積を使ってみてください!TeXでは \usepackage{amssymb}
とした上で\boxdot
と打てば記述できます。ブロードキャスト積を使うと、これまで曖昧だった部分が数学的に正確に記載できるだけでなく、これまで気付かなかった式変形を発見することができるかもしれません。
関連する文献
本論文はMIRU2024においてオーディエンス賞を受賞した「ブロードキャスト積:テンソル形状を揃えた要素積演算」に分量を追加し英訳したものになります。また、以下の過去のブログポストは本論文を着想するに至った背景になります。