文章目录

  • The Final Project
    • The Default Final Project
      • Project Proposal
      • Project Milestone
    • Finding Research Topics
  • 再看门控循环单元和MT
    • The large output vocabulary problem in NMT (or all NLG)
      • 可能的解决方法
      • MT评价
        • BLEU Evaluation Metric
  • 如何做一个研究

The Final Project

  • 要么做默认的项目——SQuAD问答
  • 要么自己找一个项目——必须要TA/prof/post/PhD同意
  • 可以使用任何语言/框架,推荐使用Pytorch

The Default Final Project

Building atextualquestionanswering systemforSQuAD
数据集:https://rajpurkar.github.io/SQuAD-explorer/
任务示例:

应注意的几个点

Project Proposal

  1. 找一个与你的主题相关的研究论文
    对于默认的项目,在SQuAD榜单上的一篇论文就可以,但你或许应该从其他地方寻找一些有意思的QA/reading 相关工作
  2. 写一篇研究论文的摘要,描述你希望如何使用或获取它的思想,以及你计划如何扩展或改进它到你的最终项目工作中
  3. 根据需要描述,特别是对于定制项目:
    一个项目计划,相关的现有文献,你将使用/探索的模型的种类;你将使用的数据(以及如何获得),以及你将如何评估成功。

Project Milestone

  • 这是一份进度报告
  • 你不应该半途而废!
  • 描述你所做的实验
  • 描述获得的初步结果
  • 描述你打算如何度过剩下的时间

预计到目前为止,你已经实现了一些系统,并有了一些初步的实验结果(某些不寻常的项目除外)

Finding Research Topics

对于所有的科学,都有一下两种开始的方法

  • [钉子]从感兴趣的(域)问题开始,并尝试找到比当前已知/使用的更好/更好的解决方法
  • [锤子]从感兴趣的技术方法开始,找出扩展或改进它的好方法或新的应用方法

Project types
这不是一个详尽的列表,但大多数项目是其中之一

  1. 兴趣的应用/任务,探索如何有效地接近/解决它,通常应用现有的神经网络模型
  2. 实现一个复杂的神经架构并在一些数据上演示其性能
  3. 提出一种新的或变异的神经网络模型并探索其实证成功
  4. 分析项目。分析一个模型的行为:它如何表示语言知识,它能处理什么样的现象或它所犯的错误
  5. 稀有理论项目:显示模型类型、数据或数据表示的一些有趣的、非平凡的属性

一些例子

  1. 使用词级别和字符级别的莎士比亚分格诗歌生成
    提出了门控LSTM


3.

4.

How to find an interesting place to start?

  • 看ACL论文选集https://aclanthology.info
  • 也可以看主要的机器学习会议:NeurIPS,ICML,ICLR
  • 看cs224n过去的项目
  • 看看在线预印本服务器,尤其是: https://arxiv.org
  • 甚至可以在现实生活中找一个有趣的问题

一个统计各种任务当前最优解决方案的网站
https://paperswithcode.com/sota

**Finding a topic **

图灵奖获得者、斯坦福大学名誉教授艾德·费根鲍姆说,要听从他的导师艾未未先驱、图灵奖和诺贝尔奖获得者赫伯·西蒙的建议:
“如果你看到一个有很多人工作的研究领域,就去别的地方。”
“If you see a research area where many people are working, go somewhere else.”

对于大多数自定的项目,必须含有

  • 合适的数据,Usuallyaimingat:10,000+ labeled examples by milestone
  • 可行的任务
  • 自动评价标准
  • NLP是项目的中心

Finding data

  • 可以自己收集数据

    • 模型可能采用无监督数据
    • 可以自己标注少量数据
    • 可以找一个提供有效标注的网站,比如likes,stars,ratings等等
  • 大多数人使用前人建立的数据集

一些数据来源

  • Linguistic Data Consortium
    包含Treebanks, named entities,coreference data,lots of newswire, lots of speech with transcription,parallel MT data
    需要付费
  • Machine translation :http://statmt.org
  • Dependency parsing: Universal Dependencies
  • 一些其他数据
    • Look at Kaggle
    • Look at research papers
    • Look at lists of datasets :https://github.com/niderhoff/nlp-datasets

再看门控循环单元和MT

直觉上,RNN会发生什么?

  1. 衡量过去对未来的影响

    如上图,相同颜色为所指。使用了链导法则,上式表明了过去(hth_tht​)对未来(logp(xt+n∣x<t+n)logp(x_{t+n}|x_{<t+n})logp(xt+n​∣x<t+n​))的影响,此影响用未来的误差对现在的偏导衡量
  2. 在t处的扰动是如何影响logp(xt+n∣x<t+n)logp(x_{t+n}|x_{<t+n})logp(xt+n​∣x<t+n​)的?

Backpropagation through Time

