首页 > 其他分享 >大模型,多模态大模型面试问题【代码题,DDPM,损失函数,激活函数,3DGS,Nerf,SH】

大模型,多模态大模型面试问题【代码题,DDPM,损失函数,激活函数,3DGS,Nerf,SH】

时间:2024-12-07 14:58:58浏览次数:7  
标签:frac 函数 max 模型 生成 DDPM sin dp

大模型,多模态大模型面试问题【代码题,DDPM,损失函数,激活函数,3DGS,Nerf,SH】

时间:2024-10-29 19:30 商汤二面

代码题:

1. 区间最小数乘区间最大和的最大值

参考:区间最小数乘区间最大和的最大值

  • 例如:
    [1,2,3,4,5]
    输出
    36
    说明:
    在这里插入图片描述
  • 输入:
    [1,1,1,1,1]
    输出:
    5
    说明
    在这里插入图片描述

算法:

    本题要求计算:区间和 * 区间最小数,针对这两点,我们分别处理。
    1. 对于区间和,我们构造前缀和列表dp。设dp[i]表示以a[i]结尾的前缀和
        初始化:
            dp[0] = a[0]
        状态转移方程:
            dp[i] = dp[i - 1] + a[i]
        有了前缀和区间之后,对于任意闭区间[i, j],区间和为dp[j] - dp[i]
    2. 对于区间最小数,我们维护一个单调递增的栈stack,栈内存储的是元素下标
        遍历列表a:
            如果当前元素小于栈顶元素,入栈;
            否则,出栈,计算当前 区间和 * 区间最小数,更新res
class Solution:
 
    def mintimessum(self, a):
        n = len(a)
        dp = [0] * n
        dp[0] = a[0]
        for i in range(1, n): # 建立列表a的前缀和
            dp[i] = dp[i - 1] + a[i]
 
        stack, res = [], 0
        for i in range(n):
            while stack and a[i] < a[stack[-1]]:
                idx = stack.pop()
                winSum = dp[stack[-1]] if stack else 0
                res = max(res, a[idx] * (dp[i - 1] - winSum)) # 当前区间为[idx, right], right = i - 1,区间和为:dp[right] - dp[stack[-1]],这里需要注意当stack为空
            stack.append(i)
 
        while stack:
            idx = stack.pop()
            winSum = dp[stack[-1]] if stack else 0
            res = max(res, a[idx] * (dp[n - 1] - winSum))
 
        return res
 
if __name__ == "__main__":
    sol = Solution()
 
    # a = [1, 2, 3, 4, 5]
 
    a = [1, 1, 1, 1, 1]
 
    res = sol.mintimessum(a)
 
    print res

时间复杂度:O(n)
空间复杂度:O(n)

2. 二叉树中的最大路径和

在这里插入图片描述
在这里插入图片描述
参考LeetCode-124. 二叉树中的最大路径和【树 深度优先搜索 动态规划 二叉树】商汤二面真题

问题一:DDPM加噪公式为什么是根号形式,时间步T为啥这么大,通常是1000。

DDPM(Denoising Diffusion Probabilistic Models)中的加噪公式通常以根号形式出现,是由于在扩散过程中的噪声控制。以下是对此的详细解释:

加噪公式的根号形式

DDPM通过逐步向数据中添加噪声来实现生成过程。加噪公式通常表示为:

x t = α t x t − 1 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon xt​=αt​ ​xt−1​+1−αt​ ​ϵ

其中:

  • x t x_t xt​是在时间步 t t t的样本。
  • x t − 1 x_{t-1} xt−1​是在前一个时间步的样本。
  • ϵ \epsilon ϵ是标准正态分布的噪声。
  • α t \alpha_t αt​是控制噪声比例的参数,通常满足 0 < α t < 1 0 < \alpha_t < 1 0<αt​<1。

这个公式中的根号形式是为了保持数据的尺度和数值稳定性。通过使用平方根,模型可以平滑地控制每个时间步的噪声强度,从而在整个扩散过程中保持一致性。

时间步 T T T的设置

