Bootstrap

机器学习/算法工程师面试题目与答案-数学基础部分


请添加图片描述

一、数学基础

1、微积分

SGD,Momentum,Adagard,Adam原理

  • SGD
    -原理: SGD 是最简单的优化方法之一,它通过计算损失函数相对于参数的梯度来更新模型的参数。每次更新时,SGD 选择一个随机的样本或一小批样本来计算梯度,而不是整个数据集的梯度,这样可以显著减少计算成本。
    -更新规则: θ = θ − η ∇ θ J ( θ ; x ( i ) , y ( i ) ) \theta = \theta - \eta \nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}) θ=θηθJ(θ;x(i),y(i)), 其中, η \eta η 是学习率

  • Momentum
    -Momentum 方法借鉴了物理中的动量概念,帮助SGD在相关方向上加速SGD并抑制震荡,通过引入“惯性”来更快地收敛。
    -更新规则:引入变量 𝑣 代表动量,更新规则为 v ← γ v + η ∇ θ J ( θ ) v \leftarrow \gamma v + \eta \nabla_{\theta} J(\theta) vγv+ηθJ(θ), 然后 θ ← θ − v \theta \leftarrow \theta - v θθv, 其中, η \eta η 是学习率, γ \gamma γ 是动量系数,通常设置为接近 1 的值(例如 0.9)以保持之前梯度的贡献。

  • Adagard
    -原理: Adagrad 自适应地调整每个参数的学习率,对于出现频率较低的特征给予更大的学习率,适合处理稀疏数据。
    -更新规则: θ = θ − η G t + ϵ ⊙ ∇ θ J ( θ ) \theta = \theta - \frac{\eta}{\sqrt{G_t + \epsilon}} \odot \nabla_{\theta} J(\theta) θ=θGt+ϵ ηθJ(θ), 其中, η \eta η 是初始学习率, ϵ \epsilon ϵ 是一个很小的数(例如 1 0 − 8 10^{-8} 108)以避免除以零, G t G_t Gt 是一个对角矩阵,其对角线元素等于参数的梯度平方的累积,即 G t = G t − 1 + ∇ θ J ( θ ; x ( i ) , y ( i ) ) ⊗ ∇ θ J ( θ ; x ( i ) , y ( i ) ) G_t = G_{t-1} + \nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}) \otimes \nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}) Gt=Gt1+θJ(θ;x(i),y(i))θJ(θ;x(i),y(i))

  • Adam
    -原理: Adam(Adaptive Moment Estimation)结合了Momentum和RMSprop(一种自适应学习率方法)的思想,不仅考虑了梯度的一阶矩估计(即均值,Momentum)也考虑了二阶矩估计(即未根号的方差,RMSprop)。
    -更新规则: Adam 更新规则复杂一些,包括偏差校正和自适应学习率。主要步骤为计算梯度的一阶矩和二阶矩的指数移动平均,然后对这些矩估计进行偏差校正,最后用校正后的值更新参数。即:
    First Moment Estimation: m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ θ J ( θ ; x ( i ) , y ( i ) ) m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}) mt=β1mt1+(1β1)θJ(θ;x(i),y(i))
    Second Moment Estimation: v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ θ J ( θ ; x ( i ) , y ( i ) ) ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla_{\theta} J(\theta; x^{(i)}, y^{(i)}))^2 vt=β2vt1+(1β2)(θJ(θ;x(i),y(i)))2
    Bias Correction: m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1β1tmt, v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1β2tvt (由于 m t , v t m_t,v_t mt,vt是从初始化为0的向量开始的,它们会偏向于0,特别是在初始阶段。因此,需要进行偏差修正,以得到更准确的估计。)
    参数更新: θ = θ − η v ^ t + ϵ m ^ t \theta = \theta - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t θ=θv^t +ϵηm^t
    其中, η \eta η 是学习率, β 1 \beta_1 β1 β 2 \beta_2 β2 是衰减率通常分别设为 0.9 和 0.999, ϵ \epsilon ϵ 是一个很小的数(例如 1 0 − 8 10^{-8} 108),以避免除以零的情况。

L1不可导的时候该怎么办

L1 正则化由于在 θ = 0 \theta=0 θ=0 处不可导,常常在优化过程中带来问题。解决这个问题的常用方法是使用次梯度(subgradient)方法:

  • 次梯度: 在不可导点,L1正则化的次梯度可以定义为符号函数,即 sgn( θ \theta θ), 当 θ ≠ 0 \theta \neq 0 θ=0 时,有 sgn ⁡ ( θ ) = θ ∣ θ ∣ \operatorname{sgn}(\theta) = \frac{\theta}{|\theta|} sgn(θ)=θθ, 当 θ = 0 \theta = 0 θ=0 时,次梯度的取值范围为 [ − 1 , 1 ] [-1, 1] [1,1]