问题:梯度消失是个大问题

  • 当梯度为0时,我们无法判断

    1. 数据中t和t+n之间没有依赖关系,或者
    2. 参数配置错误(消失梯度条件)
  • 普通RNN是否存在这个问题

    存在,如下图,会导致梯度消失

Gated Recurrent Unit

  • 这意味着错误必须通过所有中间节点反向传播:
  • 也许我们可以创建自适应的快捷连接

    上图与HighwayNet很像,通过utu_tut​向量控制哪部分数据(更新后的(^ht)\hat (h_t)(^​ht​)还是未更新的ht−1h_{t-1}ht−1​)传递下去
  • 或者让网络自适应地剪除不必要的连接
    注意图中的颜色,与上一种方法相比,这种方法增加了一个重置门。不再是全盘接收上一个时间步的隐藏状态,而是使用向量rtr_trt​来控制。

下面用图来总结普通RNN和门控RNN

  • 普通RNN:对于前一时间步的输出全盘读取,然后全盘更新

  • 门控RNN:
    改进在于

    • 不再是全盘读取,而是选择一个可读取子集,通过向量γ\gammaγ来决定前一时间步的输出hhh有多少参与下一时间步的更新
    • 不再是全部更新到下一时间步,而是选择一个可写子集,通过向量uuu来决定哪些数据(hhh还是γ⋅h\gamma \cdot hγ⋅h)选择为下一时间步的输出

      注:

      • 门控循环单元更加实际一些
      • 这里的思想与注意力有些重叠
  • 两个最常用的门控循环单元:GRU和LSTM
    GRU和我们之间讲的门控RNN差不多,而LSTM有三个门,其中两个来控制从之前的时间步读取多少内容,一个控制向下一时间步传递多少内容。

    • LSTM的计算图

      LSTM将所有的操作都用作门,所以所有的东西都可以被遗忘或者忽视。

      底部非线性的更新就和普通RNN相同

      上图中的这部分是关键点,这里没有使用乘,而是使用了加,将非线性的部分与ct−1c_{t-1}ct−1​相加得到ctc_tct​,类似在ctc_tct​和ct−1c_{t-1}ct−1​之间增加了一个直接的线性连接。(与最近出现的一些新的架构很类似,如ResNets)

The large output vocabulary problem in NMT (or all NLG)

  • 在seq2seq任务中,我们在解码器部分生成目标序列时,在每个时间步都使用softmax对词表中所有单词求生成概率。这样会消耗大量计算资源
  • 词生成问题:词表规模适中,通常为50K

可能的解决方法

  • Hierarchical softmax:树结构的词表
  • Noise-contrastive estimation:binary classification
  • 一次训练一部分词汇;测试一组可能的翻译:Jean, Cho, Memisevic, Bengio. ACL2015
  • 使用注意力弄清楚你在翻译什么:你可以做一些简单的事情,比如查字典
  • 更多的想法:单词片段;char。模型

MT评价

  • 人工评价

    • 忠实度和流利度(5 or 7个分数段)
    • 错误分类
    • 翻译排名比较(例如人工判断两个翻译哪一个更好)
  • 在一个应用中测试,将MT作为子组件
    • 例如,外语文献问答

      • 可能无法测试翻译的许多方面(例如,跨语言信息检索)
  • 自动评测:BLEU、其余如TER,METEOR

BLEU Evaluation Metric

(Papineni et al, ACL-2002)

  • n-gram精确度(分数介于0~1)

    • n-gram既能衡量忠实度和流利度
    • 对不同n-gram结果几何平均加和
  • 简短惩罚:短的句子更容易得到高分,因此对较短的句子乘一个惩罚
    具体计算例子:https://www.cnblogs.com/by-dream/p/7679284.html

  • 初始的结果显示BLEU分数与人类判断具有线性相关

  • MT的自动评测

    • 人们开始优化系统来提高BLEU分数

      • BLEU分数很快增加
      • 但BLEU与人类对质量的判断之间的相关性一直在下降
      • BLEU的分数现在接近人工翻译的分数,但它们的真实质量仍然远远低于人工翻译
    • 提出自动机器翻译评估已经成为它自己的研究领域
      • 有很多建议:TER,METEOR,MaxSim,SEPIA,RTE-MT
      • TERpA 是一个具有代表性的,好处理一些词的选择变化的度量
    • MT研究需要一些自动的度量,以允许快速的开发和评估

