字节抖音搜算法

bg:多模态和大模型出身

一面

  • 一、ppl的计算与物理含义
    在自然语言处理(NLP)中,PPL 是 Perplexity(困惑度)的缩写,通常用于衡量语言模型(如神经网络语言模型)在给定文本上的表现。PPL 是一种评估语言模型好坏的指标,它在很多任务中被广泛应用,比如机器翻译、自动文本生成等。

    • 1.PPL 的计算
      在这里插入图片描述
    • 2.PPL的物理含义
      PPL 的物理含义可以通过其定义来理解。实际上,PPL 是对语言模型预测性能的度量,它量化了模型对给定文本的不确定性或困惑程度。
      • 低困惑度:如果模型对文本的预测非常准确,即每个词的预测概率都比较高,PPL 会较低。低困惑度意味着模型对文本的理解较好,能够更有效地预测下一个词。
      • 高困惑度:如果模型对文本的预测不准确,预测的概率较低,那么 PPL 会较高。这表示模型在预测下一个词时“困惑”,即它在给定上下文时的不确定性较大。
  • 二、Transformer的结构

    • 1.encoder
    • 2.decoder
    • 3.Self-Attention
    • 4.Multi-Head Attention
    • 5.Positional Encoding
  • 三、self Attention为什么要除以根号dk
    在这里插入图片描述

    • 1.避免点积值过大:
      在 Self-Attention 中,查询(Query)与键(Key)的点积会得到一个标量值,表示两个向量之间的相似性。假设查询和键是高维向量,当维度dk{\sqrt{d_k}}dk​​很大时,查询向量和键向量的点积值会变得非常大。为了保持数值的稳定性并防止点积值变得过大,论文《Attention Is All You Need》采用了1dk\frac{1}{\sqrt{d_k}}dk​​1​的缩放因子来平衡点积值的大小。这个缩放因子使得随着维度的增加,点积结果的大小不会过度增大,从而使得 softmax 函数的输出更加平滑,避免了过于极端的权重分布。
    • 2.Softmax 与大数值问题:
      在 Self-Attention 计算中,我们首先会对查询和键的点积结果应用 softmax 操作。Softmax 是一个指数函数,具有将较大数值映射为接近 1 的值、较小数值映射为接近 0 的性质。当输入的数值过大时,softmax 的输出会趋向极端(例如接近 1 或 0),这会导致模型学习到不平衡的注意力分布。为了避免这种情况,缩放点积的结果可以使得 softmax 在数值上更加稳定,避免了大数值导致的梯度消失或爆炸问题。
  • 四、神经网络能否用全0或全1初始化

      1. 全 0 初始化:
        问题:如果将神经网络的权重初始化为全 0,那么每个神经元在前向传播过程中会计算相同的加权和,并且在反向传播时会得到相同的梯度。这会导致每个神经元在训练过程中执行相同的更新,无法学习到不同的特征。换句话说,网络中的每个神经元会变得“相同”,这大大削弱了网络的表达能力。
        结论:全 0 初始化不是一个好的选择,尤其是对于深度神经网络。
      1. 全 1 初始化:
        问题:如果将权重初始化为全 1,虽然每个神经元不会完全相同,但仍然会面临梯度消失或梯度爆炸的问题,尤其是在深度网络中。具体来说,反向传播过程中,权重的梯度可能会变得过大或过小,从而导致优化过程的效率下降。此外,权重为全 1 时,网络的收敛性可能受到影响。
        结论:全 1 初始化通常也不是一个好的选择。
    • 正确的初始化方法:
      在这里插入图片描述
  • 五、算法题:编辑距离的实现(力扣72-hard)

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n = len(word1)
        m = len(word2)
        
        # 有一个字符串为空串
        if n * m == 0:
            return n + m
        
        # DP 数组
        D = [ [0] * (m + 1) for _ in range(n + 1)]
        
        # 边界状态初始化
        for i in range(n + 1):
            D[i][0] = i
        for j in range(m + 1):
            D[0][j] = j
        
        # 计算所有 DP 值
        for i in range(1, n + 1):
            for j in range(1, m + 1):
                left = D[i - 1][j] + 1
                down = D[i][j - 1] + 1
                left_down = D[i - 1][j - 1] 
                if word1[i - 1] != word2[j - 1]:
                    left_down += 1
                D[i][j] = min(left, down, left_down)
        return D[n][m]
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