目录
线性代数
矩阵转置
-
作用:将矩阵的行与列交换,生成一个新的矩阵。
-
公式: $$ (\mathbf{A}^\intercal)_{i,j} = \mathbf{A}_{j,i} $$
-
解释:其中 $$\mathbf{A}^\intercal$$ 表示矩阵 $$\mathbf{A}$$ 的转置,$$(\mathbf{A}^\intercal)_{i,j}$$ 表示转置后矩阵的第 $$i$$ 行、第 $$j$$ 列元素,$$\mathbf{A}_{j,i}$$ 表示原矩阵的第 $$j$$ 行、第 $$i$$ 列元素。
矩阵乘法
-
作用:计算两个矩阵的乘积。
-
公式: $$ \mathbf{C} = \mathbf{A} \mathbf{B}, \quad \mathbf{C}_{i,j} = \sum_k \mathbf{A}_{i,k} \mathbf{B}_{k,j} $$
-
解释:其中 $$\mathbf{A}$$、$$\mathbf{B}$$ 和 $$\mathbf{C}$$ 分别表示相乘的两个矩阵和它们的乘积矩阵,$$\mathbf{A}_{i,k}$$ 和 $$\mathbf{B}_{k,j}$$ 分别表示 $$\mathbf{A}$$ 的第 $$i$$ 行、第 $$k$$ 列元素和 $$\mathbf{B}$$ 的第 $$k$$ 行、第 $$j$$ 列元素,$$\mathbf{C}_{i,j}$$ 表示乘积矩阵的第 $$i$$ 行、第 $$j$$ 列元素。
特征值和特征向量
-
作用:计算一个方阵的特征值和对应的特征向量。
-
公式: $$ \mathbf{A} \mathbf{v} = \lambda \mathbf{v} $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$n \times n$$ 的方阵,$$\mathbf{v}$$ 表示一个 $$n \times 1$$ 的列向量,$$\lambda$$ 表示 $$\mathbf{A}$$ 的一个特征值,使得方程 $$\mathbf{A} \mathbf{v} = \lambda \mathbf{v}$$ 成立,$$\mathbf{v}$$ 则为相应的特征向量。
使用场景:
-
线性变换:特征向量和特征值可以描述线性变换的性质,如旋转、缩放和平移等。在计算机图形学、机器人学和计算机视觉等领域中,特征向量和特征值被广泛应用于3D姿态估计、物体识别、图像分割等问题中。
-
物理学:在物理学中,特征值和特征向量可以用来描述量子力学、量子力学中的自旋和角动量等。例如,原子和分子的能级和波函数可以通过计算其特征值和特征向量来得到。
-
信号处理:在信号处理中,特征向量和特征值可以用于信号的特征提取和降维。例如,在语音信号处理中,可以使用特征向量和特征值来提取语音信号的特征,以便识别语音信号中的语音内容。
-
统计学:在统计学中,特征向量和特征值可以用于数据降维和主成分分析等。例如,在数据挖掘中,可以使用特征向量和特征值来将高维数据降维到低维空间,以便进行聚类和分类等操作。
-
矩阵的逆
-
作用:计算一个可逆方阵的逆矩阵。
-
公式: $$ \mathbf{A}^{-1} \mathbf{A} = \mathbf{A} \mathbf{A}^{-1} = \mathbf{I} $$
-
解释:其中 $$\mathbf{A}$$ 表示一个可逆方阵,$$\mathbf{A}^{-1}$$ 表示 $$\mathbf{A}$$ 的逆矩阵,$$\mathbf{I}$$ 表示单位矩阵,$$\mathbf{A} \mathbf{A}^{-1} = \mathbf{A}^{-1} \mathbf{A} = \mathbf{I}$$ 表示逆矩阵的定义。
矩阵的迹
-
作用:计算一个方阵的迹,即矩阵对角线上元素的和。
-
公式: $$ \operatorname{tr}(\mathbf{A}) = \sum_{i=1}^n \mathbf{A}_{i,i} $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$n \times n$$ 的方阵,$$\mathbf{A}_{i,i}$$ 表示矩阵 $$\mathbf{A}$$ 的第 $$i$$ 行、第 $$i$$ 列元素,$$\operatorname{tr}(\mathbf{A})$$ 则表示矩阵的迹。
矩阵的秩
-
作用:矩阵的秩是线性代数中的一个核心概念,它用于描述矩阵的“大小”或“复杂度”。在解决实际问题时,矩阵的秩可以帮助我们判断矩阵是否可逆、方程组是否有唯一解,以及向量组的线性相关性等。
-
公式:对于矩阵 $$\mathbf{A}$$,其秩 $$rank(\mathbf{A})$$ 并没有直接的计算公式,而是通过一些方法计算得出,例如通过奇异值分解(SVD)等方法。
-
解释:矩阵的秩定义为矩阵中最大的非零子式的阶数。非零子式是指取出矩阵中的一部分行和列交叉处的元素构成的行列式,其值不为零。矩阵的秩也可以理解为矩阵的行空间或列空间的维数。低秩矩阵意味着矩阵中有很多行或列是线性相关的,而满秩矩阵则意味着所有的行和列都是线性无关的。
向量范数
-
作用:计算一个向量的大小或长度。
-
公式: $$ \|\mathbf{x}\|_p = \left(\sum_{i=1}^n |x_i|^p \right)^{\frac{1}{p}} $$
-
解释:其中 $$\mathbf{x}$$ 表示一个 $$n$$ 维列向量,$$p$$ 表示范数的指数,$$|\cdot|$$ 表示绝对值运算,$$\|\cdot\|_p$$ 则表示 $$p$$ 范数。
矩阵分解
-
作用:将一个矩阵分解为多个矩阵的乘积。
-
公式: $$ \mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$m \times n$$ 的矩阵,$$\mathbf{U}$$ 和 $$\mathbf{V}$$ 分别表示两个正交矩阵,$$\mathbf{\Sigma}$$ 表示一个对角线上元素为非负实数的对角矩阵,$$\mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T$$ 表示矩阵分解。
正交投影
-
作用:将一个向量投影到另一个向量所在的超平面上。
-
公式: $$ \operatorname{proj}_{\mathbf{v}}(\mathbf{x}) = \frac{\mathbf{x} \cdot \mathbf{v}}{\|\mathbf{v}\|^2} \mathbf{v} $$
-
解释:其中 $$\mathbf{x}$$ 和 $$\mathbf{v}$$ 分别表示两个列向量,$$\cdot$$ 表示点乘运算,$$\|\cdot\|$$ 表示向量的范数,$$\operatorname{proj}_{\mathbf{v}}(\mathbf{x})$$ 表示向量 $$\mathbf{x}$$ 在向量 $$\mathbf{v}$$ 所在的超平面上的投影向量。
特征值与特征向量
-
作用:描述一个方阵对向量的线性变换的影响。
-
公式: $$ \mathbf{A} \mathbf{v} = \lambda \mathbf{v} $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$n \times n$$ 的方阵,$$\mathbf{v}$$ 表示一个 $$n$$ 维列向量,$$\lambda$$ 表示一个实数,$$\mathbf{A} \mathbf{v} = \lambda \mathbf{v}$$ 表示矩阵 $$\mathbf{A}$$ 对向量 $$\mathbf{v}$$ 的线性变换只是将其缩放 $$\lambda$$ 倍。
奇异值分解
-
作用:将一个矩阵分解为三个矩阵的乘积。
-
公式: $$ \mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$m \times n$$ 的矩阵,$$\mathbf{U}$$ 和 $$\mathbf{V}$$ 分别表示两个正交矩阵,$$\mathbf{\Sigma}$$ 表示一个对角线上元素为非负实数的矩阵,$$\mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T$$ 表示矩阵分解。
行列式
-
作用:描述一个方阵的线性变换对体积的影响。
-
公式: $$ \det(\mathbf{A}) = \sum_{\sigma \in S_n} \operatorname{sgn}(\sigma) a_{1\sigma(1)} a_{2\sigma(2)} \cdots a_{n\sigma(n)} $$
-
解释:其中 $$\mathbf{A}$$ 表示一个 $$n \times n$$ 的方阵,$$\sigma$$ 表示一个置换,$$S_n$$ 表示所有 $$n$$ 个元素的置换集合,$$\operatorname{sgn}(\sigma)$$ 表示置换 $$\sigma$$ 的符号,$$a_{ij}$$ 表示矩阵 $$\mathbf{A}$$ 中第 $$i$$ 行第 $$j$$ 列的元素,$$\det(\mathbf{A})$$ 表示矩阵 $$\mathbf{A}$$ 的行列式。
使用场景:
-
线性方程组求解:如果一个n阶方阵的行列式不为0,那么这个方阵就是可逆的,也就是说,线性方程组有唯一解。因此,行列式可以用于解决线性方程组的求解问题。
-
线性变换:行列式可以表示线性变换的缩放因子。例如,在平面上,如果一个二维向量经过一个矩阵变换后,其行列式的绝对值大于1,那么这个变换会使向量的长度增加。
-
二次型:行列式可以用于判断二次型的正负性和类别。一个n元二次型的正定、负定、半正定、半负定和不定性质与其矩阵的行列式相关。
-
多元微积分:行列式可以用于计算多元函数的偏导数、雅可比矩阵和海森矩阵等。
-
物理学:行列式可以用于表示物理学中的旋转和变换等,例如,三维空间中的旋转矩阵的行列式恒为1。
-
内积
-
作用:描述两个向量的相似程度。
-
公式: $$ \langle \mathbf{x}, \mathbf{y} \rangle = \sum_{i=1}^n x_i y_i $$
-
解释:其中 $$\mathbf{x}$$ 和 $$\mathbf{y}$$ 表示两个 $$n$$ 维列向量,$$\langle \mathbf{x}, \mathbf{y} \rangle$$ 表示两个向量的内积。
外积
-
作用:描述两个向量所在平面的法向量。
-
公式: $$ \mathbf{x} \times \mathbf{y} = \begin{bmatrix} x_2 y_3 - x_3 y_2 \\ x_3 y_1 - x_1 y_3 \\ x_1 y_2 - x_2 y_1 \end{bmatrix} $$
-
解释:其中 $$\mathbf{x}$$ 和 $$\mathbf{y}$$ 表示两个 $$3$$ 维列向量,$$\mathbf{x} \times \mathbf{y}$$ 表示两个向量的外积。
线性回归
损失函数(平方误差)
-
作用:描述模型预测值与实际值之间的差距。
-
公式: $$ J(\boldsymbol{\theta}) = \frac{1}{2m} \sum_{i=1}^m \left(h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)}) - y^{(i)}\right)^2 $$
-
解释:其中 $$\boldsymbol{\theta}$$ 表示模型的参数向量,$$h_{\boldsymbol{\theta}}(\mathbf{x})$$ 表示模型预测值,$$\mathbf{x}$$ 表示特征向量,$$y$$ 表示实际值,$$m$$ 表示样本数。
梯度下降算法
-
作用:用于求解损失函数的最优解。
-
公式: $$ \boldsymbol{\theta}_{j} := \boldsymbol{\theta}_{j} - \alpha \frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol{\theta}_{j}} $$
-
解释:其中 $$\alpha$$ 表示学习率,$$\frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol{\theta}_{j}}$$ 表示损失函数 $$J(\boldsymbol{\theta})$$ 对参数 $$\boldsymbol{\theta}_{j}$$ 的偏导数。
正则化(L1和L2)
-
作用:防止模型过拟合。
-
公式:
-
L1 正则化: $$ J(\boldsymbol{\theta}) = \frac{1}{2m} \sum_{i=1}^m \left(h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)}) - y^{(i)}\right)^2 + \lambda \sum_{j=1}^n |\boldsymbol{\theta}_j| $$
-
L2 正则化: $$ J(\boldsymbol{\theta}) = \frac{1}{2m} \sum_{i=1}^m \left(h_{\boldsymbol{\theta}}(\mathbf{x}^{(i)}) - y^{(i)}\right)^2 + \lambda \sum_{j=1}^n \boldsymbol{\theta}_j^2 $$
-
-
解释:其中 $$\lambda$$ 表示正则化参数,$$\boldsymbol{\theta}$$ 表示模型的参数向量,$$n$$ 表示参数的个数。L1 正则化和 L2 正则化分别通过 $$|\boldsymbol{\theta}_j|$$ 和 $$\boldsymbol{\theta}_j^2$$ 对模型参数的值进行约束,使得模型的复杂度降低,防止过拟合。
特征缩放
-
作用:将不同特征的取值范围统一,避免某些特征对模型的影响过大。
-
公式: $$ x_j := \frac{x_j - \mu_j}{\sigma_j} $$
-
解释:其中 $$\mu_j$$ 和 $$\sigma_j$$ 分别表示第 $$j$$ 个特征的均值和标准差,$$x_j$$ 表示第 $$j$$ 个特征的值。
多项式回归
-
作用:用于拟合非线性的数据分布。
-
公式: $$ y = \theta_0 + \theta_1 x + \theta_2 x^2 + \cdots + \theta_d x^d $$
-
解释:其中 $$d$$ 表示多项式的阶数,$$\theta_i$$ 表示模型的参数。
Softmax回归
Softmax 函数
-
作用:将 $$K$$ 个类别的预测结果转换为概率值。
-
公式: $$ P(y=k \mid \mathbf{x}) = \frac{e^{\mathbf{w}_k^\top \mathbf{x} + b_k}}{\sum_{j=1}^K e^{\mathbf{w}_j^\top \mathbf{x} + b_j}} $$
-
解释:其中 $$\mathbf{x}$$ 表示输入的特征向量,$$\mathbf{w}_k$$ 和 $$b_k$$ 分别表示第 $$k$$ 个类别的权重向量和偏置项。
交叉熵损失函数(Cross-entropy loss)
-
作用:衡量模型预测值与真实值之间的差距。
-
公式: $$ J(\mathbf{w}, b) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} \log P(y=k \mid \mathbf{x}^{(i)}) $$
-
解释:其中 $$y_k^{(i)}$$ 表示第 $$i$$ 个样本的真实标签是否为第 $$k$$ 类。
梯度下降
-
作用:最小化交叉熵损失函数。
-
公式: $$ \begin{aligned} \mathbf{w} &\leftarrow \mathbf{w} - \alpha \nabla_{\mathbf{w}} J(\mathbf{w}, b) \\ b &\leftarrow b - \alpha \nabla_{b} J(\mathbf{w}, b) \end{aligned} $$
-
解释:其中 $$\alpha$$ 表示学习率,$$\nabla_{\mathbf{w}} J(\mathbf{w}, b)$$ 和 $$\nabla_{b} J(\mathbf{w}, b)$$ 分别表示交叉熵损失函数关于 $$\mathbf{w}$$ 和 $$b$$ 的梯度。梯度下降算法通过迭代更新参数 $$\mathbf{w}$$ 和 $$b$$,最小化损失函数,从而提高模型的准确率。
One-hot 编码
-
作用:将类别标签转换为向量形式,方便计算损失函数。
-
公式: $$ \mathbf{y}_k = [0, 0, \dots, 1, \dots, 0]^\top \in \mathbb{R}^K $$
-
解释:其中 $$1$$ 出现在第 $$k$$ 个位置,表示该样本属于第 $$k$$ 个类别。
Softmax 回归模型预测
-
作用:根据输入特征向量预测样本的类别。
-
公式: $$ \hat{y} = \operatorname{argmax}_{k=1}^K P(y=k \mid \mathbf{x}) $$
-
解释:其中 $$\hat{y}$$ 表示模型的预测结果,$$\operatorname{argmax}_{k=1}^K$$ 表示选择使得概率值最大的 $$k$$。
正则化
-
作用:防止模型过拟合。
-
公式: $$ J(\mathbf{w}, b) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} \log P(y=k \mid \mathbf{x}^{(i)}) + \frac{\lambda}{2} \|\mathbf{w}\|^2 $$
-
解释:其中 $$\lambda$$ 表示正则化系数,$$\|\mathbf{w}\|^2$$ 表示 $$\mathbf{w}$$ 的二范数平方,用于惩罚权重向量的大小。正则化的目的是减少模型的复杂度,提高模型的泛化能力。
多层感知机
全连接层
-
作用:对输入向量进行仿射变换,并应用激活函数。
-
公式: $$ \mathbf{y} = \phi(\mathbf{W} \mathbf{x} + \mathbf{b}) $$
-
解释:其中 $$\mathbf{x}$$ 和 $$\mathbf{y}$$ 分别是输入和输出向量,$$\mathbf{W}$$ 是权重矩阵,$$\mathbf{b}$$ 是偏置向量,$$\phi$$ 是激活函数。多层感知机中的隐藏层通常采用全连接层实现。
Dropout
-
作用:减少过拟合。
-
公式: 无。
-
解释:该函数在训练过程中随机丢弃部分神经元,以此减少模型对某些输入的依赖,从而防止过拟合。
损失函数:均方误差(Mean Squared Error, MSE)
-
作用:衡量模型输出与真实标签之间的差距。
-
公式: $$ \mathrm{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 $$
-
解释:其中 $$y_i$$ 是第 $$i$$ 个样本的真实标签,$$\hat{y}_i$$ 是模型对第 $$i$$ 个样本的预测值,$$n$$ 是样本数量。
激活函数
Sigmoid函数
-
作用:将输入压缩到(0,1)之间,常用于二分类问题。
-
公式: $$f(x) = \frac{1}{1+e^{-x}}$$
-
解释:Sigmoid函数具有良好的可解释性和可微性,但它在输入较大或较小的情况下会出现梯度消失的问题,而且输出不是以0为中心的。
SiLU函数
-
作用:Sigmoid Linear Unit, 对于输入$$x$$,输出为x乘以sigmoid函数值$$σ(x)$$。
-
公式: $$f(x) = x \cdot \sigma(x)$$ 其中,$$\sigma(x) = \frac{1}{1+e^{-x}}$$ 是sigmoid函数。
-
解释:SiLU函数是一种非线性激活函数,通过结合sigmoid函数和线性函数,它在正值区域具有不饱和性,同时在负值区域允许小的负激活。SiLU函数的特点是在输入值较小或较大时,函数的输出会趋于0或输入本身,这使得它在训练神经网络时能够更好地缓解梯度消失和梯度爆炸的问题,并提升模型的性能。SiLU函数在某些任务上相对于其他激活函数可能表现出更好的性能。
Softmax函数
-
作用:将多个输入压缩到(0,1)之间并归一化,通常用于多分类问题。给定一个向量 $$\mathbf{z} = [z_1, z_2, ..., z_K]$$,softmax函数将这个向量转换为另一个向量 $$\mathbf{p} = [p_1, p_2, ..., p_K]$$,其中每个 $$p_i$$ 可以被解释为类别 $$i$$ 的概率。
-
公式: $$ p_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} $$
-
解释:这里,$$e$$ 是自然对数的底(大约等于2.71828),$$z_i$$ 是输入向量 $$\mathbf{z}$$ 的第 $$i$$ 个元素,而 $$p_i$$ 是输出向量 $$\mathbf{p}$$ 的第 $$i$$ 个元素,表示类别 $$i$$ 的概率。
-
性质
-
**归一化**:softmax函数确保输出向量的所有元素和为1,即 $$\sum_{i=1}^{K} p_i = 1$$。这一性质使得输出可以直接解释为概率分布。
-
**单调性**:softmax函数在每个输入元素上都是单调增加的,这意味着输入值越大,对应的输出概率也越大。
-
**对极大值敏感**:当输入向量中的一个值远大于其他值时,softmax函数倾向于将概率集中在该值上。例如,如果 $$\mathbf{z} = [1, 2, 9]$$,则 $$\mathbf{p}$$ 会非常接近 $$[0, 0, 1]$$,因为9远大于1和2。
-
**数值稳定性**:在实际计算中,直接计算 $$e^{z_i}$$ 可能会导致数值溢出,特别是在 $$z_i$$ 很大时。为了解决这个问题,通常会先从每个 $$z_i$$ 中减去 $$\max(z_1, z_2, ..., z_K)$$,这样可以防止数值溢出,同时不改变输出向量的相对比例。修改后的公式如下:
$$ p_i = \frac{e^{z_i - \max(z_1, z_2, ..., z_K)}}{\sum_{j=1}^{K} e^{z_j - \max(z_1, z_2, ..., z_K)}} $$
-
GELU函数
-
作用:GELU(Gaussian Error Linear Unit)是一种用于神经网络的激活函数。
-
公式:$$f(x) = x * P(X <= x)$$
-
解释:其中$$P(X <= x)$$是高斯分布的概率密度函数。GELU函数可以看作是对输入x乘以一个随机变量,该随机变量服从标准正态分布。这意味着对于每个输入x,GELU函数的输出是x与一个随机值的乘积的期望值。GELU函数具有非线性特性,并且在所有点上都是可微的,这使得它可以在反向传播中有效地使用。此外,GELU函数在训练过程中能够增加模型的非线性能力,从而提高模型的性能。
Tanh函数
-
作用:将输入压缩到(-1,1)之间,通常用于多分类和回归问题。
-
公式: $$f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$$
-
解释:Tanh函数是一种比Sigmoid函数更广泛使用的激活函数,它具有输出以0为中心的特性,但同样存在梯度消失的问题。
ReLU函数
-
作用:将输入的负数部分设为0,保留正数部分。
-
公式: $$f(x) = \max(0, x)$$
-
解释:ReLU函数是一种简单有效的激活函数,它在训练过程中可以加速收敛,并且避免了梯度消失的问题。但是,ReLU函数在输入为负数时会出现神经元失活的问题。
LeakyReLU函数
-
作用:修正ReLU函数在负数部分的失活问题。
-
公式: $$f(x) = \max(\alpha x, x)$$
-
解释:LeakyReLU函数与ReLU函数类似,但是它在输入为负数时不会完全截断,而是乘以一个小的斜率,通常取值为0.01。
PReLU函数
-
作用:对于输入x,当x>0时,输出为x;当x<=0时,输出为ax(其中a为一个可学习的参数)。
-
公式: $$f(x) = \begin{cases}x, & \text{if}\ x>0 \\ ax, & \text{otherwise} \end{cases}$$
-
解释:PReLU函数是一种类似于Leaky ReLU函数的激活函数,但它将负半轴上的斜率变为可学习的参数,能够更好地拟合数据。但PReLU函数的计算成本较高,而且在某些情况下容易过拟合。
ELU函数
-
作用:修正ReLU函数的失活问题,并且在输入为负数时具有平滑的输出。
-
公式: $$f(x) = \begin{cases}x, & \text{if}\ x>0 \\ a(e^x-1), & \text{otherwise} \end{cases}$$
-
解释:ELU函数是一种类似于Leaky ReLU函数的激活函数,但它在负半轴上具有非零的导数,能够缓解梯度消失的问题。此外,ELU函数在某些任务中比ReLU函数表现更好。ELU函数具有ReLU函数的优点,并且在输入为负数时具有平滑的输出,因此可以缓解神经元失活的问题。但是,ELU函数的计算成本较高,因为需要计算指数函数。
SwiGLU函数
-
作用:SwiGLU(Swish-based Gated Linear Unit)是一种为神经网络设计的激活函数,它结合了Swish激活函数和门控线性单元(GLU)的特性,旨在提高模型的性能。
-
公式:$$f(x) = x * \text{sigmoid}(\beta x)$$
-
解释:其中,$$\beta$$ 是一个可学习的参数或固定的超参数。SwiGLU的设计灵感来源于Swish激活函数和GLU。Swish函数是一个自门控的激活函数,它在各种深度学习任务中显示出了优秀的性能。而GLU则使用了一个门控机制来控制信息的流动。SwiGLU结合了这两者的优点,使用一个sigmoid门来控制输入x的通过量。
-
与ReLU等传统激活函数相比,SwiGLU能够在负输入值上产生非零输出,这有助于减少“死亡ReLU”问题,并提高模型的表达能力。同时,由于sigmoid门的存在,SwiGLU能够为模型增加非线性特性,使其能够更好地学习和逼近复杂的函数关系。
-
Maxout函数
-
作用:将输入分成若干组,然后对每组进行线性变换,最后取每组中的最大值作为输出。
-
公式: $$f(x) = \max_{i=1,\ldots,k}(w_{i}^T x + b_i)$$
-
解释:Maxout函数是一种通用的激活函数,可以表示ReLU、Leaky ReLU和绝对值函数等多种激活函数。Maxout函数的主要优点是具有更强的表达能力和更强的鲁棒性,但计算量较大。
卷积神经网络
卷积层
-
作用:对输入的图像进行卷积操作,提取特征。
-
公式: $$y_{i,j,k} = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}\sum_{c=0}^{C-1} w_{m,n,c,k}x_{i+m,j+n,c} + b_k$$
-
解释:卷积层是卷积神经网络中的核心层,通过滑动窗口对输入图像进行卷积操作,提取图像的特征。卷积操作可以用一个大小为 $$M\times N$$ 的滤波器来描述,卷积层通常还包括偏置项和激活函数。
池化层
-
作用:对输入的特征图进行下采样操作,减少参数数量和计算量。
-
公式: $$y_{i,j,k} = \max_{m=0}^{M-1}\max_{n=0}^{N-1} x_{i\times s+m,j\times s+n,k}$$
-
解释:池化层是卷积神经网络中常用的下采样方法之一,它可以对输入的特征图进行下采样操作,从而减少参数数量和计算量。池化层通常包括一个大小为 $$M\times N$$ 的池化窗口和一个步长 $$s$$。
池化函数
-
作用:缩小特征图的大小,减少计算量。
-
公式: $$y_{i,j} = f(\{x_{i+k,j+l}\})$$
-
解释:池化函数是一种常用的用于缩小特征图大小的函数。通过将特征图中的一块区域转换为一个单独的值,可以减少计算量并且增加模型的鲁棒性。
批归一化层
-
作用:对神经网络的中间层输出进行标准化,提高训练效果和泛化能力。
-
公式: $$\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$$
-
解释:批归一化层是一种常用的正则化方法,它可以对神经网络的中间层输出进行标准化,从而提高训练效果和泛化能力。批归一化层通常在每个小批量数据上计算均值和方差,然后对输出进行标准化,最后通过缩放和平移操作来恢复输出的尺度和偏移。
学习率衰减函数
-
作用:控制神经网络训练过程中学习率的衰减。
-
公式: $$\eta_t = \eta_0 \times \frac{1}{1 + d \times t}$$
-
解释:学习率衰减函数是一种常用的调整神经网络学习率的方法。通过在训练过程中逐渐减小学习率,可以使神经网络在接近最优点时更加稳定。
卷积核初始化函数
-
作用:初始化神经网络卷积核的权重。
-
公式: $$w_{i,j} \sim N(0,\sqrt{\frac{2}{n_i n_j}})$$
-
解释:卷积核初始化函数是一种常用的初始化神经网络卷积核权重的方法。通过从一个均值为0、方差为 $$\sqrt{\frac{2}{n_i n_j}}$$ 的正态分布中随机采样,可以使卷积核的权重在初始化时更加稳定。其中 $$n_i$$ 和 $$n_j$$ 分别表示卷积核的输入通道数和输出通道数。
残差网络(ResNet)
残差网络
-
作用:训练深度神经网络。
-
公式: $$y = F(x) + x$$
-
解释:残差网络通过将神经网络分为多个残差块来提高模型的深度。通过跳跃连接,残差网络可以更好地学习特征并且防止梯度消失和梯度爆炸等问题。
残差块函数
-
作用:学习残差映射。
-
公式: $$y = F(x, \{W_i\}) + x$$
-
解释:残差块函数是残差网络的基本单元。它包含了一个残差映射函数$$F$$和一个跳跃连接,即将输入$$x$$直接添加到残差映射函数的输出中。通过使用残差块函数,可以避免由于神经网络深度过大而导致的梯度消失和梯度爆炸等问题。
前馈残差网络
-
作用:引入前馈机制,提高模型的表达能力。
-
公式: $$y = F(x, \{W_i\}) + G(x, \{V_i\})$$
-
解释:前馈残差网络是一种改进版的残差网络,它通过引入前馈机制来提高模型的表达能力。前馈残差网络包含两个残差映射函数$$F$$和$$G$$,分别用于学习低层和高层的特征。同时,前馈残差网络还包含一个交错连接,用于将低层和高层的特征进行组合。
循环神经网络
循环神经网络(Recurrent Neural Network,RNN)
-
作用:用于处理序列数据,将当前时刻的输入和上一时刻的输出相结合,计算当前时刻的输出。
-
公式:
-
$$ h_t = \phi(W_{xh}x_t + W_{hh}h_{t-1} + b_h) $$
-
$$ y_t = \mathrm{softmax}(W_{hy}h_t + b_y) $$
其中,$$x_t$$为当前时刻的输入,$$h_t$$为当前时刻的输出,$$h_{t-1}$$为上一时刻的输出,$$W_{xh}$$、$$W_{hh}$$、$$W_{hy}$$为可训练的权重矩阵,$$b_h$$、$$b_y$$为可训练的偏置向量,$$\phi$$为激活函数,一般使用tanh或ReLU。
-
Simple RNN
-
作用:简单的循环神经网络。
-
公式:
-
$$ h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t + b_h) $$
-
$$ y_t = W_{hy}h_t + b_y $$
-
-
解释:这是最基本的循环神经网络模型,每个时间步的隐藏状态 $$h_t$$ 是通过前一个时间步的隐藏状态 $$h_{t-1}$$、当前输入 $$x_t$$、和对应的权重矩阵 $$W_{hh}$$、$$W_{xh}$$ 计算得到的。最后的输出 $$y_t$$ 是通过将当前时间步的隐藏状态 $$h_t$$ 乘以权重矩阵 $$W_{hy}$$ 并加上偏置 $$b_y$$ 计算得到的。
LSTM
-
作用:长短期记忆网络。
-
公式: \begin{aligned} f_t &= \sigma(W_f[h_{t-1}, x_t] + b_f) \\ i_t &= \sigma(W_i[h_{t-1}, x_t] + b_i) \\ \tilde{C}_t &= \tanh(W_C[h_{t-1}, x_t] + b_C) \\ C_t &= f_t \odot C_{t-1} + i_t \odot \tilde{C}_t \\ o_t &= \sigma(W_o[h_{t-1}, x_t] + b_o) \\ h_t &= o_t \odot \tanh(C_t) \end{aligned}
-
解释:LSTM 网络包含一个记忆单元 $$C_t$$ 和一个输出门 $$o_t$$,它们通过门控机制调节信息的流动。在每个时间步 $$t$$,输入 $$x_t$$ 和前一个时间步的隐藏状态 $$h_{t-1}$$ 会被用来计算四个门:遗忘门 $$f_t$$、输入门 $$i_t$$、输出门 $$o_t$$ 和新候选记忆单元 $$\tilde{C}_t$$。根据这些门的值,我们可以更新记忆单元 $$C_t$$ 和隐藏状态 $$h_t$$。
注意力机制
缩放点积注意力 (Scaled Dot-Product Attention)
-
作用:计算查询和键之间的注意力分数,并在值上执行加权和。
-
公式: $$\text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$$
-
解释:$$Q$$, $$K$$, $$V$$ 分别代表查询、键和值,$$d_k$$ 是键向量的维度,$$\text{softmax}$$ 函数将注意力分数标准化,即使得所有分数之和为 1。 在计算点积时,Scaled Dot-Product Attention 对结果进行缩放,以避免点积结果过大。缩放因子是查询向量的维度的平方根。这种缩放可以确保点积结果的大小不会受到查询向量的维度的影响,并且使得梯度在反向传播过程中更加稳定。
-
举例: 假设我们要将中文句子 "猫在垫子上" 翻译成英文,我们希望模型能够注意到 "猫" 和 "垫子" 是名词,并且它们之间有一个关系。我们可以将输入句子表示为三个矩阵:$$Q$$、$$K$$和$$V$$,这些矩阵分别代表查询(Query)、键(Key)和值(Value)。 在这个例子中,我们可以将输入句子表示为以下三个矩阵:
-
$$Q$$矩阵表示要查询的内容,它可以是源语言句子或目标语言句子的一部分。在这里,我们可以将Q矩阵设置为形状为$$(1, 4, d_m)$$的矩阵,其中$$d_m$$是Transformer模型的嵌入维度。
$$ Q = [[猫, 在, 垫子, 上]] $$ 其shape为 $$ (1, 4, d_m) $$
-
$$K$$矩阵包含键(Key)的表示,用于计算$$Q$$与其他所有项之间的相似度。在这里,我们可以将K矩阵设置为与$$Q$$矩阵相同的形状。
$$ K = [[猫, 在, 垫子, 上]] $$ 其shape为 $$ (1, 4, d_m) $$
-
$$V$$矩阵包含每个键(Key)的值(Value)的表示,用于计算注意力的输出。在这里,我们可以将$$V$$矩阵设置为形状为 $$(1, 4, d_m)$$ 的矩阵,其中每个单词都被嵌入为$$d_m$$维向量。
$$ V = [[embedding(猫), embedding(在), embedding(垫子), embedding(上)]] $$ 其shape为 $$ (1, 4, d_m) $$
通过将这三个矩阵输入到Attention方法中,我们可以计算出注意力权重,该权重将告诉模型哪些单词是最重要的,并应该在翻译中得到更多的关注。然后,我们可以使用注意力权重对值(Value)矩阵进行加权,以获得最终的注意力输出。
-
多头注意力 (Multi-Head Attention)
-
作用:将注意力机制运用于多个线性映射后的特征空间,增强模型对不同特征子空间的表达能力。
-
公式: $$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, ..., \text{head}_n)W^O$$
-
解释:$$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$ 是第 $$i$$ 个注意力头,$$W_i^Q$$, $$W_i^K$$ 和 $$W_i^V$$ 分别是查询、键和值的线性变换矩阵,$$W^O$$ 是将所有注意力头拼接后进行的线性变换矩阵。
自注意力 (Self-Attention)
-
作用:在一个序列中计算每个元素之间的注意力分数,增强模型对序列内部信息的表达能力。
-
公式: $$\text{SelfAttention}(X) = \text{MultiHead}(X, X, X)$$
-
解释:$$X$$ 是序列,$$\text{MultiHead}$$ 是对序列中所有元素进行的注意力机制。
Sinusoidal位置编码
-
作用:在Transformer模型中,为输入序列的每个位置提供一个独特的向量表示,以使得模型能够理解输入元素在序列中的位置信息。
-
公式:
-
$$PE(pos,2i) = sin(pos/10000^{2i/d_{model}})$$
-
$$PE(pos,2i+1) = cos(pos/10000^{2i/d_{model}})$$
其中,$$pos$$ 表示位置,$$d_{model}$$ 代表embedding的维度,$$2i,2i+1$$ 代表的是embedding不同位置的索引。
-
-
解释:Sinusoidal位置编码是一种绝对位置编码方法,通过正弦和余弦函数为每个位置生成一个独特的编码。这些编码的波长呈几何级数排列,使得每个位置的编码都是独特的。同时,由于正弦和余弦函数的周期性特性,不同位置之间的编码关系是连续且平滑的。这种连续和平滑的关系允许模型学习位置之间的相对关系,而不仅仅是各自的绝对位置。因此,Sinusoidal位置编码帮助Transformer模型在处理序列数据时有效地捕获位置信息。
RoPE (Rotary Position Embedding) 位置编码
-
作用:为Transformer模型提供一种有效的位置编码方式,以更好地捕获序列中元素之间的相对位置关系,并提高模型性能。
-
方法:通过旋转矩阵的方式构建绝对位置编码表示相对位置,有效地改善了传统位置编码不能很好地捕捉相对位置的问题。
-
公式:RoPE位置编码的公式涉及复数计算和矩阵乘法。给定一个角度θ和一个位置嵌入向量p,RoPE位置编码通过以下公式计算:
$$RoPE(p, θ) = p * exp(j * θ * pos)$$
其中$$j$$是虚数单位,$$pos$$是位置索引。该公式使用复数形式的指数函数来计算位置嵌入的旋转。
-
解释:RoPE是一种基于旋转的位置编码方法,通过使用旋转矩阵来表示不同位置之间的关系。这种方法允许模型更好地学习和理解序列中元素之间的相对位置,从而提高了模型的性能。与传统的位置编码方法相比,RoPE具有更好的扩展性和灵活性,能够适应不同长度的输入序列。RoPE位置编码通过引入复数计算和矩阵乘法,为Transformer模型提供了一种新的、有效的位置编码方式,以更好地捕获序列中元素之间的相对位置关系,并提高模型性能。
优化器
Adam优化器
-
作用:自适应地调整学习率,加速训练过程,防止过拟合,并提高模型性能。
-
公式:
-
一阶矩估计(梯度均值):$$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$$
-
\(m_t\):一阶矩估计(梯度均值)在时刻t的值。它表示了到当前时刻为止,所有梯度值的加权平均值。
-
\(\beta_1\):一阶矩估计的指数衰减率。它控制了一阶矩估计的更新速度,值越接近1表示更新越慢,越接近0表示更新越快。
-
-
二阶矩估计(梯度平方均值):$$v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$$
-
\(g_t\):时刻t的梯度值。它是损失函数关于模型参数的偏导数。
-
\(v_t\):二阶矩估计(梯度平方均值)在时刻t的值。它表示了到当前时刻为止,所有梯度平方值的加权平均值。
-
\(\beta_2\):二阶矩估计的指数衰减率。它控制了二阶矩估计的更新速度,值越接近1表示更新越慢,越接近0表示更新越快。
-
-
偏差修正后的一阶矩估计:$$m̂_t =\frac{m_t}{1-\beta_1^t}$$
-
\(\hat{m}_t\):偏差修正后的一阶矩估计。由于一阶矩估计在初始阶段偏向于0,因此通过除以\(1-\beta_1^t\)来进行修正,以减轻初始偏差的影响。
-
-
偏差修正后的二阶矩估计:$$v̂_t =\frac{v_t}{1-\beta_2^t}$$
-
\(\hat{v}_t\):偏差修正后的二阶矩估计。与一阶矩估计类似,通过除以\(1-\beta_2^t\)来进行修正。
-
-
参数更新:$$\theta_t = \theta_{t-1} - \alpha \frac{m̂_t}{\sqrt{v̂_t}+\epsilon}$$
-
\(\theta_t\):时刻t的模型参数值。它是待优化的变量,通过不断更新来最小化损失函数。
-
\(\alpha\):学习率。它控制了参数更新的步长大小,较大的学习率可能导致模型在训练过程中震荡,而较小的学习率可能导致训练过程缓慢。
-
\(\epsilon\):一个很小的正数,用于防止分母为零的情况,通常取值为\(10^{-8}\)。
-
-
-
解释:Adam优化器结合了动量优化、学习率衰减和归一化梯度等技巧。通过维护每个权重的一阶梯度和二阶梯度的指数加权移动平均数,它能够自适应地完成动量更新和学习率更新。Adam优化器在训练初期使用较大的学习率来快速收敛,同时在训练后期使用较小的学习率来精细调整模型参数,从而加速训练过程并防止过拟合。此外,Adam还具有较好的稳定性和泛化性能。
RMSprop优化器
-
作用:自适应地调整学习率,处理各种网络环境,并使模型在训练时更加鲁棒。
-
公式:
-
缓存:$$E[g^2]_t = 0.9 E[g^2]_{t-1} + 0.1 g_t^2$$
-
\(E[g^2]_t\):时刻t的梯度平方的指数加权移动平均值。它用于估计每个参数的历史梯度平方的均值。
-
\(g_t\):时刻t的梯度值。
-
-
更新:$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^4]_t + \epsilon}} g_t$$
-
\(\theta_{t+1}\):时刻t+1的模型参数值。
-
\(\eta\):全局学习率。它决定了参数更新的步长大小。
-
\(\epsilon\):一个很小的正数,用于防止分母为零的情况,通常取值为\(10^{-8}\)。
-
-
-
解释:RMSprop试图解决Adagrad学习率急剧下降的问题。与Adagrad不同,RMSprop使用指数衰减平均来丢弃遥远的历史,使其能够在找到凸碗结构后快速收敛。
Adagrad优化器
-
作用:对学习率进行自适应约束,对稀疏数据有很好的表现。
-
公式:
-
累计平方梯度:$$G_t = G_{t-1} + g_t^2$$
-
\(G_t\):到时刻t为止的梯度平方的累积和。它用于估计每个参数的历史梯度平方的总和。
-
-
更新:$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t$$
-
\(\theta_{t+1}\):时刻t+1的模型参数值。
-
\(\eta\):全局学习率。
-
\(\epsilon\):一个很小的正数,用于防止分母为零的情况。
-
-
-
解释:Adagrad为每个参数提供不同的学习率,这取决于到目前为止看到的梯度。这意味着对于稀疏数据和在线学习场景,Adagrad可以表现得非常好。但由于累积了所有过去的梯度平方,学习率可能会变得非常小。
Adadelta优化器
-
作用:解决Adagrad学习率单调下降的问题。
-
公式:
-
累计平方梯度:$$E[g^2]_t = \gamma E[g^4]_{t-1} + (1-\gamma) g_t^2$$
-
\(E[g^2]_t\):时刻t的梯度平方的指数加权移动平均值。它用于估计每个参数的历史梯度平方的均值。
-
\(\gamma\):指数衰减率,决定了对历史梯度信息的遗忘速度。
-
-
更新:$$\Delta \theta_t = -\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t$$
-
\(\Delta \theta_t\):时刻t的参数更新量。
-
\(\eta\):全局学习率。
-
-
-
解释:Adadelta是对Adagrad的扩展,旨在解决其学习率单调下降的问题。与Adagrad和RMSprop一样,Adadelta自适应地将学习率调整到每个维度,但不需要手动设置全局学习率。
归一化
RMSNorm
-
作用:归一化神经网络层的激活,以改进训练的稳定性和收敛速度。
-
公式: $$RMSNorm(x) = \gamma \cdot \frac{x}{\sqrt{\sigma^2(x) + \epsilon}} + \beta$$
其中,$$\gamma$$ 和 $$\beta$$ 是可学习的参数,$$\sigma^2(x)$$ 是 $$x$$ 的方差,$$\epsilon$$ 是一个小的常数,用于防止分母为零。
-
解释:RMSNorm 是一种归一化技术,它根据输入 $$x$$ 的方差来调整其尺度。这有助于使神经网络的激活在不同的层之间保持一致的分布,从而提高训练的稳定性和效率。
LayerNorm
-
作用:在深度学习中用于归一化神经网络层的激活值,以促进训练过程的稳定性和收敛速度。
-
公式: $$LayerNorm(x) = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta$$
其中,$$\gamma$$ 和 $$\beta$$ 是可学习的参数,$$\mu$$ 和 $$\sigma^2$$ 分别是 $$x$$ 的均值和方差,$$\epsilon$$ 是一个小的常数,用于防止分母为零。
-
解释:LayerNorm 是一种层归一化技术,它通过对神经网络的激活值进行归一化来改进训练的稳定性和收敛速度。与BatchNorm不同,LayerNorm是在每个样本的最后一个维度上计算均值和方差,而不是在批次维度上。这使得LayerNorm适用于循环神经网络(RNN)和Transformer等模型,其中批次大小可能不固定或很小。
BatchNorm (Batch Normalization)
-
作用:对神经网络的每一批数据进行归一化处理,以解决内部协变量偏移问题,加速训练过程,提高模型稳定性。
-
公式: $$BatchNorm(x) = \gamma \cdot \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} + \beta$$
其中,$$x$$ 是输入数据,$$\mu_B$$ 和 $$\sigma_B$$ 分别是批量数据的均值和方差,$$\gamma$$ 和 $$\beta$$ 是可学习的缩放和偏移参数,$$\epsilon$$ 是一个小的常数,用于防止分母为零。
-
解释:BatchNorm 是一种批量归一化技术,通过对每一批数据的激活值进行归一化处理,使得神经网络的每一层输出都保持相近的分布。这有助于缓解梯度消失或梯度爆炸问题,加速训练过程,并提高模型的泛化能力。同时,BatchNorm 还允许使用更高的学习率,进一步提高训练速度。