在DDPM中,时间步 T T T的设置通常很大,例如1000,主要是为了实现高质量的生成效果。具体原因包括:

  1. 细致的噪声控制:较大的时间步数允许模型在生成过程中逐步地添加和去除噪声,从而使生成结果更为精细。每个时间步的噪声添加是相对较小的,这样可以更好地保留原始数据的结构。

  2. 生成的多样性:增加时间步数使模型在生成过程中拥有更多的控制点,能够生成多样性更高的样本。

  3. 理论基础:DDPM基于扩散过程的理论框架,较大的时间步数可以更好地模拟随机过程中的连续性。

总之,根号形式确保了在扩散过程中噪声的合理控制,而较大的时间步 T T T则是为了实现高质量的生成。

问题二:介绍常见的损失函数

参考:
https://blog.csdn.net/BIgHAo1/article/details/121783011
softmax loss损失函数详解
损失函数是机器学习和深度学习中用于衡量模型预测结果与真实结果之间差异的函数。以下是一些常见的损失函数:

  1. 均方误差 (Mean Squared Error, MSE)

    • 公式: MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1​∑i=1n​(yi​−y^​i​)2
    • 用途:常用于回归问题,适合于数值型目标。
  2. 平均绝对误差 (Mean Absolute Error, MAE)

    • 公式: MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1​∑i=1n​∣yi​−y^​i​∣
    • 用途:同样用于回归问题,对异常值的敏感性低于MSE。
  3. 交叉熵损失 (Cross-Entropy Loss)

    • 公式:对于二分类问题: Loss = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{Loss} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] Loss=−n1​∑i=1n​[yi​log(y^​i​)+(1−yi​)log(1−y^​i​)]
    • 用途:广泛用于分类问题,特别是多类分类和二分类任务。
  4. 对比损失 (Contrastive Loss)

    • 公式: Loss = 1 2 N ∑ i = 1 N ( y i ) D 2 + ( 1 − y i ) max ⁡ ( 0 , m − D ) 2 \text{Loss} = \frac{1}{2N} \sum_{i=1}^{N} (y_i) D^2 + (1 - y_i) \max(0, m - D)^2 Loss=2N1​∑i=1N​(yi​)D2+(1−yi​)max(0,m−D)2
    • 用途:用于度量学习和生成对抗网络 (GAN) 中,评估样本对的相似性。
  5. Hinge损失 (Hinge Loss)

    • 公式: Loss = 1 n ∑ i = 1 n max ⁡ ( 0 , 1 − y i ⋅ y ^ i ) \text{Loss} = \frac{1}{n} \sum_{i=1}^{n} \max(0, 1 - y_i \cdot \hat{y}_i) Loss=n1​∑i=1n​max(0,1−yi​⋅y^​i​)
    • 用途:主要用于支持向量机 (SVM),适用于二分类问题。
  6. KL散度 (Kullback-Leibler Divergence)

    • 公式: D K L ( P ∣ ∣ Q ) = ∑ i P ( i ) log ⁡ ( P ( i ) Q ( i ) ) D_{KL}(P || Q) = \sum_{i} P(i) \log\left(\frac{P(i)}{Q(i)}\right) DKL​(P∣∣Q)=∑i​P(i)log(Q(i)P(i)​)
    • 用途:用于衡量两个概率分布之间的差异,常用于生成模型中。

这些损失函数在不同的任务和场景中具有不同的优势,选择合适的损失函数对于模型的性能至关重要。

问题三:介绍常见的激活函数

