cs224n 2024春 a2(handout部分)

理解Skip-gram模型

(a)

(b)

(i)

本题求一个正确的外部词,即独热向量的交叉熵损失关于中心词向量vc的梯度。

稍微难理解的是最后三行,涉及到用矩阵乘法简化向量乘法的加权和。

这里用一个具体的例子说明:

 (ii)

(iii)

(c)

 (d)

这题是交叉熵损失关于输出向量 uw的导数,w是任意词,o是目标词,所以最后的结果要分为w=o和w!=o,不同的情况会影响不同的梯度更新方向

(e)

简洁表达:

(f)

这里忽略了在 x=0 点导数不定义的情况。通过这种方式,Leaky ReLU在 x<0 时保持了一定的梯度,避免了传统ReLU激活函数中的死亡ReLU问题(即 x<0 时导数为0,使得一些神经元的梯度永远为0,不再更新)

(g)

(h)

(i)

在这个问题里探索负采样的梯度,为什么要引入负采样呢,因为在实际应用中,特别是词汇表很大时,计算每个词的概率非常耗时,因为需要计算并归一化整个词汇表的分数,这使得训练非常缓慢。负采样不再试图一次性训练所有词汇的权重,而是每次更新中心词的一个正样本(正确的上下文词)和几个负样本(随机选择的非上下文词)的权重。对于每个正样本,增加其成为上下文的对数概率;对于每个负样本,增加其不成为上下文的对数概率。这种方式显著减少了每次更新中需要处理的词数,从而加快了训练速度。同时,它间接地优化了整个模型,因为通过足够数量的更新,每个词都有可能被选作正样本或负样本进行训练。交叉熵损失在理论上可以给出更精确的概率估计,适用于需要精确概率输出的任务。而负采样虽然不直接优化精确概率,但在嵌入向量的训练中非常有效,尤其是在需要处理大规模数据时。

这里需要对三个参数进行求导

第一项是负的。这反映了一个重要的训练动态:当正样本 uo与中心词 vc​ 之间的点积已经足够大,使得通过sigmoid函数的输出非常接近于 1 时,此时模型对该正样本的预测已经非常准确,进一步的调整会尝试使这个预测值更接近 1,但由于 σ(uo⊤​vc​) 已经很接近 11,这种调整的力度会很小,即(σ(uo⊤​vc​)−1)uo​ 的值将是一个较小的负数,反映了在当前方向上的调整已不需要太大改变。

第二项是正的

对于每个负样本,无论其具体的贡献方向如何,贡献的强度(由系数决定)总是正向的,反映了增加 vc 与 uws​​ 之间的距离的需求 

其实对vc的求导的两项结果已经包含了后面两个导数,分析也是类似的

(ii)

本题探讨哪些是可重用的,并写成矩阵形式

最后的矩阵形式:

(i i i)

朴素采样需要计算整个词汇表上的softmax分布,这涉及到对每个词向量计算指数,然后归一化这些值。这种归一化需要对所有词的输出向量进行求和,因此涉及到矩阵与向量的乘法操作。负采样只需要计算与有限数目的负样本相关的sigmoid函数值,每个计算本质上都是标量与向量的乘法。

一句话来说就是矩阵与向量和标量与向量的计算效率差别。

(i)

虑重复之前的练习,但这次不假设 K 个抽取的负样本词是不同的。也就是说,可能存在 wi​=wj​ 即使 i≠j。这种情况下,我们需要在计算损失函数关于某个特定负样本向量 uws​​ 的偏导数时,特别注意重复词的处理。

求和写法:

通过这种方式,原本以倍数形式表示的导数现在用求和形式表达,这可以直观地显示出每个具体的负样本 ws​ 在总梯度中的贡献,也使得实现更加灵活,特别是在编程时不需要先计算 uws​​ 的出现次数。

(j)

这里选用朴素损失函数:

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值