阿里推荐算法

一、推导极大似然法

极大似然法(Maximum Likelihood Estimation, MLE)是一种参数估计方法,旨在找到使观测数据出现的概率最大的模型参数。
在深度学习中 −>->> softmax激活函数+交叉熵损失函数+SGD三者实现了极大似然估计

1.1 极大似然估计的基本思想

假设我们有一个参数化概率模型,数据样本 x=(x1,x2,…,xn)x=(x_1,x_2,…,x_n)x=(x1,x2,,xn) 由某个分布 𝑝(𝑥;𝜃) 生成,其中 𝜃 是待估计的参数。MLE 旨在找到 𝜃 使得数据的联合概率L(θ)L(θ)L(θ)(似然函数)最大化:L(θ∣X)=∏i=1np(xi∣θ)L(θ | X) = ∏_{i=1}^{n} p(x_i | θ)L(θX)=i=1np(xiθ)
通常,为了简化计算,我们对似然函数取对数,得到 对数似然函数(Log-Likelihood Function):
ℓ(θ∣X)=logL(θ∣X)=∑i=1nlogP(xi∣θ)ℓ(θ | X) = log L(θ | X) = ∑_{i=1}^{n} log P(x_i | θ)(θX)=logL(θX)=i=1nlogP(xiθ)

1.2 softmax激活函数+交叉熵损失函数+SGD三者实现了极大似然估计

Softmax

Softmax 是一个归一化激活函数,将原始输出(logits) 归一化为一个概率分布。

交叉熵(Cross-Entropy)

交叉熵(Cross-Entropy)用于衡量两个概率分布之间的距离,在分类任务中,用来评估预测结果与真实标签之间的匹配程度。其公式如下:L(θ)=−∑yilog(y^i)L(θ) = - ∑ y_i log(ŷ_i)L(θ)=yilog(y^i)
求log、并添加负号(损失函数天然是负的)

SGD

优化器通过最小化交叉熵损失来更新模型参数,从而实现最大化对数似然,即实现 极大似然估计。

二、Dropout基本原理

Dropout 是一种常用于神经网络的正则化技术,目的是为了防止过拟合并提升模型的泛化能力。

  • 训练过程中
    Dropout 会以一定的概率(通常是 0.2 到 0.5 之间)随机“丢弃”神经网络中的部分神经元。也就是说,某些神经元在前向传播时不会参与计算(其输出为 0),而在反向传播时也不会更新相应的权重。
  • 推理阶段
    不丢弃任何神经元,但会根据丢弃的比例进行输出缩放,以保证和训练阶段期望输出一致。

三、随机负采样会产生什么影响

3.1 随机负采样的基本原理

随机负采样的基本思想是,在训练过程中,从所有负样本中随机选取一部分负样本(即非目标类别的样本)来进行训练,而不是使用所有的负样本。这种方法尤其适用于数据中负样本极为庞大的情况,例如推荐系统中的负反馈数据。

  • 优点
    1.加速训练,减轻计算负担
    2.避免负样本偏倚
  • 缺点
    1.可能会影响模型的精度
    2.影响模型的收敛速度:随机负采样的采样过程可能导致每次训练使用的负样本组合有所不同,这种随机性可能会导致训练过程中模型的梯度波动较大,进而影响收敛的速度和稳定性。

四、算法题1—第N位数字

这道题有点找规律的感觉,只能硬背了

class Solution:
    def findNthDigit(self, n: int) -> int:
        digit, start, count = 1, 1, 9
        while n > count:
            n -= count
            start *= 10
            digit += 1
            count = 9 * start * digit
        num = start + (n - 1) // digit
        return int(str(num)[(n - 1) % digit])

五、算法题2—最长连续子数组(hot100)

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        dp = [1] * len(nums)
        longest_streak = 0
        num_set = set(nums)
        for num in num_set:
            if num + 1 not in num_set:
                current_num = num
                current_streak = 1
                while current_num - 1 in num_set:
                    current_num += 1
                    current_streak += 1
                longest_streak = max(longest_streak, current_streak)
        return longest_streak
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