激活函数是神经网络中用于引入非线性的关键组件。以下是一些常见的激活函数:

  1. Sigmoid

    • 公式: σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1​
    • 特点:输出范围在(0, 1)之间,适用于二分类问题。
    • 缺点:在极端值时梯度接近于零,导致梯度消失。
  2. Tanh (双曲正切)

    • 公式: tanh ( x ) = e x − e − x e x + e − x \text{tanh}(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+e−xex−e−x​
    • 特点:输出范围在(-1, 1)之间,通常比Sigmoid收敛更快。
    • 缺点:同样存在梯度消失的问题。
  3. ReLU (修正线性单元)

    • 公式: ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
    • 特点:简单易计算,计算效率高,适用于大多数深度学习模型。
    • 缺点:在训练中可能会出现“死亡ReLU”现象,部分神经元永远不被激活。
  4. Leaky ReLU

    • 公式: Leaky ReLU ( x ) = max ⁡ ( 0.01 x , x ) \text{Leaky ReLU}(x) = \max(0.01x, x) Leaky ReLU(x)=max(0.01x,x)
    • 特点:在输入为负时仍然有小的梯度,解决了死亡ReLU问题。
    • 缺点:在某些情况下性能不如ReLU。
  5. Parametric ReLU (PReLU)

    • 公式: PReLU ( x ) = { x if  x ≥ 0 a x if  x < 0 \text{PReLU}(x) = \begin{cases} x & \text{if } x \geq 0 \\ a x & \text{if } x < 0 \end{cases} PReLU(x)={xax​if x≥0if x<0​(其中a为可学习参数)
    • 特点:可以学习负部分的斜率,提供了更大的灵活性。
  6. Softmax

    • 公式: Softmax ( x i ) = e x i ∑ j e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} Softmax(xi​)=∑j​exj​exi​​
    • 特点:将输出转化为概率分布,适用于多分类问题的输出层。
  7. Swish:SiLU

    • 公式: Swish ( x ) = x ⋅ σ ( x ) \text{Swish}(x) = x \cdot \sigma(x) Swish(x)=x⋅σ(x)
    • 特点:可以缓解梯度消失问题,表现良好,尤其在深层网络中。

这些激活函数在不同的网络架构和应用场景中各有优劣,选择合适的激活函数有助于提高模型的性能。

问题四:DDIM为什么有效?

DDIM(Denoising Diffusion Implicit Models)之所以有效,主要有以下几个原因:

原理与有效性

  1. 潜在变量建模

    • DDIM在生成模型中使用隐式的噪声预测,允许生成更高质量的样本。它通过在潜在空间中建模生成过程,减少了对显式噪声模型的依赖。
  2. 去噪过程的改进

    • DDIM利用了去噪扩散过程,采用逐步去噪的方式,有效地在每一步生成过程中减少噪声,从而提高了样本的质量。
  3. 低采样步骤

    • 通过将采样过程参数化,DDIM可以在较少的步骤内实现生成。这是通过控制每一步生成的噪声量和调整采样策略来实现的,使得生成的样本在质量上接近于使用更多步骤的结果。
  4. 梯度传播

    • DDIM的反向扩散过程可以在每个步骤中更有效地传播梯度,从而使模型在较少的步骤中仍然能够保持较好的收敛性能。

结论

DDIM通过改进的去噪过程和潜在变量建模,能够有效减少采样步数,同时保持生成样本的高质量。这种方法在处理扩散模型时展示了其灵活性和效率,使其成为现代生成模型中的重要技术之一。

问题五:3DGS,Nerf,为什么3DGS效率高,但现在很多还是用Nerf,介绍各自的优缺点。

3DGS(3D Generative Synthesis)和NeRF(Neural Radiance Fields)各自有不同的优缺点,适用于不同的应用场景。以下是对这两者的比较:

3DGS(3D Generative Synthesis)

优点:
  1. 高效性

    • 3DGS在渲染和生成3D场景时通常比NeRF更快,因为它不依赖于逐像素的计算,而是通过直接合成3D几何和纹理信息来实现高效渲染。
  2. 适应性强

    • 可以很好地处理复杂场景和对象的多样性,尤其是在生成新视角的3D对象时,效率明显提升。
  3. 简化的训练过程

    • 相比于NeRF,3DGS在训练时可能不需要处理大量的视角和光线条件,因此在数据准备和训练时间上通常更短。
缺点:
  1. 质量受限

    • 在一些高细节或光照变化大的场景中,生成的质量可能不如NeRF,尤其是在需要准确渲染光照和材质细节的情况下。
  2. 复杂性

    • 3DGS的实现可能需要更复杂的模型设计和参数调整,尤其是在生成高质量的几何形状时。

NeRF(Neural Radiance Fields)

优点:
  1. 高质量渲染

    • NeRF能够生成非常细致和真实的图像,尤其在光照和反射等复杂场景中表现优秀,能捕捉到细微的细节。
  2. 视角一致性

    • NeRF通过学习不同视角的光线分布,能够保持高质量的视角一致性,使得在不同角度观察时图像质量一致。
  3. 灵活性

    • NeRF可以很容易地扩展到不同的场景和对象类型,适用于多种应用,如虚拟现实和增强现实。
缺点:
  1. 效率低

    • 渲染速度较慢,因为NeRF需要逐像素计算辐射场,对计算资源的需求较高,特别是在实时应用中表现不佳。
  2. 数据需求高

    • NeRF通常需要大量的训练数据(多视角图像),对于数据准备和采集的要求比较高。

总结

3DGS在效率上表现更佳,适用于快速生成和渲染3D场景,而NeRF则在细节和图像质量上具有优势,适合需要高真实感的应用场景。选择使用哪种方法取决于具体的应用需求和资源限制。

问题六:视频理解视频生成最新工作了解。

参考https://video-mme.github.io/home_page.html#leaderboard

问题七:球谐函数SH012阶?分别是什么,在什么时候用?

球谐函数(Spherical Harmonics,SH)是一类用于在球面上表示函数的正交基函数。它们广泛应用于计算机图形学、物理学、信号处理等领域。具体到123阶的球谐函数,以下是它们的定义和用途:

1. 球谐函数的阶数

  • 0阶(SH0)

    • 只有一个常数项,表示为 Y 00 ( θ , ϕ ) = 1 4 π Y_{00}(\theta, \phi) = \sqrt{\frac{1}{4\pi}} Y00​(θ,ϕ)=4π1​ ​。
    • 用途:用于表示球体上的均匀光照或常数函数。
  • 1阶(SH1)

    • 包含3个函数:
      • Y 1 , − 1 = 3 8 π sin ⁡ ( θ ) e − i ϕ Y_{1,-1} = \sqrt{\frac{3}{8\pi}} \sin(\theta) e^{-i\phi} Y1,−1​=8π3​ ​sin(θ)e−iϕ
      • Y 10 = 3 4 π cos ⁡ ( θ ) Y_{10} = \sqrt{\frac{3}{4\pi}} \cos(\theta) Y10​=4π3​ ​cos(θ)
      • Y 1 , 1 = 3 8 π sin ⁡ ( θ ) e i ϕ Y_{1,1} = \sqrt{\frac{3}{8\pi}} \sin(\theta) e^{i\phi} Y1,1​=8π3​ ​sin(θ)eiϕ
    • 用途:用于表示简单的方向性变化,如光源的方向。
  • 2阶(SH2)

    • 包含5个函数:
      • Y 2 , − 2 = 15 32 π sin ⁡ 2 ( θ ) e − 2 i ϕ Y_{2,-2} = \sqrt{\frac{15}{32\pi}} \sin^2(\theta) e^{-2i\phi} Y2,−2​=32π15​ ​sin2(θ)e−2iϕ
      • Y 2 , − 1 = 15 16 π sin ⁡ ( θ ) cos ⁡ ( θ ) e − i ϕ Y_{2,-1} = \sqrt{\frac{15}{16\pi}} \sin(\theta) \cos(\theta) e^{-i\phi} Y2,−1​=16π15​ ​sin(θ)cos(θ)e−iϕ
      • Y 20 = 5 16 π ( 3 cos ⁡ 2 ( θ ) − 1 ) Y_{20} = \sqrt{\frac{5}{16\pi}} (3\cos^2(\theta) - 1) Y20​=16π5​ ​(3cos2(θ)−1)
      • Y 2 , 1 = 15 16 π sin ⁡ ( θ ) cos ⁡ ( θ ) e i ϕ Y_{2,1} = \sqrt{\frac{15}{16\pi}} \sin(\theta) \cos(\theta) e^{i\phi} Y2,1​=16π15​ ​sin(θ)cos(θ)eiϕ
      • Y 2 , 2 = 15 32 π sin ⁡ 2 ( θ ) e 2 i ϕ Y_{2,2} = \sqrt{\frac{15}{32\pi}} \sin^2(\theta) e^{2i\phi} Y2,2​=32π15​ ​sin2(θ)e2iϕ
    • 用途:用于表示更复杂的光照模型和环境反射,特别是在三维图形渲染中。

2. 何时使用球谐函数

  • 光照模型

    • 在计算机图形学中,球谐函数常用于表示环境光照,以简化复杂场景中的光照计算。
  • 物体表面表示

    • 在物体的表面法线、纹理映射等方面,SH能够高效表示和处理球面数据。
  • 信号处理

    • 在处理与方向性相关的信号(如音频信号的空间特征)时,球谐函数提供了一种有效的表示方式。
  • 物理模拟

    • 在天文学和物理学中,SH用于描述引力场、电场等的分布。

总结

球谐函数通过不同的阶数提供了对球面上函数的灵活表示,SH0、SH1和SH2分别适用于不同复杂度的光照和表面表示任务,广泛应用于计算机图形学、物理建模和信号处理等领域。


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

标签:frac,函数,max,模型,生成,DDPM,sin,dp
From: https://blog.csdn.net/qq_45934285/article/details/143349767

相关文章

  • 版本比较工具类 - C#小函数类推荐
          此文记录的是版本比较工具类。/***版本比较工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:lzhdim@163.comBlog:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00使用参考:if(Ve......
  • 类模板对象做函数参数
    学习目标:类模板实例化出的对象,向函数传参的方式一共有三种传入方式:1.指定传入的类型=直接显示对象的数据类型2.参数模板化=将对象中的参数变为模板进行传递3.整个类模板化===将这个对象类型模板化进行传递#include<iostream>usingnamespacestd;#include<string>//......
  • DALL·E 2模型及其论文详解
    详细介绍DALL·E2的模型架构和训练过程,详细解读其论文《HierarchicalText-ConditionalImageGenerationwithCLIPLatents》。......
  • 神经网络入门实战:(十八)Argmax函数的详细介绍,可以用来计算模型训练准确率
    Argmax函数介绍在Python中,argmax函数通常用于找出给定数组或列表中元素值最大的索引。(一)Numpy中的Argmax函数:numpy.argmax函数用于找出给定轴(axis)上最大值所在的索引。示例:importnumpyasnp#一维数组arr=np.array([1,3,2,5,4])index=np.argmax......
  • 神经网络入门实战:(十七)VGG16模型的加载、保存与修改,可以应用到其他网络模型上
    VGG16模型的加载、保存与修改该模型主要是用来识别ImageNet数据集的。16的由来:该模型包含16个权重层(13个卷积层和3个全连接层),因此得名VGG16。模型官网:vgg16—Torchvision0.20documentation(一)从官网加载VGG16模型①在pycharm中加载官网已经训练好的......
  • FastAPI 响应模型指南:从 JSON 数据定义到动态管理的实践
    FastAPI响应模型指南:从JSON数据定义到动态管理的实践本篇文章详细介绍了如何在FastAPI中使用响应模型,包括在路径操作函数中声明response_model、处理请求与响应数据不同时的场景,以及通过参数如response_model_exclude_unset来优化响应数据。文中还探讨了如何使用r......
  • 函数栈帧的创建和销毁
    文章目录函数栈帧的创建和销毁本章主题一:什么是函数栈帧二:理解函数栈帧能够解决什么问题三:函数栈帧创建与销毁解析3.1什么是栈3.2有关寄存器与反汇编指令3.3解析函数栈帧的创建和销毁3.3.1预备知识3.3.2函数的调用堆栈3.3.3准备环境3.3.4转到反汇编3.3.5函数栈帧的创建3.......
  • 2024年顶级小型语言模型前15名
    本文,我们将深入了解2024年备受瞩目的十五款小型语言模型(SLMs),它们分别是Llama3.18B、Gemma2、Qwen2、MistralNemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,这与它们的大型语言模型(LLMs)对手形成了鲜明对比。它们为速度和实时性能而生......
  • 什么是函数重载?函数重载的实现原理是什么?
    1)什么是函数重载?函数重载(FunctionOverloading)是指在同一个作用域内,允许存在多个同名但参数列表不同的函数。参数列表的不同可以体现在参数的个数不同、参数的类型不同,或者参数的顺序不同(虽然顺序不同在实际编程中不常见,且通常不推荐这样做以保持代码的可读性)。函数重载使得......
  • 大语言模型LLM之GPT系列
    大模型超详细解读(目录)-知乎 LLM系列超详细解读(一):GPT:无标注数据的预训练生成式语言模型-知乎LLM系列超详细解读(二):GPT-2:GPT在零样本多任务学习的探索-知乎LLM系列超详细解读(三):GPT-3:大型语言模型是少样本学习器-知乎LLM系列超详细解读(四):InstructGP......