CS224n_Assignment_1
assignment1/index.html 第一次作业笔记,对应代码使用Jupyter实现参考链接。
Softmax
softmax常数不变性
softmax(xi)=exi∑jexjsoftmax(xi)=exi∑jexj(softmax(x+c))i=exi+c∑jexj+c=exi×ecec×∑jexj=exi×ecec×∑jexj=(softmax(x))i(softmax(x+c))i=exi+c∑jexj+c=exi×ecec×∑jexj=exi×ecec×∑jexj=(softmax(x))i由于ex+y=ex∗eyex+y=ex∗ey,因此多余的ecec可以上下消除,于是:
这里
发现了一个Softmax非常好的性质,即使两个数都很大比如 1000
与 1001
,其结果与 1
和2
的结果相同,即其只关注数字之间的差,而不是差占的比例。
实现
之所以介绍Softmax
常数不变性,是因为发现给定的测试用例非常大,直接计算exex次方会比较不可行。
神经网络基础
梯度检查
这里的random.setstate(rndstate)
非常重要,因为后续会用到,主要部分为:
1 | x[ix] += h |
Sigmoid导数
定义σ(x)σ(x)如下,发现σ(x)+σ(−x)=1σ(x)+σ(−x)=1。
σ(x)=11+e−x=exex+1σ(−x)=11+ex=ex+1ex+1−exex+1=1−σ(x)σ(x)=11+e−x=exex+1σ(−x)=11+ex=ex+1ex+1−exex+1=1−σ(x)- sigmoid实现 sigmoid(x)−=−11+e(−x)sigmoid(x)−=−11+e(−x)
即: σ′=σ(x)×(1−σ(x))σ′=σ(x)×(1−σ(x))
交叉熵定义
当使用交叉熵作为评价指标时,求梯度:
- 已知: ˆy=softmax(θ)^y=softmax(θ)
- 交叉熵: CE(y,ˆy)=−∑iyi×log(^yi)CE(y,^y)=−∑iyi×log(^yi)
其中yy是指示变量,如果该类别和样本的类别相同就是1,否则就是0。因为y一般为one-hot类型。
而^yi 表示每种类型的概率,概率已经过softmax计算。
对于交叉熵其实有多重定义的方式,但含义相同:
分别为:
二分类定义
J=−[y⋅log(p)+(1−y)⋅log(1−p)]- y——表示样本的label,正类为1,负类为0
- p——表示样本预测为正的概率
多分类定义
J=−M∑c=1yclog(pc)- y——指示变量(0或1),如果该类别和样本的类别相同就是1,否则是0;
- p——对于观测样本属于类别c的预测概率。
但表示的意思都相同,交叉熵用于反映 分类正确时的概率情况。
Softmax导数
进入解答:
- 首先定义Si和分子分母。
Si对θj求导:
∂Si∂θj=f′igi−fig′igi=(eθi)′∑kk=1eθk−eθi(∑kk=1eθk)′(∑kk=1eθk)2
注意: Si分子是θi ,分母是所有的θ ,而求偏微的是θj 。
- 因此,根据i与j的关系,分为两种情况:
当 i==j 时:
f′i=eθi,g′i=eθj∂Si∂θj=eθi∑kk=1eθk−eθieθj(∑kk=1eθk)2=eθi∑keθk×∑keθk–eθj∑keθk=Si×(1–Si)
当 i≠j 时:
f′i=0,g′i=eθj∂Si∂θj=0–eθjeθi(∑keθk)2=–eθj∑θkk×eθi∑keθk=−Sj×Si
交叉熵梯度
计算∂CE∂θi ,根据链式法则,∂CE∂θi=∂CE∂Si∂Si∂θj
- ˆy=softmax(θ)
- CE(y,ˆy)=−∑kyklog(^yk)∂CE∂θi=–∑kyk∂logSk∂θi=–∑kyk1Sk∂Sk∂θi=–yi(1–Si)–∑k≠iyk1Sk(−Sk×Si)=–yi(1–Si)+∑k≠iykSi=Si(∑kyk)–yi
因为∑kyk=1,所以∂CE∂θi=Si−yi=ˆy−y
反向传播计算神经网络梯度
根据题目给定的定义:
已知损失函数J=CE,h=sigmoid(xW1+b1), ˆy=softmax(hW2+b2)
求∂J∂x,∂J∂W2,∂J∂W1,∂J∂b2,∂J∂b1
解答:
反向传播,定义z2=hW2+b2, z1=xW1+b1:
对于输出层ˆy来说,ˆy的输入为 z2=hW2+b2,而输出则为 ˆy=softmax(z2)
上小节计算得到 CE(y,ˆy)=−∑kyklog(^yk) 的梯度为 ∂CE∂θi=ˆy−y,
可以使用 z2 替代 θi ,得到
δ1=∂CE∂z2=ˆy−y
δ2=∂CE∂h=∂CE∂z2∂z2∂h=δ1WT2
δ3=∂CEz1=∂CE∂h∂h∂z1=δ2∂h∂z1=δ2∘σ′(z1) # 推测这里使用点乘的原因是δ2经过计算后,应该是一个标量,而不是向量。
于是得到:∂CE∂x=δ3∂z1∂x=δ3WT1
与计算∂CE∂x相似,计算
- ∂CE∂W2=∂CE∂z2∂z2∂W2=δ1⋅h
- ∂CE∂b2=∂CE∂z2∂z2∂b2=δ1
- ∂CE∂W1=∂CE∂z1∂z1∂W1=δ3⋅x
- ∂CE∂b1=∂CE∂z1∂z1∂b1=δ3
参数数量
nW1=Dx×Hnb1=HnW2=H×Dynb2=DyN=(Dx×H)+H+(H×Dy)+Dy=(Dx+1)×H+(H+1)×Dy代码实现
如果仍然对反向传播有疑惑
- 可以参考一文弄懂神经网络中的反向传播法——BackPropagation,画图出来推导一下。
- 如何直观地解释 backpropagation 算法? - Anonymous的回答 - 知乎
https://www.zhihu.com/question/27239198/answer/89853077
word2vec
关于词向量的梯度
vc是中央单词的词向量
uw (w=1,…,W) 是第 w个词语的词向量。
假设使用交叉熵作为损失函数, o 为正确单词 (one-hot向量的第 o维为1),请推导损失函数关于vc的梯度。
提示:
Jsoftmax−CE(o,vc,U)=CE(y,ˆy)其中U=[u1,u1,…,uW]是所有词向量构成的矩阵。
解答:
首先明确本题给定的模型是skip-gram
,通过给定中心词,来发现周围词的。
定义z=UT⋅vc ,U 表示所有词向量组成的矩阵,而vc 也表示的是一个词向量。
hint: 如果两个向量相似性越高,则乘积也就越大。想象一下余弦夹角,应该比较好明白。
因为U中所有的词向量,都和vc乘一下获得z。
z是干嘛用的呢? z内就有W个值,每个值表示和vc 相似程度,通过这个相似度softmax选出最大值,然后与实际对比,进行交叉熵的计算。
已知: ∂z∂vc=U 和 ∂J∂z=(ˆy−y)
因此:∂J∂vc=∂J∂z∂z∂vc=U(ˆy−y)
除了上述表示之外,还有另一种计算方法
于是: ∂J∂vc=−ui+∑Ww=1^ywuw
仔细观察这两种写法,会发现其实是一回事,都是 观察与期望的差(ˆy−y)。
推导lookup-table梯度
与词向量相似
∂J∂U=∂J∂z∂z∂U=vc(ˆy−y)T
代码实现
负采样时的梯度推导
假设进行负采样,样本数为K,正确答案为o,那么有o∉1,…,K。负采样损失函数定义如下:
其中:
σ(x)=11+e−x=ex1+ex∂∂xσ(x)=σ(x)×(1−σ(x))解答:
首先说明一下,Jneg−sample从哪里来的,参考note1 第11页,会有一个非常详细的解释。
∂J∂vc=(σ(uTovc)−1)uo−K∑k=1(σ(−uTkvc)−1)uk∂J∂uo=(σ(uTovc)−1)vc∂J∂uk=−(σ(−uTkvc)−1)vc代码实现
全部梯度
推导窗口半径m的上下文[wordc−m,...,wordc−1,wordc,wordc+1,...,wordc+m]时,skip-gram 和 CBOW的损失函数F(o,vc) (o 是正确答案的词向量)或说Jsoftmax−CE(o,vc,…) 或 Jneg−sample(o,vc,…) 关于每个词向量的梯度。
对于skip-gram来讲,c的上下文对应的损失函数是:
Jskip−gram(wordc−m…c+m)=∑−m≤j≤m,j≠0F(wc+j,vc)这里 wc+j 是离中心词距离j的那个单词。
而CBOW稍有不同,不使用中心词vc而使用上下文词向量的和ˆv作为输入去预测中心词:
ˆv=∑−m≤j≤m,j≠0vc+j然后CBOW的损失函数是:
JCBOW(wordc−m…c+m)=F(wc,ˆv)解答:
根据前面的推导,知道如何得到梯度
∂J∂vc=UT(ˆy−y)和
∂J∂U=vc(ˆy−y)T那么所求的梯度可以写作:
skip-gram
Jskip−gram(wordc−m…c+m)∂U=∑−m≤j≤m,j≠0∂F(wc+j,vc)∂UJskip−gram(wordc−m…c+m)∂vc=∑−m≤j≤m,j≠0∂F(wc+j,vc)∂vcJskip−gram(wordc−m…c+m)∂vj=0,∀j≠cCBOW
JCBOW(wordc−m…c+m)∂U=∂F(wc,ˆv)∂UJCBOW(wordc−m…c+m)∂vj=∂F(wc,ˆv)∂ˆv,∀(j≠c)∈{c−m…c+m}JCBOW(wordc−m…c+m)∂vj=0,∀(j≠c)∉{c−m…c+m}代码实现
补充部分
矩阵的每个行向量的长度归一化
情感分析
特征向量
最简单的特征选择方法就是取所有词向量的平均
1 | sentence_index = [tokens[i] for i in sentence] |
正则化
调参
惩罚因子对效果的影响
confusion matrix
关联性排序的一个东西,对角线上的元素越多,预测越准确。
代码参考
CS224n_Assignment_1
未找到相关的 Issues 进行评论
请联系 @mmmwhy 初始化创建