Skip to content

数学基础

在深入学习 TensorFlow 和机器学习之前,对某些数学概念有扎实的理解至关重要。数学构成了机器学习算法的基石,提供了定义问题、制定解决方案和评估性能的工具。TensorFlow 本身就是围绕着对称为张量(tensors)的多维数组进行操作而构建的,张量是这些数学对象的推广。

向量(vector)是一个有序的数字列表,可以被视为空间中的一个点或一个既有大小又有方向的量。在机器学习中,输入(特征)和参数通常表示为向量。向量是 1D 张量(1D Tensors)。例如,[1.0, 2.5, -0.7] 是一个 3 维向量。在 TensorFlow 中,这可以表示为:tf.constant([1.0, 2.5, -0.7])。

机器学习算法经常处理高维数据,这使得向量成为一种基本的数据结构。

标量(scalar)是一个单独的数字,与向量或矩阵相对。从几何意义上说,它只有大小而没有方向。标量是 0D 张量(0D Tensors)。例子包括优化算法中的学习率或单个像素强度。在 TensorFlow 中:tf.constant(42.0)。

矩阵(matrix)是一个二维的数字数组,排列成行和列。矩阵的大小由其行数和列数定义(例如,一个 m x n 矩阵有 ‘m’ 行和 ‘n’ 列)。矩阵是 2D 张量(2D Tensors)。它们被广泛用于表示数据集(样本作为行,特征作为列)、神经网络层中的权重以及协方差矩阵。示例:[[1, 2, 3], [4, 5, 6]] 是一个 2x3 矩阵。在 TensorFlow 中:tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])。

TensorFlow 提供了丰富的库用于对张量执行数学运算,这些运算与标准线性代数运算相似。

两个形状相同的矩阵(或张量)的加法是按元素进行的。如果 A 和 B 是具有相同维度的矩阵,那么 (A + B)ij = Aij + Bij。

$$Example:A=\begin{bmatrix}1 & 2 \3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \7 & 8 \end{bmatrix}:then:A+B=\begin{bmatrix}1+5 & 2+6 \3+7 & 4+8 \end{bmatrix}=\begin{bmatrix}6 & 8 \10 & 12 \end{bmatrix}$$

在 TensorFlow 中:C = tf.add(A, B) 或 C = A + B

减法也像加法一样,对于相同维度的矩阵按元素进行。(A - B)ij = Aij - Bij。

$$Example:A=\begin{bmatrix}1 & 2 \3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \7 & 8 \end{bmatrix}:then:A-B=\begin{bmatrix}1-5 & 2-6 \3-7 & 4-8 \end{bmatrix}=\begin{bmatrix}-4 & -4 \-4 & -4 \end{bmatrix}$$

在 TensorFlow 中:C = tf.subtract(A, B) 或 C = A - B

对于两个矩阵 A (m x n) 和 B (p x q),若要执行 A * B 的乘法,A 的列数必须等于 B 的行数(即 n = p)。结果矩阵 C 的维度将是 m x q。元素 Cij 是 A 的第 i 行和 B 的第 j 列的点积。

$$A=\begin{bmatrix}1 & 2 \3 & 4 \end{bmatrix}B=\begin{bmatrix}5 & 6 \7 & 8 \end{bmatrix} \text{ (both are 2x2, so n=2, p=2)}$$

$$c_{11}=(1 \times 5) + (2 \times 7)=19$$ $$c_{12}=(1 \times 6) + (2 \times 8)=22$$

$$c_{21}=(3 \times 5) + (4 \times 7)=43$$ $$c_{22}=(3 \times 6) + (4 \times 8)=50$$

$$C=\begin{bmatrix}c_{11} & c_{12} \c_{21} & c_{22} \end{bmatrix}=\begin{bmatrix}19 & 22 \43 & 50 \end{bmatrix}$$

在 TensorFlow 中:C = tf.matmul(A, B) 或 C = A @ B (Python 3.5+ 的矩阵乘法运算符)。注意:在 TensorFlow 中,A * B 执行的是按元素乘法(element-wise multiplication)。

一个 m x n 矩阵 A 的转置,记作 AT,是通过交换 A 的行和列得到的 n x m 矩阵。(AT)ij = Aji。

$$Example:A=\begin{bmatrix}1 & 2 \3 & 4 \end{bmatrix}:then:A^{T}=\begin{bmatrix}1 & 3 \2 & 4 \end{bmatrix}$$

在 TensorFlow 中:At = tf.transpose(A)

两个 n 维向量 v1 和 v2 的点积(或标量积)是它们对应分量乘积的总和。如果向量表示为列矩阵(n x 1),点积可以表示为 v1Tv2。

$$v_{1}=\begin{bmatrix}v_{11} \v_{12} \\vdots\v_{1n}\end{bmatrix}v_{2}=\begin{bmatrix}v_{21} \v_{22} \\vdots\v_{2n}\end{bmatrix}$$

点积是:$$v_{1}\cdot v_{2}=v_1^Tv_{2}=v_{11}v_{21}+v_{12}v_{22}+\dots+v_{1n}v_{2n}=\sum\limits_{k=1}^n v_{1k}v_{2k}$$

结果是一个标量值。

$$Example:v_{1}=\begin{bmatrix}1 \2 \3\end{bmatrix}v_{2}=\begin{bmatrix}3 \5 \-1\end{bmatrix} \implies v_{1}\cdot v_{2}=(1\times3)+(2\times5)+(3\times-1)=3+10-3=10$$

在 TensorFlow 中(对于 1D 张量/向量):dot_product = tf.tensordot(v1_1d, v2_1d, axes=1) 或 dot_product = tf.reduce_sum(v1_1d * v2_1d)。如果 v1 和 v2 是列向量(形状 [n,1]):dot_product_matrix = tf.matmul(tf.transpose(v1), v2),结果是一个 1x1 矩阵,然后使用 tf.squeeze(dot_product_matrix) 得到标量。