如何做一个研究

  1. 定义任务,例如:Summarization(摘要)
  2. 定义数据集
    1. 寻找学术数据集
      它们已有baselines
      例如:Newsroom Summarization Dataset:https://summari.es/
    2. 定义自己的数据(更难一些,需要新的baselines)
      允许连接到自己的研究
      新的问题提供新的机会
      有创意:Twitter、博客、新闻等。有很多整洁的网站,为新的任务提供创造性的机会
  3. Dataset hygiene :分离 devtest 和 test,稍后会讨论更多
  4. 定义自己的度量
    在网上搜索在该任务上已有的度量方法
    摘要: Rouge (Recall-Oriented Understudy for GistingEvaluation) ,它定义了人工摘要的 n-gram重叠
    人工评价仍然更适合于摘要;你可以做一个小规模的人类计算
  5. 建立一个baseline
    首先实现一个最简单的模型(通常对unigrams、bigrams 或平均字向量进行逻辑回归)
    计算训练集和开发集的度量
    分析错误
    如果度量令人惊讶且没有错误,那么,完成!问题太简单了。需要重新找个任务
  6. 实现现有的神经网络模型
    计算训练集和开发集的指标
    分析输出和错误
    这门课的最低标准
  7. 永远要接近您的数据(除了最后的测试集),即要总是在当前数据集上进行实验,不能根据其他数据集去改进模型等等
    可视化数据集
    收集汇总统计信息
    查看错误
    分析不同的超参数如何影响性能
  8. 尝试一些不同的模型以及模型变体,旨在通过有一个好的实验设置快速迭代

Pots of data

  • 许多公开可用的数据集都是使用train/dev/test结构发布的。我们应该只在开发完成时才运行测试集
  • 这样的拆分以相当大的数据集为前提。
  • 如果没有dev集或者您想要一个单独的tune集,那么您可以通过分割训练数据来创建一个tune集,但你必须权衡它的大小/有用性与减少的train集大小
  • 有一个固定的测试集可以确保所有系统都是根据相同的gold数据进行评估的。这通常是好的,但是如果测试集具有不寻常的属性,从而扭曲了任务的进度,则会出现问题。

Training models and pots of data

  • 在训练时,可能会发生过拟合,即模型在训练集上表现很好,但在测试集上表现很差
  • 监测和避免过拟合的方法时使用独立的验证集(开发集)和测试集
  • 在训练集上建立(估计/训练)模型。
  • 通常,然后在另一组独立的数据上设置更多的超参数,即调整集(tuning set ),调整集是超参数的训练集!
  • 当您在dev set(开发测试集或验证集)上运行时,您可以测量进度;如果您经常这样做,那么您就太适合dev集了,所以最好有第二个dev集,即dev2集
  • 只有在最后,你才能在一个测试集上评估和呈现最终的数字•使用最终的测试集极值几次…理想情况下只有一次
  • train、tune、dev和testset必须完全不同
  • 在训练集上测试是无效的,你会得到一个错误的好成绩。因为可能在训练集上发生过拟合
  • 您需要一个独立的验证集,如果验证集与训练集相同,则无法正确设置超参数
  • 我们需要意识到,每一次通过评估结果的变化而完成的调整,都是对数据集的拟合过程。我们需要对数据集的过拟合,但是不可以在独立测试集上过拟合,否则就失去了测试集的意义

Getting your neural network to train

  • 以积极的态度开始
  • 认识到残酷的现实
    • 有很多事情会导致神经网络不会学习或学习的不好,找到并修正它们(“debuggingandtuning”)可能会花费比实现模型更多的时间
  • 很难弄清楚这些东西是什么,但经验、实验护理和经验法则会有帮助!

Models are sensitive to learning rates

Models are sensitive to initialization

Training a (gated) RNN

  1. 使用LSTM或GRU:它使您的生活变得更加简单!
  2. 初始化递归矩阵为正交矩阵
  3. 用一个可感知的(小的)比例初始化其他矩阵
  4. 初始化忘记门偏差为1:默认记住
  5. 使用自适应学习速率算法:Adam, AdaDelta,…
  6. 梯度范数的裁剪:1-5似乎是一个合理的阈值,当与Adam 或 AdaDelta一起使用
  7. 要么只使用 dropout vertically,要么研究使用Bayesian dropout(Gal和Gahramani -不在PyTorch中原生支持)
  8. 要有耐心!优化需要时间

Experimental strategy

  • 增量地工作!
  • 从一个非常简单的模型开始
  • 一个接一个地添加修饰物让它开始工作,让模型使用它们中的每一个(或者放弃它们)
  • 最初运行在少量数据上
    • 你会更容易在一个小的数据集中看到bug
    • 像8个例子这样的东西很好
    • 通常,合成数据对这很有用
    • 确保你能得到100%的数据
      • 否则你的模型肯定要么不够强大,要么是破碎的
  • 在大型数据集中运行
    • 模型优化后的训练数据仍应接近100%

      • 否则,您可能想要考虑一种更强大的模式来过拟合训练数据
      • 对训练数据的过拟合在进行深度学习时并不可怕
        • 这些模型通常善于一般化,因为分布式表示共享统计强度,和对训练数据的过度拟合无关
  • 但是,现在仍然需要良好的泛化性能
    • 对模型进行正则化,直到它不与dev数据过拟合为止
    • 像L2正则化这样的策略是有用的
    • 但通常Dropout是成功的秘诀

