バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、行列の乗算(内積)の話だったが、
これを理解するには線形代数の基礎部分が必要となる。
行列演算の話を一通り行ったあとに線形代数を簡単に説明予定。
今回はアダマール積。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
アダマール積
次はアダマール積。
アダマール積ってなんぞ?
って思ったからWikipediaから引用してきた。
(自分で調べてくるとは珍しいな)
数学におけるアダマール積(英: Hadamard product)は、同じサイズの行列に対して成分ごとに積を取ることによって定まる行列の積である。要素ごとの積(英: element-wise product)、シューア積(英: Schur product)、点ごとの積(英: pointwise product)、成分ごとの積(英: entrywise product)などとも呼ばれる。
Wikipediaより(https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%80%E3%83%9E%E3%83%BC%E3%83%AB%E7%A9%8D)
これを見ると、
前回の乗算(内積)と違って、要素単位で掛け算すればOKって感じか。
そうそう。
以下の計算になる。
\(
AB=
\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}\odot
\begin{bmatrix}
5 & 6 \\
7 & 8
\end{bmatrix}=
\begin{bmatrix}
1\times5 & 2\times6 \\
3\times7 & 4\times8
\end{bmatrix}=
\begin{bmatrix}
5 & 12 \\
21 & 32
\end{bmatrix}
\)
確かに要素単位で掛け算してるね。
\(\odot\)のマークがアダマール積を示すのか。
アダマール積ってマイナー?
演算子については、あまり定まって無くて、
\(\otimes\)、\(\oslash\)、\(\circ\)で表現されていることもある。
そうすると、どう区別したらいいんだ・・・。
もう文脈に判断するしかないな。
ある程度、制約がある状況下で出てくることが多いから、それほど惑わされることはないと思うけど。
まじか・・・。
ちなみにアダマール積ってどういうときに使うの?
構造的には行列で表現してるけど、
計算したいのは行列としての積じゃなくて、ベクトルとしての積を求めたいときかな?
画像の畳み込みに使われることが多い。
画像は、2次元平面上にピクセルが配置されてるから、
見た目は行列なんだけど、計算する側からするとベクトルとして計算したいことが多いんだよね。
行列からベクトルに直してから計算しても良いか、
あまり構造を変えたくないときは行列のままアダマール積を行って、それらの和を取れば、
ベクトルとして内積を取ったのと同じ計算結果になる。
(まじで何言ってんのか分からん・・・。)
ま、直近では使わないから、「アダマール積というものがある」という認識に留めておいてもよいだろう。
じゃー、そうしよう。
まとめ
まとめだよ。
- 今回はアダマール積について。
- 演算子がいろいろあり、アダマール積かどうかは文脈で読み解くしかない。
- しかし、特殊な状況でしか登場しないので、そういうものがあるという程度で留めておいてもよいかも。
- 画像処理の畳み込みで出てくることは多い。
バックナンバーはこちら。
コメント