本文为斯坦福大学CS224d课程的中文版内容笔记,已获得斯坦福大学课程Richard Socher教授的授权翻译与发表。大数据文摘作品,未经授权禁止转载,转载具体要求见文末。
翻译:胡杨& 胥可
解答:寒小阳 & 龙心尘
编者按:本期文章是我们为读者带来的【斯坦福大学CS224d课程】专题第四期。文章内容为斯坦福cs224d 作业测验的内容,供有兴趣的读者感受、学习或自测。为了获得更好的阅读和测试效果,文章正文仅列出题目。
我们将详细解答内容制作成了PDF格式,有兴趣的读者可后台留言回复斯坦福下载。此外,对于有兴趣进一步学习交流的读者,我们将通过QQ群(鉴于微信人数限制问题)组织进行学习交流。
长按以下二维码将直接跳转至QQ加群
或者通过群号码169492443进群
不多说,直接开始做作业考试吧…
【Test 1】Softmax (10 分)
(part a) (5分)
证明针对任何输入向量x和常数c,softmax函数的输出不会随着输入向量偏移(也就是常数c)而改变。即:
其中x+c就是给x每一个元素加上常数c。注意:
提示:在实际应用中,经常会用到这个性质。为了稳定地计算softmax概率,我们会选择c=−maxixi。(即将x的每个元素减去最大的那个元素)。
(part b) (5 分) 已知一个N行d列的输入矩阵,计算每一行的softmax概率。在q1_softmax.py中写出你的实现过程,并使用python q1_softmax.py执行。
要求:你所写的代码应该尽可能的有效并以向量化的形式来实现。非向量化的实现将不会得到满分。
【Test 2】神经网络基础(30分)
(part a) (3 分) 推导sigmoid函数的导数,并且只以sigmoid函数值的形式写出来(导数的表达式里只包含σ(x),不包含x)。证明针对这个问题没必要单独考虑x。下面给出sigmoid函数形式:
(part b) (3 分) 当使用交叉熵损失来作为评价标准时,推导出损失函数以softmax为预测结果的输入向量θ的梯度。注意:
其中y是一个one-hot向量,y^是所有类别的预测出的概率向量。(提示:你需要考虑y的许多元素为0,并且假设y仅有第k个类别是1)
(part c) (6 分)
推导出单隐层神经网络关于输入x的梯度(也就是推导出∂J/∂x,其中J是神经网络的损失函数)。这个神经网络在隐层和输出层采用了sigmoid激活函数,y是one-hot编码向量,使用了交叉熵损失。(使用σ(x) 作为sigmoid梯度,并且你可以任意为推导过中的中间变量命名)
前向传播方程如下:
在编程问题中,我们假设输入向量(隐层变量和输出概率)始终是一个行向量。此处我们约定,当我们说要对向量使用sigmoid函数时,也就是说要对向量每一个元素使用sigmoid函数。Wi和bi(其中i=1,2)分别是两层的权重和偏移。
(part d) (2 分) 上面所说的这个神经网络有多少个参数?我们可以假设输入是Dx维,输出是Dy,隐层单元有H个。
(part e) (4 分)
在q2_sigmoid.py中补充写出sigmoid激活函数的和求它的梯度的对应代码。并使用python q2_sigmoid.py进行测试,同样的,测试用例有可能不太详尽,因此尽量检查下自己的代码。
(part f) (4 分) 为了方便debugging,我们需要写一个梯度检查器。在q2_gradcheck.py中补充出来,使用python q2_gradcheck.py测试自己的代码。
(part g) (8 分) 现在,在q2 neural.py中,写出只有一个隐层且激活函数为sigmoid的神经网络前向和后向传播代码。使用python q2_neural.py测试自己的代码。
【Test 3】word2vec(40分+5附加分)
(part a) (3分)
假设你得到一个关联到中心词c的预测词向量υc,并且这个词向量使用skip-gram方法生成,预测词使用的是softmax预测函数,它能够在word2vec模型中被找到。
式中,w代表第w个词,μw(w=1,…,W)是词库中全体词汇的输出词向量。假设为交叉熵损失函数,且词o是被预测的词汇(noe-hot/独热模型的标记向量中第o个元素为1),求解预测词向量 υc的所对应的梯度。
提示:问题2中的标记法将有助于此问题的解答。比如:设y^为各个词汇使用softmax函数预测得到的向量,y为期望词向量,而损失函数可以表示为:
其中,U=[μ1,μ2,…,μW]是全体输出向量形成的矩阵,确保你已经规定好你的向量和矩阵的方向。
(part b) (3分)
条件仍然如前一题所描述,求解输出词向量μw的梯度(包括μo在内)
(part c) (6分) 仍然延续(part a)和(part b),假设我们使用为预测的向量υc使用负采样损失的计算方式,并且设定期望输出词为o。假设获得了K个负样例(词),并且被记为1,…,K,分别作为这些样例的标签(o∉1,…,K)。那么,对于一个给定的词o,将其输出向量记作μo。这里,负采样损失函数如下:
其中,σ(⋅)为sigmoid激活函数。
当你完成上述操作之后,尝试简要描述这个损失函数比softmax-CE损失函数计算更为有效的原因(你可以给出递增式的学习率,即,给出softmax-CE损失函数的计算时间除以负采样损失函数的计算时间的结果)。
注释:由于我们打算计算目标函数的最小值而不是最大值,这里提到的损失函数与Mikolov等人最先在原版论文中描述的正好相反。
(part d) (8分)
试得到由skip-gram和CBOW算法分别算出的全部词向量的梯度,前提步骤和词内容集合[wordc-m,…,wordc-1,wordc,wordc+1,…,wordc+m]都已给出,其中,m是窗口的大小。将词wordk的输入和输出词向量分别记为υk和μk。
提示:可以随意使用函数F(o,υc)(其中o代表词汇)作为这一部分中Jsoftmax−CE(o,υc,…)或Jneg−sample(o,υc,…)损失函数的占位符——你将在编程部分看到一个非常有用的抽象类,那意味着你的解决方法可以用这样的形式表达:∂F(o,υc)/∂…
回忆skip-gram算法,以c为中心周边内容的损失值计算如下:
其中,wc+j代表距离中心词的第j个词。 CBOW略有不同,不同于使用υc作为预测向量,我们以υ^为底,在CBOW中(一个小小的变体),我们计算上下文输入词向量的和:
于是,CBOW的损失函数定义为:
注释:为了符合υ^在诸如代码部分中的各种表达规范,在skip-gram方法中,令:υ^=υc。
(part e) (12分)
在这一部分,你将实现word2vec模型,并且使用随机梯度下降方法(SGD)训练属于你自己的词向量。首先,在代码q3_word2vec.py中编写一个辅助函数对矩阵中的每一行进行归一化。同样在这个文件中,完成对softmax、负采样损失函数以及梯度计算函数的实现。然后,完成面向skip-gram的梯度损失函数。当你完成这些的时候,使用命令:python q3_word2vec.py对编写的程序进行测试。
注释:如果你选择不去实现CBOW(h部分),只需简单地删除对NotImplementedError错误的捕获即可完成你的测试。
(part f)(4分)
在代码q3_sgd.py中完成对随即梯度下降优化函数的实现。并且在该代码中运行测试你的实现。
(part g) (4分)
开始秀啦!现在我们将要载入真实的数据并使用你已经实现的手段训练词向量!我们将使用Stanford Sentiment Treebank (SST)数据集来进行词向量的训练,之后将他们应用到情感分析任务中去。在这一部分中,无需再编写更多的代码;只需要运行命令python q3 run.py即可。
注释:训练过程所占用的时间可能会很长,这取决于你所实现的程序的效率(一个拥有优异效率的实现程序大约需要占用1个小时)。努力去接近这个目标!
当脚本编写完成,需要完成对词向量的可视化显示。相应的结果同样被保存下来,如项目目录中的图片q3 word_vectors.png所示。包括在你作业中绘制的坐标图。简明解释最多三个句子在你的坐标图中的显示状况。
(part h) 附加题(5分)
在代码q3_word2vec.py中完成对CBOW的实现。
注释:这部分内容是可选的,但是在d部分中关于CBOW的梯度推导在这里并不适用!
【Test 4】 情感分析(20分)
现在,随着词向量的训练,我们准备展示一个简单的情感分析案例。随着词向量的训练,我们准备展示一个简单的情感分析。对于每条Stanford Sentiment Treebank数据集中的句子,将句子中全体词向量的平均值算作其特征值,并试图预测所提句子中的情感层次。短语的情感层次使用真实数值在原始数据集中表示,并被我们用以下5个类别来表示:
超级消极,比较消极,中立,积极,非常积极
对其分别进行从0到4的编码。在这一部分,你将学习用SGD来训练一个softmax回归机,并且通过不断地训练/调试验证来提高回归机的泛化能力。
(part a)(10分) 实现一个句子的特征生成器和softmax回归机。在代码q4_softmaxreg.py中完成对这个任务的实现,并运行命令python q4_ softmaxreg.py,对刚才完成的功能函数进行调试。
(part b)(2分)
解释当分类语料少于三句时为什么要引入正则化(实际上在大多数机器学习任务都这样)。
解答:为了避免训练集的过拟合以及对未知数据集的适应力不佳现象。
(part c)(4分) 在q4 sentiment.py中完成超参数的实现代码从而获取最佳的惩罚因子。你是如何选择的?报告你的训练、调试和测试精度,在最多一个句子中校正你的超参数选定方法。 注释:在开发中应该获取至少30%的准确率。
(part d)(4分)
绘出在训练和开发过程中的分类准确率,并在x轴使用对数刻度来对正则化值进行相关设置。这应该自动化的进行。包括在你作业中详细展示的坐标图q4_reg_acc.png。简明解释最多三个句子在此坐标图中的显示情况。
附录:斯坦福大学CS224d课程目录
Lecture 1:自然语言入门与次嵌入(已发布)
1.1 Intro to NLP and Deep Learning
1.2 Simple Word Vector representations: word2vec, GloVe
Lecture 2:词向量表示:语言模型,softmax分类器,单隐层神经网络(已发布)
2.1 Advanced word vector representations: language models, softmax, single layer networks
Lecture 3:神经网络与反向传播:命名实体识别案例(已发布)
3.1 Neural Networks and backpropagation — for named entity recognition
Lecture 4:神经网络与反向传播实践与应用建议
4.1 Project Advice, Neural Networks and Back-Prop (in full gory detail)
Lecture 5:实际应用技巧:梯度检查,过拟合,正则化,激励函数等等的细节
5.1 Practical tips: gradient checks, overfitting, regularization, activation functions, details
Lecture 6:Tensorflow介绍
6.1 Introduction to Tensorflow
Lecture 7:应用在语言模型和相关任务上的循环神经网络
7.1 Recurrent neural networks — for language modeling and other tasks
Lecture 8:在机器翻译等领域广泛应用的GRU和LSTM
8.1 GRUs and LSTMs — for machine translation
Lecture 9:可用于文本解析的循环神经网络
9.1 Recursive neural networks — for parsing
Lecture 10:用于其他任务(情感分析,段落分析等)上的循环神经网络
10.1 Recursive neural networks — for different tasks (e.g. sentiment analysis)
Lecture 11:用于句子分类的卷积神经网络
11.1 Convolutional neural networks — for sentence classification
Lecture 12:嘉宾讲座:Andrew Maas讲述语音识别
12.1 Guest Lecture with Andrew Maas: Speech recognition
Lecture 13:嘉宾讲座:Thang Luong讲述机器翻译
13.1 Guest Lecture with Thang Luong: Machine Translation
Lecture 14:嘉宾讲座:Quoc Le 讲述序列到序列学习与大规模深度学习
14.1 Guest Lecture with Quoc Le: Seq2Seq and Large Scale DL
Lecture 15:自然语言处理上深度学习前沿方向:动态记忆网络
15.1 The future of Deep Learning for NLP: Dynamic Memory Networks
◆ ◆ ◆
斯坦福CS224d翻译项目招募及组队情况
2016年6月6日,大数据文摘发布了《重磅启动!翻译斯坦福大学课程:深度学习与自然语言处理》一文,宣布正式获得斯坦福大学深度学习课程翻译授权,重磅启动了斯坦福深度学习课程CS224d的翻译工程,并且诚招翻译志愿者。
尽管专栏提出了较高的招募要求,在过去的一周中,我们依然收到了超过60人的报名清单,这些候选人中不乏精英大咖,他们中有的是有30多年相关教学经验的大学教授、有的是踌躇满志在这个领域有着自己独特见解的海外留学生、还有很多在相关行业从业超过10年的专业人士。
因为课程的专业度较高,本着对读者负责的原则,经过严格的筛选和试译流程,我们从中挑选了8位有着专业素养的译者组成了第一批战队,披挂出征,正式开启了翻译工程。第一篇翻译文章也在今天火热出炉。
当然,如果你已报名但是还未接到通知,请不要着急,我们的斯坦福课程共包括20+周,简历筛选和试译仍在进行,请耐心等待。
此外,后期我们还将陆续推出stanford、harvard等优秀高校的前言课程,所需译者还远远不够。如果你也希望像追剧一样翻译课程,希望和志同道合的小伙伴一起将数据科学普及给国内更多的读者,请点击文末阅读原文报名!
招募要求:
1.背景需求(满足其一即可):
专业是机器学习方向、数学统计方向或者ee方向
从事机器学习、数据挖掘相关工作
参加过相关数据挖掘竞赛或有相关项目经历者优先
能够运用markdown写文档加分
2.英文水平
翻译能力表达能力尚佳
课程翻译过程中以意译为主,有一定文字表达功力加分
3.工作投入
每周3个小时时长,持续3个月
如果你也对是相关专业的大拿,如果你也对数据科学/机器学习感兴趣,且乐于分享,请点击文末阅读原文报名加入我们。
关于转载
如需转载,请与我们联系(邮箱:zz@bigdatadigest.cn),获准转载的公众号请在显著位置注明作者和出处(转自:大数据文摘|bigdatadigest),并在文章结尾放置大数据文摘醒目二维码。未经许可的转载以及改编者,我们将依法追究其法律责任。◆ ◆ ◆
大数据文章斯坦福深度学习课程战队
专栏主编
译者战队
项目管理
内容运营:魏子敏
统筹:汪德诚
翻译斯坦福大学课程:深度学习与自然语言处理
斯坦福深度学习课程第二弹:词向量内部和外部任务评价
斯坦福深度学习课程第三弹:神经网络与反向传播





