点积、内积与哈达玛积详解
文章目录
一、点积(Dot Product)
1. 数学定义
点积通常是指两个向量之间的乘积,定义为对应元素相乘再求和:
a⋅b=∑i=1naibi\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_ia⋅b=i=1∑naibi
例如:
a=[1,2,3],b=[4,5,6]\mathbf{a} = [1, 2, 3], \quad \mathbf{b} = [4, 5, 6]a=[1,2,3],b=[4,5,6]
则:
a⋅b=1×4+2×5+3×6=32\mathbf{a} \cdot \mathbf{b} = 1\times4 + 2\times5 + 3\times6 = 32a⋅b=1×4+2×5+3×6=32
2. 几何意义
点积与两向量的夹角有关:
a⋅b=∣a∣∣b∣cos(θ)\mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos(\theta)a⋅b=∣a∣∣b∣cos(θ)
这意味着:
- 当两向量方向相同(θ=0°),点积最大;
- 当两向量垂直(θ=90°),点积为 0;
- 当两向量方向相反(θ=180°),点积为负。
这一定义在深度学习中非常重要,例如在计算向量相似度(cosine similarity)时就直接使用点积。
二、内积(Inner Product)
1. 概念与区别
内积是一个比点积更广义的概念。
在欧几里得空间中,内积与点积等价;
但在更一般的空间(例如复数空间或函数空间)中,内积可以是更复杂的定义。
数学上定义为:
⟨a,b⟩=aTb\langle \mathbf{a}, \mathbf{b} \rangle = \mathbf{a}^T \mathbf{b}⟨a,b⟩=aTb
2. 几何意义
内积保持了正定性和对称性的性质,是定义“长度”和“角度”的基础。例如:
∣a∣=⟨a,a⟩|\mathbf{a}| = \sqrt{\langle \mathbf{a}, \mathbf{a} \rangle}∣a∣=⟨a,a⟩
在深度学习中,虽然我们通常处理实数空间,因此“点积”与“内积”经常被混用,但在更高级的数学定义中,内积是一种广义的点积。
三、哈达玛积(Hadamard Product)
1. 数学定义
哈达玛积是两个矩阵(或向量)按元素相乘(element-wise multiplication)的结果。
记作:
A⊙B=[aijbij]\mathbf{A}\odot\mathbf{B}=[a_{ij}b_{ij}]A⊙B=[aijbij]
例如:
A=[1234],B=[5678]\mathbf{A} = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad \mathbf{B} = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A=[1324],B=[5768]
则:
A⊙B=[1×52×63×74×8]=[5122132]\mathbf{A} \odot \mathbf{B} = \begin{bmatrix} 1 \times 5 & 2 \times 6 \\ 3 \times 7 & 4 \times 8 \end{bmatrix} = \begin{bmatrix} 5 & 12 \\ 21 & 32 \end{bmatrix} A⊙B=[1×53×72×64×8]=[5211232]
下边是百度百科定义:
2. 与矩阵乘法的区别
运算 | 记号 | 定义 | 结果维度 |
---|---|---|---|
矩阵乘法 | A @ B | 行乘列再求和 | 取决于维度匹配 |
哈达玛积 | A * B (或 A ⊙ B ) | 对应元素相乘 | 与原矩阵同维度 |
在 Python 的 NumPy 中:
import numpy as npA = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])# 哈达玛积
hadamard = A * B # [[5, 12], [21, 32]]# 矩阵乘法,两个两行两列矩阵相乘
matmul = A @ B # [[19, 22], [43, 50]]
📚 参考资料
- 点积
- 内积空间
- 哈达玛积