sigmoid函数特性

Sigmoid 函数定义为: σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
该函数具有以下特性:

  • 输出范围:Sigmoid 函数的输出始终在 ( 0 , 1 ) (0, 1) (0,1) 之间,适用于将任意实数映射到概率区间,常用于二分类问题。

  • S 形曲线:Sigmoid 函数是一个 S 形的曲线,能够从 0 平滑过渡到 1

  • 非线性:作为一个非线性函数,Sigmoid 可用于神经网络中的激活函数,帮助网络学习复杂的模式。

  • 导数:Sigmoid 函数的导数可以用其自身表示: σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x)(1 - \sigma(x)) σ(x)=σ(x)(1σ(x)),这一性质使得在梯度计算中非常方便。

  • 饱和性:当输入 x x x 非常大或非常小时,Sigmoid 函数的导数接近于 0,可能导致梯度消失问题,这会使得网络训练中的权重更新非常缓慢。

  • 虽然 Sigmoid 函数在早期的神经网络模型中被广泛使用,但由于易于饱和和梯度消失的问题,现代深度学习通常更倾向于使用 ReLU 及其变种作为激活函数。

2、统计学,概率论

求 Max(a, b) 期望

a,b~U[0,1],互相独立,求Max(a,b)期望
a , b a, b a,b 独立且均匀分布于 [ 0 , 1 ] [0, 1] [0,1]。设 Z = max ⁡ ( a , b ) Z = \max(a, b) Z=max(a,b)。概率 P ( Z ≤ z ) P(Z \leq z) P(Zz) 表示 a ≤ z a \leq z az b ≤ z b \leq z bz 的概率,因为 a a a b b b 独立,所以: P ( Z ≤ z ) = P ( a ≤ z ) P ( b ≤ z ) = z 2 P(Z \leq z) = P(a \leq z)P(b \leq z) = z^2 P(Zz)=P(az)P(bz)=z2
概率密度函数 f Z ( z ) f_Z(z) fZ(z) P ( Z ≤ z ) P(Z \leq z) P(Zz) 的导数: f Z ( z ) = 2 z f_Z(z) = 2z fZ(z)=2z
期望 E ( Z ) E(Z) E(Z) 为: E ( Z ) = ∫ 0 1 z ⋅ 2 z   d z = 2 ∫ 0 1 z 2   d z = 2 ⋅ 1 3 = 2 3 E(Z) = \int_0^1 z \cdot 2z \, dz = 2 \int_0^1 z^2 \, dz = 2 \cdot \frac{1}{3} = \frac{2}{3} E(Z)=01z2zdz=201z2dz=231=32

拿更长的玫瑰花的最好策略

一个活动,n个女生手里拿着长短不一的玫瑰花,无序的排成一排,一个男生从头走到尾,试图拿更长的玫瑰花,一旦拿了一朵就不能再拿其他的,错过了就不能回头,问最好的策略?
最优策略通常是“分段选择法”。具体地,可以设定一个阈值,例如只在前 k k k 朵中观察而不选择,然后从第 k + 1 k+1 k+1 朵开始,选择第一朵比之前所有 k k k 朵都要长的玫瑰花。这里 k k k 的最优选择通常依赖于总数 n n n 的一个函数,如 k ≈ n / e k \approx n/e kn/e

最大化工作天数的员工数

问题:某大公司有这么一个规定:只要有一个员工过生日,当天所有员工全部放假一天。但在其余时候,所有员工都没有假期,必须正常上班。这个公司需要雇用多少员工,才能让公司一年内所有员工的总工作时间期望值最大?
这个问题可以转化为求解最大化非休息天数的期望值。每个员工生日独立,每天有员工过生日的概率是 1 − ( 364 / 365 ) n 1 - (364/365)^n 1(364/365)n。总工作天数的期望值是 365 × k × ( 364 / 365 ) n 365\times k \times (364/365)^n 365×k×(364/365)n。通过求导找到此函数的最大值即可,求导设为0,得求解得到答案为365。

切比雪夫不等式

