2019-CS224n-Assignment2
Posted 爆浆大鸡排
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-CS224n-Assignment2相关的知识,希望对你有一定的参考价值。
这次复习cs224n主要是先熟悉python和pytorch,方便之后进行论文复现等工作,同时也回顾一下模型和数学公式推导,找找感觉。
解答:理解词向量(23分)
我们先快速回顾一下word2vec算法,它的核心思想是“一个词的含义取决于它周围的词”。具体来说,我们有一个中心词(center word) c,和这个词 c 周围上下文构成的窗口,这个窗口内的除了 c 之外的词叫做外围词(outside words)。比如下图中,中心词是“banking”,窗口大小为2,所以上下文窗口是:“turning”、”into“、”crises“和”as“。
Skip-gram模型(word2vec的一种实现)目的是习得概率分布 $ P(O|C) $。这样一来,就能计算给定的一个词 o 和词 c 的概率 $ P(O=o|C=c) $(意为,在已知词 c 出现的情况下,词 o 出现的概率), c 是中心词,o 是外围词。
在word2vec中,这个条件概率分布是通过计算向量点积(dot-products),再应用naive-softmax函数得到的:
这里, u o u_o uo 向量代表外围词, v c v_c vc 向量代表中心词。为了包含这些向量,我们有两个矩阵 U \\boldsymbolU U 和 V \\boldsymbolV V 。 U \\boldsymbolU U 的列是外围词, V \\boldsymbolV V 的列是中心词,这两矩阵都有所有词 $w \\in Vocabulary $ 的表示 。
对于词 c 和词 o,损失函数为对数几率:
可以从交叉熵的角度看这个损失函数。真实值为 y \\boldsymboly y ,是一个独热向量,预测值 y ^ \\boldsymbol\\haty y^ 是由公式(1)计算得到。具体来说, y \\boldsymboly y 如果是第k个单词,那么它的第k维为1,其余维都是0,而 y ^ \\boldsymbol\\haty y^ 的第k维表示这是第k个词的概率大小。
问题(a) (3分)
证明公式(2)给出的naive-softmax的损失函数,和 y \\boldsymboly y 与 y ^ \\boldsymbol\\haty y^ 的交叉熵损失函数是一样的,均如下所示(答案控制在一行)
答:
因为除了 o o o 之外的词都不在窗口内,所以只有词 o o o 对损失函数有贡献
问题(b) (5分)
计算损失函数 J n a i v e − s o f t m a x ( v c , o , U ) \\boldsymbolJ_naive-softmax(v_c, o, \\boldsymbolU) Jnaive−softmax(vc,o,U) 对中心词 v c v_c vc 的偏导数,用 y \\boldsymboly y , y ^ \\boldsymbol\\haty y^ 和 U \\boldsymbolU U 来表示。
答:
为了方便表述,对于该外围词 o o o 我们设:
$ x_o = u_o^T v_c , , ,t_o =exp(x_o) , , ,s_o=\\sum_w \\in Vocab exp(x_w)$ , y o ^ = g o = t o s o \\haty_o = g _o=\\fract_os_o yo^=go=soto ,下面对 x o x_o xo 求导
∴ J = − l o g ( y o ^ ) = − l n ( g o ) J = -log(\\haty_o)=-ln(g_o) J=−log(yo^)=−ln(go) (这里的log蕴含意思是ln)
∵ t o ′ = t o = e x o t_o'= t_o = e^x_o to′=to=exo, s ′ = e x o s' = e^x_o s′=exo
∵ g o ′ = t o ′ s o − t o s o ′ s o 2 = g o ( 1 − g o ) g_o' =\\fract_o's_o -t_os'_os_o^2 = g_o (1-g_o) go′=so2to′so−toso′=go(1−go)
∴ $\\frac\\partialJ\\partialx_o = \\frac\\partialJ\\partialg_o · \\frac\\partialg_o\\partialx_o = \\haty_o - y_o $
则对 v c v_c vc 的导数为:
∂ J ∂ v c = ∂ J ∂ x o ⋅ ∂ x o ∂ v c = ( y o ^ − y o ) ⋅ u T \\frac\\partialJ\\partialv_c=\\frac\\partialJ\\partialx_o · \\frac\\partialx_o\\partialv_c = (\\haty_o - y_o) · u^T ∂vc∂J=∂xo∂J⋅∂vc∂xo=(yo^−yo)⋅uT,引入矩阵得:
$\\boldsymbolJ_native-softmax=(v_c, o, \\boldsymbolU) = (\\haty - y) · \\boldsymbolU $
问题© (5分)
计算损失函数 J n a i v e − s o f t m a x ( v c , o , U ) \\boldsymbolJ_naive-softmax(v_c, o, \\boldsymbolU) Jnaive−softmax(vc,o,U) 对上下文窗口内的词 w w w 的偏导数,考虑两种情况,即 w 是外围词 o o o,和 w 不是 o o o,用 y \\boldsymboly y , y ^ \\boldsymbol\\haty y^ 和 v c v_c vc 来表示。
答:
在问题(b)基础上,对 x w = u w T v c x_w=u_w^Tv_c xw=u2019-CS224n-Assignment3