아다마르 곱 (Hadamard Product)
아다마르 곱(Hadamard product, 원소별 곱, 항별 곱 또는 슈어곱이라고도 함)은 같은 차원의 두 행렬(또는 벡터)을 받아 피연산자와 같은 차원의 다른 행렬을 생성하는 이항 연산입니다. 결과 행렬의 각 원소 i, j는 원래 두 행렬의 원소 i, j의 곱입니다. 프랑스 수학자 자크 아다마르(Jacques Hadamard)의 이름을 땄으며, 같은 이름이 붙은 아다마르 행렬, 아다마르 변환, 양자 컴퓨팅의 아다마르 게이트와는 다른 개념입니다. 아다마르 행렬은 원소가 +1과 −1이고 행끼리 서로 직교하는 정사각 행렬이고, 아다마르 게이트는 큐비트를 0과 1의 균등한 중첩 상태로 바꾸는 연산입니다. 이 항목은 원소별 곱 연산만 다룹니다.
기본 사항
- 이항 연산이므로 두 개의 행렬을 결합합니다.
- 두 행렬 모두 크기가 같아야 합니다(행과 열의 수가 같아야 함).
- 결과 행렬은 원래 행렬과 같은 차원을 갖습니다.
- 일반적인 행렬 곱셈과 달리 교환 법칙이 성립합니다(A ⊙ B = B ⊙ A).
- 결합 법칙과 덧셈에 대한 분배 법칙이 성립합니다(A ⊙ (B + C) = A ⊙ B + A ⊙ C).
- 항등원은 단위 행렬이 아니라 모든 원소가 1인 행렬입니다.
일반적인 행렬 곱 AB는 A의 행과 B의 열을 내적해 계산하므로 A의 열 수와 B의 행 수만 맞으면 되고, 결과의 크기도 달라질 수 있습니다. 반면 아다마르 곱은 같은 위치의 원소끼리만 곱하므로 두 행렬의 크기가 완전히 같아야 하고, 계산량도 원소 수에 비례할 만큼 단순합니다.
작동 방식
차원이 2×2인 두 행렬 A와 B가 있다고 가정해 보겠습니다.
A = [a11 a12] [a21 a22]
B = [b11 b12] [b21 b22]
A ⊙ B로 표시되는 아다마르 곱은 다음과 같습니다.
A ⊙ B = [a11*b11 a12*b12] [a21*b21 a22*b22]
예시: 거래 총액 계산
주식 세 종목의 이틀간 주가와 거래량을 담은 두 개의 표가 있다고 가정해 보겠습니다.
- 주가 — 월요일: $10, $12, $15 / 화요일: $11, $13, $16
- 거래량 — 월요일: 100, 150, 200 / 화요일: 120, 170, 220
각 종목의 하루 거래 총액은 일반 행렬 곱셈이 아니라 같은 위치의 셀끼리 곱한 값입니다.
- 월요일: ($10 * 100), ($12 * 150), ($15 * 200)
- 화요일: ($11 * 120), ($13 * 170), ($16 * 220)
이 결과 표가 두 표의 아다마르 곱입니다.
응용 분야
- 영상 처리: 마스크 행렬을 픽셀 값에 원소별로 곱해 영상의 특정 영역을 남기거나 가립니다.
- 기계 학습: 신경망의 게이트 연산(LSTM 등)과 대규모 데이터의 원소별 연산에 쓰입니다.
- 신호 처리: 주파수 영역에서 성분별로 곱하여 신호를 필터링합니다.
- 영지식 증명: 영지식 증명 시스템은 증명할 계산을 벡터 사이의 관계로 표현합니다. Groth16 등에서 쓰는 R1CS(Rank-1 Constraint System)는 모든 제약을 Az ⊙ Bz = Cz 형태로 적으며, 여기서 ⊙가 아다마르 곱입니다. Bulletproofs 범위 증명에서도 값의 비트 벡터 aL과 aR = aL − 1에 대해 aL ⊙ aR = 0을 증명해, 각 원소가 0 또는 1이라는 사실을 한 번에 보입니다.
결론적으로 아다마르 곱은 같은 위치의 원소끼리 곱하는 간단한 연산으로, 행렬 계산과 데이터 처리, 암호학의 증명 시스템에서 폭넓게 쓰입니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.