切比雪夫不等式提供了任意随机变量 X X X 的概率上界,其数学形式是:
P ( ∣ X − μ ∣ ≥ k σ ) ≤ 1 k 2 P(|X - \mu| \geq k\sigma) \leq \frac{1}{k^2} P(Xμ)k21
其中 μ \mu μ X X X 的均值, σ \sigma σ 是标准差, k k k 是任意正数。

随机截成三段组成三角形的概率

一根绳子,随机截成3段,可以组成一个三角形的概率有多大
这个经典问题的答案是 1 4 \frac{1}{4} 41。简单解释是,只有当三段中的每一段都小于另外两段之和时,才能形成三角形。在均匀随机切割的情况下,这一条件的概率是 1 4 \frac{1}{4} 41

最大似然估计和最大后验概率的区别

最大似然估计和最大后验概率的区别?
最大似然估计(MLE):估计参数以最大化观测数据的似然函数。
最大后验概率(MAP):除了似然函数,还考虑了参数的先验分布,估计参数以最大化后验概率

什么是共轭先验分布

在贝叶斯分析中,如果后验分布和先验分布属于同一类分布族,则称这两个分布为共轭分布。共轭先验使得数学处理和分析变得更加简便。

概率和似然的区别

概率:描述了在给定参数的情况下观测到某数据的可能性。
似然:在给定观测数据的情况下,描述不同参数可能性的函数。

频率学派和贝叶斯学派的区别

频率学派:将概率理解为长期频率,假设参数是固定的未知量,重点在于通过数据推断。
贝叶斯学派:将概率理解为对不确定性的度量,参数是随机变量,使用先验分布和数据来更新对参数的信念。

从均匀分布变换到标准正态分布

0~1均匀分布的随机器如何变化成均值为0,方差为1的随机器
假设变量 U U U 服从均匀分布 U ∼ Uniform ( 0 , 1 ) U \sim \text{Uniform}(0,1) UUniform(0,1)。要将 U U U 变换为标准正态分布 Z ∼ N ( 0 , 1 ) Z \sim N(0,1) ZN(0,1),我们可以使用逆变换法。具体步骤如下:

  1. 定义变量:设 U U U 是在区间 ( 0 , 1 ) (0,1) (0,1) 上均匀分布的随机变量。
  2. 用逆变换:计算 Z = Φ − 1 ( U ) Z = \Phi^{-1}(U) Z=Φ1(U),其中 Φ − 1 \Phi^{-1} Φ1 是标准正态分布的逆累积分布函数。

这里的 Φ − 1 \Phi^{-1} Φ1 通常无法用封闭形式表达,但可以通过数值方法如查表或特定的数学软件函数(如 MATLAB 的 norminv 或 Python 的 scipy.stats.norm.ppf)来实现。

标准正态分布的累积分布函数 Φ ( z ) \Phi(z) Φ(z) 定义为:
Φ ( z ) = 1 2 π ∫ − ∞ z e − t 2 2   d t \Phi(z) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^z e^{-\frac{t^2}{2}} \, dt Φ(z)=2π 1ze2t2dt,因此,逆变换 Φ − 1 ( u ) \Phi^{-1}(u) Φ1(u) 是求解 u = Φ ( z ) u = \Phi(z) u=Φ(z) z z z 的解。

Lasso的损失函数

Lasso回归的损失函数是线性回归损失与 L ( β ) L(\beta) L(β) 正则化项的组合:
L ( β ) = ∥ Y − X β ∥ 2 + λ ∥ β ∥ 1 L(\beta) = \lVert Y - X\beta \rVert^2 + \lambda \lVert \beta \rVert_1 L(β)=Y2+λβ1
其中:
- Y Y Y 是响应变量向量,
- X X X 是设计矩阵,
- β \beta β 是系数向量,
- λ \lambda λ 是正则化参数,用于控制系数的稀疏性。

