自学内容网 自学内容网

搜广推实习面经三

快手推荐算法实习

  • 一、介绍一下推荐算法的链路流程。
    • 1.数据收集整理
      重要包含三个大类。item、user、context
    • 2.召回阶段
      召回是推荐系统中的第一步,目标是从庞大的物品集合中找到一个相对较小的候选集,减少计算量。
    • 3.粗排阶段
      粗排阶段的任务是对召回阶段得到的候选集进行排序,以进一步缩小推荐范围。粗排的目标是根据一定的特征对候选物品进行快速筛选,而不是非常精准地排名。
    • 4.精排阶段
      精排是推荐系统中的关键阶段,其目标是对候选集中的物品进行更为精确的排序,以提高推荐的准确性。精排阶段通常会采用更为复杂的模型,考虑更多的特征和交互。
    • 5.评估、反馈、持续优化
  • 二、介绍一下神经网络是怎么更新的。为什么反向传播比正向传播更重要?
    • 1.神经网络的更新过程是通过反向传播(Backpropagation)算法来实现的。反向传播用于计算损失函数关于网络参数(权重和偏置)的梯度,并通过梯度更新网络参数,从而最小化损失函数。这个过程是通过梯度下降法进行的。
    • 2.正向传播的目的是计算网络的输出,即预测结果。而反向传播的目的是根据损失函数计算每个参数的梯度,然后通过这些梯度来更新网络参数,从而使网络在训练过程中逐步优化。
    • 3.早期的感知机模型没有反向传播,它使用的是一种简单的基于误差的权重更新规则。反向传播算法的引入使得神经网络可以通过多层结构和非线性激活函数,解决更加复杂的任务,开创了深度学习的新时代。
      • 早期感知机模型权重更新方式
        感知机的权重更新规则是通过误差修正进行的。如果预测结果不正确(即模型输出与真实标签不一致),则根据误差调整权重
        W = W + η ⋅ ( y true − y pred ) ⋅ X W = W + \eta \cdot (y_{\text{true}} - y_{\text{pred}}) \cdot X W=W+η(ytrueypred)X
        • η \eta η是学习率
      • 反向传播的权重更新规则
        在多层神经网络中,权重更新通过反向传播算法来实现。首先计算损失函数相对于输出层和每一层的梯度,然后利用链式法则从输出层到输入层逐层更新权重。
        W i j = W i j − η ⋅ ∂ L ∂ W i j W_{ij} = W_{ij} - \eta \cdot \frac{\partial L}{\partial W_{ij}} Wij=WijηWijL
  • 三、介绍一下神经网络的初始化方法。
    • 1.均匀分布初始化 (Uniform Distribution)
      在均匀分布内随机初始化权重,区间为 [−a,a]。权重的初始化公式如下:
      W ∼ U ( − a , a ) W \sim U(-a, a) WU(a,a)
    • 2.正态分布初始化 (Normal Distribution)
      权重的初始化公式如下:
      W ∼ N ( 0 , σ 2 ) W \sim \mathcal{N}(0, \sigma^2) WN(0,σ2)
    • 3.Xavier初始化 (Glorot Initialization)
      Xavier初始化是为了保持信号在神经网络中的传播过程方差一致。它通过设置权重的方差来避免梯度爆炸或消失。Xavier初始化主要用于激活函数是sigmoid或tanh的情况。权重的初始化公式如下:
      W ∼ U ( − 6 n in + n out , 6 n in + n out ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}, \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}\right) WU(nin+nout6 ,nin+nout6 )
    • 4.He初始化 (He Initialization)
      He初始化适用于ReLU激活函数的神经网络,其目的是避免ReLU激活函数中“死神经元”问题。权重的初始化公式如下:
      W ∼ U ( − 6 n in , 6 n in ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{\text{in}}}}, \sqrt{\frac{6}{n_{\text{in}}}}\right) WU(nin6 ,nin6 )
    • 5.LeCun初始化
      LeCun初始化专门为Leaky ReLU激活函数设计,权重的初始化公式如下:
      W ∼ U ( − 3 n in , 3 n in ) W \sim \mathcal{U}\left(-\sqrt{\frac{3}{n_{\text{in}}}}, \sqrt{\frac{3}{n_{\text{in}}}}\right) WU(nin3 ,nin3 )
  • 四、二叉树的中序遍历——力扣94
    这里提供一个二叉树前中后序遍历模板。但是无法添加更多的条件。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        # # 前序递归
        # return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
        # 中序递归 
        return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
        # # 后序递归
        # return self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val]

原文地址:https://blog.csdn.net/yin2567588841/article/details/145231133

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!