Details matter!

  • 查看您的数据,收集汇总统计信息
  • 查看您的模型的输出,进行错误分析
  • 调优超参数对于神经网络几乎所有的成功都非常重要

报告要求

Lecture 9: Practical Tips for Final Projects相关推荐

  1. cs224n 2019 Lecture 9: Practical Tips for Final Projects

    主要内容: 项目的选择:可以选择默认的问答项目,也可以自定义项目 如何发现自定义项目 如何找到数据集 门神经网络序列模型的复习 关于机器翻译的一些话题 查看训练结果和进行评估 一.项目的选择 默认项目 ...

  2. PAMTRI:用于车辆重新识别的姿势感知多任务学习

    Today, we will discuss an unorthodox paper by NVIDIA Labs on Vehicle Re Identification. 今天,我们将讨论NVID ...

  3. 斯坦福CS224n追剧计划【大结局】:NLP和深度学习的未来

    一只小狐狸带你解锁炼丹术&NLP秘籍 简介 Stanford CS224n追剧计划是由夕小瑶的卖萌屋发起的开源开放NLP入门项目,借助github和微信群为大家提供同期小伙伴打卡讨论.内容沉淀 ...

  4. TED : Tips to boost your confidence

    目录 Preface : Recitation Version : Explanation Version : Translation Version : Preface : Hi, guys. I' ...

  5. Practical Advice for Building Deep Neural Networks

    practical-advice-for-building-deep-neural-networks/ In our machine learning lab, we've accumulated t ...

  6. 开发者必备英文网站合集

    这是一份对开发者有用的英文网站清单,涉及到从初学者到行业大牛成长的方方面面,还有很多事英语学习的网站,请相信我,这些肯定会对你有所帮助的. CareerBuilder.GitHub.Google.Ha ...

  7. 如何获得更多的自由开发者客户

    by Jad Joubran 通过贾德·乔布兰(Jad Joubran) 如何获得更多的自由开发者客户 (How to get more clients as a freelance develope ...

  8. 前端初学者开发学习视频_初学者学习前端开发的实用指南

    前端初学者开发学习视频 by Nikita Rudenko 通过尼基塔·鲁登科(Nikita Rudenko) 初学者学习前端开发的实用指南 (A practical guide to learnin ...

  9. ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...

    ux设计师怎样找同类产品 by Vinny 文尼 没有预算? 别找借口. 便宜的UX上的UX 2:让我们开始构建. (No budget? No excuse. UX on the cheap Par ...

最新文章

  1. wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
  2. 梭子鱼智能安全透视平台揭穿精密伪装威胁
  3. 01-spring配置详解
  4. iOS开发之加速开发使用的28个第三方库、优秀第三方库集合
  5. Mybatis中出现java.sql.SQLException: 无效的列类型: 1111
  6. 写个批处理脚本来帮忙干活--遍历文件夹字符串处理
  7. 欧姆龙PLC程序 本程序包括有欧姆龙CP1H脉冲程序案例,威纶通触摸屏程序
  8. html 强制用ie浏览,强制指定IE浏览器版本
  9. Ubuntu下的快捷键截图
  10. ML.NET 示例:聚类之客户细分
  11. 华为交换机主备命令_华为交换机命令中文意思
  12. people are able to buy the same products anywhere in the world
  13. 初探 sort 方法和 sorted 内置函数
  14. 解决vim与外界的复制粘贴(不用安装插件)
  15. android WebView加载视频只有声音没有画面
  16. Java Exer0910_4 输入身高(厘米)体重(公斤)计算BMI,四舍五入保留两位小数
  17. 招沿实业怎样让投资理财收益最大化
  18. ossec开源入侵检测系统安装配置
  19. threeJs设置控制器的阻尼效果,拖拽起来不生硬
  20. VS使用FFmpeg被声明为已否决的解决方案

热门文章

  1. 聚焦一带一路建设,助推装备工业发展—西部制博会3月15日即将启幕
  2. 微信小程序返回上一页 没有上一页的情况下返回首页
  3. Android以太坊钱包全部功能-基于web3j实现
  4. Oracle:cost耗费高的sql执行比cost耗费慢的效率快
  5. 什么是信息增益(Information Gain)
  6. oracle数据库报错:ORA-01654: 索引 aaa 无法通过 128 (在表空间 bb 中) 扩展
  7. 关于Python的面向对象
  8. DKN: Deep Knowledge-Aware Network for News Recommendation阅读笔记
  9. 费城交响乐团与上海爱乐乐团联合举行费城首届中国新年音乐会
  10. 《IT通史》读后感一