Sfit特征提取和匹配的具体步骤

  1. 尺度空间极值检测
    构建尺度空间:这是通过对图像使用高斯模糊并逐步增加模糊程度来完成的,每个新图像都是在前一个图像的基础上进一步模糊得到的。
    查找尺度空间极值:在尺度空间中,每个像素都与它的邻居(同尺度的8个邻居和相邻尺度的18个邻居,共26个邻居)比较,以找到局部最大值和最小值,这些极值点是潜在的关键点。
  2. 精确定位关键点
    关键点定位:对尺度空间的极值点进行精确定位。这一步包括通过拟合三维二次函数来确定关键点的位置、尺度和比例。
    消除边缘响应:因为边缘的响应值比角点的大,所以需要消除稳定性差的边缘响应点。
  3. 关键点方向赋值
    方向赋值:每个关键点根据其局部图像性质赋予一个或多个方向,这使得 SIFT 描述符不受图像旋转的影响。
    计算梯度和方向:在关键点的邻域内计算图像梯度和方向,基于这些梯度分布,每个关键点被赋予主方向。
  4. 生成关键点描述符
    关键点描述:在每个关键点周围的区域内,根据关键点的尺度,选取相应的区域,然后在这个区域内创建描述符。描述符是通过计算图像梯度方向直方图来生成的,通常形成一个包含多个方向的直方图。
  5. 关键点匹配
    特征匹配:两幅图像中的 SIFT 特征通过比较它们的描述符来进行匹配。最常用的方法是寻找最近邻描述符,通常使用欧氏距离来度量。
    比例测试:为了提高匹配的可靠性,可以采用 Lowe 的比例测试,即保留那些比第二近邻距离小很多的匹配点(例如,最近邻距离是第二近邻距离的50%)。
    这些步骤概述了 SIFT 算法的核心过程,从特征提取到特征描述再到特征匹配。在计算机视觉应用中,这些步骤广泛用于图像识别、机器人导航、3D 建模等多种场景。

3、线性代数

求mk矩阵A和nk矩阵的欧几里得距离?

若要求两个矩阵 𝐴 和 𝐵 的欧几里得距离,首先需要注意的是,矩阵 𝐴 和 𝐵 必须具有相同的维度。假设矩阵 𝐴 是m×k 维度,矩阵 𝐵必须也是 m×k 维度。如果 𝐵是 n×k 维度,且 𝑛 ≠ 𝑚,那么直接求这两个矩阵的欧几里得距离是不合适的,因为它们的形状不一致。但如果确实有 m=n,则两个矩阵 𝐴 和 𝐵 的欧几里得距离可以通过以下方式计算:
dist ( A , B ) = ∑ i = 1 m ∑ j = 1 k ( A i j − B i j ) 2 \text{dist}(A, B) = \sqrt{\sum_{i=1}^{m} \sum_{j=1}^{k} (A_{ij} - B_{ij})^2} dist(A,B)=i=1mj=1k(AijBij)2
当 𝑛 ≠ 𝑚,替代方法有:

  • 填充
    如果可能,重新定义问题或调整数据,使两个矩阵具有相同的维度。例如,可以通过添加额外的零行或列来对较小的矩阵进行“填充”,使其尺寸与较大的矩阵匹配。
  • 使用不同的相似性/距离度量
    采用适用于不同维度数据的度量方式,例如:
    最大均值差异(Maximum Mean Discrepancy, MMD):这是一种衡量两个概率分布差异的方法,可以通过在两个矩阵的行上计算应用,尤其是在机器学习中用于比较样本分布。
    曼哈顿距离 或 余弦相似性:这些度量可以在某种程度上调整应用于不同维度的数据,特别是在处理文本或频率数据时。
  • 特征提取或降维
    对两个矩阵应用特征提取或降维技术(如主成分分析(PCA),自动编码器等),以生成具有相同维度的新表示,然后再计算这些新表示之间的欧几里得距离。
  • 核方法
    使用核技术将原始空间映射到一个更高维的特征空间,在这个新空间中可能更容易比较不同维度的数据。

PCA中第一主成分是第一的原因?

在PCA中,每个主成分都是正交的(互相垂直),并且每个新的主成分都捕获了剩余数据中最大的方差。因此,第一主成分是最重要的,因为它单独包含了最大的信息量。
PCA 目标: max ⁡ ∥ v ∥ = 1 { v T Σ v } \quad \max_{\|v\| = 1} \{ v^T \Sigma v \} maxv=1{vTΣv}
第一主成分: PC1 = X v 1 \quad \text{PC1} = X v_1 PC1=Xv1

欧拉公式

e i x = cos ⁡ ( x ) + i sin ⁡ ( x ) e^{ix} = \cos(x) + i\sin(x) eix=cos(x)+isin(x)
其中 e 是自然对数的底数(大约等于 2.71828), i i i 是虚数单位(满足 i 2 = − 1 i^2=-1 i2=1).
欧拉公式提供了一个强大的连接,将指数函数(通常在实数域中定义)扩展到复数域。这个公式可以用于将复指数函数表示为正弦和余弦函数的和,这在分析振动或波动现象时非常有用。
特殊情况:欧拉恒等式
x = π x=π x=π 时,欧拉公式变为著名的欧拉恒等式:
e i π + 1 = 0 e^{i\pi} + 1 = 0 e+1=0
这个恒等式被称为“数学中最漂亮的公式”,因为它简洁地联系了五个基本数学常数.

