Assignment 2
Word2Vec
(a)
Because the true distribution of y is a one-hot vector, where yw=0 for all w=0 and wo=1, the summation ∑ywlog(y^y) simplifies to log(y^o)
(b)
i.
我们需要求解下面这个偏导数:
J=−log∑w∈vocabexpuwTvcexpuoTvc=−u0T+logw∈vocab∑expuwTvc令 f(vc)=∑w∈vocabexpuwTvc,则:
∂vc∂J=∂f(vc)∂J∂vc∂f(vc)=f(vc)1∂vc∂f(vc)而:
∂vc∂f(vc)=w∈vocab∑uwTexpuwTvc于是:
f(vc)1∂vc∂f(vc)=∑k∈vocabexpukTvc∑w∈vocabuwTexpuwTvc=w∈vocab∑∑k∈vocabexpukTvcexpuwTvcuwT而由 y^o的定义:
y^o=∑w∈vocabexpuwTvcexpuwTvc可得:
w∈vocab∑∑k∈vocabexpukTvcexpuwTvcuwT=uwTy^w最终结果为:
∂vc∂J=(w∈vocab∑uwTy^w)−uoT现在我们需要将这个式子向量化:
- uo 是真实向量值的 outsider 向量,我们可以通过矩阵 U 与独热向量相乘得到:Uy
- ∑w∈vocabuwTy^w 是 outsider 向量的加权平均,可以看作是模型预测的期望 outsider 向量,等价于矩阵 U 乘以概率向量 Uy^。
因此我们得到最终的向量表示:
∂vc∂J=U(y^−y)ii
梯度为0时,有:
y^=y这意味着模型的预测概率分布 y^ 和真实的独热向量分布完全相同,模型已经有100%的把握预测真实的外围词 o 就是外围词,而其他所有词的概率都为0。
iii
参数 vc 的梯度下降更新过程如下:
vcnew=vcold−α(Uy^−Uy)梯度 Uy^−Uy 由两个部分组成:
- Uy^: 这是期望项。它代表了根据当前模型预测,"期望中"的外围词向量应该是长什么样的。它是所有词的 outside 向量 uw 根据预测概率 y^w 进行的加权平均。
- Uy: 这是观测项。它是真实观测到的那个外围词 o 的 outside 向量 uo。
在梯度更新 vcnew=vcold−α(Uy^−Uy) 中:
- +αUy: 这个部分把中心词向量 vc 向真实观测到的外围词向量 uo 的方向拉近。为了让损失变小,模型需要增大 P(O=o∣C=c),也就是增大 uoTvc 的值。让两个向量更相似(在同一方向上)会使它们的点积变大。
- −αUy^: 这个部分把中心词向量 vc 向模型期望的外围词向量的反方向推离。期望向量 Uy^ 是一个被所有(大部分是错误的)词所影响的“平均”向量。把 vc 推离它,就相当于在整体上减小了 vc 和那些不应该出现的词的 uw 的相似度,从而降低了它们的出现概率。
c
当词向量的长度本身编码了有用的语义信息时,归一化就会造成信息损失。
在题目给出的情感分类任务中,一个词的正面或负面“强度”可能就由其向量长度表示。
- 例子: "ecstatic" (欣喜若狂) 和 "happy" (开心) 都指向正面的方向,但 "ecstatic" 的情感强度远大于"happy"。在理想的词向量空间中,这可以通过向量长度来体现,即 ||u_ecstatic|| > ||u_happy||。
- 信息损失: 如果我们将它们都进行L2归一化,它们的向量会变得非常接近甚至相同(如果它们方向一致的话),我们就丢失了“欣喜若狂”比“开心”更强烈的这层信息。在对一个短语的情感进行加总计算时,这种强度的区别就无法体现出来了。
当词向量的长度与下游任务无关,或者其携带的信息是噪声时,归一化就不会造成损失,甚至可能是有益的。
- 情况一:长度与任务无关。如果我们的任务只关心一个词是“正面”还是“负面”(方向),而不关心其强度,那么归一化是无损的。
- 情况二:长度是噪声。 在word2vec的训练过程中,高频词(如 "the", "a", "is")往往会获得比低频词更大的向量长度。但在情感分类任务中,这些词通常是中性的停用词。它们较大的向量长度反而会在求和时“压制”住那些真正携带情感但频率较低的词(如 "amazing", "terrible")的影响。在这种情况下,L2归一化可以通过消除频率带来的影响,降低噪声,从而提升模型性能。
d
∂U∂J=[∂u1∂J,∂u2∂J,⋅⋅⋅,∂u∣Vocab∣∂J]Machine Learning & Neural Networks
a
i
这里的 m (动量) 是对过去梯度的一个指数加权移动平均。可以把它想象成一个滚下山的小球,它的方向不仅取决于当前地面的坡度(当前批次的梯度 ∇θt),还很大程度上取决于它之前的滚动方向(历史梯度 mt)。
因为 β1 通常是一个接近1的数值(比如0.9),所以新的动量 mt+1 主要由旧的动量 mt 决定,只有一小部分受当前梯度 ∇θt 的影响。如果某一个批次的数据导致梯度方向突然剧烈变化(即噪声较大),这个突然的变化会被历史积累的动量“平滑”掉。因此,更新的方向会更加稳定,变化更小。
这种稳定的、低方差的更新非常有益。在损失函数的“地形图”中,它能帮助优化器更快地收敛,因为它沿着一个更加平滑和直接的路径前进,避免了在峡谷地带来回震荡的问题。
ii
这里的 v 追踪的是梯度平方的指数加权移动平均。一个参数对应的 v 值很大,意味着这个参数在历史上经常有很大的梯度。而该值的更新策略如下:
- 如果一个参数历史梯度一直很小,那么它的 vt+1 就会很小,用一个小数字去除,最终的更新步长就更大。
- 如果一个参数历史梯度一直很大,它的 vt+1 就会很大,最终的更新步长就更小。
这对于处理稀疏数据或特征非常有用。在很多任务中,一些参数很少被激活,因此它们的梯度大多数时候都很小。通过自适应学习率,当这些稀疏参数偶尔获得梯度时,它们会得到一个较大的更新,从而确保它们也能被有效训练。对于那些梯度一直很大的参数,减小它们的更新步长可以防止更新过猛,避免“冲过”最优点,使训练过程更稳定。
b
i
我们的目标是让经过 dropout 后的隐藏层单元 hdrop 的期望值等于原始的隐藏层单元 h。对于单个神经元 i 有:
hdropi=γdihi其中 di 是一个随机变量,它以 pdrop 的概率为 0,以 1−pdrop 的概率为 1。
于是hdropi 的期望 E[hdropi]:
E[hdropi]=E[γdihi]因为 γ 和 hi 相对于随机过程 di 来说是常数,我们可以把它们提出来:
E[hdropi]=γhiE[di]接下来计算 di 的期望 E[di]:
E[di]=(0pdrop)+(1(1−pdrop))=1−pdrop代入得:
E[hdropi]=γhi(1−pdrop)根据题目要求,这个期望值必须等于 hi:
hi=γ∗hi∗(1−pdrop)于是解得:
γ=1/(1−pdrop)ii
在测试阶段,我们的目标是获得模型最稳定、最精确的预测结果。
- 确定性: 如果在测试时还随机丢弃神经元,那么对于同一个输入,每次的输出都会不一样,这是我们不希望看到的。我们需要一个确定的、可复现的结果。
- 利用全部能力: 在测试时,我们希望利用到模型已经训练好的全部能力。我们已经花费了大量资源训练了整个网络,自然希望所有神经元都参与进来,共同做出最好的决策。由于我们在训练时已经通过缩放因子 γ 保证了激活值的期望不变,所以在测试时可以直接使用完整的网络,而不用担心输出的尺度问题。
Neural Transition-Based Dependency Parsing
e
i
我们定义 z=xW+b1,则:
∂xj∂hi=k∑∂zk∂hi∂xj∂zk而 ∂xj∂zk=Wjk,ReLU 函数的偏导数是指示函数。于是:
∂xj∂hi=1(zi>0)Wjiii
∂li∂J=j∑∂y^j∂J∂li∂y^j首先计算 ∂y^j∂J。真实标签是 c,所以 yc=1,对于所有 j=c,yj=0。因此有:
Jj={−log(y^c)0if j=cotherwise ∂y^j∂J={−y^c10if j=cotherwise然后计算 ∂li∂y^j,根据 softmax 的梯度公式即得:
∂li∂y^j={y^i(1−y^i)−y^jy^iif i=jif i=j于是:
∂li∂J={y^c−1y^iif i=cif i=cf
- 介词短语挂载错误 (Prepositional Phrase Attachment Error)
- 介词短语(比如 "on the table", "with a fork", "into Afghanistan")就像一个“挂件”,它需要挂在正确的词上才能让句子意思通顺。当它挂错地方时,就产生了这种错误。
- 例子:Moscow sent troops into Afghanistan.(莫斯科派军队进入阿富汗)。
- 短语 into Afghanistan(进入阿富汗)是描述 sent(派遣)这个动作的,所以它应该挂在 sent 上,但是错误的解析把它挂在了 troops(军队)上,变成了 troops into Afghanistan(进入阿富汗的军队),这在语义上不通顺。
- 动词短语挂载错误 (Verb Phrase Attachment Error)
- 一个动词短语(通常由分词引导,如 leaving the store unattended)也是一个“挂件”,它描述的是句子中某个动作或主体的状态。如果它挂错了,句子的主语就会混淆。
- 例子:Leaving the store unattended, I went outside.(我把商店晾在一边,然后出门了)。
- Leaving the store unattended(把商店晾在一边)这个动作是 I(我)发出的。所以这个短语应该挂在主句的动词 went 上,来修饰主句的主语 I。如果挂错,比如挂在 store 上,意思就完全错了。
- 修饰语挂载错误 (Modifier Attachment Error)
- 修饰语(比如副词 extremely 或形容词 red)用来修饰其他词。当它修饰了错误的词时,就产生这种错误。
- 例子:I am extremely short.(我非常矮)。
- 副词 extremely(非常)是用来修饰形容词 short(矮)的,强调“矮”的程度。如果错误地挂在 am 上,就失去了它应有的语义。
- 并列连词挂载错误 (Coordination Attachment Error)
- 当使用 and, or, but等并列连词连接两个或多个成分时,这几个成分在结构上是平等的。解析器应该将第二个(以及后续的)成分连接到第一个成分上。如果连接到了别的词上,就产生了这种错误。
- 例子:Would you like brown rice or garlic naan?(你想要糙米饭还是蒜香烤饼?)。
- brown rice 和 garlic naan 是并列关系。正确的结构是 garlic naan 应该连接到 rice 上。如果 garlic naan 连接到了 Would 或者 like 上,就破坏了这种并列结构。
g
相比只使用单词本身,额外加入词性标签能给模型带来哪些单词本身无法提供的信息:
- 提高泛化能力 (Generalization):
- 语言中的词汇量非常大,很多词在训练数据中可能只出现几次,甚至不出现(未登录词,OOV)。如果只用词作为特征,模型很难学到适用于所有词的普遍语法规则。
- 词性标签将具体的单词抽象成语法类别(如名词 NOUN、动词 VERB、形容词 ADJ)。例如,模型可以学到一个普遍规则:“一个形容词(ADJ)很可能修饰一个名词(NOUN)”,而不是去分别学习“beautiful修饰 girl”、“big 修饰 house”等无数个具体实例。这使得模型能够更好地处理在训练中未见过的词汇和句子结构,泛化能力大大增强。
- 消除词义和语法歧义 (Disambiguation):
- 英语中很多单词身兼数职,同一个词在不同上下文中可以有不同的词性。例如:
- book 可以是名词(a book)或动词(book a flight)。
- duck 可以是名词(a duck)或动词(duck down)。
- 如果不使用词性标签,解析器很难区分这些情况。而POS标签可以直接告诉模型这个词在当前句子中的语法角色。知道了 book 是一个动词 VERB,模型就知道它可以带一个直接宾语(如 flight);如果知道它是名词 NOUN,模型就知道它可以被一个形容词修饰。这对于正确判断依赖关系至关重要。
- 提供核心语法结构信息 (Providing Syntactic Structure):
- 依赖解析的本质就是寻找词与词之间的语法关系。词性标签本身就是最基础和核心的语法信息。例如,介词(ADP)通常是一个介词短语的开始,它会连接一个名词;助动词(AUX)通常会依附于一个主动词(VERB)。这些基于词性的规则是构建整个依赖树的基石。