矩阵正定性的判断,Hessian矩阵正定性在梯度下降中的应用

  • 矩阵正定性的判断
    一个实对称矩阵 ( A ) 被称为正定的,如果对所有非零向量 ( x ),都有 ( x^T A x > 0 )。判断一个矩阵是否正定可以通过以下方法:
    -特征值:一个实对称矩阵是正定的当且仅当它的所有特征值都是正的。
    -主子式:矩阵的所有主子式(从左上角开始的子矩阵的行列式)必须为正。
    -Cholesky 分解:如果一个矩阵可以进行 Cholesky 分解(即 ( A = LL^T ) 其中 ( L ) 是下三角矩阵),那么这个矩阵是正定的。
  • Hessian 矩阵正定性在梯度下降中的应用
    在优化问题中,Hessian 矩阵是目标函数的二阶导数矩阵。它描述了目标函数的局部曲率,对算法的收敛速度和稳定性有重要影响。
    -正定性的意义
    正定 Hessian 矩阵:如果在某点的 Hessian 矩阵是正定的,那么该点是局部最小点。在这种情况下,梯度下降或牛顿方法等优化算法可以有效地收敛到最小点。
    负定或非正定:如果 Hessian 矩阵在某点非正定(包括负定或有零特征值),那么该点可能是局部最大点或鞍点,梯度下降法在这些点可能会遇到问题,如收敛缓慢或根本不收敛。
    -牛顿方法中的应用
    在牛顿方法中,更新规则为: x k + 1 = x k − H − 1 ∇ f ( x k ) x_{k+1} = x_k - H^{-1} \nabla f(x_k) xk+1=xkH1f(xk)
    其中, H H H 是在 x k x_k xk 处计算的 Hessian 矩阵, ∇ f ( x k ) \nabla f(x_k) f(xk) 是梯度。如果 H H H 是正定的,那么 H − 1 H^{-1} H1 也是正定的,这保证了搜索方向是下降方向,有助于快速收敛。
    -实际应用中的挑战
    在实际应用中,Hessian 矩阵可能非常大且计算成本高,同时其正定性也不总是保证的。因此,实际算法中常用的是梯度下降法的变体(如Adam、RMSprop等),或者在牛顿法中使用对Hessian矩阵的近似(如拟牛顿法)来提高效率和稳定性。

总结而言,Hessian 矩阵的正定性在优化问题中非常关键,特别是在使用基于二阶导数的方法时,如牛顿法。理解并计算 Hessian 矩阵的正定性可以显著影响算法选择和优化过程的效率。

概率题:抽蓝球红球,蓝结束红放回继续,平均结束游戏抽取次数

设有蓝球和红球,蓝球数量为 ( b ),红球数量为 ( r )。游戏规则如下:每次随机抽取一个球,如果抽到蓝球,则游戏结束;如果抽到红球,则将红球放回后继续抽取。我们的目标是计算游戏结束的平均抽取次数。
设 ( E(b, r) ) 表示当有 ( b ) 个蓝球和 ( r ) 个红球时,游戏结束的平均抽取次数。可以建立以下递归关系:
E ( b , r ) = 1 × b b + r + ( 1 + E ( b , r ) ) × r b + r E(b, r) = 1 \times \frac{b}{b+r} + (1 + E(b, r)) \times \frac{r}{b+r} E(b,r)=1×b+rb+(1+E(b,r))×b+rr
这个方程表明,如果第一次抽到蓝球(概率为 b b + r \frac{b}{b+r} b+rb),游戏立即结束;如果抽到红球(概率为 r b + r \frac{r}{b+r} b+rr)则继续游戏,此时期望抽取次数增加 E(b, r)。
化简上述方程得到:
E ( b , r ) = 1 + r b + r E ( b , r ) E(b, r) = 1 + \frac{r}{b+r} E(b, r) E(b,r)=1+b+rrE(b,r)
E ( b , r ) ( 1 − r b + r ) = 1 E(b, r) \left(1 - \frac{r}{b+r}\right) = 1 E(b,r)(1b+rr)=1
E ( b , r ) b b + r = 1 E(b, r) \frac{b}{b+r} = 1 E(b,r)b+rb=1
E ( b , r ) = b + r b E(b, r) = \frac{b+r}{b} E(b,r)=bb+r
因此,当有 ( b ) 个蓝球和 ( r ) 个红球时,游戏结束的平均抽取次数 E(b, r) 为 b + r b \frac{b+r}{b} bb+r。这表明平均抽取次数与蓝球的数量成反比,与总球数成正比。

讲一下PCA

PCA是一种常用的数据降维技术,它通过线性变换将原始数据转化为一组各维度线性无关的表示,称为主成分。PCA 主要用于提取数据中的重要特征,通过这些特征可以捕捉大部分数据集的方差。
工作原理:
标准化数据:使得每个特征均值为0,方差为1。
构建协方差矩阵:反映特征间的相关性。
特征分解:计算协方差矩阵的特征值和特征向量。
选择主成分:基于特征值大小,选取最重要的特征向量。
数据投影:将原数据映射到选定的特征向量上,实现降维。
优缺点:
优点:有效去除数据冗余和噪声,提升解释性。
缺点:仅适用于线性关系,对异常值敏感,需要数据标准化。

拟牛顿法的原理

拟牛顿法是一种用于寻找多变量函数的局部最小值的优化算法,属于无约束优化问题的求解方法。这类方法是牛顿法的改进版本,旨在通过近似牛顿法中的Hessian矩阵(二阶导数矩阵)或其逆矩阵来减少计算量和提高算法的稳定性。
核心原理
拟牛顿法使用一个矩阵 B k B_k Bk 来近似Hessian矩阵的逆。通过更新 B k B_k Bk,算法在迭代中逐步逼近函数的最小值。更新公式通常基于以下条件:
B k + 1 ( x k + 1 − x k ) = ∇ f ( x k + 1 ) − ∇ f ( x k ) B_{k+1} (x_{k+1} - x_k) = \nabla f(x_{k+1}) - \nabla f(x_k) Bk+1(xk+1xk)=f(xk+1)f(xk)
这称为拟牛顿条件,确保 B k B_k Bk 的更新能保持对梯度变化的有效逼近。

常用算法
DFP(Davidon-Fletcher-Powell)算法
BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法
这两种算法通过不同的方式更新矩阵 B k B_k Bk,以保持或提高优化的效率和稳定性。

优点
不需要计算Hessian矩阵,减少了计算量。
特别适合于大规模优化问题。
拟牛顿法通过近似二阶导数信息,提供了一种在不牺牲太多精确度的情况下加速收敛的方法。它在机器学习和深度学习等领域的参数优化中非常有用。

编辑距离

编辑距离(Edit Distance),又称莱文斯坦距离(Levenshtein Distance),是一种衡量两个字符串之间差异的度量。它定义为将一个字符串转换成另一个字符串所需的最少单字符编辑操作的数量。常用的编辑操作包括插入(insertion)、删除(deletion)和替换(substitution)。
计算两个字符串之间的编辑距离的常用算法是动态规划。设有两个字符串 A 和 B ,其长度分别为 m 和 n 。创建一个大小为 ( m + 1 ) × ( n + 1 ) (m+1) \times (n+1) (m+1)×(n+1) 的矩阵D,其中 D [ i ] [ j ] D[i][j] D[i][j] 表示字符串 A 的前 i 个字符与字符串 B 的前 j 个字符之间的编辑距离。
初始化
D [ i ] [ 0 ] = i D[i][0] = i D[i][0]=i ( i 从 0 到 m )
D [ 0 ] [ j ] = j D[0][j] = j D[0][j]=j( j 从 0 到 n)

填充矩阵
对于每个 i(从 1 到 m )和每个 j(从 1 到 n ):
D [ i ] [ j ] = min ⁡ ( D [ i − 1 ] [ j ] + 1 ,  // 删除操作 D [ i ] [ j − 1 ] + 1 ,  // 插入操作 D [ i − 1 ] [ j − 1 ] + cost // 替换操作 ) D[i][j] = \min \left( \begin{array}{l} D[i-1][j] + 1, \text{ // 删除操作} \\ D[i][j-1] + 1, \text{ // 插入操作} \\ D[i-1][j-1] + \text{cost} \text{ // 替换操作} \end{array} \right) D[i][j]=min D[i1][j]+1, // 删除操作D[i][j1]+1, // 插入操作D[i1][j1]+cost // 替换操作
其中,如果 A [ i ] = B [ j ] A[i] = B[j] A[i]=B[j] 则 cost = 0,否则 cost = 1。

结果
最终的编辑距离是矩阵 D 中 D [ m ] [ n ] D[m][n] D[m][n] 的值。

;