Repository: exacity/deeplearningbook-chinese Branch: master Commit: a03e98d22985 Files: 148 Total size: 2.2 MB Directory structure: gitextract_mj_zyxg1/ ├── Chapter1/ │ ├── README.md │ ├── annotations.txt │ └── introduction.tex ├── Chapter10/ │ ├── README.md │ ├── annotations.txt │ └── sequence_modeling_rnn.tex ├── Chapter11/ │ ├── README.md │ └── practical_methodology.tex ├── Chapter12/ │ ├── README.md │ ├── annotations.txt │ └── applications.tex ├── Chapter13/ │ ├── README.md │ ├── annotations.txt │ └── linear_factor_models.tex ├── Chapter14/ │ ├── README.md │ ├── annotations.txt │ └── autoencoders.tex ├── Chapter15/ │ ├── README.md │ ├── annotations.txt │ └── representation_learning.tex ├── Chapter16/ │ ├── README.md │ ├── annotations.txt │ └── structured_probabilistic_modelling.tex ├── Chapter17/ │ ├── README.md │ ├── annotations.txt │ └── monte_carlo_methods.tex ├── Chapter18/ │ ├── README.md │ └── confronting_the_partition_function.tex ├── Chapter19/ │ ├── README.md │ ├── annotations.txt │ └── approximate_inference.tex ├── Chapter2/ │ ├── README.md │ ├── annotations.txt │ └── linear_algebra.tex ├── Chapter20/ │ ├── README.md │ └── deep_generative_models.tex ├── Chapter3/ │ ├── README.md │ ├── annotations.txt │ └── probability_and_information_theory.tex ├── Chapter4/ │ ├── README.md │ ├── annotations.txt │ └── numerical_computation.tex ├── Chapter5/ │ ├── README.md │ ├── annotations.txt │ └── machine_learning_basics.tex ├── Chapter6/ │ ├── README.md │ ├── annotations.txt │ └── deep_feedforward_networks.tex ├── Chapter7/ │ ├── README.md │ ├── annotations.txt │ └── regularization.tex ├── Chapter8/ │ ├── README.md │ ├── annotations.txt │ └── optimization_for_training_deep_models.tex ├── Chapter9/ │ ├── README.md │ ├── annotations.txt │ └── convolutional_networks.tex ├── Makefile ├── README.md ├── acknowledgments.tex ├── acknowledgments_github.md ├── applied_math_and_machine_learning_basics.tex ├── breakcites.sty ├── deep_learning_research.tex ├── deep_networks_modern_practices.tex ├── dlbook_cn.bib ├── dlbook_cn.tex ├── docs/ │ ├── Gemfile │ ├── _config.yml │ ├── _includes/ │ │ ├── browser-upgrade.html │ │ ├── disqus_comments.html │ │ ├── feed-footer.html │ │ ├── footer.html │ │ ├── gallery │ │ ├── head.html │ │ ├── math_symbol.html │ │ ├── navigation.html │ │ ├── pagination.html │ │ ├── read-more.html │ │ ├── read-time-index.html │ │ ├── read-time.html │ │ ├── scripts.html │ │ └── social-share.html │ ├── _layouts/ │ │ ├── page.html │ │ ├── post-index.html │ │ └── post.html │ ├── _posts/ │ │ ├── 2016-12-01-Chapter1_introduction.md │ │ ├── 2016-12-02-Chapter2_linear_algebra.md │ │ ├── 2016-12-03-Chapter3_probability_and_information_theory.md │ │ ├── 2016-12-04-Chapter4_numerical_computation.md │ │ ├── 2016-12-05-Chapter5_machine_learning_basics.md │ │ ├── 2016-12-06-Chapter6_deep_feedforward_networks.md │ │ ├── 2016-12-07-Chapter7_regularization.md │ │ ├── 2016-12-08-Chapter8_optimization_for_training_deep_models.md │ │ ├── 2016-12-09-Chapter9_convolutional_networks.md │ │ ├── 2016-12-10-Chapter10_sequence_modeling_rnn.md │ │ ├── 2016-12-11-Chapter11_practical_methodology.md │ │ ├── 2016-12-12-Chapter12_applications.md │ │ ├── 2016-12-13-Chapter13_linear_factor_models.md │ │ ├── 2016-12-14-Chapter14_autoencoders.md │ │ ├── 2016-12-15-Chapter15_representation_learning.md │ │ ├── 2016-12-16-Chapter16_structured_probabilistic_modelling.md │ │ ├── 2016-12-17-Chapter17_monte_carlo_methods.md │ │ ├── 2016-12-18-Chapter18_confronting_the_partition_function.md │ │ ├── 2016-12-19-Chapter19_approximate_inference.md │ │ └── 2016-12-20-Chapter20_deep_generative_models.md │ ├── _sass/ │ │ ├── _animations.scss │ │ ├── _coderay.scss │ │ ├── _dl-menu.scss │ │ ├── _elements.scss │ │ ├── _grid.scss │ │ ├── _mixins.scss │ │ ├── _page.scss │ │ ├── _reset.scss │ │ ├── _site.scss │ │ ├── _syntax.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ └── vendor/ │ │ ├── font-awesome/ │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ └── magnific-popup/ │ │ ├── _settings.scss │ │ └── magnific-popup.scss │ ├── assets/ │ │ ├── css/ │ │ │ └── main.scss │ │ ├── fonts/ │ │ │ └── FontAwesome.otf │ │ └── js/ │ │ ├── _main.js │ │ └── plugins/ │ │ ├── jquery.dlmenu.js │ │ ├── jquery.fitvids.js │ │ ├── jquery.magnific-popup.js │ │ └── respond.js │ └── index.html ├── math_symbol.tex ├── natbib.bst ├── notation.tex ├── scripts/ │ ├── parse_anno.py │ └── parse_gls.py ├── terminology.tex └── website.tex ================================================ FILE CONTENTS ================================================ ================================================ FILE: Chapter1/README.md ================================================ #第一章笔记 ================================================ FILE: Chapter1/annotations.txt ================================================ {'user': 'acct:swordyork@hypothes.is', 'text': '不通顺', 'origin_text': '到迅速解决,比如那些可以通过一系列形式的数学规则来描述的问题。 !!!人工智能的真正挑战被证明是解决对人来说很容易执行,但很难形式化描述的任务,也就是我们人类能自动的靠直观解决的问题,比如识别所说的话或图像中的脸。!!! 这本书讨论这些更直观的问题一种解决方案。这种解决方案是为了', 'time': '2017-01-09T03:35'} {'user': 'acct:swordyork@hypothes.is', 'text': '走法?', 'origin_text': '设计一种成功的国际象棋策略是巨大的成就,但向计算机描述棋子及其 !!!允许的移动!!! 并不是挑战的困难所在。国际象棋完全可以由一个非常简短的、完全形', 'time': '2017-01-09T03:36'} {'user': 'acct:zplin@hypothes.is', 'text': '是不可能的', 'origin_text': '映射到对象标识的函数非常复杂。如果直接处理,学习或评估此映射似乎 !!!是不可逾越的!!! 。深度学习将所需的复杂映射分解为一系列嵌套的简单映射(每个由模型', 'time': '2017-01-09T17:33'} {'user': 'acct:zplin@hypothes.is', 'text': '第一层可以轻易地通过比较相邻像素的亮度来识别边缘', 'origin_text': '中的关系。这里的图像是每个隐藏单元表示的特征的可视化。给定像素, !!!第一层可以比较相邻像素的亮度容易地识别边缘。!!! 给定第一隐藏层中边的描述,第二隐藏层可以容易地搜索可识别为角和扩', 'time': '2017-01-09T17:37'} {'user': 'acct:zplin@hypothes.is', 'text': '有了第一隐藏层描述的边缘', 'origin_text': '的可视化。给定像素,第一层可以比较相邻像素的亮度容易地识别边缘。 !!!给定第一隐藏层中边的描述!!! ,第二隐藏层可以容易地搜索可识别为角和扩展轮廓的边集合。给定第二', 'time': '2017-01-09T17:40'} {'user': 'acct:zplin@hypothes.is', 'text': '是深度学习的一方面。另一个方面是', 'origin_text': '不同的数学函数,并为输入提供新的表示。学习数据正确表示的想法 !!!是解释深度学习的一个观点。另一个观点是!!! 深度允许计算机学习一个多步骤的计算机程序。表示的每一层可以被认', 'time': '2017-01-09T17:56'} {'user': 'acct:zplin@hypothes.is', 'text': '从这个角度上看,', 'origin_text': '顺序指令提供了极大的能力,因为后面的指令可以参考早期指令的结果。 !!!根据这个观点!!! ,一层的激活函数没有必要对解释输入的变化因素进行编码。表示还存', 'time': '2017-01-09T18:04'} {'user': 'acct:zplin@hypothes.is', 'text': '在某层激活函数里,并非所有信息都蕴函着解释输入的变化因素', 'origin_text': '大的能力,因为后面的指令可以参考早期指令的结果。根据这个观点, !!!一层的激活函数没有必要对解释输入的变化因素进行编码!!! 。表示还存储着协助程序执行的状态信息,使输入更加有意义。这里', 'time': '2017-01-09T18:10'} {'user': 'acct:zplin@hypothes.is', 'text': '表示层还存储着状态信息用于帮助程序理解输入\n\nmake sense of the input == explain the input', 'origin_text': '这个观点,一层的激活函数没有必要对解释输入的变化因素进行编码。 !!!表示还存储着协助程序执行的状态信息,使输入更加有意义!!! 。这里的状态信息类似于传统计算机程序中的计数器或指针。它与具', 'time': '2017-01-09T18:15'} {'user': 'acct:zplin@hypothes.is', 'text': '两个用不同语言编写的等价程序长度不同', 'origin_text': '为这是描述每个给定输入后,计算模型输出的流程图的最长路径。正如 !!!两个等价的计算机程序根据不同的语言将具有不同的长度!!! ,相同的函数可以被绘制为具有不同深度的流程图,这取决于我们允许使', 'time': '2017-01-09T18:23'} {'user': 'acct:zplin@hypothes.is', 'text': '我们可以用来当作一个步骤的函数', 'origin_text': '不同的长度,相同的函数可以被绘制为具有不同深度的流程图,这取决于 !!!我们允许使用的单步函数!!! 。\\fig?说明了语言的选择怎样给相同的架构两个不同的衡量。', 'time': '2017-01-09T18:25'} {'user': 'acct:zplin@hypothes.is', 'text': '最有意义的', 'origin_text': '。由于并不总是清楚计算图的深度或概率模型图的深度哪一个是 !!!最相关!!! 的,并且由于不同的人选择不同的最小元素集来构建相应的图,导致架构', 'time': '2017-01-09T18:32'} {'user': 'acct:zhzhang@hypothes.is', 'text': '发明家', 'origin_text': 'lus)和赫淮斯托斯(Hephaestus)都可以被看作传说中的 !!!造物者!!! ,而加拉蒂亚(Galatea)、塔洛斯(Talos)和潘多拉(P', 'time': '2017-01-10T05:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '人工', 'origin_text': 'a)、塔洛斯(Talos)和潘多拉(Pandora)都可以被视为 !!!人造!!! 生命{cite?}。当人类第一次构思可编程计算机时,就已经在', 'time': '2017-01-10T05:54'} {'user': 'acct:zhzhang@hypothes.is', 'text': '发明家', 'origin_text': ' 远在古希腊时期, !!!创造者!!! 就梦想着创造能思考的机器。神话人物皮格马利翁(Pygmalio', 'time': '2017-01-10T05:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“都”', 'origin_text': '代达罗斯(Daedalus)和赫淮斯托斯(Hephaestus) !!!都!!! 可以被看作传说中的造物者,而加拉蒂亚(Galatea)、塔洛斯(', 'time': '2017-01-10T05:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改为“则”', 'origin_text': 'Galatea)、塔洛斯(Talos)和潘多拉(Pandora) !!!都!!! 可以被视为人造生命{cite?}。当人类第一次构思可编程计算', 'time': '2017-01-10T05:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '第一台计算机', 'origin_text': '构思可编程计算机时,就已经在思考计算机能否变得智能(尽管这距造出 !!!第一台!!! 还有一百多年){cite?}。如今,人工智能是一个具有许多实际', 'time': '2017-01-10T08:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '众多', 'origin_text': '出第一台还有一百多年){cite?}。如今,人工智能是一个具有 !!!许多!!! 实际应用和活跃研究课题的领域,并蓬勃发展着。我们指望通过智能软', 'time': '2017-01-10T08:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '期望', 'origin_text': '是一个具有许多实际应用和活跃研究课题的领域,并蓬勃发展着。我们 !!!指望!!! 通过智能软件自动化处理常规劳动、理解语音或图像、帮助医学诊断和支', 'time': '2017-01-10T08:25'} {'user': 'acct:zhzhang@hypothes.is', 'text': '自动地', 'origin_text': '际应用和活跃研究课题的领域,并蓬勃发展着。我们指望通过智能软件 !!!自动化!!! 处理常规劳动、理解语音或图像、帮助医学诊断和支持基础科学研究。', 'time': '2017-01-10T08:26'} {'user': 'acct:zhzhang@hypothes.is', 'text': '。', 'origin_text': '些对人类智力来说非常困难但对计算机来说相对简单的问题得到迅速解决 !!!,!!! 比如那些可以通过一系列形式的数学规则来描述的问题。人工智能的真', 'time': '2017-01-10T08:28'} {'user': 'acct:zhzhang@hypothes.is', 'text': '比如,', 'origin_text': '对人类智力来说非常困难但对计算机来说相对简单的问题得到迅速解决, !!!比如!!! 那些可以通过一系列形式的数学规则来描述的问题。人工智能的真正挑', 'time': '2017-01-10T08:28'} {'user': 'acct:zhzhang@hypothes.is', 'text': '形式化', 'origin_text': '但对计算机来说相对简单的问题得到迅速解决,比如那些可以通过一系列 !!!形式!!! 的数学规则来描述的问题。人工智能的真正挑战被证明是解决对人来说', 'time': '2017-01-10T08:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '人工智能的真正挑战在于去解决那些对人来说很容易执行、但很难形式化来描述的任务,即这些问题我们人类能够很自然地靠直觉来求解,比如识别所说的话或图像中的脸。', 'origin_text': '得到迅速解决,比如那些可以通过一系列形式的数学规则来描述的问题。 !!!人工智能的真正挑战被证明是解决对人来说很容易执行,但很难形式化描述的任务,也就是我们人类能自动的靠直观解决的问题,比如识别所说的话或图像中的脸!!! 。这本书讨论这些更直观的问题一种解决方案。这种解决方案是为', 'time': '2017-01-10T08:43'} {'user': 'acct:zhzhang@hypothes.is', 'text': '比较直观问题的解决方案。\n', 'origin_text': '直观解决的问题,比如识别所说的话或图像中的脸。这本书讨论这些 !!!更直观的问题!!! 一种解决方案。这种解决方案是为了让计算机从经验中学习,并通过层', 'time': '2017-01-10T08:48'} {'user': 'acct:zhzhang@hypothes.is', 'text': '该方案是让计算机从经验中学习', 'origin_text': '的话或图像中的脸。这本书讨论这些更直观的问题一种解决方案。 !!!这种解决方案是为了让计算机从经验中学习!!! ,并通过层次化概念体系来理解世界,其中每个概念通过与较简单概念之', 'time': '2017-01-10T09:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '根据', 'origin_text': '的问题一种解决方案。这种解决方案是为了让计算机从经验中学习,并 !!!通过!!! 层次化概念体系来理解世界,其中每个概念通过与较简单概念之间的联系', 'time': '2017-01-10T09:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '而每个概念是通过与某些相对简单的概念之间的关系来定义', 'origin_text': '方案是为了让计算机从经验中学习,并通过层次化概念体系来理解世界, !!!其中每个概念通过与较简单概念之间的联系来定义!!! 。让计算机通过经验获取知识,就不需要人类来形式化地列举计算机需', 'time': '2017-01-10T09:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '从', 'origin_text': '解世界,其中每个概念通过与较简单概念之间的联系来定义。让计算机 !!!通过!!! 经验获取知识,就不需要人类来形式化地列举计算机需要的所有知识。', 'time': '2017-01-10T09:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': '从经验中', 'origin_text': '解世界,其中每个概念通过与较简单概念之间的联系来定义。让计算机 !!!通过经验!!! 获取知识,就不需要人类来形式化地列举计算机需要的所有知识。层次', 'time': '2017-01-10T09:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这可以避免由人类来给计算机形式化地指定它需要的所有知识', 'origin_text': '念通过与较简单概念之间的联系来定义。让计算机通过经验获取知识, !!!就不需要人类来形式化地列举计算机需要的所有知识!!! 。层次化的概念让计算机构建较简单的概念来学习复杂概念。如果绘', 'time': '2017-01-10T09:14'} {'user': 'acct:zhzhang@hypothes.is', 'text': '基于', 'origin_text': '如何建立在彼此之上的图,我们将得到一张”深”(层次很多)的图。 !!!出!!! 于这个原因,我们称这种方法为AI深度学习。许多AI的早期', 'time': '2017-01-10T12:41'} {'user': 'acct:zhzhang@hypothes.is', 'text': '贫瘠且形式化', 'origin_text': '们称这种方法为AI深度学习。许多AI的早期成功发生在相对 !!!干净且形式!!! 的环境中, 计算机不需要具备很多关于世界的知识。例如,IBM的', 'time': '2017-01-10T12:43'} {'user': 'acct:zhzhang@hypothes.is', 'text': '某种严格', 'origin_text': '}。当然国际象棋是一个非常简单的领域,仅含有64个位置并只能以 !!!严格!!! 限制的方式移动32个棋子。设计一种成功的国际象棋策略是巨大的成', 'time': '2017-01-10T12:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '“走法”比较好', 'origin_text': '一种成功的国际象棋策略是巨大的成就,但向计算机描述棋子及其允许的 !!!移动!!! 并不是挑战的困难所在。国际象棋完全可以由一个非常简短的、完全形', 'time': '2017-01-10T12:46'} {'user': 'acct:zhzhang@hypothes.is', 'text': '来描述', 'origin_text': '难所在。国际象棋完全可以由一个非常简短的、完全形式化的规则列表 !!!描述!!! ,并可以轻松由程序员提前提供。讽刺的是,抽象和形式的任务对人', 'time': '2017-01-10T12:47'} {'user': 'acct:zhzhang@hypothes.is', 'text': '容易地', 'origin_text': '际象棋完全可以由一个非常简短的、完全形式化的规则列表描述,并可以 !!!轻松!!! 由程序员提前提供。讽刺的是,抽象和形式的任务对人类而言是最困', 'time': '2017-01-10T12:47'} {'user': 'acct:zhzhang@hypothes.is', 'text': '事先准备好', 'origin_text': '以由一个非常简短的、完全形式化的规则列表描述,并可以轻松由程序员 !!!提前提供!!! 。讽刺的是,抽象和形式的任务对人类而言是最困难的脑力任务之一', 'time': '2017-01-10T12:48'} {'user': 'acct:zhzhang@hypothes.is', 'text': '形式化', 'origin_text': '的规则列表描述,并可以轻松由程序员提前提供。讽刺的是,抽象和 !!!形式!!! 的任务对人类而言是最困难的脑力任务之一,对计算机而言却属于最容易', 'time': '2017-01-10T13:27'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但对', 'origin_text': '讽刺的是,抽象和形式的任务对人类而言是最困难的脑力任务之一, !!!对!!! 计算机而言却属于最容易的。即使是最好的人类棋手,计算机也早已能', 'time': '2017-01-10T13:27'} {'user': 'acct:zhzhang@hypothes.is', 'text': '识别目标或语音任务中', 'origin_text': '是最好的人类棋手,计算机也早已能够将其打败,但直到最近计算机才在 !!!对象识别或语音任务中!!! 达到人类平均水平。一个人的日常生活需要关于世界的巨量知识。很', 'time': '2017-01-10T13:29'} {'user': 'acct:zhzhang@hypothes.is', 'text': '形式化', 'origin_text': '世界的巨量知识。很多这方面的知识是主观的、直观的,因此很难通过 !!!形式!!! 的方式表达清楚。为了表现出智能,计算机需要获取同样的知识。人', 'time': '2017-01-10T13:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '形式化', 'origin_text': '算机需要获取同样的知识。人工智能的一个关键挑战就是如何将这些非 !!!形式!!! 的知识传达给计算机。一些人工智能项目都力求将关于世界的知识用', 'time': '2017-01-10T13:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '计算机可以使用逻辑推理规则来自动地理解这些形式化语言中的申明', 'origin_text': '一些人工智能项目都力求将关于世界的知识用形式化的语言进行硬编码。 !!!计算机可以通过这些形式化语言自动地使用逻辑推理规则来理解声明!!! 。这就是所谓的人工智能的知识图谱方法。这些项目都没有导致重大', 'time': '2017-01-11T04:17'} {'user': 'acct:zhzhang@hypothes.is', 'text': '把英文 (hard-code) 附上', 'origin_text': '机。一些人工智能项目都力求将关于世界的知识用形式化的语言进行 !!!硬编码!!! 。计算机可以通过这些形式化语言自动地使用逻辑推理规则来理解声明', 'time': '2017-01-11T04:09'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '识图谱方法。这些项目都没有导致重大的成功。其中最著名的项目是 !!!的!!! Cyc {cite?}。Cyc包括一个推断引擎和一个使用Cyc', 'time': '2017-01-11T04:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '众所周知', 'origin_text': '可以通过这些形式化语言自动地使用逻辑推理规则来理解声明。这就是 !!!所谓!!! 的人工智能的知识图谱方法。这些项目都没有导致重大的成功。其中', 'time': '2017-01-11T04:28'} {'user': 'acct:zhzhang@hypothes.is', 'text': '人们设法设计出足够复杂的形式规则去精确地描述世界', 'origin_text': '数据库。这些声明是由人类监督者输入的。这是一个笨拙的过程。 !!!人们设法设计出足够复杂的、能准确描述世界的形式规则!!! 。例如,Cyc不能理解一个关于名为Fred的人在早上剃须的故事', 'time': '2017-01-11T04:33'} {'user': 'acct:zhzhang@hypothes.is', 'text': '正拿', 'origin_text': '引擎检测到故事中的不一致性:它知道人没有电气零件,但由于Fred !!!拿!!! 着一个电动剃须刀,它认为实体”FredWhileShaving”', 'time': '2017-01-11T04:35'} {'user': 'acct:zhzhang@hypothes.is', 'text': '“Fred在剃须”(“FredWhileShaving”)', 'origin_text': '知道人没有电气零件,但由于Fred拿着一个电动剃须刀,它认为实体 !!!”FredWhileShaving”!!! 含有电气部件。因此就会产生这样的疑问——Fred在刮胡子的时候', 'time': '2017-01-11T04:46'} {'user': 'acct:zhzhang@hypothes.is', 'text': ' 因此它产生了这样的疑问', 'origin_text': '刀,它认为实体”FredWhileShaving”含有电气部件。 !!!因此就会产生这样的疑问!!! ——Fred在刮胡子的时候是否仍然是一个人。依靠硬编码的知识', 'time': '2017-01-11T04:49'} {'user': 'acct:zhzhang@hypothes.is', 'text': ' 比如,一个被称为逻辑回归的简单机器学习算法', 'origin_text': '使计算机能够解决涉及现实世界知识的问题,并能作出看似主观的决策。 !!!所谓逻辑回归的简单机器学习算法!!! 可以决定是否建议剖腹产{cite?}。所谓朴素贝叶斯的简单机器', 'time': '2017-01-11T05:04'} {'user': 'acct:zhzhang@hypothes.is', 'text': '而朴素贝叶斯---同样是一个简单机器学习算法---则可以', 'origin_text': '辑回归的简单机器学习算法可以决定是否建议剖腹产{cite?}。 !!!所谓朴素贝叶斯的简单机器学习算法可以!!! 区分垃圾电子邮件和合法电子邮件。这些简单的机器学习算法的', 'time': '2017-01-11T04:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '在整个计算机科学乃至日常生活中,对表示的依赖都是一个的普遍现象', 'origin_text': 'RI扫描的单一像素与分娩过程中的并发症只有微不足道的相关性。 !!!对表示的依赖是在整个计算机科学乃至日常生活中出现的普遍现象!!! 。在计算机科学中,如果数据集合经过精巧的结构化并建立索引,数据', 'time': '2017-01-11T05:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '成指数级地', 'origin_text': ',如果数据集合经过精巧的结构化并建立索引,数据操作的处理速度可以 !!!成倍的!!! 加快(如搜索)。人们可以很容易地在阿拉伯数字的表示下进行算术运', 'time': '2017-01-11T05:15'} {'user': 'acct:zhzhang@hypothes.is', 'text': '被精巧地结构化并被智能地索引', 'origin_text': '科学乃至日常生活中出现的普遍现象。在计算机科学中,如果数据集合 !!!经过精巧的结构化并建立索引!!! ,数据操作的处理速度可以成倍的加快(如搜索)。人们可以很容易地', 'time': '2017-01-11T05:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '因此,毫不奇怪', 'origin_text': '拉伯数字的表示下进行算术运算,但在罗马数字的表示下运算会更耗时。 !!!毫不奇怪!!! ,表示的选择会对机器学习算法的性能产生巨大的影响。\\fig?显', 'time': '2017-01-11T05:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '展示', 'origin_text': '怪,表示的选择会对机器学习算法的性能产生巨大的影响。\\fig? !!!显示!!! 了一个简单的可视化例子。\\begin{figure}[!htb', 'time': '2017-01-11T05:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '、', 'origin_text': '有用特征是说话者声道大小的估计。这个特征为判断说话者是一个男性 !!!,!!! 女性还是儿童提供了有力线索。然而,对于许多任务来说,很难知道', 'time': '2017-01-11T06:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '看上去像什么', 'origin_text': '在作为特征。不幸的是,我们难以准确地从像素值的角度描述一个车轮 !!!看起来如何!!! 。车轮具有简单的几何形状,但它的图像可以因为环境而变得很复杂,', 'time': '2017-01-11T06:17'} {'user': 'acct:zhzhang@hypothes.is', 'text': '因场景', 'origin_text': '描述一个车轮看起来如何。车轮具有简单的几何形状,但它的图像可以 !!!因为环境!!! 而变得很复杂,如落在车轮上的阴影、太阳照亮的车轮的金属零件、汽车', 'time': '2017-01-11T06:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '可能因场景而', 'origin_text': '角度描述一个车轮看起来如何。车轮具有简单的几何形状,但它的图像 !!!可以因为环境而!!! 变得很复杂,如落在车轮上的阴影、太阳照亮的车轮的金属零件、汽车的', 'time': '2017-01-11T06:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '的一个途径', 'origin_text': '的挡泥板或者遮挡的车轮一部分的前景物体等等。解决这个问题 !!!一个途径的!!! 是使用机器学习来发现表示本身,而不仅仅把表示映射到输出。这种方', 'time': '2017-01-11T06:22'} {'user': 'acct:zhzhang@hypothes.is', 'text': '挖掘', 'origin_text': '分的前景物体等等。解决这个问题一个途径的是使用机器学习来 !!!发现!!! 表示本身,而不仅仅把表示映射到输出。这种方法被称为表示学习。', 'time': '2017-01-11T06:22'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这种方法我们称之为表示学习', 'origin_text': '途径的是使用机器学习来发现表示本身,而不仅仅把表示映射到输出。 !!!这种方法被称为表示学习!!! 。学习到的表示往往比手动设计的表示表现得更好。并且它们只需最', 'time': '2017-01-11T06:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '翻译为“自编码器” 比较贴切些', 'origin_text': '要花费整个社群研究人员几十年的时间。表示学习算法的典型例子是 !!!自动编码器!!! 。自动编码器组合了将输入转换到不同表示编码器函数和将新的表示转', 'time': '2017-01-11T06:28'} {'user': 'acct:zhzhang@hypothes.is', 'text': '自动编码器由一个编码器函数和一个解码器函数组成。编码器把输入数据转换为一种不同的表示,而解码器则把这个新的表示变换成原来的格式。', 'origin_text': '研究人员几十年的时间。表示学习算法的典型例子是自动编码器。 !!!自动编码器组合了将输入转换到不同表示编码器函数和将新的表示转回原来形式的解码器函数。!!! 自动编码器的训练目标是,输入经过编码器和解码器之后尽可能多的', 'time': '2017-01-11T10:52'} {'user': 'acct:zhzhang@hypothes.is', 'text': '输入数据', 'origin_text': '将新的表示转回原来形式的解码器函数。 自动编码器的训练目标是, !!!输入!!! 经过编码器和解码器之后尽可能多的保留信息,同时希望新的表示有各种', 'time': '2017-01-11T11:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': '训练自编码器我们期望当输入数据经过编码器和解码器之后尽可能多地保留信息', 'origin_text': '换到不同表示编码器函数和将新的表示转回原来形式的解码器函数。 !!!自动编码器的训练目标是,输入经过编码器和解码器之后尽可能多的保留信息!!! ,同时希望新的表示有各种好的属性。不同种类的自动编码器的目标是实', 'time': '2017-01-11T11:40'} {'user': 'acct:zhzhang@hypothes.is', 'text': '设计用于学习特征', 'origin_text': '不同种类的自动编码器的目标是实现不同种类的属性。当设计特征或 !!!学习特征!!! 的算法时,我们的目标通常是分离出能解释观察数据的\\textbf{', 'time': '2017-01-11T11:42'} {'user': 'acct:zhzhang@hypothes.is', 'text': '在许多现实的人工智能应用中,', 'origin_text': ',变化的因素包括汽车的位置、它的颜色、太阳的角度和亮度。 !!!在现实世界,许多人工智能应用!!! 困难的一个重要原因是很多变化因素影响着我们能够观察到的每一个数据', 'time': '2017-01-11T11:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': '困难主要源于', 'origin_text': '它的颜色、太阳的角度和亮度。在现实世界,许多人工智能应用 !!!困难的一个重要原因是!!! 很多变化因素影响着我们能够观察到的每一个数据。在夜间,一张图片', 'time': '2017-01-11T11:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': ' 比如,在一张红色汽车图片中,其单个像素在夜间可能会非常接近黑色。', 'origin_text': '难的一个重要原因是很多变化因素影响着我们能够观察到的每一个数据。 !!!在夜间,一张图片中红色汽车的单个像素可能会非常接近黑色。!!! 汽车轮廓的形状取决于视角。大多数应用需要我们\\emph{理清', 'time': '2017-01-11T11:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '辨识', 'origin_text': '素,诸如说话者的口音,只能对数据进行复杂的、接近人类水平的理解来 !!!确定!!! 。它几乎与获得原来问题的表示一样困难,乍一看,表示学习似乎并不', 'time': '2017-01-11T12:14'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改为“这”', 'origin_text': '说话者的口音,只能对数据进行复杂的、接近人类水平的理解来确定。 !!!它!!! 几乎与获得原来问题的表示一样困难,乍一看,表示学习似乎并不能帮助', 'time': '2017-01-11T12:14'} {'user': 'acct:zhzhang@hypothes.is', 'text': '因此,乍一看,', 'origin_text': '接近人类水平的理解来确定。它几乎与获得原来问题的表示一样困难, !!!乍一看!!! ,表示学习似乎并不能帮助我们。深度学习通过其它较简单的表示来', 'time': '2017-01-11T12:15'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它解决', 'origin_text': '并不能帮助我们。深度学习通过其它较简单的表示来表达复杂表示, !!!解决!!! 了表示学习中的核心问题。\\begin{figure}[!ht', 'time': '2017-01-11T12:19'} {'user': 'acct:zhzhang@hypothes.is', 'text': '展示了深度学习系统如何通过组合较简单的概念---例如转角和轮廓,它们转而被边线定义--来表示人的图像概念', 'origin_text': '}深度学习让计算机通过较简单概念构建复杂的概念。\\fig? !!!显示了深度学习系统通过组合较简单的概念,例如转角和轮廓,转而定义边缘来表示图像中一个人的概念!!! 。深度学习模型的典型例子是前馈深度网络或多层感知机。多层感知', 'time': '2017-01-11T12:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '复合而成', 'origin_text': '一个将一组输入值映射到输出的数学函数。该函数由许多较简单的函数 !!!组合构成!!! 。我们可以认为每个应用具有不同的数学函数,并为输入提供新的表示', 'time': '2017-01-11T12:38'} {'user': 'acct:zhzhang@hypothes.is', 'text': '输出值', 'origin_text': '馈深度网络或多层感知机。多层感知机仅仅是一个将一组输入值映射到 !!!输出!!! 的数学函数。该函数由许多较简单的函数组合构成。我们可以认为每', 'time': '2017-01-11T12:38'} {'user': 'acct:zhzhang@hypothes.is', 'text': '学习数据的正确表示的思想为深度学习提供了一种视角。\n', 'origin_text': '们可以认为每个应用具有不同的数学函数,并为输入提供新的表示。 !!!学习数据正确表示的想法是解释深度学习的一个观点!!! 。另一个观点是深度允许计算机学习一个多步骤的计算机程序。表示', 'time': '2017-01-11T12:44'} {'user': 'acct:zhzhang@hypothes.is', 'text': '另一个视角是', 'origin_text': '新的表示。学习数据正确表示的想法是解释深度学习的一个观点。 !!!另一个观点是!!! 深度允许计算机学习一个多步骤的计算机程序。表示的每一层可以被认', 'time': '2017-01-11T12:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能够让计算机去学习', 'origin_text': '习数据正确表示的想法是解释深度学习的一个观点。另一个观点是深度 !!!允许计算机学习!!! 一个多步骤的计算机程序。表示的每一层可以被认为是并行执行另一组', 'time': '2017-01-11T12:48'} {'user': 'acct:zhzhang@hypothes.is', 'text': '去组织', 'origin_text': '算机程序中的计数器或指针。它与具体的输入内容无关,但有助于模型 !!!组织!!! 其处理过程。目前主要有两种测量模型深度的方式。第一观点', 'time': '2017-01-11T13:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '度量', 'origin_text': '输入内容无关,但有助于模型组织其处理过程。目前主要有两种 !!!测量!!! 模型深度的方式。第一观点是基于评估架构所需执行的顺序指令的数目', 'time': '2017-01-11T13:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '第一个', 'origin_text': '模型组织其处理过程。目前主要有两种测量模型深度的方式。 !!!第一!!! 观点是基于评估架构所需执行的顺序指令的数目。我们可以认为这是描', 'time': '2017-01-11T13:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': ';', 'origin_text': '长路径。正如两个等价的计算机程序根据不同的语言将具有不同的长度 !!!,!!! 相同的函数可以被绘制为具有不同深度的流程图,这取决于我们允许使用', 'time': '2017-01-11T13:17'} {'user': 'acct:zhzhang@hypothes.is', 'text': '其深度', 'origin_text': '言将具有不同的长度,相同的函数可以被绘制为具有不同深度的流程图, !!!这!!! 取决于我们允许使用的单步函数。\\fig?说明了语言的选择怎样给', 'time': '2017-01-11T13:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它不是', 'origin_text': '\\end{figure}另一种是在深度概率模型中使用的方法, !!!不是!!! 将计算图的深度视为模型深度,而是将描述概念如何彼此相关的图的深度', 'time': '2017-01-11T13:29'} {'user': 'acct:zhzhang@hypothes.is', 'text': '彼此如何', 'origin_text': '模型中使用的方法,不是将计算图的深度视为模型深度,而是将描述概念 !!!如何彼此!!! 相关的图的深度视为模型深度。在这种情况下,计算每个概念表示的计', 'time': '2017-01-11T13:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '后可以进一步', 'origin_text': '更深。这是因为系统对较简单概念的理解可以在给出更复杂概念的信息 !!!后进一步!!! 细化。例如,一个AI系统观察到其中一只眼睛在阴影中的脸部图像,', 'time': '2017-01-11T13:36'} {'user': 'acct:zhzhang@hypothes.is', 'text': '一个观察其中一只眼睛在阴影中的脸部图像的AI系统最初可能只看到一只眼睛。', 'origin_text': '较简单概念的理解可以在给出更复杂概念的信息后进一步细化。例如, !!!一个AI系统观察到其中一只眼睛在阴影中的脸部图像,最初可能只看到一只眼睛。!!! 当检测到脸部的存在后,它可以推断第二只眼睛也可能是存在的。在', 'time': '2017-01-11T13:41'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但当', 'origin_text': '观察到其中一只眼睛在阴影中的脸部图像,最初可能只看到一只眼睛。 !!!当!!! 检测到脸部的存在后,它可以推断第二只眼睛也可能是存在的。在这种', 'time': '2017-01-11T13:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '系统', 'origin_text': '影中的脸部图像,最初可能只看到一只眼睛。当检测到脸部的存在后, !!!它!!! 可以推断第二只眼睛也可能是存在的。在这种情况下,概念的图仅包括', 'time': '2017-01-11T13:46'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“个”', 'origin_text': '个概念给出的其它nnn次估计进行细化,计算的图将包括2n2n2n !!!个!!! 层。由于并不总是清楚计算图的深度或概率模型图的深度哪一个', 'time': '2017-01-11T13:48'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能够使', 'origin_text': '—深度学习是AI的途径之一。具体来说,它是机器学习的一种,一种 !!!允许!!! 计算机系统从经验和数据中得到提高的技术。我们坚信机器学习可以构', 'time': '2017-01-11T13:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '切实可行', 'origin_text': '坚信机器学习可以构建出在复杂实际环境下运行的AI系统,并且是唯一 !!!可行!!! 的方法。深度学习是一种特定类型的机器学习,具有强大的能力和灵活', 'time': '2017-01-11T14:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '通向AI', 'origin_text': '概念的组合,这点毋庸置疑。总之, 这本书的主题——深度学习是 !!!AI!!! 的途径之一。具体来说,它是机器学习的一种,一种允许计算机系统从', 'time': '2017-01-11T14:01'} {'user': 'acct:zhzhang@hypothes.is', 'text': '为两类受众对象而写的', 'origin_text': '}本书面向的读者这本书对各类读者都有一定用处的,但我们是 !!!基于两个主要目标受众!!! 而写的。其中一个目标受众是学习机器学习的大学生(本科或研究生)', 'time': '2017-01-13T02:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '一类受众对象', 'origin_text': '类读者都有一定用处的,但我们是基于两个主要目标受众而写的。其中 !!!一个目标受众!!! 是学习机器学习的大学生(本科或研究生),包括那些已经开始职业生涯', 'time': '2017-01-13T02:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '一类受众对象', 'origin_text': '究生),包括那些已经开始职业生涯的深度学习和人工智能研究者。另 !!!一个目标群体!!! 是没有机器学习或统计背景但要迅速在他们的产品或平台中使用深度学习', 'time': '2017-01-13T02:54'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但希望能快速地掌握这方面知识并在他们的产品或平台中使用深度学习的软件工程师。', 'origin_text': '度学习和人工智能研究者。另一个目标群体是没有机器学习或统计背景 !!!但要迅速在他们的产品或平台中使用深度学习的软件工程师!!! 。深度学习在许多软件领域都已被证明是有用的,包括计算机视觉、语', 'time': '2017-01-13T03:11'} {'user': 'acct:zhzhang@hypothes.is', 'text': '服务', 'origin_text': '后一章的必备内容。}\\end{figure}为了最好地 !!!适应!!! 各类读者,这本书被组织为三个部分。第一部分介绍基本的数学工具和', 'time': '2017-01-13T03:33'} {'user': 'acct:zhzhang@hypothes.is', 'text': '讨论某些具有展望性的想法,它们被广泛地认为是深度学习的未来研究重点。', 'origin_text': '第二部分介绍本质上已解决的技术、最成熟的深度学习算法。第三部分 !!!介绍被广泛认为是深度学习未来研究重点的但更具猜测性的想法!!! 。读者可以随意跳过不感兴趣或与自己背景不相关的部分。熟悉线', 'time': '2017-01-13T03:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '并对在一本书中看到关于一个新兴领域”历史”的提及而感到惊讶', 'origin_text': '我们期待这本书的许多读者都听说过深度学习这一激动人心的新技术, !!!并为一本书提及关于一个新兴领域的”历史”而感到惊讶!!! 。事实上,深度学习的历史可以追溯到20世纪40年代。深度学习', 'time': '2017-01-13T04:15'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它反映', 'origin_text': '最近才成为众所周知的”深度学习”。这个领域已经更换了很多名称, !!!反映!!! 了不同的研究人员和不同观点的影响。讲述整个综合性的深度学习历', 'time': '2017-01-13T04:16'} {'user': 'acct:zhzhang@hypothes.is', 'text': '全面地讲述深度学习的历史', 'origin_text': '域已经更换了很多名称,反映了不同的研究人员和不同观点的影响。 !!!讲述整个综合性的深度学习历史!!! 超出了本书的范围。然而,一些基本的背景对理解深度学习是有用的。', 'time': '2017-01-13T04:29'} {'user': 'acct:zhzhang@hypothes.is', 'text': '深度学习已经经历了三次发展浪潮', 'origin_text': '然而,一些基本的背景对理解深度学习是有用的。一般来说,目前为止 !!!已经有三次深度学习的发展浪潮!!! :在20世纪40年代到60年代深度学习被称为控制论,20世纪80', 'time': '2017-01-13T04:32'} {'user': 'acct:zhzhang@hypothes.is', 'text': '\\fig?给出了定量的展示。', 'origin_text': '度学习被誉为连接机制,并于2006年开始,以深度学习之名复兴。 !!!这在\\fig?中定量给出。!!! \\begin{figure}[!htb]\\ifOpenSour', 'time': '2017-01-13T04:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '今天知道', 'origin_text': '相应的科学活动晚得多。}\\end{figure}我们 !!!现在认识!!! 的一些最早的学习算法,旨在模拟生物学习的计算模型,即大脑怎样学习', 'time': '2017-01-13T04:47'} {'user': 'acct:zhzhang@hypothes.is', 'text': '是旨在', 'origin_text': 'end{figure}我们现在认识的一些最早的学习算法, !!!旨在!!! 模拟生物学习的计算模型,即大脑怎样学习或为什么能学习的模型。其', 'time': '2017-01-13T04:42'} {'user': 'acct:zhzhang@hypothes.is', 'text': '深度学习以人工神经网络之名而淡去', 'origin_text': '学习的计算模型,即大脑怎样学习或为什么能学习的模型。其结果是, !!!已消逝的深度学习的名称之一——人工神经网络!!! 。此时深度学习模型对应的观点是他们设计的系统是受生物大脑(无论', 'time': '2017-01-13T04:51'} {'user': 'acct:zhzhang@hypothes.is', 'text': '彼时,深度学习模型被认为是受生物大脑(无论人类大脑或其他动物的大脑)所启发而设计出来的系统。', 'origin_text': '的模型。其结果是,已消逝的深度学习的名称之一——人工神经网络。 !!!此时深度学习模型对应的观点是他们设计的系统是受生物大脑(无论人类大脑或其他动物的大脑)所启发。!!! 尽管有些机器学习的神经网络有时被用来理解大脑功能{cite?}', 'time': '2017-01-13T04:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但它们', 'origin_text': '尽管有些机器学习的神经网络有时被用来理解大脑功能{cite?}, !!!它们!!! 一般都没有被设计成生物功能的真实模型。深度学习的神经观点受两个', 'time': '2017-01-13T04:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '设计成生物功能的真实模型。深度学习的神经观点受两个主要思想启发 !!!的!!! 。一个想法是大脑这个例子证明智能行为的可能性,因此从概念上讲,', 'time': '2017-01-13T05:01'} {'user': 'acct:zhzhang@hypothes.is', 'text': '作为例子', 'origin_text': '模型。深度学习的神经观点受两个主要思想启发的。一个想法是大脑 !!!这个例子!!! 证明智能行为的可能性,因此从概念上讲,建立智能的直接途径是逆向大', 'time': '2017-01-13T05:03'} {'user': 'acct:zhzhang@hypothes.is', 'text': '是可能的', 'origin_text': '经观点受两个主要思想启发的。一个想法是大脑这个例子证明智能行为 !!!的可能性!!! ,因此从概念上讲,建立智能的直接途径是逆向大脑背后的计算原理,并', 'time': '2017-01-13T05:03'} {'user': 'acct:zhzhang@hypothes.is', 'text': '因此,概念上,', 'origin_text': '个主要思想启发的。一个想法是大脑这个例子证明智能行为的可能性, !!!因此从概念上讲!!! ,建立智能的直接途径是逆向大脑背后的计算原理,并复制其功能。另', 'time': '2017-01-13T05:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': '逆向工程化', 'origin_text': '个例子证明智能行为的可能性,因此从概念上讲,建立智能的直接途径是 !!!逆向!!! 大脑背后的计算原理,并复制其功能。另一种看法是,理解大脑和人类', 'time': '2017-01-13T13:33'} {'user': 'acct:zhzhang@hypothes.is', 'text': '原理', 'origin_text': '计算原理,并复制其功能。另一种看法是,理解大脑和人类智力背后的 !!!原则!!! 也非常有趣,因此机器学习模型除了解决工程应用的能力, 如果能阐明', 'time': '2017-01-13T13:35'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能让人们对这些基本的科学问题有进一步的认识也将会很有用', 'origin_text': '的原则也非常有趣,因此机器学习模型除了解决工程应用的能力, 如果 !!!能阐明这些基本的科学问题也将会很有用!!! 。现代术语”深度学习”超越了目前机器学习模型的神经科学观', 'time': '2017-01-13T13:50'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '现代术语”深度学习”超越了目前机器学习模型的神经科学观点。学习 !!!的!!! \\emph{多层次组合}这一更普遍的原则更加吸引人,这可以应用于', 'time': '2017-01-13T13:58'} {'user': 'acct:zhzhang@hypothes.is', 'text': '复合', 'origin_text': '超越了目前机器学习模型的神经科学观点。学习的\\emph{多层次 !!!组合!!! }这一更普遍的原则更加吸引人,这可以应用于机器学习框架且不必是受', 'time': '2017-01-13T14:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '一更普遍的原则更加吸引人,这可以应用于机器学习框架且不必是受神经 !!!启发的!!! 。现代深度学习的最早前身是从神经科学的角度出发的简单线性模型', 'time': '2017-01-13T14:01'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改为“希望”', 'origin_text': 's ,\\Sx_n并将它们与一个输出yy\\Sy相关联。 这些模型 !!!将!!! 学习一组权重w1,…,wnw1,…,wn\\Sw_1, \\dots', 'time': '2017-01-14T05:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这第一波神经网络研究浪潮', 'origin_text': '_1 \\Sw_1 + \\dots + \\Sx_n \\Sw_n。 !!!这第一次神经网络研究的浪潮!!! 被称为控制论,如\\fig?所示。McCulloch-Pitt', 'time': '2017-01-14T06:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '如\\fig?所示,这第一波神经网络研究浪潮被称为控制论。', 'origin_text': '_1 \\Sw_1 + \\dots + \\Sx_n \\Sw_n。 !!!这第一次神经网络研究的浪潮被称为控制论,如\\fig?所示。!!! McCulloch-Pitts神经元{cite?}是脑功能的', 'time': '2017-01-14T06:04'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改为“正负”', 'origin_text': '性模型通过测试函数f(x,w)f(x,w)f(\\Vx,\\Vw)的 !!!是正还是负!!! 来识别两种不同类型的输入。当然,为了使模型对应于期望的类别定义', 'time': '2017-01-14T06:21'} {'user': 'acct:zhzhang@hypothes.is', 'text': '检验', 'origin_text': 'itts神经元{cite?}是脑功能的早期模型。该线性模型通过 !!!测试!!! 函数f(x,w)f(x,w)f(\\Vx,\\Vw)的是正还是负来识', 'time': '2017-01-14T06:25'} {'user': 'acct:zhzhang@hypothes.is', 'text': '类别', 'origin_text': ',w)f(x,w)f(\\Vx,\\Vw)的是正还是负来识别两种不同 !!!类型!!! 的输入。当然,为了使模型对应于期望的类别定义,需要正确地设置权', 'time': '2017-01-14T06:25'} {'user': 'acct:zhzhang@hypothes.is', 'text': '类别的期望定义', 'origin_text': ')的是正还是负来识别两种不同类型的输入。当然,为了使模型对应于 !!!期望的类别定义!!! ,需要正确地设置权重。这些权重可以由操作人员设定。在20世纪', 'time': '2017-01-14T06:29'} {'user': 'acct:zhzhang@hypothes.is', 'text': '可以', 'origin_text': '测试函数f(x,w)f(x,w)f(\\Vx,\\Vw)的是正还是负 !!!来!!! 识别两种不同类型的输入。当然,为了使模型对应于期望的类别定义,', 'time': '2017-01-14T06:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“了”', 'origin_text': '设定。在20世纪50年代,感知机{cite?}成为第一个能根据 !!!了!!! 每个类别输入的样例来学习权重的模型。约在同一时期,\\textb', 'time': '2017-01-14T07:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“,”', 'origin_text': 'daptive linear element, ADALINE) !!!,!!! 简单地返回函数f(x)f(x)f(\\Vx)本身的值来预测一个实数', 'time': '2017-01-14T07:33'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它还', 'origin_text': ')f(x)f(\\Vx)本身的值来预测一个实数{cite?},并且 !!!还!!! 可以学习从数据预测这些数。这些简单的学习算法大大影响了机器学', 'time': '2017-01-14T07:47'} {'user': 'acct:zhzhang@hypothes.is', 'text': '被称为', 'origin_text': '响了机器学习的现代景象。用于调节ADALINE权重的训练算法是 !!!称为!!! 随机梯度下降的一种特例。稍加修改的随机梯度下降算法仍然是当今深', 'time': '2017-01-14T07:49'} {'user': 'acct:zhzhang@hypothes.is', 'text': '基于被感知机和ADALINE使用', 'origin_text': '稍加修改的随机梯度下降算法仍然是当今深度学习的主要训练算法。 !!!基于感知机和ADALINE中使用!!! 的函数f(x,w)f(x,w)f(\\Vx, \\Vw)的模型被称为', 'time': '2017-01-14T08:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '异或(XOR)', 'origin_text': 'h{训练}。线性模型有很多局限性。最著名的是,它们无法学习 !!!XOR!!! 函数,即f([0,1],w)=1,f([1,0],w)=1f([', 'time': '2017-01-14T08:07'} {'user': 'acct:zhzhang@hypothes.is', 'text': '“,” 改为 “和”', 'origin_text': '最著名的是,它们无法学习XOR函数,即f([0,1],w)=1 !!!,f!!! ([1,0],w)=1f([0,1],w)=1,f([1,0],', 'time': '2017-01-14T08:08'} {'user': 'acct:zhzhang@hypothes.is', 'text': ' “,”改为“和”', 'origin_text': '1, f([1,0], \\Vw)=1,但f([1,1],w)=0 !!!,!!! f([0,0],w)=0f([1,1],w)=0,f([0,0]', 'time': '2017-01-14T08:08'} {'user': 'acct:zhzhang@hypothes.is', 'text': '观察到线性模型这个缺陷的批评者对受生物学启发的学习普遍地产生了抵触', 'origin_text': '[1,1], \\Vw)=0, f([0,0],\\Vw)= 0。 !!!在线性模型中观察到这些缺陷的批评者开始反对受生物学启发的学习!!! {cite?}。这是神经网络热潮的第一次大幅下降。现在,神', 'time': '2017-01-14T08:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这导致了神经网络热潮的第一次大消退', 'origin_text': '察到这些缺陷的批评者开始反对受生物学启发的学习{cite?}。 !!!这是神经网络热潮的第一次大幅下降!!! 。现在,神经科学被视为深度学习研究的一个重要灵感来源,但它已', 'time': '2017-01-14T08:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '主要指导', 'origin_text': '经科学被视为深度学习研究的一个重要灵感来源,但它已不再是该领域的 !!!主要导向!!! 。如今神经科学在深度学习研究中的作用被削弱,主要原因是我', 'time': '2017-01-14T08:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '指导去使用它', 'origin_text': '究中的作用被削弱,主要原因是我们根本没有足够的关于大脑信息来作为 !!!指导!!! 。要获得对大脑实际使用算法的深刻理解,我们需要有能力同时监测(', 'time': '2017-01-14T08:27'} {'user': 'acct:zhzhang@hypothes.is', 'text': '对被', 'origin_text': '弱,主要原因是我们根本没有足够的关于大脑信息来作为指导。要获得 !!!对!!! 大脑实际使用算法的深刻理解,我们需要有能力同时监测(至少是)数千', 'time': '2017-01-14T08:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '应该需要', 'origin_text': '于大脑信息来作为指导。要获得对大脑实际使用算法的深刻理解,我们 !!!需要!!! 有能力同时监测(至少是)数千相连神经元的活动。我们不能够做到这', 'time': '2017-01-14T08:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '同时去', 'origin_text': '来作为指导。要获得对大脑实际使用算法的深刻理解,我们需要有能力 !!!同时!!! 监测(至少是)数千相连神经元的活动。我们不能够做到这一点,甚至', 'time': '2017-01-14T08:32'} {'user': 'acct:zhzhang@hypothes.is', 'text': '所以我们甚至连大脑的最简单、最深入研究的部分都还远远没有理解', 'origin_text': '同时监测(至少是)数千相连神经元的活动。我们不能够做到这一点, !!!甚至连大脑的最简单、最深入研究的部分我们都还远远没有理解!!! {cite?}。神经科学已经给了我们依靠单一深度学习算法解决', 'time': '2017-01-14T08:35'} {'user': 'acct:zhzhang@hypothes.is', 'text': '区域去', 'origin_text': '重新连接,使视觉信号传送到听觉区域,它们可以学会用大脑的听觉处理 !!!区域!!! ”看”{cite?}。这表明,多数哺乳动物大脑的可能使用单一的', 'time': '2017-01-14T08:41'} {'user': 'acct:zhzhang@hypothes.is', 'text': '提示', 'origin_text': '区域,它们可以学会用大脑的听觉处理区域”看”{cite?}。这 !!!表明!!! ,多数哺乳动物大脑的可能使用单一的算法解决大部分大脑可以解决的不', 'time': '2017-01-14T08:46'} {'user': 'acct:zhzhang@hypothes.is', 'text': '大多数哺乳动物的大脑可能使用单一的算法就可以去解决其大脑解决的大部分不同任务', 'origin_text': '它们可以学会用大脑的听觉处理区域”看”{cite?}。这表明, !!!多数哺乳动物大脑的可能使用单一的算法解决大部分大脑可以解决的不同任务!!! 。这个假设之前,机器学习研究更加分散,研究人员在不同的社群研究', 'time': '2017-01-14T08:58'} {'user': 'acct:zhzhang@hypothes.is', 'text': '是比较分散的', 'origin_text': '法解决大部分大脑可以解决的不同任务。这个假设之前,机器学习研究 !!!更加分散!!! ,研究人员在不同的社群研究自然语言处理、计算机视觉、运动规划和语', 'time': '2017-01-14T09:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '究自然语言处理、计算机视觉、运动规划和语音识别。如今,这些应用 !!!的!!! 社群仍然是独立的,但是深度学习研究小组同时研究许多或甚至所有这些', 'time': '2017-01-14T09:03'} {'user': 'acct:zhzhang@hypothes.is', 'text': '对于深度学习研究团体来说', 'origin_text': '觉、运动规划和语音识别。如今,这些应用的社群仍然是独立的,但是 !!!深度学习研究小组!!! 同时研究许多或甚至所有这些应用领域是很常见的。我们能够从神经', 'time': '2017-01-14T09:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它后来', 'origin_text': '受哺乳动物视觉系统的结构启发,引入了一个处理图片的强大模型架构, !!!后来!!! 成为了现代卷积网络的基础{cite?},我们将会在\\sec?看到', 'time': '2017-01-14T09:10'} {'user': 'acct:zhzhang@hypothes.is', 'text': '(我们将会在第9.10节看到)', 'origin_text': '理图片的强大模型架构,后来成为了现代卷积网络的基础{cite?} !!!,我们将会在\\sec?看到!!! 。目前大多数神经网络基于称为整流线性单元的神经单元模型。原始', 'time': '2017-01-14T09:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '是基于一个称为', 'origin_text': '础{cite?},我们将会在\\sec?看到。目前大多数神经网络 !!!基于称为!!! 整流线性单元的神经单元模型。原始认知机{cite?}受我们关于', 'time': '2017-01-14T13:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '通过吸收来自不同观点的思想而形成,', 'origin_text': '关于大脑功能知识的启发, 引入了一个更复杂的版本。简化的现代版 !!!基于许多观点!!! 进化发展,{Nair-2010}和{Glorot+al-AI-2', 'time': '2017-01-14T13:42'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但它', 'origin_text': '009}援引更多面向工程的影响。虽然神经科学是灵感的重要来源, !!!它!!! 不需要被视为刚性指导。我们知道,实际的神经元与现代整流线性单元', 'time': '2017-01-14T13:43'} {'user': 'acct:zhzhang@hypothes.is', 'text': '功能', 'origin_text': '性指导。我们知道,实际的神经元与现代整流线性单元计算着非常不同 !!!函数!!! ,但更接近真实神经网络的系统并没有导致机器学习性能的提升。此外', 'time': '2017-01-14T13:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但我们对用于神经科学的生物学习还没有足够多的了解,也就不能为训练这些架构用的\\emph{学习算法}提供太多的指导。', 'origin_text': '外,虽然神经科学已经成功地启发了一些神经网络\\emph{架构}, !!!但我们还没有足够地了解生物学习的神经科学,因此在训练这些架构时,不能提供给我们很多关于\\emph{学习算法}的指导。!!! 媒体报道经常强调深度学习与大脑的相似性。虽然深度学习研究人', 'time': '2017-01-15T05:19'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改为“的确,”', 'origin_text': '{学习算法}的指导。媒体报道经常强调深度学习与大脑的相似性。 !!!虽然!!! 深度学习研究人员更可能比其他机器学习领域(如核机器或贝叶斯统计工', 'time': '2017-01-15T05:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“更可能”', 'origin_text': '媒体报道经常强调深度学习与大脑的相似性。虽然深度学习研究人员 !!!更可能!!! 比其他机器学习领域(如核机器或贝叶斯统计工作的研究人员)引用大脑', 'time': '2017-01-15T05:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '研究者', 'origin_text': '指导。媒体报道经常强调深度学习与大脑的相似性。虽然深度学习 !!!研究人员!!! 更可能比其他机器学习领域(如核机器或贝叶斯统计工作的研究人员)引', 'time': '2017-01-15T05:21'} {'user': 'acct:zhzhang@hypothes.is', 'text': '(如核方法或贝叶斯统计)的研究者更可能地', 'origin_text': '习与大脑的相似性。虽然深度学习研究人员更可能比其他机器学习领域 !!!(如核机器或贝叶斯统计工作的研究人员)!!! 引用大脑作为影响,人们不应该认为深度学习在尝试模拟大脑。现代深', 'time': '2017-01-15T05:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但大家', 'origin_text': '学习领域(如核机器或贝叶斯统计工作的研究人员)引用大脑作为影响, !!!人们!!! 不应该认为深度学习在尝试模拟大脑。现代深度学习从许多领域获取灵', 'time': '2017-01-15T05:25'} {'user': 'acct:zhzhang@hypothes.is', 'text': '然而', 'origin_text': '化。尽管一些深度学习的研究人员引用神经科学作为灵感的重要来源, !!!但!!! 其他学者完全不关心神经科学。值得注意的是,了解大脑是如何', 'time': '2017-01-15T05:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '确实存在的', 'origin_text': '学。值得注意的是,了解大脑是如何在算法层面上工作的尝试是 !!!鲜活且发展良好的!!! 。这项尝试主要被称为”计算神经科学”,并且是独立于深度学习的领', 'time': '2017-01-15T05:42'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉', 'origin_text': '在两个领域之间反复研究是很常见的。深度学习领域主要关注如何构建 !!!智能的!!! 计算机系统,用来解决需要智能才能解决的任务,而计算神经科学领域主', 'time': '2017-01-15T05:48'} {'user': 'acct:zhzhang@hypothes.is', 'text': '如何真实工作的比较精确的模型', 'origin_text': '来解决需要智能才能解决的任务,而计算神经科学领域主要关注构建大脑 !!!如何工作!!! 的更精确的模型。在20世纪80年代,神经网络研究的第二次浪潮', 'time': '2017-01-15T05:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '思潮 或者 潮流', 'origin_text': 'parallel distributed processing) !!!运动!!! 而出现的{cite?}。连接机制是在认知科学的背景下出现的。', 'time': '2017-01-15T06:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '“心智” 和 “意识” 哪个合适?', 'origin_text': 'te?}。连接机制是在认知科学的背景下出现的。认知科学是理解 !!!心智!!! ,并结合多个不同层次分析的跨学科方法。在20世纪80年代初期,', 'time': '2017-01-15T06:15'} {'user': 'acct:zhzhang@hypothes.is', 'text': '认知科学是理解心智的跨学科途径,即它融合多个不同的分析层次。', 'origin_text': '而出现的{cite?}。连接机制是在认知科学的背景下出现的。 !!!认知科学是理解心智,并结合多个不同层次分析的跨学科方法!!! 。在20世纪80年代初期,大多数认知科学家研究符号推理的模型。', 'time': '2017-01-15T06:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '学科方法。在20世纪80年代初期,大多数认知科学家研究符号推理 !!!的!!! 模型。尽管这很流行,但符号模型很难解释大脑如何真正使用神经元实', 'time': '2017-01-15T06:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '当将大量简单计算单元网络连接在一起时可以实现智能行为', 'origin_text': '20世纪40年代的工作{cite?}。连接机制的中心思想是, !!!当网络将大量简单计算单元连接在一起时可以实现智能行为!!! 。这种见解同样适用于与计算模型中隐藏单元作用类似的生物神经系统', 'time': '2017-01-15T06:39'} {'user': 'acct:zhzhang@hypothes.is', 'text': '潮流', 'origin_text': '元作用类似的生物神经系统中的神经元。上世纪80年代的连接机制 !!!运动!!! 过程中形成的几个关键概念在今天的深度学习中仍然是非常重要的。', 'time': '2017-01-15T06:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '期间', 'origin_text': '用类似的生物神经系统中的神经元。上世纪80年代的连接机制运动 !!!过程中!!! 形成的几个关键概念在今天的深度学习中仍然是非常重要的。其中一', 'time': '2017-01-15T06:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '在上', 'origin_text': '适用于与计算模型中隐藏单元作用类似的生物神经系统中的神经元。 !!!上!!! 世纪80年代的连接机制运动过程中形成的几个关键概念在今天的深度学', 'time': '2017-01-15T06:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '认为', 'origin_text': '常重要的。其中一个概念是分布式表示{cite?}。这一想法 !!!是!!! 系统每个的输入应该由许多特征表示的,并且每个特征应参与许多可能输', 'time': '2017-01-15T07:01'} {'user': 'acct:zhzhang@hypothes.is', 'text': '多个', 'origin_text': '这一想法是系统每个的输入应该由许多特征表示的,并且每个特征应参与 !!!许多!!! 可能输入的表示。例如,假设我们有一个能够识别红色、绿色、或蓝色', 'time': '2017-01-15T07:04'} {'user': 'acct:corenel@hypothes.is', 'text': '已经是/已经成为', 'origin_text': '距造出第一台计算机还有一百多年){cite?}。如今,人工智能 !!!是!!! 一个具有众多实际应用和活跃研究课题的领域,并蓬勃发展着。我们期', 'time': '2017-01-15T07:09'} {'user': 'acct:corenel@hypothes.is', 'text': '并且正在蓬勃发展', 'origin_text': '}。如今,人工智能是一个具有众多实际应用和活跃研究课题的领域, !!!并蓬勃发展着!!! 。我们期望通过智能软件自动地处理常规劳动、理解语音或图像、帮助', 'time': '2017-01-15T07:09'} {'user': 'acct:corenel@hypothes.is', 'text': '那些对人类智力来说非常困难、但对计算机来说相对简单的问题得到了迅速解决', 'origin_text': '音或图像、帮助医学诊断和支持基础科学研究。在人工智能的早期, !!!那些对人类智力来说非常困难但对计算机来说相对简单的问题得到迅速解决!!! 。比如,那些可以通过一系列形式化的数学规则来描述的问题。人工智', 'time': '2017-01-15T07:11'} {'user': 'acct:corenel@hypothes.is', 'text': '对于这些问题,我们人类往往可以凭直觉轻易地解决。', 'origin_text': '执行、但很难形式化描述的任务,比如识别人们所说的话或图像中的脸。 !!!这些问题我们人类能够很自然地通过直觉轻而易举地解决。!!! 针对这些比较直观的问题,本书讨论一种解决方案。该方案可以让', 'time': '2017-01-15T07:16'} {'user': 'acct:corenel@hypothes.is', 'text': '计算机早就能够打败人类最好的象棋选手', 'origin_text': '人类而言是最困难的脑力任务之一,但对计算机而言却属于最容易的。 !!!即使是最好的人类棋手,计算机也早已能够将其打败!!! ,但直到最近计算机才在识别对象或语音任务中达到人类平均水平。一', 'time': '2017-01-15T07:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': ',', 'origin_text': '我们有一个能够识别红色、绿色、或蓝色的汽车、卡车和鸟类的视觉系统 !!!。!!! 表示这些输入的其中一个方法是将九个可能的组合:红卡车,红汽车,红', 'time': '2017-01-15T07:21'} {'user': 'acct:corenel@hypothes.is', 'text': 'MRI扫描的单一像素与分娩过程中的并发症之间的相关性微乎其微。', 'origin_text': '逻辑回归的输入,而不是医生正式的报告,它将无法作出有用的预测。 !!!MRI扫描的单一像素与分娩过程中的并发症只有微不足道的相关性!!! 。在整个计算机科学乃至日常生活中,对表示的依赖都是一个普遍现', 'time': '2017-01-15T07:22'} {'user': 'acct:corenel@hypothes.is', 'text': '那么诸如搜索之类的操作的处理速度就可以成指数级地加快', 'origin_text': '象。在计算机科学中,如果数据集合被精巧地结构化并被智能地索引, !!!数据操作的处理速度就可以成指数级地加快(如搜索)!!! 。人们可以很容易地在阿拉伯数字的表示下进行算术运算,但在罗马数', 'time': '2017-01-15T07:25'} {'user': 'acct:corenel@hypothes.is', 'text': '许多人工智能的任务都可以通过先提取一个合适的特征集,然后将这些特征提供给简单的机器学习算法这样的方式来解决。', 'origin_text': 'e-Farley合作画出此图。)}\\end{figure} !!!许多人工智能的任务都可以先提取一个合适的特征集,然后将这些特征提供给简单的机器学习算法来解决。!!! 例如,从声音鉴别说话者的一个有用特征是说话者声道大小的估计。', 'time': '2017-01-15T07:28'} {'user': 'acct:corenel@hypothes.is', 'text': '对于通过声音鉴别说话者来说,一个有用的特征是对其声道大小的估计', 'origin_text': '的特征集,然后将这些特征提供给简单的机器学习算法来解决。例如, !!!从声音鉴别说话者的一个有用特征是说话者声道大小的估计!!! 。这个特征为判断说话者是一个男性、女性还是儿童提供了有力线索。', 'time': '2017-01-15T07:30'} {'user': 'acct:corenel@hypothes.is', 'text': '我们很难知道', 'origin_text': '个男性、女性还是儿童提供了有力线索。然而,对于许多任务来说, !!!很难知道!!! 应该提取哪些特征。例如,假设我们想编写一个程序来检测照片中的车', 'time': '2017-01-15T07:31'} {'user': 'acct:corenel@hypothes.is', 'text': '是否有车轮', 'origin_text': '程序来检测照片中的车。我们知道,汽车有轮子,所以我们可能会想用 !!!车轮的存在!!! 作为特征。不幸的是,我们难以准确地从像素值的角度描述一个车轮看', 'time': '2017-01-15T07:32'} {'user': 'acct:corenel@hypothes.is', 'text': '因场景而异', 'origin_text': '一个车轮看上去像什么。车轮具有简单的几何形状,但它的图像可能会 !!!因场景而变得很复杂!!! ,如落在车轮上的阴影、太阳照亮的车轮的金属零件、汽车的挡泥板或者', 'time': '2017-01-15T07:32'} {'user': 'acct:corenel@hypothes.is', 'text': '虽然车轮', 'origin_text': '幸的是,我们难以准确地从像素值的角度描述一个车轮看上去像什么。 !!!车轮!!! 具有简单的几何形状,但它的图像可能会因场景而变得很复杂,如落在车', 'time': '2017-01-15T07:33'} {'user': 'acct:corenel@hypothes.is', 'text': '许多诸如说话口音这样的变化因素', 'origin_text': '当然,从原始数据中提取这样高层次的、抽象的特征是非常困难的。 !!!许多这样的变化因素,诸如说话者的口音!!! ,只能对数据进行复杂的、接近人类水平的理解来辨识。这几乎与获得', 'time': '2017-01-15T07:38'} {'user': 'acct:zhzhang@hypothes.is', 'text': '潮流', 'origin_text': '书的核心,我们将在\\chap?中更加详细地描述。连接机制 !!!运动!!! 的另一个重要成就是反向传播算法的成功运用(训练具有内部表示的深度', 'time': '2017-01-15T07:40'} {'user': 'acct:corenel@hypothes.is', 'text': '因此', 'origin_text': '最有意义的,并且由于不同的人选择不同的最小元素集来构建相应的图, !!!导致!!! 架构的深度不存在单一的正确值,就像计算机程序的长度不存在单一的正', 'time': '2017-01-15T07:40'} {'user': 'acct:corenel@hypothes.is', 'text': '就像计算机程序的长度不存在单一的正确值一样。', 'origin_text': '同的最小元素集来构建相应的图,导致架构的深度不存在单一的正确值, !!!就像计算机程序的长度不存在单一的正确值!!! 。也不存在模型多么深才能被修饰为”深”的共识。但相比传统机器', 'time': '2017-01-15T07:41'} {'user': 'acct:zhzhang@hypothes.is', 'text': '主导', 'origin_text': '个算法虽然曾黯然失色不再流行,但截至写书之时,仍是训练深度模型的 !!!主要!!! 方法。% ??在20世纪90年代,研究人员在使用神经网络进行', 'time': '2017-01-15T07:42'} {'user': 'acct:corenel@hypothes.is', 'text': '另外,也不存在模型多么深才能被修饰为”深”的共识', 'origin_text': '度不存在单一的正确值,就像计算机程序的长度不存在单一的正确值。 !!!也不存在模型多么深才能被修饰为”深”的共识!!! 。但相比传统机器学习 ,深度学习研究的模型涉及更多学到函数或学', 'time': '2017-01-15T07:42'} {'user': 'acct:corenel@hypothes.is', 'text': '这本书对各类读者都具有一定用处', 'origin_text': '中学习的组件。}\\end{figure}本书面向的读者 !!!这本书对各类读者都有一定用处的!!! ,但我们是基于两个主要目标受众而写的。其中一个目标受众是学习机', 'time': '2017-01-15T07:44'} {'user': 'acct:zhzhang@hypothes.is', 'text': '成功地使用反向传播去训练具有内部表示的深度神经网以及反向传播算法的普及', 'origin_text': 'hap?中更加详细地描述。连接机制运动的另一个重要成就是 !!!反向传播算法的成功运用(训练具有内部表示的深度神经网络)和普及!!! {cite?}。这个算法虽然曾黯然失色不再流行,但截至写书之时', 'time': '2017-01-15T07:44'} {'user': 'acct:corenel@hypothes.is', 'text': '深度学习始终在越来越广泛的应用领域得到了成功的应用。', 'origin_text': '0年代以来,深度学习提供精确识别和预测的能力一直在提高。此外, !!!深度学习持续成功地应用于越来越广泛的应用!!! 。最早的深度模型被用来识别裁剪得很合适且非常小的图像中的单个', 'time': '2017-01-15T07:51'} {'user': 'acct:zhzhang@hypothes.is', 'text': '衰退', 'origin_text': '要任务上实现了很好的效果。这两个因素导致了神经网络热潮的第二次 !!!下降!!! ,一直持续到2007年。在此期间,神经网络持续在某些任务上获', 'time': '2017-01-15T07:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '并一直', 'origin_text': '上实现了很好的效果。这两个因素导致了神经网络热潮的第二次下降, !!!一直!!! 持续到2007年。在此期间,神经网络持续在某些任务上获得令人', 'time': '2017-01-15T07:53'} {'user': 'acct:corenel@hypothes.is', 'text': '大量的', 'origin_text': '来,神经网络可以处理的图像尺寸逐渐增加。现代对象识别网络能处理 !!!丰富的!!! 高分辨率照片,并且不要求在被识别的对象附近进行裁剪{cite?}', 'time': '2017-01-15T07:54'} {'user': 'acct:corenel@hypothes.is', 'text': '通常能够识别至少', 'origin_text': '对象(或在某些情况下,单一种类的对象的存在与否),而这些现代网络 !!!通常识别至少!!! 1000个不同类别的对象。对象识别中最大的比赛是每年举行的Im', 'time': '2017-01-15T07:56'} {'user': 'acct:corenel@hypothes.is', 'text': '激动人心的', 'origin_text': 'Net大型视觉识别挑战(ILSVRC)。深度学习迅速崛起的一个 !!!戏剧性!!! 时刻是卷积网络第一次大幅赢得这一挑战,将最高水准的前5错误率从2', 'time': '2017-01-15T07:57'} {'user': 'acct:corenel@hypothes.is', 'text': '但测试样例内15.3\\%的正确类别不会出现在此列表的前5中', 'origin_text': '?},这意味着该卷积网络针对每个图像的可能类别生成一个顺序列表, !!!但15.3\\%的测试样例的正确类别不会出现在此列表中的前5!!! 。此后,深度卷积网络一直能在这些比赛中取胜,截至写书时,深度学', 'time': '2017-01-15T07:59'} {'user': 'acct:corenel@hypothes.is', 'text': '深度卷积网络在这些比赛中一直取胜', 'origin_text': '5.3\\%的测试样例的正确类别不会出现在此列表中的前5。此后, !!!深度卷积网络一直能在这些比赛中取胜!!! ,截至写书时,深度学习的进步将这个比赛中的前5错误率降到3.6\\', 'time': '2017-01-15T08:00'} {'user': 'acct:corenel@hypothes.is', 'text': '降到了', 'origin_text': '些比赛中取胜,截至写书时,深度学习的进步将这个比赛中的前5错误率 !!!降到!!! 3.6\\%, 如\\fig?所示。\\begin{figure}[', 'time': '2017-01-15T08:01'} {'user': 'acct:corenel@hypothes.is', 'text': '最早的网络', 'origin_text': ',并且不要求在被识别的对象附近进行裁剪{cite?}。类似地, !!!最早网络!!! 只能识别两种对象(或在某些情况下,单一种类的对象的存在与否),而', 'time': '2017-01-15T08:02'} {'user': 'acct:corenel@hypothes.is', 'text': '发展', 'origin_text': '此后,深度卷积网络一直能在这些比赛中取胜,截至写书时,深度学习的 !!!进步!!! 将这个比赛中的前5错误率降到3.6\\%, 如\\fig?所示。\\', 'time': '2017-01-15T08:02'} {'user': 'acct:corenel@hypothes.is', 'text': '不需要', 'origin_text': '像尺寸逐渐增加。现代对象识别网络能处理丰富的高分辨率照片,并且 !!!不要求!!! 在被识别的对象附近进行裁剪{cite?}。类似地,最早网络只能', 'time': '2017-01-15T08:02'} {'user': 'acct:corenel@hypothes.is', 'text': '它们', 'origin_text': '络达到了在ImageNet大规模视觉识别挑战中竞争所必需的规模, !!!他们!!! 每年都能赢得胜利,并且产生越来越低的错误率。数据来源于\xa0{rus', 'time': '2017-01-15T08:03'} {'user': 'acct:corenel@hypothes.is', 'text': '得到提高', 'origin_text': '深度学习也对语音识别产生了巨大影响。语音识别在20世纪90年代 !!!提高!!! 后,直到约2000年都停滞不前。深度学习的引入{cite?}导', 'time': '2017-01-15T08:03'} {'user': 'acct:corenel@hypothes.is', 'text': '使得', 'origin_text': '高后,直到约2000年都停滞不前。深度学习的引入{cite?} !!!导致!!! 语音识别错误率陡然下降,有些错误率甚至降低了一半。 我们将在\\', 'time': '2017-01-15T08:04'} {'user': 'acct:corenel@hypothes.is', 'text': '取得了惊人的成功', 'origin_text': 'ec?更详细地探讨这个历史。深度网络在行人检测和图像分割中也 !!!有引人注目的成功!!! {cite?},在交通标志分类上取得了超越人类的表现{cite?', 'time': '2017-01-15T08:05'} {'user': 'acct:corenel@hypothes.is', 'text': '并且在', 'origin_text': '深度网络在行人检测和图像分割中也有引人注目的成功{cite?}, !!!在!!! 交通标志分类上取得了超越人类的表现{cite?}。在深度网络', 'time': '2017-01-15T08:05'} {'user': 'acct:corenel@hypothes.is', 'text': '删去 的', 'origin_text': '分类上取得了超越人类的表现{cite?}。在深度网络的规模和 !!!的!!! 精度有所提高的同时,它们可以解决的任务也日益复杂。{Goodf', 'time': '2017-01-15T08:05'} {'user': 'acct:corenel@hypothes.is', 'text': '这种', 'origin_text': '于建模序列和其他序列之间的关系,而不是仅仅固定输入之间的关系。 !!!这个!!! 序列到序列的学习似乎处于另一个应用演进的浪潮之巅:机器翻译{ci', 'time': '2017-01-15T08:07'} {'user': 'acct:corenel@hypothes.is', 'text': '对序列与其他序列之间的关系进行建模', 'origin_text': 'te?}。循环神经网络,如之前提到的LSTM序列模型,现在用于 !!!建模序列和其他序列之间的关系!!! ,而不是仅仅固定输入之间的关系。这个序列到序列的学习似乎处于另', 'time': '2017-01-15T08:08'} {'user': 'acct:corenel@hypothes.is', 'text': '最高成就 / 最大的成就', 'origin_text': '阶段,但原则上未来可以适用于几乎所有的任务。深度学习的另一个 !!!冠军成就!!! 是在强化学习领域的扩展。在强化学习的背景下,一个自主体必须通过', 'time': '2017-01-15T08:09'} {'user': 'acct:corenel@hypothes.is', 'text': '是其在在强化学习领域的扩展', 'origin_text': '原则上未来可以适用于几乎所有的任务。深度学习的另一个冠军成就 !!!是在强化学习领域的扩展!!! 。在强化学习的背景下,一个自主体必须通过试错来学习执行任务,而', 'time': '2017-01-15T08:10'} {'user': 'acct:corenel@hypothes.is', 'text': '在强化学习中', 'origin_text': '有的任务。深度学习的另一个冠军成就是在强化学习领域的扩展。 !!!在强化学习的背景下!!! ,一个自主体必须通过试错来学习执行任务,而无需人类操作者的任何指', 'time': '2017-01-15T08:10'} {'user': 'acct:corenel@hypothes.is', 'text': '自主的智能体', 'origin_text': '另一个冠军成就是在强化学习领域的扩展。在强化学习的背景下,一个 !!!自主体!!! 必须通过试错来学习执行任务,而无需人类操作者的任何指导。Dee', 'time': '2017-01-15T08:10'} {'user': 'acct:zhzhang@hypothes.is', 'text': '其做法野心勃勃但不切实际', 'origin_text': '代中期。基于神经网络等其他AI技术的企业开始在寻求投资的同时, !!!做不切实际野心勃勃的主张!!! 。当AI研究不能实现这些不合理的期望时,投资者感到失望。同时', 'time': '2017-01-15T08:11'} {'user': 'acct:corenel@hypothes.is', 'text': '必须在没有人类操作者指导的情况下,通过试错来学习执行任务', 'origin_text': '冠军成就是在强化学习领域的扩展。在强化学习的背景下,一个自主体 !!!必须通过试错来学习执行任务,而无需人类操作者的任何指导!!! 。DeepMind表明,基于深度学习的强化学习系统能够学会玩A', 'time': '2017-01-15T08:12'} {'user': 'acct:zhzhang@hypothes.is', 'text': '比如,核', 'origin_text': '理的期望时,投资者感到失望。同时,机器学习的其他领域取得进步。 !!!核!!! 学习机{cite?}和图模型{cite?}都在很多重要任务上实现', 'time': '2017-01-15T08:12'} {'user': 'acct:zhzhang@hypothes.is', 'text': '方法', 'origin_text': '期望时,投资者感到失望。同时,机器学习的其他领域取得进步。核 !!!学习机!!! {cite?}和图模型{cite?}都在很多重要任务上实现了很好', 'time': '2017-01-15T08:13'} {'user': 'acct:corenel@hypothes.is', 'text': '用于对象识别的现在卷积网络为神经科学家们提供了可以研究的视觉处理模型。', 'origin_text': '重要的研究项目或商业产品。深度学习也为其他科学做出了贡献。 !!!识别对象的现代卷积网络提供给神经科学家可以研究的视觉处理模型!!! {cite?}。深度学习也为处理海量数据、在科学领域作出有效的', 'time': '2017-01-15T08:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '继续', 'origin_text': '络热潮的第二次下降,一直持续到2007年。在此期间,神经网络 !!!持续!!! 在某些任务上获得令人印象深刻的表现{cite?}。加拿大高级研', 'time': '2017-01-15T08:14'} {'user': 'acct:corenel@hypothes.is', 'text': '我们期待深度学习未来能够出现在越来越多的科学领域内', 'origin_text': 'e?}和自动解析用于构建人脑三维图的显微镜图像{cite?}。 !!!我们期待深度学习未来出现在越来越多的科学领域!!! 。总之,深度学习是机器学习的一种方法, 过去几十年的发展', 'time': '2017-01-19T08:57'} {'user': 'acct:corenel@hypothes.is', 'text': '。', 'origin_text': '在越来越多的科学领域。总之,深度学习是机器学习的一种方法 !!!,!!! 过去几十年的发展中,它深深地吸收了我们关于人脑、统计学与应用数', 'time': '2017-01-15T08:17'} {'user': 'acct:corenel@hypothes.is', 'text': '在过去几十年的发展中', 'origin_text': '来越多的科学领域。总之,深度学习是机器学习的一种方法, !!!过去几十年的发展中!!! ,它深深地吸收了我们关于人脑、统计学与应用数学的知识。近年来,', 'time': '2017-01-15T08:17'} {'user': 'acct:corenel@hypothes.is', 'text': '大量借鉴了', 'origin_text': '总之,深度学习是机器学习的一种方法, 过去几十年的发展中,它 !!!深深地吸收了!!! 我们关于人脑、统计学与应用数学的知识。近年来,深度学习的普及性', 'time': '2017-01-15T08:17'} {'user': 'acct:corenel@hypothes.is', 'text': '近年来,得益于更强大的计算机、更大的数据集和能够训练更深网络的技术,深度学习的普及性和实用性有了极大的发展。', 'origin_text': '的发展中,它深深地吸收了我们关于人脑、统计学与应用数学的知识。 !!!近年来,深度学习的普及性和实用性有了极大的发展,这在很大程度上得益于更强大的计算机、更大的数据集和能够训练更深网络的技术。!!! 未来几年充满了进一步提高深度学习并将它带到新领域的挑战和机遇。', 'time': '2017-01-15T08:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '领导', 'origin_text': ' Hinton,Yoshua Bengio和Yann LeCun !!!引导!!! 的多伦多大学、蒙特利尔大学和纽约大学的机器学习研究小组。CIF', 'time': '2017-01-15T08:18'} {'user': 'acct:corenel@hypothes.is', 'text': '得', 'origin_text': '单独神经元或小集合的神经元不是特别有用。生物神经元没有连接 !!!的!!! 特别密集。如\\fig?所示,几十年来,我们的机器学习模型中每个', 'time': '2017-01-15T08:20'} {'user': 'acct:corenel@hypothes.is', 'text': '更大', 'origin_text': '这种增长是由更大内存、更快的计算机和更大的可用数据集驱动的。 !!!较大!!! 的网络能够在更复杂的任务中实现更高的精度。这种趋势看起来将持续', 'time': '2017-01-15T08:22'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这个多学科的CIFAR NCAP研究计划还攘括了神经科学家、人类和计算机视觉专家', 'origin_text': 'n引导的多伦多大学、蒙特利尔大学和纽约大学的机器学习研究小组。 !!!CIFAR NCAP研究计划具有多学科的性质,其中还包括人类神经科学家和计算机视觉专家!!! 。在那个时间点,普遍认为深度网络是难以训练的。现在我们', 'time': '2017-01-15T08:25'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改', 'origin_text': '神经计算和自适应感知(NCAP)研究计划帮助维持神经网络研究。 !!!这个!!! 计划统一了分别由Geoffrey Hinton,Yoshua B', 'time': '2017-01-15T08:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '联合', 'origin_text': '和自适应感知(NCAP)研究计划帮助维持神经网络研究。这个计划 !!!统一!!! 了分别由Geoffrey Hinton,Yoshua Bengi', 'time': '2017-01-15T08:24'} {'user': 'acct:corenel@hypothes.is', 'text': '既然', 'origin_text': '利用大型标注数据集的能力。与日俱增的数据量人们可能想问, !!!尽管!!! 人工神经网络的第一个实验在20世纪50年代就完成了,为什么深度学', 'time': '2017-01-15T08:26'} {'user': 'acct:corenel@hypothes.is', 'text': '在复杂的任务达到人类水平', 'origin_text': '技巧。幸运的是,随着训练数据的增加,所需的技巧正在减少。目前 !!!在复杂的任务达到与人类表现!!! 的学习算法,与20世纪80年代努力解决的玩具问题(toy pro', 'time': '2017-01-15T08:27'} {'user': 'acct:corenel@hypothes.is', 'text': '得以成功训练', 'origin_text': '革,简化了极深架构的训练。最重要的新进展是现在我们有了这些算法 !!!成功训练!!! 所需的资源。\\fig?展示了基准数据集的大小如何随着时间的推移', 'time': '2017-01-15T08:28'} {'user': 'acct:corenel@hypothes.is', 'text': '对长序列进行建模', 'origin_text': 'ochreiter91}和{Bengio1994ITNN}指出了 !!!建模长序列!!! 的一些根本数学难题,这将在\\sec?中描述。{Hochreit', 'time': '2017-01-15T08:30'} {'user': 'acct:corenel@hypothes.is', 'text': '人们普遍认为', 'origin_text': '其中还包括人类神经科学家和计算机视觉专家。在那个时间点, !!!普遍认为!!! 深度网络是难以训练的。现在我们知道,20世纪80年代就存在的算', 'time': '2017-01-15T08:31'} {'user': 'acct:corenel@hypothes.is', 'text': ' 在写这本书的时候,神经网络的第三次流行浪潮还在继续', 'origin_text': '经优于与之竞争的基于其他机器学习技术以及手工设计函数的AI系统。 !!!神经网络流行的第三次浪潮在写这本书的时候还在继续!!! ,尽管深度学习的研究重点在这一段时间内发生了巨大变化。第三次浪', 'time': '2017-01-15T08:33'} {'user': 'acct:corenel@hypothes.is', 'text': '着眼于', 'origin_text': '深度学习的研究重点在这一段时间内发生了巨大变化。第三次浪潮开始 !!!把重点放在!!! 新的无监督学习技术和从小数据集进行泛化的能力,但目前更多的注意点', 'time': '2017-01-15T08:34'} {'user': 'acct:zhzhang@hypothes.is', 'text': '这可能仅仅由于其计算代价太高,', 'origin_text': '的算法能工作得非常好,但是直到在2006年前后都没有体现出来。 !!!这个问题可能是单纯的因为计算复杂性太高!!! ,而以当时可用的硬件难以进行足够的实验。神经网络研究的第三次', 'time': '2017-01-15T08:35'} {'user': 'acct:zhzhang@hypothes.is', 'text': '预训练', 'origin_text': 'inton表明名为深度信念网络的神经网络可以使用一种称为贪心逐层 !!!训练!!! 的策略进行有效地训练{cite?},我们将在\\sec?中更详细地', 'time': '2017-01-15T08:41'} {'user': 'acct:zhzhang@hypothes.is', 'text': '来', 'origin_text': '表明名为深度信念网络的神经网络可以使用一种称为贪心逐层训练的策略 !!!进行!!! 有效地训练{cite?},我们将在\\sec?中更详细地描述。C', 'time': '2017-01-15T08:43'} {'user': 'acct:zhzhang@hypothes.is', 'text': '其他CIFAR附属研究小组', 'origin_text': '进行有效地训练{cite?},我们将在\\sec?中更详细地描述。 !!!CIFAR附属的其他研究小组!!! 很快表明,同样的策略可以被用来训练许多其他类型的深度网络{cit', 'time': '2017-01-15T08:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '研究者', 'origin_text': '神经网络研究的这一次浪潮普及了”深度学习”这一术语的使用,强调 !!!研究人员!!! 现在可以训练以前不可能训练的更深的神经网络,并把注意力集中于深度', 'time': '2017-01-15T08:49'} {'user': 'acct:zhzhang@hypothes.is', 'text': '有能力', 'origin_text': '究的这一次浪潮普及了”深度学习”这一术语的使用,强调研究人员现在 !!!可以!!! 训练以前不可能训练的更深的神经网络,并把注意力集中于深度的理论意', 'time': '2017-01-15T08:50'} {'user': 'acct:zhzhang@hypothes.is', 'text': '比较深', 'origin_text': '度学习”这一术语的使用,强调研究人员现在可以训练以前不可能训练的 !!!更深!!! 的神经网络,并把注意力集中于深度的理论意义{cite?}。此时', 'time': '2017-01-15T08:52'} {'user': 'acct:zhzhang@hypothes.is', 'text': '重要性上', 'origin_text': '以训练以前不可能训练的更深的神经网络,并把注意力集中于深度的理论 !!!意义!!! {cite?}。此时,深度神经网络已经优于与之竞争的基于其他机', 'time': '2017-01-15T08:54'} {'user': 'acct:zhzhang@hypothes.is', 'text': '集中注意力', 'origin_text': '使用,强调研究人员现在可以训练以前不可能训练的更深的神经网络,并 !!!把注意力集中!!! 于深度的理论意义{cite?}。此时,深度神经网络已经优于与之', 'time': '2017-01-15T08:54'} {'user': 'acct:zhzhang@hypothes.is', 'text': '功能', 'origin_text': ',深度神经网络已经优于与之竞争的基于其他机器学习技术以及手工设计 !!!函数!!! 的AI系统。神经网络流行的第三次浪潮在写这本书的时候还在继续,', 'time': '2017-01-15T08:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“流行”', 'origin_text': '竞争的基于其他机器学习技术以及手工设计函数的AI系统。神经网络 !!!流行!!! 的第三次浪潮在写这本书的时候还在继续,尽管深度学习的研究重点在这', 'time': '2017-01-15T08:58'} {'user': 'acct:zhzhang@hypothes.is', 'text': '发展浪潮', 'origin_text': '他机器学习技术以及手工设计函数的AI系统。神经网络流行的第三次 !!!浪潮!!! 在写这本书的时候还在继续,尽管深度学习的研究重点在这一段时间内发', 'time': '2017-01-15T08:59'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能力上', 'origin_text': '第三次浪潮开始把重点放在新的无监督学习技术和从小数据集进行泛化的 !!!能力!!! ,但目前更多的注意点是在更古老的监督学习算法和深度模型充分利用大', 'time': '2017-01-15T09:01'} {'user': 'acct:zhzhang@hypothes.is', 'text': '兴趣', 'origin_text': '点放在新的无监督学习技术和从小数据集进行泛化的能力,但目前更多的 !!!注意!!! 点是在更古老的监督学习算法和深度模型充分利用大型标注数据集的能力', 'time': '2017-01-15T09:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '比较传统', 'origin_text': '无监督学习技术和从小数据集进行泛化的能力,但目前更多的注意点是在 !!!更古老!!! 的监督学习算法和深度模型充分利用大型标注数据集的能力。与日俱', 'time': '2017-01-15T09:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能力上', 'origin_text': '注意点是在更古老的监督学习算法和深度模型充分利用大型标注数据集的 !!!能力!!! 。与日俱增的数据量人们可能想问,尽管人工神经网络的第一个', 'time': '2017-01-15T09:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '仍是', 'origin_text': '新的无监督学习技术和从小数据集进行泛化的能力,但目前更多的注意点 !!!是!!! 在更古老的监督学习算法和深度模型充分利用大型标注数据集的能力。', 'time': '2017-01-15T09:37'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“”尽管', 'origin_text': '利用大型标注数据集的能力。与日俱增的数据量人们可能想问, !!!尽管!!! 人工神经网络的第一个实验在20世纪50年代就完成了,为什么深度学', 'time': '2017-01-15T10:39'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但为什么', 'origin_text': '能想问,尽管人工神经网络的第一个实验在20世纪50年代就完成了, !!!为什么!!! 深度学习直到最近才被认为是关键技术。自20世纪90年代以来,深', 'time': '2017-01-15T10:39'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但直到现在,相比如为一种技术,它通常更视为一种艺术', 'origin_text': '技术。自20世纪90年代以来,深度学习就已经成功用于商业应用, !!!但通常被视为是一种艺术而不是一种技术!!! ,且只有专家可以使用的艺术,这种观点持续到最近。确实,要从一个', 'time': '2017-01-15T10:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉', 'origin_text': ',但通常被视为是一种艺术而不是一种技术,且只有专家可以使用的艺术 !!!,这种观点持续到最近!!! 。确实,要从一个深度学习算法获得良好的性能需要一些技巧。幸运', 'time': '2017-01-15T10:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '努力去解决玩具问题', 'origin_text': '。目前在复杂的任务达到与人类表现的学习算法,与20世纪80年代 !!!努力解决的玩具问题!!! (toy problem)的学习算法几乎是一样的,尽管这些算法训', 'time': '2017-01-15T10:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '我们使用这些算法训练', 'origin_text': '的玩具问题(toy problem)的学习算法几乎是一样的,尽管 !!!这些算法训练!!! 的模型经历了变革,简化了极深架构的训练。最重要的新进展是现在我', 'time': '2017-01-15T10:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '即简化', 'origin_text': 'em)的学习算法几乎是一样的,尽管这些算法训练的模型经历了变革, !!!简化!!! 了极深架构的训练。最重要的新进展是现在我们有了这些算法成功训练', 'time': '2017-01-15T10:56'} {'user': 'acct:zhzhang@hypothes.is', 'text': '获得成功', 'origin_text': '革,简化了极深架构的训练。最重要的新进展是现在我们有了这些算法 !!!成功训练!!! 所需的资源。\\fig?展示了基准数据集的大小如何随着时间的推移', 'time': '2017-01-15T11:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '而显著', 'origin_text': '所需的资源。\\fig?展示了基准数据集的大小如何随着时间的推移 !!!显著!!! 增加。这种趋势是由社会日益数字化驱动的。由于我们的活动越来越', 'time': '2017-01-15T11:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '所以也就比较容易地集中并整理这些记录成适合于机器学习应用的数据集', 'origin_text': '们做什么也越来越多地被记录。我们的计算机越来越多地联网在一起, !!!变得更容易集中管理这些记录!!! ,并将它们整理成适于机器学习应用的数据集。因为统计估计的主要负', 'time': '2017-01-15T11:09'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“的”', 'origin_text': '计的主要负担(观察少量数据以在新数据上泛化)已经减轻,”大数据” !!!的!!! 时代使机器学习更加容易。截至2016年,一个粗略的经验法则是,', 'time': '2017-01-15T11:15'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉“一般”', 'origin_text': '加容易。截至2016年,一个粗略的经验法则是,监督深度学习算法 !!!一般!!! 在每类给定约5000标注样本情况下可以实现可接受的性能,当至少有', 'time': '2017-01-15T11:19'} {'user': 'acct:zhzhang@hypothes.is', 'text': '5000个', 'origin_text': '016年,一个粗略的经验法则是,监督深度学习算法一般在每类给定约 !!!5000!!! 标注样本情况下可以实现可接受的性能,当至少有1000万标注样本的', 'time': '2017-01-15T11:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '一般将达到可以接受的性能', 'origin_text': '验法则是,监督深度学习算法一般在每类给定约5000标注样本情况下 !!!可以实现可接受的性能!!! ,当至少有1000万标注样本的数据集用于训练时将达到或超过人类表', 'time': '2017-01-15T11:21'} {'user': 'acct:zhzhang@hypothes.is', 'text': '1000万个', 'origin_text': '在每类给定约5000标注样本情况下可以实现可接受的性能,当至少有 !!!1000万!!! 标注样本的数据集用于训练时将达到或超过人类表现。在更小的数据集', 'time': '2017-01-15T11:22'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它将', 'origin_text': '以实现可接受的性能,当至少有1000万标注样本的数据集用于训练时 !!!将!!! 达到或超过人类表现。在更小的数据集上成功是一个重要的研究领域,', 'time': '2017-01-15T11:23'} {'user': 'acct:zhzhang@hypothes.is', 'text': '获得成功', 'origin_text': '注样本的数据集用于训练时将达到或超过人类表现。在更小的数据集上 !!!成功!!! 是一个重要的研究领域,为此我们应特别侧重于如何通过无监督或半监督', 'time': '2017-01-15T11:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '自20世纪80年代以来,在享有相对小的成功之后,', 'origin_text': '样。}\\end{figure}与日俱增的模型规模 !!!相对20世纪80年代较少的成功!!! ,现在神经网络非常成功的另一个重要原因是我们现在拥有的计算资源可', 'time': '2017-01-15T11:47'} {'user': 'acct:zhzhang@hypothes.is', 'text': '连接主义', 'origin_text': '功的另一个重要原因是我们现在拥有的计算资源可以运行更大的模型。 !!!连接机制!!! 的主要见解之一是,当动物的许多神经元一起工作时会变得聪明。单独', 'time': '2017-01-15T11:49'} {'user': 'acct:zhzhang@hypothes.is', 'text': '生物神经元不是特别稠密地连接在一起。', 'origin_text': '工作时会变得聪明。单独神经元或小集合的神经元不是特别有用。 !!!生物神经元没有连接的特别密集!!! 。如\\fig?所示,几十年来,我们的机器学习模型中每个神经元的', 'time': '2017-01-15T11:54'} {'user': 'acct:zhzhang@hypothes.is', 'text': '已经', 'origin_text': 'fig?所示,几十年来,我们的机器学习模型中每个神经元的连接数量 !!!甚至!!! 与哺乳动物的大脑在同一数量级。\\begin{figure}[!', 'time': '2017-01-15T11:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '级上', 'origin_text': '机器学习模型中每个神经元的连接数量甚至与哺乳动物的大脑在同一数量 !!!级!!! 。\\begin{figure}[!htb]\\ifOpenSou', 'time': '2017-01-15T11:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '小', 'origin_text': '\\fig?所示,就神经元的总数目而言,直到最近神经网络都是惊人的 !!!少!!! 。自从引入隐藏单元以来,人工神经网络的规模大约每2.4年扩大一', 'time': '2017-01-15T12:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '隐藏单元引入', 'origin_text': '所示,就神经元的总数目而言,直到最近神经网络都是惊人的少。自从 !!!引入隐藏单元!!! 以来,人工神经网络的规模大约每2.4年扩大一倍。这种增长是由更', 'time': '2017-01-15T12:02'} {'user': 'acct:zhzhang@hypothes.is', 'text': '能力', 'origin_text': '杂的任务中实现更高的精度。这种趋势看起来将持续数十年。除非有 !!!允许!!! 迅速扩展的新技术,否则至少直到21世纪50年代,人工神经网络将才', 'time': '2017-01-15T12:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '要', 'origin_text': '种趋势看起来将持续数十年。除非有允许迅速扩展的新技术,否则至少 !!!直!!! 到21世纪50年代,人工神经网络将才能具备与人脑相同数量级的神经', 'time': '2017-01-15T12:08'} {'user': 'acct:zhzhang@hypothes.is', 'text': '生物神经元比现在的人工神经元可能表示更复杂的功能', 'origin_text': '世纪50年代,人工神经网络将才能具备与人脑相同数量级的神经元。 !!!生物神经元表示的函数可能比目前的人工神经元更复杂!!! ,因此生物神经网络可能比图中描绘的更大。\\begin{figu', 'time': '2017-01-15T12:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '甚至要更大', 'origin_text': '数可能比目前的人工神经元更复杂,因此生物神经网络可能比图中描绘的 !!!更大!!! 。\\begin{figure}[!htb]\\ifOpenSou', 'time': '2017-01-15T12:14'} {'user': 'acct:zhzhang@hypothes.is', 'text': '现在看来', 'origin_text': '\\end{enumerate}}\\end{figure} !!!现在回想起来!!! ,比一个水蛭的神经元还少的神经网络不能解决复杂的人工智能问题是不', 'time': '2017-01-15T12:17'} {'user': 'acct:zhzhang@hypothes.is', 'text': '其神经元比', 'origin_text': 'umerate}}\\end{figure}现在回想起来, !!!比!!! 一个水蛭的神经元还少的神经网络不能解决复杂的人工智能问题是不足为', 'time': '2017-01-15T12:19'} {'user': 'acct:zhzhang@hypothes.is', 'text': '但它比相对原始的脊椎动物如青蛙的神经系统都要小', 'origin_text': '不足为奇的。即使现在从一个计算系统角度来看可能相当大的网络, !!!实际上比相对原始的脊椎动物如青蛙的神经系统更小!!! 。由于更快的CPU、通用GPU的到来(在\\sec?中讨论)、', 'time': '2017-01-15T12:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '即使现在的网络,从计算系统角度来看它可能相当大的,', 'origin_text': '的神经元还少的神经网络不能解决复杂的人工智能问题是不足为奇的。 !!!即使现在从一个计算系统角度来看可能相当大的网络!!! , 实际上比相对原始的脊椎动物如青蛙的神经系统更小。由于更快', 'time': '2017-01-15T12:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '出现', 'origin_text': '脊椎动物如青蛙的神经系统更小。由于更快的CPU、通用GPU的 !!!到来!!! (在\\sec?中讨论)、更快的网络连接和更好的分布式计算的软件基', 'time': '2017-01-15T12:33'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉”的“', 'origin_text': '?中讨论)、更快的网络连接和更好的分布式计算的软件基础设施,模型 !!!的!!! 规模随着时间的推移不断增加是深度学习历史中最重要的趋势之一。普', 'time': '2017-01-15T12:34'} {'user': 'acct:zhzhang@hypothes.is', 'text': '而且', 'origin_text': '世纪80年代以来,深度学习提供精确识别和预测的能力一直在提高。 !!!此外!!! ,深度学习持续成功地应用于越来越广泛的应用。最早的深度模型被', 'time': '2017-01-15T12:39'} {'user': 'acct:zhzhang@hypothes.is', 'text': '被应用', 'origin_text': '习提供精确识别和预测的能力一直在提高。此外,深度学习持续成功地 !!!应用!!! 于越来越广泛的应用。最早的深度模型被用来识别裁剪得很合适且非', 'time': '2017-01-15T12:43'} {'user': 'acct:zhzhang@hypothes.is', 'text': '实际问题中', 'origin_text': '测的能力一直在提高。此外,深度学习持续成功地应用于越来越广泛的 !!!应用!!! 。最早的深度模型被用来识别裁剪得很合适且非常小的图像中的单个', 'time': '2017-01-15T12:44'} {'user': 'acct:zhzhang@hypothes.is', 'text': '裁剪紧凑且非常小的图像中的个体目标-', 'origin_text': '习持续成功地应用于越来越广泛的应用。最早的深度模型被用来识别 !!!裁剪得很合适且非常小的图像中的单个对象!!! {cite?}。自那时以来,神经网络可以处理的图像尺寸逐渐增加', 'time': '2017-01-15T12:52'} {'user': 'acct:zhzhang@hypothes.is', 'text': '自此', 'origin_text': '用来识别裁剪得很合适且非常小的图像中的单个对象{cite?}。 !!!自那时以来!!! ,神经网络可以处理的图像尺寸逐渐增加。现代对象识别网络能处理丰', 'time': '2017-01-15T12:55'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': 'e?}。自那时以来,神经网络可以处理的图像尺寸逐渐增加。现代 !!!对象!!! 识别网络能处理丰富的高分辨率照片,并且不要求在被识别的对象附近进', 'time': '2017-01-15T12:57'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': '现代对象识别网络能处理丰富的高分辨率照片,并且不要求在被识别的 !!!对象!!! 附近进行裁剪{cite?}。类似地,最早网络只能识别两种对象(', 'time': '2017-01-15T12:58'} {'user': 'acct:zhzhang@hypothes.is', 'text': '裁剪照片', 'origin_text': '象识别网络能处理丰富的高分辨率照片,并且不要求在被识别的对象附近 !!!进行裁剪!!! {cite?}。类似地,最早网络只能识别两种对象(或在某些情况', 'time': '2017-01-15T13:00'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': '}。类似地,最早网络只能识别两种对象(或在某些情况下,单一种类 !!!的对象!!! 的存在与否),而这些现代网络通常识别至少1000个不同类别的对象', 'time': '2017-01-15T13:03'} {'user': 'acct:zhzhang@hypothes.is', 'text': '单类目标', 'origin_text': 'ite?}。类似地,最早网络只能识别两种对象(或在某些情况下, !!!单一种类的对象!!! 的存在与否),而这些现代网络通常识别至少1000个不同类别的对象', 'time': '2017-01-15T13:04'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': '对象的存在与否),而这些现代网络通常识别至少1000个不同类别的 !!!对象!!! 。对象识别中最大的比赛是每年举行的ImageNet大型视觉识别', 'time': '2017-01-15T13:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': '在与否),而这些现代网络通常识别至少1000个不同类别的对象。 !!!对象!!! 识别中最大的比赛是每年举行的ImageNet大型视觉识别挑战(I', 'time': '2017-01-15T13:06'} {'user': 'acct:zhzhang@hypothes.is', 'text': '戏剧性一幕', 'origin_text': 'geNet大型视觉识别挑战(ILSVRC)。深度学习迅速崛起的 !!!一个戏剧性时刻!!! 是卷积网络第一次大幅赢得这一挑战,将最高水准的前5错误率从26.', 'time': '2017-01-15T13:11'} {'user': 'acct:zhzhang@hypothes.is', 'text': '排序表', 'origin_text': '{cite?},这意味着该卷积网络针对每个图像的可能类别生成一个 !!!顺序列表!!! ,但15.3\\%的测试样例的正确类别不会出现在此列表中的前5。', 'time': '2017-01-15T13:21'} {'user': 'acct:zhzhang@hypothes.is', 'text': '除了15.3%的测试样本,其它测试样本的正确类别都出现在此列表中的前5项里。', 'origin_text': '?},这意味着该卷积网络针对每个图像的可能类别生成一个顺序列表, !!!但15.3\\%的测试样例的正确类别不会出现在此列表中的前5!!! 。此后,深度卷积网络一直能在这些比赛中取胜,截至写书时,深度学', 'time': '2017-01-15T13:28'} {'user': 'acct:zhzhang@hypothes.is', 'text': '连续地赢得这些比赛。', 'origin_text': '样例的正确类别不会出现在此列表中的前5。此后,深度卷积网络一直 !!!能在这些比赛中取胜,!!! 截至写书时,深度学习的进步将这个比赛中的前5错误率降到3.6\\%', 'time': '2017-01-15T13:31'} {'user': 'acct:zhzhang@hypothes.is', 'text': '写该书', 'origin_text': '此列表中的前5。此后,深度卷积网络一直能在这些比赛中取胜,截至 !!!写书!!! 时,深度学习的进步将这个比赛中的前5错误率降到3.6\\%, 如\\', 'time': '2017-01-15T13:32'} {'user': 'acct:zhzhang@hypothes.is', 'text': '最新结果', 'origin_text': '此后,深度卷积网络一直能在这些比赛中取胜,截至写书时,深度学习的 !!!进步!!! 将这个比赛中的前5错误率降到3.6\\%, 如\\fig?所示。\\', 'time': '2017-01-15T13:34'} {'user': 'acct:zhzhang@hypothes.is', 'text': '神经网络可以从一幅图像中学习输出描述它的整个字符序列', 'origin_text': '{Goodfellow+et+al-ICLR2014a}表明, !!!神经网络可以学习输出描述图像的整个字符序列!!! ,而不是仅仅识别单个对象。此前,人们普遍认为,这种学习需要对序', 'time': '2017-01-15T13:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '目标', 'origin_text': ',神经网络可以学习输出描述图像的整个字符序列,而不是仅仅识别单个 !!!对象!!! 。此前,人们普遍认为,这种学习需要对序列中的单个元素进行标注{', 'time': '2017-01-15T13:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '被用于', 'origin_text': 'cite?}。循环神经网络,如之前提到的LSTM序列模型,现在 !!!用于!!! 建模序列和其他序列之间的关系,而不是仅仅固定输入之间的关系。这', 'time': '2017-01-16T02:51'} {'user': 'acct:zhzhang@hypothes.is', 'text': '冠军级', 'origin_text': '阶段,但原则上未来可以适用于几乎所有的任务。深度学习的另一个 !!!冠军!!! 成就是在强化学习领域的扩展。在强化学习的背景下,一个自主体必须', 'time': '2017-01-16T02:53'} {'user': 'acct:zhzhang@hypothes.is', 'text': '删掉”这个“', 'origin_text': '用于建模序列和其他序列之间的关系,而不是仅仅固定输入之间的关系。 !!!这个!!! 序列到序列的学习似乎处于另一个应用演进的浪潮之巅:机器翻译{ci', 'time': '2017-01-16T07:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '使得另外一个应用--机器翻译--正处于革命性变化转型', 'origin_text': '的关系,而不是仅仅固定输入之间的关系。这个序列到序列的学习似乎 !!!处于另一个应用演进的浪潮之巅!!! :机器翻译{cite?}。日益复杂的趋势已将其推向逻辑结', 'time': '2017-01-16T07:26'} {'user': 'acct:zhzhang@hypothes.is', 'text': '增加复杂性', 'origin_text': '乎处于另一个应用演进的浪潮之巅:机器翻译{cite?}。 !!!日益复杂!!! 的趋势已将其推向逻辑结论,即神经图灵机{cite?}的引入,它能', 'time': '2017-01-16T07:27'} {'user': 'acct:zhzhang@hypothes.is', 'text': '等。', 'origin_text': 'u、Apple、Adobe、Netflix、NVIDIA和NEC !!!。!!! 深度学习的进步也严重依赖于软件基础架构的进展。软件库如Th', 'time': '2017-01-16T08:13'} {'user': 'acct:zhzhang@hypothes.is', 'text': '发展', 'origin_text': 'Adobe、Netflix、NVIDIA和NEC。深度学习的 !!!进步!!! 也严重依赖于软件基础架构的进展。软件库如Theano{cite', 'time': '2017-01-16T08:14'} {'user': 'acct:zhzhang@hypothes.is', 'text': '用于目标识别', 'origin_text': '重要的研究项目或商业产品。深度学习也为其他科学做出了贡献。 !!!识别对象!!! 的现代卷积网络提供给神经科学家可以研究的视觉处理模型{cite?', 'time': '2017-01-16T08:16'} {'user': 'acct:zhzhang@hypothes.is', 'text': '以及', 'origin_text': '可以研究的视觉处理模型{cite?}。深度学习也为处理海量数据 !!!、!!! 在科学领域作出有效的预测提供了非常有用的工具。它已成功地用于预', 'time': '2017-01-16T08:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '深刻地', 'origin_text': '总之,深度学习是机器学习的一种方法, 过去几十年的发展中,它 !!!深深地!!! 吸收了我们关于人脑、统计学与应用数学的知识。近年来,深度学习的', 'time': '2017-01-16T08:19'} {'user': 'acct:zhzhang@hypothes.is', 'text': '汲取', 'origin_text': '之,深度学习是机器学习的一种方法, 过去几十年的发展中,它深深地 !!!吸收!!! 了我们关于人脑、统计学与应用数学的知识。近年来,深度学习的普及', 'time': '2017-01-16T08:20'} {'user': 'acct:zhzhang@hypothes.is', 'text': '和', 'origin_text': '种方法, 过去几十年的发展中,它深深地吸收了我们关于人脑、统计学 !!!与!!! 应用数学的知识。近年来,深度学习的普及性和实用性有了极大的发展', 'time': '2017-01-16T08:22'} {'user': 'acct:zhzhang@hypothes.is', 'text': '深度学习在它的普及性和实用性方面都有了极大的发展', 'origin_text': ',它深深地吸收了我们关于人脑、统计学与应用数学的知识。近年来, !!!深度学习的普及性和实用性有了极大的发展!!! ,这在很大程度上得益于更强大的计算机、更大的数据集和能够训练更深', 'time': '2017-01-16T08:24'} {'user': 'acct:zhzhang@hypothes.is', 'text': '进一步提高深度学习并将它带到新的领域,未来几年充满了挑战和机遇', 'origin_text': '度上得益于更强大的计算机、更大的数据集和能够训练更深网络的技术。 !!!未来几年充满了进一步提高深度学习并将它带到新领域的挑战和机遇!!! 。 ', 'time': '2017-01-16T08:30'} {'user': 'acct:zhzhang@hypothes.is', 'text': '它已成功地用于预测分子如何相互作用从而帮助制药公司设计新的药物{cite?},搜索亚原子粒子{cite?},以及自动解析用于构建人脑三维图的显微镜图像{cite?}等。 ', 'origin_text': '为处理海量数据、在科学领域作出有效的预测提供了非常有用的工具。 !!!它已成功地用于预测分子如何相互作用,这能帮助制药公司设计新的药物{cite?}、搜索的亚原子粒子{cite?}和自动解析用于构建人脑三维图的显微镜图像{cite?}。!!! 我们期待深度学习未来出现在越来越多的科学领域。总之,深', 'time': '2017-01-16T08:33'} {'user': 'acct:NeutronT@hypothes.is', 'text': '20世纪40年代到60年代深度学习的萌芽出现在控制论中,80年代到90年代的深度学习表现为联结主义,直到2006年,才真正以深度学习之名复兴。', 'origin_text': '习是有用的。一般来说,目前为止深度学习已经经历了三次发展浪潮: !!!20世纪40年代到60年代深度学习的雏形出现在控制论中,20世纪80年代到90年代深度学习以联结主义为代表,并于2006年开始,以深度学习之名复兴。!!! \\fig?给出了定量的展示。\\begin{figure}[', 'time': '2017-01-17T02:58'} {'user': 'acct:NeutronT@hypothes.is', 'text': '深度学习的神经观点受两个主要思想启发: 一是以大脑为例,证明了', 'origin_text': '能{cite?},但它们一般都没有被设计成生物功能的真实模型。 !!!深度学习的神经观点受两个主要思想启发。一个想法是大脑作为例子证明!!! 智能行为是可能的,因此,概念上,建立智能的直接途径是逆向大脑背后', 'time': '2017-01-17T02:58'} {'user': 'acct:NeutronT@hypothes.is', 'text': '二是', 'origin_text': '念上,建立智能的直接途径是逆向大脑背后的计算原理,并复制其功能。 !!!另一种看法是!!! ,理解大脑和人类智能背后的原理也非常有趣,因此机器学习模型除了解', 'time': '2017-01-17T03:04'} {'user': 'acct:NeutronT@hypothes.is', 'text': '这些简单的学习算法对机器学习的现状有极大的贡献。比如, 用于调节ADALINE权重的训练算法其实是随机梯度下降算法的一种特例,而稍做改进后的随机梯度下降算法仍然是当前深度学习的主要训练算法。', 'origin_text': '测一个实数{cite?},并且它还可以学习从数据预测这些数。 !!!这些简单的学习算法大大影响了机器学习的现代景象。用于调节ADALINE权重的训练算法是被称为随机梯度下降的一种特例。稍加修改的随机梯度下降算法仍然是当今深度学习的主要训练算法。!!! 基于感知机和ADALINE中使用的函数f(x,w)f(x,w', 'time': '2017-01-17T03:14'} {'user': 'acct:NeutronT@hypothes.is', 'text': '修正线性单元(rectified linear unit,ReLu)\n\n个人觉得译为“整流”太电子化了,作为机器学习领域还是译为“修正”较妥,也比较符合该函数的特点。不过,更建议直接使用“ReLu”而不做翻译', 'origin_text': '(我们将会在\\sec?看到)。目前大多数神经网络是基于一个称为 !!!整流线性单元!!! 的神经单元模型。原始认知机{cite?}受我们关于大脑功能知识', 'time': '2017-01-17T09:35'} {'user': 'acct:NeutronT@hypothes.is', 'text': '生物神经元运算的函数与修正线性单元(ReLu)有着极大的差异', 'origin_text': '神经科学是灵感的重要来源,但它不需要被视为刚性指导。我们知道, !!!实际的神经元与现代整流线性单元计算着非常不同函数!!! ,但更接近真实神经网络的系统并没有导致机器学习性能的提升。此外', 'time': '2017-01-17T03:28'} {'user': 'acct:NeutronT@hypothes.is', 'text': '联结主义', 'origin_text': '流行,但符号模型很难解释大脑如何真正使用神经元实现推理功能。 !!!连接主义!!! 者开始研究实际能基于神经实现的认知模型{cite?},其中很多复', 'time': '2017-01-17T03:31'} {'user': 'acct:NeutronT@hypothes.is', 'text': '其思想是:系统的每一个的输入都应该由多个特征表示,并且每一个特征都应该参与到多个输入的表示。', 'origin_text': '中仍然是非常重要的。其中一个概念是分布式表示{cite?}。 !!!这一想法认为系统每个的输入应该由许多特征表示的,并且每个特征应参与多个可能输入的表示。!!! 例如,假设我们有一个能够识别红色、绿色、或蓝色的汽车、卡车和鸟', 'time': '2017-01-17T03:41'} ============================= Replies ============================= {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:46'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': '感觉还是翻译的不太好。', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': '感觉还是翻译的不太好。', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': '稍微改了一下。', 'time': '2017-01-12T12:45'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': '我们期望当输入数据经过编码器和解码器之后尽可能多地保留信息,同时希望新的表示有各种好的属性, 这也是自动编码器的训练目标。\n我这么翻了。', 'time': '2017-01-12T12:44'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:43'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:42'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:41'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:41'} {'user': 'acct:swordyork@hypothes.is', 'text': '我翻成 朴素且形式化 了', 'time': '2017-01-12T12:41'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:41'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:41'} {'user': 'acct:swordyork@hypothes.is', 'text': '这样翻如何?', 'time': '2017-01-12T12:40'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:40'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:40'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:40'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:39'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:39'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:39'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:39'} {'user': 'acct:swordyork@hypothes.is', 'text': 'fix', 'time': '2017-01-12T12:39'} {'user': 'acct:swordyork@hypothes.is', 'text': '“自”有self的含义,比如self-adapting翻成自适应。为了将其与automatic(auto)区别,我们统一翻成了 “自动编码器” 。', 'time': '2017-01-12T11:18'} {'user': 'acct:zhzhang@hypothes.is', 'text': '一个AI系统观察其中一只眼睛在阴影中的脸部图像时,它最初可能只看到一只眼睛。', 'time': '2017-01-11T13:45'} {'user': 'acct:zhzhang@hypothes.is', 'text': '改得很好', 'time': '2017-01-11T12:55'} {'user': 'acct:swordyork@hypothes.is', 'text': '商量之后觉得整流更好,首先是Relu确实是整流的意思,看它的图就是把小于0的滤掉,另外修正在中国也不好听。而且出于尊重原作的原因,我们不能以ReLU代替。多谢!', 'time': '2017-01-24T07:24'} {'user': 'acct:swordyork@hypothes.is', 'text': '已改,但我觉得科学领域中好一点。', 'time': '2017-01-24T07:22'} {'user': 'acct:swordyork@hypothes.is', 'text': '这个改起来比较方便,但是有人建议整流有人建议修正。我也不清楚该怎么翻,我们还要讨论一下。多谢!', 'time': '2017-01-17T05:04'} {'user': 'acct:swordyork@hypothes.is', 'text': '非常感谢您细心的校对,我综合考虑了大家的建议,稍后更新。还有某些翻译尚存在问题,考虑之后再进行更改。', 'time': '2017-01-16T13:33'} ================================================ FILE: Chapter1/introduction.tex ================================================ % !Mode:: "TeX:UTF-8" % Translator: Shenjian Zhao \chapter{引言} \label{chap:introduction} 远在古希腊时期,发明家就梦想着创造能自主思考的机器。 神话人物皮格马利翁(Pygmalion)、代达罗斯(Daedalus)和赫淮斯托斯(Hephaestus)可以被看作传说中的发明家,而加拉蒂亚(Galatea)、塔洛斯(Talos)和潘多拉(Pandora)则可以被视为人造生命\citep{ovid2004metamorphoses,sparkes1996red,1997works}。 当人类第一次构思可编程计算机时,就已经在思考计算机能否变得智能(尽管这距造出第一台计算机还有一百多年)\citep{Lovelace1842}。 如今,\firstall{AI}已经成为一个具有众多实际应用和活跃研究课题的领域,并且正在蓬勃发展。 我们期望通过智能软件自动地处理常规劳动、理解语音或图像、帮助医学诊断和支持基础科学研究。 在\gls{AI}的早期,那些对人类智力来说非常困难、但对计算机来说相对简单的问题得到迅速解决,比如,那些可以通过一系列形式化的数学规则来描述的问题。 \gls{AI}的真正挑战在于解决那些对人来说很容易执行、但很难形式化描述的任务,如识别人们所说的话或图像中的脸。对于这些问题,我们人类往往可以凭借直觉轻易地解决。 针对这些比较直观的问题,本书讨论一种解决方案。 该方案可以让计算机从经验中学习,并根据层次化的概念体系来理解世界,而每个概念则通过与某些相对简单的概念之间的关系来定义。 让计算机从经验获取知识,可以避免由人类来给计算机形式化地指定它需要的所有知识。 层次化的概念让计算机构建较简单的概念来学习复杂概念。 如果绘制出这些概念如何建立在彼此之上的图,我们将得到一张``深''(层次很多)的图。 基于这个原因,我们称这种方法为~\glssymbol{AI}\firstgls{DL}。 % -- 1 -- \glssymbol{AI}~许多早期的成功发生在相对朴素且形式化的环境中, 而且不要求计算机具备很多关于世界的知识。 例如,IBM的深蓝(Deep Blue)国际象棋系统在1997年击败了世界冠军\ENNAME{Garry Kasparov}\citep{Hsu2002}。 显然国际象棋是一个非常简单的领域,因为它仅含有64个位置并只能以严格限制的方式移动32个棋子。 设计一种成功的国际象棋策略是巨大的成就,但向计算机描述棋子及其允许的走法并不是挑战的困难所在。 国际象棋完全可以由一个非常简短的、完全形式化的规则列表来描述,并可以容易地由程序员事先准备好。 讽刺的是,抽象和形式化的任务对人类而言是最困难的脑力任务之一,但对计算机而言却属于最容易的。 计算机早就能够打败人类最好的象棋选手,但直到最近计算机才在识别对象或语音任务中达到人类平均水平。 一个人的日常生活需要关于世界的巨量知识。 很多这方面的知识是主观的、直观的,因此很难通过形式化的方式表达清楚。 计算机需要获取同样的知识才能表现出智能。 \gls{AI}的一个关键挑战就是如何将这些非形式化的知识传达给计算机。 一些\gls{AI}项目力求将关于世界的知识用形式化的语言进行硬编码(hard-code)。 计算机可以使用逻辑推理规则来自动地理解这些形式化语言中的声明。 这就是众所周知的\gls{AI}的\firstgls{knowledge_base}方法。 然而,这些项目最终都没有取得重大的成功。 其中最著名的项目是Cyc \citep{Lenat-1989-book}。 Cyc包括一个\gls{inference}引擎和一个使用CycL语言描述的声明数据库。 这些声明是由人类监督者输入的。 这是一个笨拙的过程。 人们设法设计出足够复杂的形式化规则来精确地描述世界。 例如,Cyc不能理解一个关于名为~\ENNAME{Fred}~的人在早上剃须的故事\citep{MachineChangedWorld}。 它的推理引擎检测到故事中的不一致性:它知道人体的构成不包含电气零件,但由于~\ENNAME{Fred}~正拿着一个电动剃须刀,它认为实体 ``正在剃须的Fred''\,(``FredWhileShaving'')含有电气部件。 因此它产生了这样的疑问——\ENNAME{Fred}~在刮胡子的时候是否仍然是一个人。 依靠硬编码的知识体系面对的困难表明,\glssymbol{AI}~系统需要具备自己获取知识的能力,即从原始数据中提取模式的能力。 这种能力被称为\firstgls{ML}。 引入\gls{ML}使计算机能够解决涉及现实世界知识的问题,并能作出看似主观的决策。 比如,一个被称为\firstgls{logistic_regression}的简单\gls{ML}算法可以决定是否建议剖腹产\citep{MorYosef90}。 而同样是简单\gls{ML}算法的\firstgls{naive_bayes}则可以区分垃圾电子邮件和合法电子邮件。 % -- 2 -- 这些简单的\gls{ML}算法的性能在很大程度上依赖于给定数据的\firstgls{representation}。 例如,当\gls{logistic_regression}被用于判断产妇是否适合剖腹产时,\glssymbol{AI}~系统不会直接检查患者。 相反,医生需要告诉系统几条相关的信息,诸如是否存在子宫疤痕。 表示患者的每条信息被称为一个特征。 \gls{logistic_regression}学习病人的这些特征如何与各种结果相关联。 然而,它丝毫不能影响该特征定义的方式。 如果将病人的MRI扫描作为\gls{logistic_regression}的输入,而不是医生正式的报告,它将无法作出有用的预测。 MRI扫描的单一像素与分娩过程中并发症之间的相关性微乎其微。 在整个计算机科学乃至日常生活中,对\gls{representation}的依赖都是一个普遍现象。 在计算机科学中,如果数据集合被精巧地结构化并被智能地索引,那么诸如搜索之类的操作的处理速度就可以成指数级地加快。 人们可以很容易地在阿拉伯数字的\gls{representation}下进行算术运算,但在罗马数字的\gls{representation}下运算会比较耗时。 因此,毫不奇怪,\gls{representation}的选择会对\gls{ML}算法的性能产生巨大的影响。 \figref{fig:chap1_polar}展示了一个简单的可视化例子。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/polar_color}} \fi \caption{不同表示的例子:假设我们想在散点图中画一条线来分隔两类数据。 在左图,我们使用笛卡尔坐标表示数据,这个任务是不可能的。 右图中,我们用极坐标表示数据,可以用垂直线简单地解决这个任务。(与David Warde-Farley合作画出此图。)} \label{fig:chap1_polar} \end{figure} 许多\gls{AI}任务都可以通过以下方式解决:先提取一个合适的特征集,然后将这些特征提供给简单的\gls{ML}算法。 例如,对于通过声音鉴别说话者的任务来说,一个有用的特征是对其声道大小的估计。 这个特征为判断说话者是男性、女性还是儿童提供了有力线索。 然而,对于许多任务来说,我们很难知道应该提取哪些特征。 例如,假设我们想编写一个程序来检测照片中的车。 我们知道,汽车有轮子,所以我们可能会想用车轮的存在与否作为特征。 不幸的是,我们难以准确地根据像素值来描述车轮看上去像什么。 虽然车轮具有简单的几何形状,但它的图像可能会因场景而异,如落在车轮上的阴影、太阳照亮的车轮的金属零件、汽车的挡泥板或者遮挡的车轮一部分的前景物体等等。 % -- 3 -- 解决这个问题的途径之一是使用\gls{ML}来发掘\gls{representation}本身,而不仅仅把\gls{representation}映射到输出。 这种方法我们称之为\firstgls{representation_learning}。 学习到的\gls{representation}往往比手动设计的\gls{representation}表现得更好。 并且它们只需最少的人工干预,就能让\glssymbol{AI}系统迅速适应新的任务。 \gls{representation_learning}算法只需几分钟就可以为简单的任务发现一个很好的特征集,对于复杂任务则需要几小时到几个月。 手动为一个复杂的任务设计特征需要耗费大量的人工时间和精力;甚至需要花费整个社群研究人员几十年的时间。 \gls{representation_learning}算法的典型例子是\firstgls{AE}。 \gls{AE}由一个\firstgls{encoder}函数和一个\firstgls{decoder}函数组合而成。 \gls{encoder}函数将输入数据转换为一种不同的\gls{representation},而\gls{decoder}函数则将这个新的\gls{representation}转换到原来的形式。 我们期望当输入数据经过\gls{encoder}和\gls{decoder}之后尽可能多地保留信息,同时希望新的\gls{representation}有各种好的特性, 这也是\gls{AE}的训练目标。 为了实现不同的特性,我们可以设计不同形式的\gls{AE}。 当设计特征或设计用于学习特征的算法时,我们的目标通常是分离出能解释观察数据的\firstgls{factors_of_variation}。 在此背景下,``因素''这个词仅指代影响的不同来源;因素通常不是乘性组合。 这些因素通常是不能被直接观察到的量。 相反,它们可能是现实世界中观察不到的物体或者不可观测的力,但会影响可观测的量。 为了对观察到的数据提供有用的简化解释或推断其原因,它们还可能以概念的形式存在于人类的思维中。 它们可以被看作数据的概念或者抽象,帮助我们了解这些数据的丰富多样性。 当分析语音记录时,\gls{factors_of_variation}包括说话者的年龄、性别、他们的口音和他们正在说的词语。 当分析汽车的图像时,\gls{factors_of_variation}包括汽车的位置、它的颜色、太阳的角度和亮度。 % -- 4 -- 在许多现实的\gls{AI}应用中,困难主要源于多个\gls{factors_of_variation}同时影响着我们能够观察到的每一个数据。 比如,在一张包含红色汽车的图片中,其单个像素在夜间可能会非常接近黑色。 汽车轮廓的形状取决于视角。 大多数应用需要我们\emph{理清}\gls{factors_of_variation}并忽略我们不关心的因素。 显然,从原始数据中提取如此高层次、抽象的特征是非常困难的。 许多诸如说话口音这样的\gls{factors_of_variation},只能通过对数据进行复杂的、接近人类水平的理解来辨识。 这几乎与获得原问题的\gls{representation}一样困难,因此,乍一看,\gls{representation_learning}似乎并不能帮助我们。 \firstgls{DL}通过其他较简单的\gls{representation}来表达复杂\gls{representation},解决了\gls{representation_learning}中的核心问题。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/deep_learning}} \fi \caption{深度学习模型的示意图。 计算机难以理解原始感观输入数据的含义,如表示为像素值集合的图像。 将一组像素映射到对象标识的函数非常复杂。 如果直接处理,学习或评估此映射似乎是不可能的。 深度学习将所需的复杂映射分解为一系列嵌套的简单映射(每个由模型的不同层描述)来解决这一难题。 输入展示在\firstgls{visible_layer},这样命名的原因是因为它包含我们能观察到的变量。 然后是一系列从图像中提取越来越多抽象特征的\firstgls{hidden_layer}。 因为它们的值不在数据中给出,所以将这些层称为``隐藏''; 模型必须确定哪些概念有利于解释观察数据中的关系。 这里的图像是每个\gls{hidden_unit}表示的特征的可视化。 给定像素,第一层可以轻易地通过比较相邻像素的亮度来识别边缘。 有了第一\gls{hidden_layer}描述的边缘,第二\gls{hidden_layer}可以容易地搜索可识别为角和扩展轮廓的边集合。 给定第二\gls{hidden_layer}中关于角和轮廓的图像描述,第三\gls{hidden_layer}可以找到轮廓和角的特定集合来检测特定对象的整个部分。 最后,根据图像描述中包含的对象部分,可以识别图像中存在的对象。 经~\citet{ZeilerFergus14}许可转载此图。 } \label{fig:chap1_deep_learning} \end{figure} \gls{DL}让计算机通过较简单概念构建复杂的概念。 \figref{fig:chap1_deep_learning}展示了\gls{DL}系统如何通过组合较简单的概念(例如转角和轮廓,它们转而由边线定义)来表示图像中人的概念。 \gls{DL}模型的典型例子是前馈深度网络或\firstall{MLP}。 \gls{MLP}仅仅是一个将一组输入值映射到输出值的数学函数。 该函数由许多较简单的函数复合而成。 我们可以认为不同数学函数的每一次应用都为输入提供了新的\gls{representation}。 学习数据的正确\gls{representation}的想法是解释\gls{DL}的一个视角。 另一个视角是深度促使计算机学习一个多步骤的计算机程序。 每一层\gls{representation}都可以被认为是并行执行另一组指令之后计算机的存储器状态。 更深的网络可以按顺序执行更多的指令。 顺序指令提供了极大的能力,因为后面的指令可以参考早期指令的结果。 从这个角度上看,在某层激活函数里,并非所有信息都蕴涵着解释输入的\gls{factors_of_variation}。 \gls{representation}还存储着状态信息,用于帮助程序理解输入。 这里的状态信息类似于传统计算机程序中的计数器或指针。 它与具体的输入内容无关,但有助于模型组织其处理过程。 % -- 6 -- 目前主要有两种度量模型深度的方式。 第一种方式是基于评估架构所需执行的顺序指令的数目。 假设我们将模型表示为给定输入后,计算对应输出的流程图,则可以将这张流程图中的最长路径视为模型的深度。 正如两个使用不同语言编写的等价程序将具有不同的长度;相同的函数可以被绘制为具有不同深度的流程图,其深度取决于我们可以用来作为一个步骤的函数。 \figref{fig:chap1_language}说明了语言的选择如何给相同的架构两个不同的衡量。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/language}} \fi \caption{将输入映射到输出的计算图表的示意图,其中每个节点执行一个操作。 深度是从输入到输出的最长路径的长度,但这取决于可能的计算步骤的定义。 这些图中所示的计算是\gls{logistic_regression}模型的输出,$\sigma(\Vw^T \Vx)$,其中$\sigma$是~\ENNAME{logistic sigmoid}~函数。 如果我们使用加法、乘法和~\ENNAME{logistic sigmoid}~作为我们计算机语言的元素,那么这个模型深度为三。 如果我们将\gls{logistic_regression}视为元素本身,那么这个模型深度为一。 } \label{fig:chap1_language} \end{figure} 另一种是在深度概率模型中使用的方法,它不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型深度。 在这种情况下,计算每个概念\gls{representation}的计算流程图的深度可能比概念本身的图更深。 这是因为系统对较简单概念的理解在给出更复杂概念的信息后可以进一步精细化。 例如,一个~\glssymbol{AI}~系统观察其中一只眼睛在阴影中的脸部图像时,它最初可能只看到一只眼睛。 但当检测到脸部的存在后,系统可以推断第二只眼睛也可能是存在的。 在这种情况下,概念的图仅包括两层(关于眼睛的层和关于脸的层),但如果我们细化每个概念的估计将需要额外的$n$次计算,即计算的图将包含$2n$层。 % -- 7 -- 由于并不总是清楚计算图的深度或概率模型图的深度哪一个是最有意义的,并且由于不同的人选择不同的最小元素集来构建相应的图,因此就像计算机程序的长度不存在单一的正确值一样,架构的深度也不存在单一的正确值。 另外,也不存在模型多么深才能被修饰为``深''的共识。 但相比传统\gls{ML},\gls{DL}研究的模型涉及更多学到功能或学到概念的组合,这点毋庸置疑。 总之, 这本书的主题——\gls{DL}是通向\gls{AI}的途径之一。 具体来说,它是\gls{ML}的一种,一种能够使计算机系统从经验和数据中得到提高的技术。 我们坚信\gls{ML}可以构建出在复杂实际环境下运行的~\glssymbol{AI}~系统,并且是唯一切实可行的方法。 \gls{DL}是一种特定类型的\gls{ML},具有强大的能力和灵活性,它将大千世界\gls{representation}为嵌套的层次概念体系 (由较简单概念间的联系定义复杂概念、从一般抽象概括到高级抽象表示)。 \figref{fig:chap1_venn}说明了这些不同的~\glssymbol{AI}~学科之间的关系。\figref{fig:chap1_which_part_learned}展示了每个学科如何工作的高层次原理。 \begin{figure}[!hbt] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics[width=0.65\textwidth]{Chapter1/figures/venn}} \fi \caption{维恩图展示了深度学习是一种表示学习,也是一种机器学习,可以用于许多(但不是全部)\glssymbol{AI}~方法。 维恩图的每个部分包括一个~\glssymbol{AI}~技术的示例。 } \label{fig:chap1_venn} \end{figure} \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/which_part_learned}} \fi \caption{流程图展示了~\glssymbol{AI}~系统的不同部分如何在不同的~\glssymbol{AI}~学科中彼此相关。 阴影框表示能从数据中学习的组件。} \label{fig:chap1_which_part_learned} \end{figure} \section{本书面向的读者} \label{sec:who_should_read_this_book} 这本书对各类读者都有一定用处,但我们主要是为两类受众对象而写的。 其中一类受众对象是学习\gls{ML}的大学生(本科或研究生),包括那些已经开始职业生涯的\gls{DL}和\gls{AI}研究者。 另一类受众对象是没有\gls{ML}或统计背景但希望能快速地掌握这方面知识并在他们的产品或平台中使用\gls{DL}的软件工程师。 \gls{DL}在许多软件领域都已被证明是有用的,包括计算机视觉、语音和音频处理、自然语言处理、机器人技术、生物信息学和化学、电子游戏、搜索引擎、网络广告和金融。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics[width=0.65\textwidth]{Chapter1/figures/dependency}} \fi \caption{本书的高层组织。 从一章到另一章的箭头表示前一章是理解后一章的必备内容。} \label{fig:chap1_dependency} \end{figure} % -- 8 -- 为了最好地服务各类读者,我们将本书组织为三个部分。 第一部分介绍基本的数学工具和\gls{ML}的概念。 第二部分介绍最成熟的\gls{DL}算法,这些技术基本上已经得到解决。 第三部分讨论某些具有展望性的想法,它们被广泛地认为是\gls{DL}未来的研究重点。 读者可以随意跳过不感兴趣或与自己背景不相关的部分。 熟悉线性代数、概率和基本\gls{ML}概念的读者可以跳过第一部分,例如,当读者只是想实现一个能工作的系统则不需要阅读超出第二部分的内容。 为了帮助读者选择章节,\figref{fig:chap1_dependency}展示了这本书的高层组织结构的流程图。 % -- 10 -- 我们假设所有读者都具备计算机科学背景。 也假设读者熟悉编程,并且对计算的性能问题、复杂性理论、入门级微积分和一些图论术语有基本的了解。 % \section{深度学习的历史趋势} \label{sec:historical_trends_in_deep_learning} 通过历史背景了解\gls{DL}是最简单的方式。 这里我们仅指出\gls{DL}的几个关键趋势,而不是提供其详细的历史: \begin{itemize} \item \gls{DL}有着悠久而丰富的历史,但随着许多不同哲学观点的渐渐消逝,与之对应的名称也渐渐尘封。 \item 随着可用的训练数据量不断增加,\gls{DL}变得更加有用。 \item 随着时间的推移,针对\gls{DL}的计算机软硬件基础设施都有所改善,\gls{DL}模型的规模也随之增长。 \item 随着时间的推移,\gls{DL}已经解决日益复杂的应用,并且精度不断提高。 \end{itemize} \subsection{神经网络的众多名称和命运变迁} \label{sec:the_many_names_and_changing_fortunes_of_neural_networks} 我们期待这本书的许多读者都听说过\gls{DL}这一激动人心的新技术,并对一本书提及一个新兴领域的``历史''而感到惊讶。 事实上,\gls{DL}的历史可以追溯到20世纪40年代。 \gls{DL}\emph{看似}是一个全新的领域,只不过因为在目前流行的前几年它是相对冷门的,同时也因为它被赋予了许多不同的名称(其中大部分已经不再使用),最近才成为众所周知的``\gls{DL}''。 这个领域已经更换了很多名称,它反映了不同的研究人员和不同观点的影响。 全面地讲述\gls{DL}的历史超出了本书的范围。 然而,一些基本的背景对理解\gls{DL}是有用的。 一般来说,目前为止\gls{DL}已经经历了三次发展浪潮:20世纪40年代到60年代\gls{DL}的雏形出现在\firstgls{cybernetics}中,20世纪80年代到90年代\gls{DL}表现为\firstgls{connectionism},直到2006年,才真正以\gls{DL}之名复兴。 \figref{fig:chap1_cybernetics_connectionism_ngrams_color}给出了定量的展示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/cybernetics_connectionism_ngrams_color}} \fi \caption{根据Google图书中短语``\gls{cybernetics}''、``\gls{connectionism}''或``\gls{NN}''频率衡量的\gls{ANN}研究的历史浪潮(图中展示了三次浪潮的前两次,第三次最近才出现)。 第一次浪潮开始于20世纪40年代到20世纪60年代的\gls{cybernetics},随着生物学习理论的发展\citep{McCulloch43,Hebb49} 和第一个模型的实现(如感知机~\citep{Rosenblatt-1958}) ,能实现单个神经元的训练。 第二次浪潮开始于1980-1995年间的\gls{connectionism}方法,可以使用反向传播\citep{Rumelhart86b-small} 训练具有一两个\gls{hidden_layer}的神经网络。 当前第三次浪潮,也就是深度学习,大约始于2006年\citep{Hinton06,Bengio-nips-2006-small,ranzato-07-small},并且现在在2016年以书的形式出现。 另外两次浪潮类似地出现在书中的时间比相应的科学活动晚得多。 } \label{fig:chap1_cybernetics_connectionism_ngrams_color} \end{figure} % -- 12 -- 我们今天知道的一些最早的学习算法,是旨在模拟生物学习的计算模型,即大脑怎样学习或为什么能学习的模型。 其结果是\gls{DL}以\firstall{ANN}之名而淡去。 彼时,\gls{DL}模型被认为是受生物大脑(无论人类大脑或其他动物的大脑)所启发而设计出来的系统。 尽管有些\gls{ML}的\gls{NN}有时被用来理解大脑功能\citep{hinton1991lesioning},但它们一般都没有被设计成生物功能的真实模型。 \gls{DL}的神经观点受两个主要思想启发。 一个想法是大脑作为例子证明智能行为是可能的,因此,概念上,建立智能的直接途径是逆向大脑背后的计算原理,并复制其功能。 另一种看法是,理解大脑和人类智能背后的原理也非常有趣,因此\gls{ML}模型除了解决工程应用的能力, 如果能让人类对这些基本的科学问题有进一步的认识也将会很有用。 % -- 13 -- 现代术语``\gls{DL}''超越了目前\gls{ML}模型的神经科学观点。 它诉诸学习\emph{多层次组合}这一更普遍的原理,这一原理也可以应用于那些并非受神经科学启发的\gls{ML}框架。 现代\gls{DL}的最早前身是从神经科学的角度出发的简单线性模型。 这些模型被设计为使用一组$\Sn$个输入$\Sx_1, \dots ,\Sx_n$并将它们与一个输出$\Sy$相关联。 这些模型希望学习一组权重$\Sw_1, \dots, \Sw_n $,并计算它们的输出$f(\Vx, \Vw) = \Sx_1 \Sw_1 + \dots + \Sx_n \Sw_n$。 如\figref{fig:chap1_cybernetics_connectionism_ngrams_color}所示,这第一波\gls{NN}研究浪潮被称为\gls{cybernetics}。 \ENNAME{McCulloch-Pitts}~神经元\citep{McCulloch43}是脑功能的早期模型。 该线性模型通过检验函数$f(\Vx,\Vw)$的正负来识别两种不同类别的输入。 显然,模型的权重需要正确设置后才能使模型的输出对应于期望的类别。 这些权重可以由操作人员设定。 在20世纪50年代,感知机\citep{Rosenblatt-1956,Rosenblatt-1958}成为第一个能根据每个类别的输入\gls{example}来学习权重的模型。 约在同一时期,\textbf{自适应线性单元}(adaptive linear element, ADALINE)简单地返回函数$f(\Vx)$本身的值来预测一个实数\citep{Widrow60},并且它还可以学习从数据预测这些数。 这些简单的学习算法大大影响了\gls{ML}的现代景象。 用于调节ADALINE权重的训练算法是被称为\firstgls{SGD}的一种特例。 稍加改进后的\gls{SGD}算法仍然是当今\gls{DL}的主要训练算法。 基于感知机和ADALINE中使用的函数$f(\Vx, \Vw)$的模型被称为\firstgls{linear_model}。 尽管在许多情况下,这些模型以不同于原始模型的方式进行\emph{训练},但仍是目前最广泛使用的\gls{ML}模型。 \gls{linear_model}有很多局限性。 最著名的是,它们无法学习异或(XOR)函数,即$f([0,1], \Vw) = 1$和$f([1,0], \Vw)=1$,但$f([1,1], \Vw)=0$和$f([0,0],\Vw)= 0$。 观察到\gls{linear_model}这个缺陷的批评者对受生物学启发的学习普遍地产生了抵触\citep{Minsky69}。 这导致了\gls{NN}热潮的第一次大衰退。 现在,神经科学被视为\gls{DL}研究的一个重要灵感来源,但它已不再是该领域的主要指导。 % -- 14 -- 如今神经科学在\gls{DL}研究中的作用被削弱,主要原因是我们根本没有足够的关于大脑的信息来作为指导去使用它。 要获得对被大脑实际使用算法的深刻理解,我们需要有能力同时监测(至少是)数千相连神经元的活动。 我们不能够做到这一点,所以我们甚至连大脑最简单、最深入研究的部分都还远远没有理解\citep{olshausen:2005}。 神经科学已经给了我们依靠单一\gls{DL}算法解决许多不同任务的理由。 神经学家们发现,如果将雪貂的大脑重新连接,使视觉信号传送到听觉区域,它们可以学会用大脑的听觉处理区域去``看''~\citep{von2000visual}。 这暗示着大多数哺乳动物的大脑能够使用单一的算法就可以解决其大脑可以解决的大部分不同任务。 在这个假设之前,\gls{ML}研究是比较分散的,研究人员在不同的社群研究自然语言处理、计算机视觉、运动规划和语音识别。 如今,这些应用社群仍然是独立的,但是对于\gls{DL}研究团体来说,同时研究许多或甚至所有这些应用领域是很常见的。 我们能够从神经科学得到一些粗略的指南。 仅通过计算单元之间的相互作用而变得智能的基本思想是受大脑启发的。 新认知机\citep{Fukushima80}受哺乳动物视觉系统的结构启发,引入了一个处理图片的强大模型架构,它后来成为了现代卷积网络的基础\citep{LeCun98-small}(我们将会在\secref{sec:the_neuroscientific_basis_for_convolutional_networks}看到)。 目前大多数\gls{NN}是基于一个称为\firstgls{ReLU}的神经单元模型。 原始认知机\citep{Fukushima75}受我们关于大脑功能知识的启发, 引入了一个更复杂的版本。 简化的现代版通过吸收来自不同观点的思想而形成,\citet{Nair-2010}和~\citet{Glorot+al-AI-2011-small}援引神经科学作为影响,\citet{Jarrett-ICCV2009}援引更多面向工程的影响。 虽然神经科学是灵感的重要来源,但它不需要被视为刚性指导。 我们知道,真实的神经元计算着与现代\gls{ReLU}非常不同的函数,但更接近真实神经网络的系统并没有导致\gls{ML}性能的提升。 此外,虽然神经科学已经成功地启发了一些\gls{NN}\emph{架构},但我们对用于神经科学的生物学习还没有足够多的了解,因此也就不能为训练这些架构用的\emph{学习算法}提供太多的借鉴。 媒体报道经常强调\gls{DL}与大脑的相似性。 的确,\gls{DL}研究者比其他\gls{ML}领域(如核方法或贝叶斯统计)的研究者更可能地引用大脑作为影响,但是大家不应该认为\gls{DL}在尝试模拟大脑。 现代\gls{DL}从许多领域获取灵感,特别是应用数学的基本内容如线性代数、概率论、信息论和数值优化。 尽管一些\gls{DL}的研究人员引用神经科学作为灵感的重要来源,然而其他学者完全不关心神经科学。 % -- 15 -- 值得注意的是,了解大脑是如何在算法层面上工作的尝试确实存在且发展良好。 这项尝试主要被称为``计算神经科学'',并且是独立于\gls{DL}的领域。 研究人员在两个领域之间来回研究是很常见的。 \gls{DL}领域主要关注如何构建计算机系统,从而成功解决需要智能才能解决的任务,而计算神经科学领域主要关注构建大脑如何真实工作的比较精确的模型。 在20世纪80年代,神经网络研究的第二次浪潮在很大程度上是伴随一个被称为\firstgls{connectionism}或\textbf{并行分布处理}( parallel distributed processing)潮流而出现的\citep{Rumelhart86,mcclelland1995appeal}。 \gls{connectionism}是在认知科学的背景下出现的。 认知科学是理解思维的跨学科途径,即它融合多个不同的分析层次。 在20世纪80年代初期,大多数认知科学家研究符号推理模型。 尽管这很流行,但符号模型很难解释大脑如何真正使用神经元实现推理功能。 \gls{connectionism}者开始研究真正基于神经系统实现的认知模型\citep{Touretzky1985},其中很多复苏的想法可以追溯到心理学家~\ENNAME{Donald Hebb}~在20世纪40年代的工作\citep{Hebb49}。 \gls{connectionism}的中心思想是,当网络将大量简单的计算单元连接在一起时可以实现智能行为。 这种见解同样适用于生物神经系统中的神经元,因为它和计算模型中\gls{hidden_unit}起着类似的作用。 在上世纪80年代的\gls{connectionism}期间形成的几个关键概念在今天的\gls{DL}中仍然是非常重要的。 其中一个概念是\firstgls{distributed_representation}\citep{Hinton-et-al-PDP1986}。 其思想是:系统的每一个输入都应该由多个特征\gls{representation},并且每一个特征都应该参与到多个可能输入的\gls{representation}。 例如,假设我们有一个能够识别红色、绿色、或蓝色的汽车、卡车和鸟类的视觉系统, \gls{representation}这些输入的其中一个方法是将九个可能的组合:红卡车,红汽车,红鸟,绿卡车等等使用单独的神经元或\gls{hidden_unit}激活。 这需要九个不同的神经元,并且每个神经必须独立地学习颜色和对象身份的概念。 改善这种情况的方法之一是使用\gls{distributed_representation},即用三个神经元描述颜色,三个神经元描述对象身份。 这仅仅需要6个神经元而不是9个,并且描述红色的神经元能够从汽车、卡车和鸟类的图像中学习红色,而不仅仅是从一个特定类别的图像中学习。 \gls{distributed_representation}的概念是本书的核心,我们将在\chapref{chap:representation_learning}中更加详细地描述。 % -- 16 -- \gls{connectionism}潮流的另一个重要成就是反向传播在训练具有内部\gls{representation}的深度\gls{NN}中的成功使用以及反向传播算法的普及\citep{RHW,Lecun-these87}。 这个算法虽然曾黯然失色不再流行,但截至写书之时,它仍是训练深度模型的主导方法。% ?? 在20世纪90年代,研究人员在使用\gls{NN}进行序列建模的方面取得了重要进展。 \citet{Hochreiter91}和~\citet{Bengio-trnn93-small}指出了对长序列进行建模的一些根本性数学难题,这将在\secref{sec:the_challenge_of_long_term_dependencies}中描述。 \citet{Hochreiter+Schmidhuber-1997}引入\firstall{LSTM}网络来解决这些难题。 如今,\glssymbol{LSTM}~在许多序列建模任务中广泛应用,包括Google的许多自然语言处理任务。 \gls{NN}研究的第二次浪潮一直持续到上世纪90年代中期。 基于\gls{NN}和其他\glssymbol{AI}技术的创业公司开始寻求投资,其做法野心勃勃但不切实际。 当\glssymbol{AI}研究不能实现这些不合理的期望时,投资者感到失望。 同时,\gls{ML}的其他领域取得了进步。 比如,核方法\citep{Boser92,Cortes95,SchBurSmo99}和图模型\citep{Jordan98}都在很多重要任务上实现了很好的效果。 这两个因素导致了\gls{NN}热潮的第二次衰退,并一直持续到2007年。 在此期间,\gls{NN}继续在某些任务上获得令人印象深刻的表现\citep{LeCun98-small,Bengio-nnlm2001}。 加拿大高级研究所(CIFAR)通过其神经计算和自适应感知(NCAP)研究计划帮助维持\gls{NN}研究。 该计划联合了分别由~\ENNAME{Geoffrey Hinton}、\ENNAME{Yoshua Bengio}和~\ENNAME{Yann LeCun}~领导的多伦多大学、蒙特利尔大学和纽约大学的\gls{ML}研究小组。 这个多学科的CIFAR NCAP研究计划还囊括了神经科学家、人类和计算机视觉专家。 % -- 17 -- 在那个时候,人们普遍认为深度网络是难以训练的。 现在我们知道,20世纪80年代就存在的算法能工作得非常好,但是直到在2006年前后都没有体现出来。 这可能仅仅由于其计算代价太高,而以当时可用的硬件难以进行足够的实验。 神经网络研究的第三次浪潮始于2006年的突破。 \ENNAME{Geoffrey Hinton}~表明名为\gls{DBN}的\gls{NN}可以使用一种称为贪婪逐层预训练的策略来有效地训练\citep{Hinton06},我们将在\secref{sec:greedy_layer_wise_unsupervised_pretraining}中更详细地描述。 其他CIFAR附属研究小组很快表明,同样的策略可以被用来训练许多其他类型的深度网络\citep{Bengio+Lecun-chapter2007-small,ranzato-07},并能系统地帮助提高在测试样例上的泛化能力。 \gls{NN}研究的这一次浪潮普及了``\gls{DL}''这一术语的使用,强调研究者现在有能力训练以前不可能训练的比较深的神经网络,并着力于深度的理论重要性上\citep{Bengio+Lecun-chapter2007,Delalleau+Bengio-2011-small,Pascanu-et-al-ICLR2014,Montufar-et-al-NIPS2014}。 此时,深度\gls{NN}已经优于与之竞争的基于其他\gls{ML}技术以及手工设计功能的~\glssymbol{AI}~系统。 在写这本书的时候,神经网络的第三次发展浪潮仍在继续,尽管深度学习的研究重点在这一段时间内发生了巨大变化。 第三次浪潮已开始着眼于新的无监督学习技术和深度模型在小数据集的泛化能力,但目前更多的兴趣点仍是比较传统的监督学习算法和深度模型充分利用大型标注数据集的能力。 \subsection{与日俱增的数据量} \label{sec:increasing_dataset_sizes} 人们可能想问,既然人工\gls{NN}的第一个实验在20世纪50年代就完成了,但为什么\gls{DL}直到最近才被认为是关键技术。 自20世纪90年代以来,\gls{DL}就已经成功用于商业应用,但通常被视为是一种只有专家才可以使用的艺术而不是一种技术,这种观点一直持续到最近。 确实,要从一个\gls{DL}算法获得良好的性能需要一些技巧。 幸运的是,随着训练数据的增加,所需的技巧正在减少。 目前在复杂的任务达到人类水平的学习算法,与20世纪80年代努力解决玩具问题(toy problem)的学习算法几乎是一样的,尽管我们使用这些算法训练的模型经历了变革,即简化了极深架构的训练。 最重要的新进展是现在我们有了这些算法得以成功训练所需的资源。 \figref{fig:chap1_dataset_size_color}展示了基准数据集的大小如何随着时间的推移而显著增加。 这种趋势是由社会日益数字化驱动的。 由于我们的活动越来越多发生在计算机上,我们做什么也越来越多地被记录。 由于我们的计算机越来越多地联网在一起,这些记录变得更容易集中管理,并更容易将它们整理成适于\gls{ML}应用的数据集。 因为统计估计的主要负担(观察少量数据以在新数据上泛化)已经减轻,``大数据''时代使\gls{ML}更加容易。 截至2016年,一个粗略的经验法则是,监督\gls{DL}算法在每类给定约5000个标注样本情况下一般将达到可以接受的性能,当至少有1000万个标注样本的数据集用于训练时,它将达到或超过人类表现。 此外,在更小的数据集上获得成功是一个重要的研究领域,为此我们应特别侧重于如何通过无监督或半监督学习充分利用大量的未标注样本。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/dataset_size_color}} \fi \caption{与日俱增的数据量。 20世纪初,统计学家使用数百或数千的手动制作的度量来研究数据集\citep{garson:1900,student08ttest,IrisData1935,Fisher-1936}。 20世纪50年代到80年代,受生物启发的机器学习开拓者通常使用小的合成数据集,如低分辨率的字母位图,设计为在低计算成本下表明神经网络能够学习特定功能\citep{Widrow60,Rumelhart86c}。 20世纪80年代和90年代,机器学习变得更加统计,并开始利用包含成千上万个样本的更大数据集,如手写扫描数字的MNIST数据集(如\figref{fig:chap1_mnist})所示\citep{LeCun98-small}。 在21世纪初的第一个十年,相同大小更复杂的数据集持续出现,如CIFAR-10数据集\citep{KrizhevskyHinton2009} 。 在这十年结束和下五年,明显更大的数据集(包含数万到数千万的样例)完全改变了深度学习的可能实现的事。 这些数据集包括公共Street View House Numbers数据集 \citep{Netzer-wkshp-2011}、各种版本的ImageNet数据集\citep{imagenet_cvpr09,Deng2010,ILSVRCarxiv14}以及Sports-1M数据集\citep{KarpathyCVPR14}。 在图顶部,我们看到翻译句子的数据集通常远大于其他数据集,如根据Canadian Hansard制作的IBM数据集\citep{brown1990statistical}和WMT 2014英法数据集\citep{wmt14} 。 } \label{fig:chap1_dataset_size_color} \end{figure} \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics[width=0.8\textwidth]{Chapter1/figures/mnist}} \fi \caption{MNIST数据集的输入样例。 ``NIST''代表国家标准和技术研究所(National Institute of Standards and Technology),是最初收集这些数据的机构。 ``M''代表``修改的(Modified)'',为更容易地与机器学习算法一起使用,数据已经过预处理。 MNIST数据集包括手写数字的扫描和相关标签(描述每个图像中包含0-9中哪个数字)。 这个简单的分类问题是深度学习研究中最简单和最广泛使用的测试之一。 尽管现代技术很容易解决这个问题,它仍然很受欢迎。 Geoffrey Hinton将其描述为``机器学习的\emph{果蝇}'',这意味着机器学习研究人员可以在受控的实验室条件下研究他们的算法,就像生物学家经常研究果蝇一样。 } \label{fig:chap1_mnist} \end{figure} % -- 20 -- \subsection{与日俱增的模型规模} \label{sec:increasing_model_sizes} 20世纪80年代,\gls{NN}只能取得相对较小的成功,而现在\gls{NN}非常成功的另一个重要原因是我们现在拥有的计算资源可以运行更大的模型。 \gls{connectionism}的主要见解之一是,当动物的许多神经元一起工作时会变得聪明。 单独神经元或小集合的神经元不是特别有用。 生物神经元不是特别稠密地连接在一起。 如\figref{fig:chap1_number_of_synapses_color}所示,几十年来,我们的\gls{ML}模型中每个神经元的连接数量已经与哺乳动物的大脑在同一数量级上。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/number_of_synapses_color}} \fi \caption{与日俱增的每神经元连接数。 % ? 可以翻成平均吗 ? 最初,\gls{ANN}中神经元之间的连接数受限于硬件能力。 而现在,神经元之间的连接数大多是出于设计考虑。 一些\gls{ANN}中每个神经元的连接数与猫一样多,并且对于其他神经网络来说,每个神经元的连接与较小哺乳动物(如小鼠)一样多是非常普遍的。 甚至人类大脑每个神经元的连接也没有过高的数量。 生物神经网络规模来自\citet{number_of_neurons}。 } \label{fig:chap1_number_of_synapses_color} {\tiny \begin{enumerate} \itemsep0em \item % 1 自适应线性单元~\citep{Widrow60} \item % 2 神经认知机~\citep{Fukushima80} \item % 3 GPU-加速 \gls{convolutional_network}~\citep{chellapilla:inria-00112631} \item % 4 \gls{DBM}~\citep{SalHinton09} \item % 5 \gls{unsupervised}\gls{convolutional_network}~\citep{Jarrett-ICCV2009-small} \item % 6 GPU-加速 \gls{MLP}~\citep{Ciresan-2010} \item % 7 分布式\gls{AE}~\citep{QuocLe-ICML2012} \item % 8 Multi-GPU \gls{convolutional_network}~\citep{Krizhevsky-2012-small} \item % 9 COTS HPC \gls{unsupervised}\gls{convolutional_network}~\citep{icml2013_coates13} \item % 10 GoogLeNet~\citep{Szegedy-et-al-arxiv2014} \end{enumerate} } % end tiny \end{figure} 如\figref{fig:chap1_number_of_neurons_color}所示,就神经元的总数目而言,直到最近\gls{NN}都是惊人的小。 自从\gls{hidden_unit}引入以来,人工\gls{NN}的规模大约每2.4年扩大一倍。 这种增长是由更大内存、更快的计算机和更大的可用数据集驱动的。 更大的网络能够在更复杂的任务中实现更高的精度。 这种趋势看起来将持续数十年。 除非有能力迅速扩展的新技术,否则至少要到21世纪50年代,人工\gls{NN}将才能具备与人脑相同数量级的神经元。 生物神经元表示的功能可能比目前的人工神经元所表示的更复杂,因此生物神经网络可能比图中描绘的甚至要更大。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/number_of_neurons_color}} \fi \caption{与日俱增的神经网络规模。 自从引入\gls{hidden_unit},\gls{ANN}的大小大约每2.4年翻一倍。 生物神经网络规模来自~\citet{number_of_neurons}。 } \label{fig:chap1_number_of_neurons_color} {\tiny \begin{enumerate} \itemsep-.1em \item % 1 感知机~\citep{Rosenblatt-1958,Rosenblatt62} \item % 2 自适应线性单元~\citep{Widrow60} \item % 3 神经认知机~\citep{Fukushima80} \item % 4 早期后向传播网络~\citep{Rumelhart86c} \item % 5 用于语音识别的\gls{RNN}~\citep{Robinson+Fallside91} \item % 6 用于语音识别的\gls{MLP}~\citep{Bengio91z} \item % 7 \gls{meanfield}sigmoid\gls{BN}~\citep{Saul+96} \item % 8 LeNet-5~\citep{LeCun98-small} \item % 9 \gls{ESN}~\citep{Jaeger+Haas-2004} \item % 10 \gls{DBN}~\citep{Hinton06} \item % 11 GPU-加速\gls{convolutional_network}~\citep{chellapilla:inria-00112631} \item % 12 \gls{DBM}~\citep{SalHinton09} \item % 13 GPU-加速\gls{DBN}~\citep{RainaICML09} \item % 14 \gls{unsupervised}\gls{convolutional_network}~\citep{Jarrett-ICCV2009-small} \item % 15 GPU-加速\gls{MLP}~\citep{Ciresan-2010} \item % 16 OMP-1 网络~\citep{Coates2011b} \item % 17 分布式\gls{AE}~\citep{QuocLe-ICML2012} \item % 18 Multi-GPU\gls{convolutional_network}~\citep{Krizhevsky-2012-small} \item % 19 COTS HPC \gls{unsupervised}\gls{convolutional_network}~\citep{icml2013_coates13} \item % 20 GoogLeNet~\citep{Szegedy-et-al-arxiv2014} \end{enumerate} } \end{figure} 现在看来,其神经元比一个水蛭还少的\gls{NN}不能解决复杂的\gls{AI}问题是不足为奇的。 即使现在的网络,从计算系统角度来看它可能相当大的,但实际上它比相对原始的脊椎动物如青蛙的神经系统还要小。 由于更快的CPU、通用GPU的出现(在\secref{sec:gpu_implementations}中讨论)、更快的网络连接和更好的分布式计算的软件基础设施,模型规模随着时间的推移不断增加是\gls{DL}历史中最重要的趋势之一。 人们普遍预计这种趋势将很好地持续到未来。 % -- 21 -- \subsection{与日俱增的精度、复杂度和对现实世界的冲击} \label{sec:increasing_accuracy_complexity_and_real_world_impact} 20世纪80年代以来,\gls{DL}提供精确识别和预测的能力一直在提高。 而且,\gls{DL}持续成功地被应用于越来越广泛的实际问题中。 最早的深度模型被用来识别裁剪紧凑且非常小的图像中的单个对象\citep{Rumelhart86}。 此后,\gls{NN}可以处理的图像尺寸逐渐增加。 现代对象识别网络能处理丰富的高分辨率照片,并且不需要在被识别的对象附近进行裁剪\citep{Krizhevsky-2012}。 类似地,最早的网络只能识别两种对象(或在某些情况下,单类对象的存在与否),而这些现代网络通常能够识别至少\NUMTEXT{1000}个不同类别的对象。 对象识别中最大的比赛是每年举行的ImageNet大型视觉识别挑战(ILSVRC)。 \gls{DL}迅速崛起的激动人心的一幕是卷积网络第一次大幅赢得这一挑战,它将最高水准的前5错误率从~\NUMTEXT{26.1\%}~降到~\NUMTEXT{15.3\%}~\citep{Krizhevsky-2012},这意味着该卷积网络针对每个图像的可能类别生成一个顺序列表,除了15.3\%的测试样本,其他测试样本的正确类标都出现在此列表中的前5项里。 此后,深度卷积网络连续地赢得这些比赛,截至写本书时,\gls{DL}的最新结果将这个比赛中的前5错误率降到了~\NUMTEXT{3.6\%}, 如\figref{fig:chap1_imagenet_color}所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter1/figures/imagenet_color}} \fi \caption{日益降低的错误率。 由于深度网络达到了在ImageNet大规模视觉识别挑战中竞争所必需的规模,它们每年都能赢得胜利,并且产生越来越低的错误率。 数据来源于 \citet{russakovsky2014imagenet}和~\citet{He-et-al-arxiv2015}。} \label{fig:chap1_imagenet_color} \end{figure} % -- 23 -- \gls{DL}也对语音识别产生了巨大影响。 语音识别在20世纪90年代得到提高后,直到约2000年都停滞不前。 \gls{DL}的引入\citep{dahl2010phonerec,Deng-2010,Seide2011,Hinton-et-al-2012}使得语音识别错误率陡然下降,有些错误率甚至降低了一半。 我们将在\secref{sec:speech_recognition}更详细地探讨这个历史。 深度网络在行人检测和图像分割中也取得了引人注目的成功\citep{sermanet-cvpr-13,Farabet-et-al-2013,couprie-iclr-13},并且在交通标志分类上取得了超越人类的表现\citep{Ciresan-et-al-2012}。 在深度网络的规模和精度有所提高的同时,它们可以解决的任务也日益复杂。 \citet{Goodfellow+et+al-ICLR2014a}表明,\gls{NN}可以学习输出描述图像的整个字符序列,而不是仅仅识别单个对象。 此前,人们普遍认为,这种学习需要对序列中的单个元素进行标注\citep{Gulcehre+Bengio-arxiv-2013}。 \gls{RNN},如之前提到的~\glssymbol{LSTM}~序列模型,现在用于对序列和其他序列之间的关系进行建模,而不是仅仅固定输入之间的关系。 这种序列到序列的学习似乎引领着另一个应用的颠覆性发展,即机器翻译\citep{Sutskever-et-al-NIPS2014,Bahdanau-et-al-ICLR2015-small}。 % -- 24 -- 这种复杂性日益增加的趋势已将其推向逻辑结论,即神经图灵机\citep{Graves-et-al-arxiv2014}的引入,它能学习读取存储单元和向存储单元写入任意内容。 这样的\gls{NN}可以从期望行为的\gls{example}中学习简单的程序。 例如,从杂乱和排好序的\gls{example}中学习对一系列数进行排序。 这种自我编程技术正处于起步阶段,但原则上未来可以适用于几乎所有的任务。 \gls{DL}的另一个最大的成就是其在\firstgls{RL}领域的扩展。 在\gls{RL}中,一个自主的智能体必须在没有人类操作者指导的情况下,通过试错来学习执行任务。 DeepMind表明,基于\gls{DL}的\gls{RL}系统能够学会玩Atari视频游戏,并在多种任务中可与人类匹敌\citep{Mnih-et-al-2015}。 \gls{DL}也显著改善了机器人\gls{RL}的性能\citep{finn2015learning}。 许多\gls{DL}应用都是高利润的。现在\gls{DL}被许多顶级的技术公司使用,包括Google、Microsoft、Facebook、IBM、Baidu、Apple、Adobe、Netflix、NVIDIA和NEC等。 \gls{DL}的进步也严重依赖于软件基础架构的进展。 软件库如Theano~\citep{bergstra+al:2010-scipy,Bastien-2012}、PyLearn2~\citep{pylearn2_arxiv_2013}、Torch~\citep{Torch-2011}、DistBelief~\citep{Dean-et-al-NIPS2012}、Caffe~\citep{Jia13caffe}、MXNet~\citep{chen2015mxnet}和TensorFlow~\citep{tensorflow}都能支持重要的研究项目或商业产品。 \gls{DL}也为其他科学做出了贡献。 用于对象识别的现代卷积网络为神经科学家们提供了可以研究的视觉处理模型\citep{dicarlo-tutorial-2013}。 \gls{DL}也为处理海量数据以及在科学领域作出有效的预测提供了非常有用的工具。 它已成功地用于预测分子如何相互作用从而帮助制药公司设计新的药物\citep{Dahl-et-al-arxiv2014},搜索亚原子粒子\citep{baldi2014searching},以及自动解析用于构建人脑三维图的显微镜图像\citep{knowlesdeep}等。 我们期待\gls{DL}未来能够出现在越来越多的科学领域中。 % -- 25 -- 总之,\gls{DL}是\gls{ML}的一种方法。在过去几十年的发展中,它大量借鉴了我们关于人脑、统计学和应用数学的知识。 近年来,得益于更强大的计算机、更大的数据集和能够训练更深网络的技术,\gls{DL}的普及性和实用性都有了极大的发展。 未来几年充满了进一步提高\gls{DL}并将它带到新领域的挑战和机遇。 % -- 26 -- ================================================ FILE: Chapter10/README.md ================================================ #第十章笔记 ================================================ FILE: Chapter10/annotations.txt ================================================ {'user': 'acct:zhaoyu611@hypothes.is', 'text': '这里指', 'origin_text': '的不同部分共享参数。参数共享使得模型能够扩展到不同形式的样本( !!!如!!! 不同的长度)并进行泛化。如果我们在每个时间点都有一个单独的参数', 'time': '2017-02-20T07:21'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '。', 'origin_text': '有语言规则。相比之下,循环神经网络在几个时间步内共享相同的权重 !!!,不需要分别学习句子每个位置的所有语言规则。!!! 一个相关的想法是使用跨越1维时间序列的卷积。这种卷积方', 'time': '2017-02-20T07:31'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '在1维时间序列上使用卷积', 'origin_text': '需要分别学习句子每个位置的所有语言规则。一个相关的想法是 !!!使用跨越1维时间序列的卷积!!! 。这种卷积方法是时延神经网络的基础{cite?}。卷积操作允', 'time': '2017-02-20T07:33'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '在时间上', 'origin_text': '种卷积方法是时延神经网络的基础{cite?}。卷积操作允许网络 !!!跨越时间!!! 共享参数,但是浅层的。卷积的输出是一个序列,其中输出中的每一项', 'time': '2017-02-20T07:34'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '输入的函数', 'origin_text': '但是浅层的。卷积的输出是一个序列,其中输出中的每一项是相邻几项 !!!的函数!!! 。参数共享的概念体现在每个时间步中使用的相同卷积核。循环神经', 'time': '2017-02-20T07:36'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '前一项输出', 'origin_text': '相同卷积核。循环神经网络以不同的方式共享参数。输出的每一项是 !!!输出前一项!!! 的函数。输出的每一项对先前的输出应用相同的更新规则而产生。这', 'time': '2017-02-20T07:42'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '这种循环方式', 'origin_text': '项的函数。输出的每一项对先前的输出应用相同的更新规则而产生。 !!!这种循环!!! 导致参数通过很深的计算图共享。为简单起见,我们说的RNN是指', 'time': '2017-02-20T07:49'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '实际', 'origin_text': '到ττ\\tau)包含向量x(t)x(t)\\Vx^{(t)}。在 !!!实践!!! 中,循环网络通常在序列的minibatch上操作,并且minib', 'time': '2017-02-20T07:50'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '小批量(%不知道翻译是否准确)', 'origin_text': 't)x(t)\\Vx^{(t)}。在实践中,循环网络通常在序列的 !!!minibatch!!! 上操作,并且minibatch的每项具有不同序列长度ττ\\tau', 'time': '2017-02-20T07:51'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '有时仅表示序列中的位置', 'origin_text': '来简化记号。此外,时间步索引不必是字面上现实世界中流逝的时间, !!!也可以是序列中的位置!!! 。RNN也可以应用于跨越两个维度的空间数据(如图像),并且当应', 'time': '2017-02-20T07:53'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '两个', 'origin_text': '现实世界中流逝的时间,也可以是序列中的位置。RNN也可以应用于 !!!跨越两个!!! 维度的空间数据(如图像),并且当应用于涉及时间的数据时,该网络可', 'time': '2017-02-20T07:54'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'RNNs\n', 'origin_text': '步索引不必是字面上现实世界中流逝的时间,也可以是序列中的位置。 !!!RNN!!! 也可以应用于跨越两个维度的空间数据(如图像),并且当应用于涉及时', 'time': '2017-02-20T07:54'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '思想', 'origin_text': '提是将整个序列提供给网络之前能观察到整个序列。本章将计算图的 !!!想法!!! 扩展到包括周期。这些周期代表变量自身的值在未来某一时间步对自身', 'time': '2017-02-20T07:56'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '概要', 'origin_text': '计算结构的方式,如那些涉及将输入和参数映射到输出和损失的计算。 !!!综合!!! 的介绍请参考\\sec?。本节,我们对展开递归或循环计算得到的重', 'time': '2017-02-20T08:04'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '当', 'origin_text': 'u-1次应用这个定义可以展开这个图。例如,如果我们对式\\eq? !!!关于!!! τ=3τ=3\\tau = 3展开,可以得到:s(3)=f(s(', 'time': '2017-02-20T08:08'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '结构属性', 'origin_text': '\\end{align}如\\fig?所示,典型RNN会增加额外的 !!!架构!!! ,如读取状态信息hh\\Vh进行预测的输出层。\\begin{fi', 'time': '2017-02-20T08:22'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '\\textbf{h}', 'origin_text': '}如\\fig?所示,典型RNN会增加额外的架构,如读取状态信息 !!!h!!! h\\Vh进行预测的输出层。\\begin{figure}[!ht', 'time': '2017-02-20T08:23'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'summary的翻译需要进一步斟酌', 'origin_text': '\\Vh^{(t)}作为过去序列(直到ttt)与任务相关方面的有损 !!!摘要!!! 。此摘要一般而言一定是有损的,因为其映射任意长度的序列(x(t', 'time': '2017-02-20T08:25'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '时间$t$', 'origin_text': '模中使用的RNN,通常给定前一个词预测下一个词,可能没有必要存储 !!!t!!! tt前输入序列中的所有信息;而仅仅存储足够预测句子其余部分的信息', 'time': '2017-02-20T08:31'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '步长', 'origin_text': '式包括以下几种:\\begin{enumerate}+\xa0每个时间 !!!步!!! 都有输出,并且隐藏单元之间有循环连接的循环网络,如\\fig?所示', 'time': '2017-02-20T11:43'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '步长', 'origin_text': '身值的影响。这样的计算图允许我们定义循环神经网络。然后,我们 !!!描述!!! 许多构建、训练和使用循环神经网络的不同方式。本章将简要介绍循', 'time': '2017-02-20T11:43'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '离散变量的常规表示方式', 'origin_text': '损失函数。我们假定输出是离散的,如用于预测词或字符的RNN。 !!!一种代表离散变量的自然方式!!! 是把输出oo\\Vo作为每个离散变量可能值的非标准化对数概率。然', 'time': '2017-02-20T12:05'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '隐层到隐层', 'origin_text': '藏的循环连接)。例如,它不能模拟通用图灵机。因为这个网络缺少 !!!隐藏到隐藏!!! 的循环,它要求输出单元捕捉用于预测未来的关于过去的所有信息。因', 'time': '2017-02-20T12:39'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '。在展开图上使用反向传播称为通过时间的反向传播(Back Propagation Through Time)。', 'origin_text': 'c?中的推广反向传播算法应用于展开的计算图,而不需要特殊化的算法 !!!。!!! 由反向传播计算得到的梯度,并结合任何通用的基于梯度的技术就可以训', 'time': '2017-02-21T01:02'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '节点序列', 'origin_text': 'MU,\\MV,\\MW, \\Vb和cc\\Vc,以及以ttt为索引的 !!!顺序节点!!! x(t),h(t),o(t)x(t),h(t),o(t)\\Vx^', 'time': '2017-02-21T01:04'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '损失函数', 'origin_text': '类似,原则上循环网络几乎可以使用任何损失。但必须根据任务来选择 !!!损失!!! 。如前馈网络,我们通常希望将RNN的输出解释为一个概率分布,并', 'time': '2017-02-21T07:39'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '作为', 'origin_text': '必须根据任务来选择损失。如前馈网络,我们通常希望将RNN的输出 !!!解释为!!! 一个概率分布,并且我们通常使用与分布相关联的交叉熵来定义损失。', 'time': '2017-02-21T07:40'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '获得', 'origin_text': 'n}将整个序列yy\\Vy的联合分布分解为一系列单步的概率预测是 !!!捕获!!! 关于整个序列完整联合分布的一种方法。当我们不把过去的yy\\Vy', 'time': '2017-02-21T07:48'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '应当加粗', 'origin_text': '构的图模型。该RNN完全图的解释基于排除并忽略模型中的隐藏单元 !!!~h(t)!!! h(t)\\Vh^{(t)}。更有趣的是,将隐藏单元~h(', 'time': '2017-02-21T10:45'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'textbf{h}', 'origin_text': '解耦。遥远过去的变量y(i)y(i)y^{(i)}可以通过其对 !!!h!!! h\\Vh的影响来影响变量y(t)y(t)y^{(t)}。该图的', 'time': '2017-02-21T11:21'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '过去', 'origin_text': '{(t)}节点可以用作过去和未来之间的中间量,从而将它们解耦。 !!!遥远过去!!! 的变量y(i)y(i)y^{(i)}可以通过其对hh\\Vh的影响', 'time': '2017-02-21T11:21'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '前提是', 'origin_text': '\\emph{优化}参数可能变得困难。在循环网络中使用的参数共 !!!享依赖于!!! 相同参数可用于不同时间步的假设。等效地,假设给定时刻ttt的变', 'time': '2017-02-22T00:49'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '同样的', 'origin_text': '循环网络中使用的参数共享依赖于相同参数可用于不同时间步的假设。 !!!等效地!!! ,假设给定时刻ttt的变量后,时刻t+1t+1t +1变量的条件', 'time': '2017-02-22T00:50'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '继续生成或停止生成', 'origin_text': '模型中引入一个额外的Bernoulli输出,表示在每个时间步决定 !!!继续或停止!!! 。相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任', 'time': '2017-02-22T01:50'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'x应该加粗', 'origin_text': '训练集中,我们将该符号作为序列的一个额外成员,即紧跟每个训练样本 !!!x(τ)!!! x(τ)\\Vx^{(\\tau)}之后。另一种选择是在模型', 'time': '2017-02-22T01:54'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'RNNs', 'origin_text': 'fellow+et+al-ICLR2014a}。基于上下文的 !!!RNN!!! 序列建模上一节描述了没有输入xx\\Vx时,关于随机变量序列y', 'time': '2017-02-22T03:06'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '向量时', 'origin_text': '只使用单个向量xx\\Vx作为输入。当xx\\Vx是一个固定大小的 !!!向量!!! ,我们可以简单地将其看作产生yy\\Vy序列RNN的额外输入。将', 'time': '2017-02-22T03:18'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '个人认为图中隐层的s(...)应改为h(...)', 'origin_text': 'res/conditional_rnn}}\\fi\\caption !!!{将固定长度的向量$\\Vx$映射到序列$\\MY$上分布的RNN。这类RNN适用于很多任务如图注,其中单个图像作为模型的输入,然后产生描述图像的词序列。观察到的输出序列的每个元素$\\Vy^{(t)}$同时用作输入(对于当前时间步)和训练期间的目标(对于前一时间步)。}!!! \\end{figure}\\begin{figure}[!htb]', 'time': '2017-02-22T03:23'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '是通过', 'origin_text': '每个隐藏单元向量h(t)h(t)\\Vh^{(t)}之间的相互作用 !!!通过!!! 新引入的权重矩阵RR\\MR参数化的,这是只包含yyy序列的模型所', 'time': '2017-02-22T03:27'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '加粗\n', 'origin_text': ')。}\\end{figure}RNN可以接收向量序列 !!!x(t)!!! x(t)\\Vx^{(t)}作为输入,而不是仅接收单个向量xx\\V', 'time': '2017-02-22T05:23'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '我们想依赖\\emph{整个输入序列}预测输出$y^{(t)}$', 'origin_text': '去的yy\\Vy值信息影响当前状态的模型。然而,在许多应用中, !!!我们要输出的y(t)!!! y(t)\\Vy^{(t)}的预测可能依赖于整个输入序列。例如,', 'time': '2017-02-24T13:31'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '常规RNN', 'origin_text': '定大小的窗口(这是前馈网络、卷积网络或具有固定大小的先行缓存器的 !!!RNN!!! 必须要做的)。\\begin{figure}[!htb]\\', 'time': '2017-02-24T13:23'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'RNNs\n', 'origin_text': '这个想法可以自然扩展到2维输入,如图像,由\\emph{四个} !!!RNN!!! 组成,每一个沿着四个方向中的一个计算:上、下、左、右。如果RN', 'time': '2017-02-24T13:31'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '但仍依赖长期的输入', 'origin_text': '出Oi,jOi,jO_{i,j}就能计算一个能捕捉到大多局部信息 !!!并且依赖于长期输入的表示!!! 。相比卷积网络,应用于图像的RNN通常更昂贵,但允许同一特征图', 'time': '2017-02-24T13:35'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '代价更大', 'origin_text': '且依赖于长期输入的表示。相比卷积网络,应用于图像的RNN通常更 !!!昂贵!!! ,但允许同一特征图的特征之间存在长期横向的相互作用{cite?}', 'time': '2017-02-24T13:37'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '不足', 'origin_text': '制要求编码器与解码器的隐藏层具有相同的大小。此架构的一个明显 !!!限制!!! 是,编码器RNN输出的上下文CCC的维度太小而难以适当地概括一个', 'time': '2017-02-24T14:22'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '换行', 'origin_text': ',以及 从隐藏状态到输出。\\end{enumerate} !!!根据\\fig?中的RNN架构!!! ,这三个块都与单个权重矩阵相关联。换句话说,当网络被展开时,每', 'time': '2017-02-24T14:24'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': 'RNNs\n', 'origin_text': '”混淆。}代表循环网络的另一个扩展,它被构造为深的树状结构而不是 !!!RNN!!! 的链状结构,因此是不同类型的计算图。递归网络的典型计算图如\\f', 'time': '2017-02-26T13:16'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '情况', 'origin_text': '中引入。根本问题是,经过许多阶段传播后的梯度倾向于消失(大部分 !!!时间!!! )或爆炸(很少,但对优化过程影响很大)。即使我们假设循环网络是', 'time': '2017-02-26T15:22'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '乘积$w^t$的消失还算激增是由$w$的幅值决定的', 'origin_text': '题是针对循环网络的。在标量情况下,想象多次乘一个权重www。 !!!根据w!!! ww的幅值,该乘积wtwtw^t要么消失要么激增。然而,如果每', 'time': '2017-02-26T15:48'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '$v^*$', 'origin_text': '(vn)O(vn)\\CalO(v^n)。为了获得某些期望的方差 !!!$v^!!! ,我们可以选择单个方差为,我们可以选择单个方差为,我们可以选择单', 'time': '2017-02-26T15:51'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '具有鲁棒性', 'origin_text': '爆炸的参数空间来避免这个问题。不幸的是,为了储存记忆并对小扰动 !!!的鲁棒!!! ,RNN必须进入参数空间中的梯度消失区域{cite?}。具体来', 'time': '2017-02-26T15:54'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '通过SGD', 'origin_text': '们增加了需要捕获的依赖关系的跨度,基于梯度的优化变得越来越困难, !!!SGD!!! 在长度仅为10或20的序列上成功训练传统RNN的概率迅速变为0。', 'time': '2017-02-26T15:59'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '在{Pascanu-et-al-ICML2013}中对{Doya93,Bengio1994ITNN,Siegelmann+Sontag-1995}的回顾', 'origin_text': 'N的概率迅速变为0。将循环网络作为动力系统更深入探讨的资料见 !!!{Doya93,Bengio1994ITNN,Siegelmann+Sontag-1995}及{Pascanu-et-al-ICML2013}的回顾!!! 。本章的其余部分将讨论目前已经提出的降低学习长期依赖(在某些情', 'time': '2017-02-26T16:02'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '这种想法可以分别称为回声状态网络或ESN{cite?},以及流体状态机{cite?}。', 'origin_text': '其能很好地捕捉过去输入历史,并且\\emph{只学习输出权重}。 !!!回声状态网络或ESN{cite?},以及流体状态机{cite?}分别独立地提出了这种想法!!! 。后者是类似的,只不过它使用脉冲神经元(二值输出)而不是ESN', 'time': '2017-02-26T23:53'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '所有矢量需要加粗\n', 'origin_text': 't改变的简单情况。例如当网络是纯线性时,会发生这种情况。假设 !!!J!!! J\\MJ特征值λλ\\lambda对应的特征向量为vv\\Vv。考', 'time': '2017-02-27T06:25'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '向后一步传播', 'origin_text': '或等价的,h(t+1)h(t+1)\\Vh^{(t+1)}的梯度如 !!!何向后传播!!! 。需要注意的是,WW\\MW和JJ\\MJ都不需要是对称的(尽管它', 'time': '2017-02-27T06:42'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '隐层到隐层', 'origin_text': 'ph{初始化}完全可训练的循环网络的权重(通过时间反向传播来训练 !!!隐藏到隐藏!!! 的循环权重),帮助学习长期依赖{cite?}。在这种设定下,结', 'time': '2017-02-27T07:40'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '消失或爆炸\\emph{与时间步数有关}', 'origin_text': '迟循环网络是可能的{cite?}。正如我们在\\sec?看到, !!!梯度可能\\emph{关于时间步数数消失或成倍爆炸}!!! 。{cite?}引入了ddd延时的循环连接以减轻这个问题。现', 'time': '2017-02-27T07:54'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '因为', 'origin_text': '与τdτd\\frac{\\tau}{d}相关而不是ττ\\tau。 !!!既然!!! 同时存在延迟和单步连接,梯度仍可能成ttt指数爆炸。这允许学习', 'time': '2017-02-27T07:55'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '长短期记忆模型', 'origin_text': 'M引入自循环的巧妙构思,以产生梯度长时间持续流动的路径是初始 !!!长短期记忆!!! 的核心贡献{cite?}。其中一个关键扩展是使自循环的权重视上', 'time': '2017-03-01T02:56'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '在生成门控自循(由另一个隐藏单元控制)的权重时', 'origin_text': '扩展是使自循环的权重视上下文而定,而不是固定的{cite?}。 !!!门控此自循环(由另一个隐藏单元控制)的权重!!! ,累积的时间尺度可以动态地改变。在这种情况下,即使是具有固定参', 'time': '2017-03-01T02:59'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '谨慎地', 'origin_text': 'mportance}发现使用较简单的方法可以达到类似的结果,例如 !!!细心!!! 初始化的Nesterov动量法。更详细的内容参考{Sutske', 'time': '2017-03-01T03:53'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '公布', 'origin_text': '学者提出{cite?}(相对于隐藏单元)截断反向传播梯度,但没有 !!!发布!!! 与这些变种之间的比较; 我们推测,所有这些方法表现类似。', 'time': '2017-03-01T05:34'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '尾部', 'origin_text': '正则化或约束参数,以引导”信息流”。特别是即使损失函数只对序列 !!!未部!!! 的输出作惩罚,我们也希望梯度向量∇h(t)L∇h(t)L\\nab', 'time': '2017-03-01T05:38'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '删除多余的逗号', 'origin_text': '\\nabla_{\\Vh^{(t)}} L在反向传播时能维持其幅度 !!!,!!! 。形式的,我们要使(∇h(t)L)∂h(t)∂h(t−1)(', 'time': '2017-03-01T05:38'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '形式上', 'origin_text': 'bla_{\\Vh^{(t)}} L在反向传播时能维持其幅度,。 !!!形式的!!! ,我们要使(∇h(t)L)∂h(t)∂h(t−1)(∇h(t)', 'time': '2017-03-01T05:39'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '近似常数', 'origin_text': 't)L∇h(t)L\\nabla_{\\Vh^{(t)}} L考虑为 !!!近乎恒定的近似!!! (为了计算正则化的目的,没有必要通过它们向后传播)。使用该正则', 'time': '2017-03-01T05:42'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '学习的成功性', 'origin_text': '持了爆炸梯度边缘的RNN动态。如果没有梯度截断,梯度爆炸将阻碍 !!!成功学习!!! 。这种方法的一个主要弱点是,在处理数据冗余的任务时如语言模型', 'time': '2017-03-01T05:45'} {'user': 'acct:zhaoyu611@hypothes.is', 'text': '存在着', 'origin_text': '识并且可以通过学习获取知识,这已促使大型深度架构的发展。然而, !!!存在!!! 不同种类的知识。有些知识是隐含的、潜意识的并且难以用语言表达—', 'time': '2017-03-01T05:47'} ============================= Replies ============================= {'user': 'acct:swordyork@hypothes.is', 'text': '网页没有显示加粗,PDF有。', 'time': '2017-03-04T03:19'} {'user': 'acct:swordyork@hypothes.is', 'text': 'pdf中都有加粗。多谢!', 'time': '2017-03-04T03:15'} {'user': 'acct:swordyork@hypothes.is', 'text': '这个我就先按照书中hidden-hidden来,因为这里不是层的概念,更应该指隐藏单元。所以直接译成隐藏。', 'time': '2017-03-04T03:13'} {'user': 'acct:swordyork@hypothes.is', 'text': '先保持minibatch,之后再作考虑', 'time': '2017-03-04T03:12'} {'user': 'acct:swordyork@hypothes.is', 'text': '先保持minibatch,之后再作考虑', 'time': '2017-03-04T03:12'} {'user': 'acct:swordyork@hypothes.is', 'text': '中文中没有加s的习惯,所以我们这里不加s了。', 'time': '2017-03-04T02:41'} {'user': 'acct:swordyork@hypothes.is', 'text': '这里很关键,我看错了!', 'time': '2017-03-04T02:37'} {'user': 'acct:swordyork@hypothes.is', 'text': '我们拿到最新版没有这句话。我记得以前有,我把它删了。', 'time': '2017-03-04T02:35'} {'user': 'acct:swordyork@hypothes.is', 'text': 'time step我们统一翻译成时间步。', 'time': '2017-03-04T02:30'} {'user': 'acct:swordyork@hypothes.is', 'text': '摘要是可以的,跟文本摘要类似。非常感谢你的校对!', 'time': '2017-03-04T02:30'} ================================================ FILE: Chapter10/sequence_modeling_rnn.tex ================================================ % !Mode:: "TeX:UTF-8" % Translator: Shenjian Zhao \chapter{序列建模:循环和递归网络} \label{chap:sequence_modeling_recurrent_and_recursive_nets} \firstgls{RNN}或~\glssymbol{RNN}~\citep{RHW}是一类用于处理序列数据的\gls{NN}。 就像\gls{convolutional_network}是专门用于处理网格化数据$\TSX$(如一个图像)的\gls{NN},\gls{RNN}是专门用于处理序列$\Vx^{(1)}, \dots, \Vx^{(\tau)}$的\gls{NN}。 正如\gls{convolutional_network}可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像,\gls{recurrent_network}可以扩展到更长的序列(比不基于序列的特化网络长得多)。 大多数\gls{recurrent_network}也能处理可变长度的序列。 从多层网络出发到\gls{recurrent_network},我们需要利用上世纪80年代\gls{ML}和统计模型早期思想的优点:在模型的不同部分共享参数。 \gls{parameter_sharing}使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛化。 如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在不同序列长度和不同时间位置上共享统计强度。 当信息的特定部分会在序列内多个位置出现时,这样的共享尤为重要。 例如,考虑这两句话:``I went to Nepal in 2009''和``In 2009, I went to Nepal.'' 如果我们让一个\gls{ML}模型读取这两个句子,并提取叙述者去\ENNAME{Nepal}的年份,无论``2009年''是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出``2009年''为相关资料片段。 假设我们要训练一个处理固定长度句子的\gls{feedforward_network}。 传统的全连接\gls{feedforward_network}会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。 相比之下,\gls{RNN}在几个\gls{time_step}内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。 % -- 363 -- 一个相关的想法是在1维时间序列上使用卷积。 这种卷积方法是\gls{TDNNs}的基础\citep{Lang+Hinton88,Waibel89b,lang1990time}。 卷积操作允许网络跨时间共享参数,但这种共享是浅层的。 卷积的输出是一个序列,其中输出中的每一项是相邻几项输入的函数。 \gls{parameter_sharing}的概念体现在每个\gls{time_step}中使用的相同卷积核。 \gls{RNN}以不同的方式共享参数。 输出的每一项是前一项的函数。 输出的每一项通过对先前的输出应用相同的更新规则而产生。 这种循环方式导致参数通过很深的\gls{computational_graph}共享。 为简单起见,我们说的~\glssymbol{RNN}~是指在序列上的操作,并且该序列在时刻$t$(从1到$\tau$)包含向量$\Vx^{(t)}$。 在实际情况中,\gls{recurrent_network}通常在序列的\gls{minibatch}上操作,并且\gls{minibatch}的每项具有不同序列长度$\tau$。 我们省略了\gls{minibatch}索引来简化记号。 此外,\gls{time_step}索引不必是字面上现实世界中流逝的时间。 有时,它仅表示序列中的位置。 \glssymbol{RNN}~也可以应用于二维的空间数据(如图像)。 甚至当应用于涉及时间的数据,该网络也可具有时间上朝向过去方向的连接,前提是整个序列在提供给网络之前就已经被完整地观察到。 本章将\gls{computational_graph}的思想扩展到包括循环。 这些周期代表变量自身的值在未来某一\gls{time_step}对自身值的影响。 这样的\gls{computational_graph}允许我们定义\gls{RNN}。 然后,我们描述许多构建、训练和使用\gls{RNN}的不同方式。 本章将简要介绍\gls{RNN},为获取更多详细信息,我们建议读者参考~\cite{Graves-book2012}的著作。 % -- 364 -- \section{\glsentrytext{unfolding}\glsentrytext{computational_graph}} \label{sec:unfolding_computational_graphs} \gls{computational_graph}是形式化一组计算结构的方式,如那些涉及将输入和参数映射到输出和损失的计算。 综合的介绍请参考\secref{sec:computational_graphs}。 本节,我们对\firstgls{unfolding}递归或循环计算得到的重复结构进行解释,这些重复结构通常对应于一个事件链。 \firstgls{unfolding}这个计算图将导致深度网络结构中的\gls{parameter_sharing}。 例如,考虑动态系统的经典形式: \begin{align} \label{eq:101s} \Vs^{(t)} = f(\Vs^{(t-1)}; \Vtheta), \end{align} 其中$ \Vs^{(t)}$称为系统的状态。 $\Vs$在时刻$t$的定义需要参考时刻$t-1$时同样的定义,因此\eqnref{eq:101s}是循环的。 对有限\gls{time_step}~$\tau$, $\tau-1$次应用这个定义可以展开这个图。 例如$\tau = 3$,我们对\eqnref{eq:101s}展开,可以得到: \begin{align} \Vs^{(3)} &= f(\Vs^{(2)}; \Vtheta) \\ & = f(f(\Vs^{(1)}; \Vtheta) ; \Vtheta). \label{eq:103s} \end{align} 以这种方式重复应用定义,\gls{unfolding}等式,就能得到不涉及循环的表达。 现在我们可以使用传统的有向无环\gls{computational_graph}呈现这样的表达。 \eqnref{eq:101s}和\eqnref{eq:103s}的\gls{unfolding}\gls{computational_graph}如\figref{fig:chap10_unfolded_dynsys}所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/unfolded_dynsys}} \fi \caption{将\eqnref{eq:101s}描述的经典动态系统表示为展开的计算图。 每个节点表示在某个时刻$t$的状态,并且函数$f$将$t$处的状态映射到$t+1$处的状态。 所有\gls{time_step}都使用相同的参数(用于参数化$f$的相同$\Vtheta$值)。 } \label{fig:chap10_unfolded_dynsys} \end{figure} % -- 365 -- 作为另一个例子,让我们考虑由外部信号$\Vx^{(t)}$驱动的动态系统, \begin{align} \label{eq:104s} \Vs^{(t)} = f(\Vs^{(t-1)}, \Vx^{(t)} ; \Vtheta), \end{align} 我们可以看到,当前状态包含了整个过去序列的信息。 \gls{RNN}可以通过许多不同的方式建立。 就像几乎所有函数都可以被认为是\gls{feedforward_network},本质上任何涉及循环的函数都可以被认为是一个\gls{RNN}。 很多\gls{RNN}使用\eqnref{eq:105h}或类似的公式定义\gls{hidden_unit}的值。 为了表明状态是网络的\gls{hidden_unit},我们使用变量$\Vh$代表状态重写\eqnref{eq:104s}: \begin{align} \label{eq:105h} \Vh^{(t)} = f(\Vh^{(t-1)}, \Vx^{(t)} ; \Vtheta), \end{align} 如\figref{fig:chap10_rnn_circuit_unfolded}所示,典型~\glssymbol{RNN}~会增加额外的架构特性,如读取状态信息$\Vh$进行预测的输出层。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/rnn_circuit_unfolded}} \fi \caption{没有输出的\gls{recurrent_network}。 此\gls{recurrent_network}只处理来自输入$\Vx$的信息,将其合并到经过时间向前传播的状态$\Vh$。 \emph{(左)}回路原理图。 黑色方块表示单个\gls{time_step}的延迟。 \emph{(右)}同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 } \label{fig:chap10_rnn_circuit_unfolded} \end{figure} 当训练\gls{recurrent_network}根据过去预测未来时,网络通常要学会使用$\Vh^{(t)}$作为过去序列(直到$t$)与任务相关方面的有损摘要。 此摘要一般而言一定是有损的,因为其映射任意长度的序列$(\Vx^{(t)},\Vx^{(t-1)}, \Vx^{(t-2)},\dots,\Vx^{(2)}, \Vx^{(1)})$到一固定长度的向量$\Vh^{(t)}$。 根据不同的训练\gls{criterion},摘要可能选择性地精确保留过去序列的某些方面。 例如,如果在统计语言建模中使用的~\glssymbol{RNN},通常给定前一个词预测下一个词,可能没有必要存储时刻$t$前输入序列中的所有信息;而仅仅存储足够预测句子其余部分的信息。 最苛刻的情况是我们要求$\Vh^{(t)}$足够丰富,并能大致恢复输入序列,如\gls{AE}框架(\chapref{chap:autoencoders})。 % -- 366 -- \eqnref{eq:105h}可以用两种不同的方式来绘制。 一种绘制~\glssymbol{RNN}~的方式是用循环图,对于可能存在于模型的物理实现中的每个组件,都在图中包含其对应的节点。这种方式的一个示例是生物神经网络。 在这种视角下,网络定义了实时操作的回路,如\figref{fig:chap10_rnn_circuit_unfolded}的左侧,其当前状态可以影响其未来的状态。 在本章中,我们使用回路图中的黑色方块表示单个\gls{time_step}延时所发生的交互,即从时刻$t$的状态到时刻$t+1$的状态的变化。 另一种绘制~\glssymbol{RNN}~的方式是用展开的\gls{computational_graph},其中每一个组件由许多不同的变量表示,每个\gls{time_step}一个变量,用来表示组件在该时间点的状态。 每个\gls{time_step}的每个变量绘制为\gls{computational_graph}的一个独立节点,如\figref{fig:chap10_rnn_circuit_unfolded}的右侧。 我们所说的\gls{unfolding}是将左图中的回路映射为右图中包含重复组件的\gls{computational_graph}的操作。 这样,\gls{unfolded_graph}的大小取决于序列长度。 我们可以用一个函数$g^{(t)}$代表经$t$步展开后的循环: \begin{align} \label{eq:106} \Vh^{(t)} &=g^{(t)}(\Vx^{(t)},\Vx^{(t-1)}, \Vx^{(t-2)},\dots,\Vx^{(2)}, \Vx^{(1)}) \\ & = f(\Vh^{(t-1)}, \Vx^{(t)} ; \Vtheta) . \end{align} 函数$g^{(t)}$将全部的过去序列$(\Vx^{(t)},\Vx^{(t-1)}, \Vx^{(t-2)},\dots,\Vx^{(2)}, \Vx^{(1)})$作为输入来生成当前状态,但是展开的循环架构允许我们将$g^{(t)}$分解为函数$f$的重复应用。 因此,展开过程引入两个主要优点: \begin{enumerate} \item 无论序列的长度,学成的模型始终具有相同的输入大小,因为它指定的是从一种状态到另一种状态的\gls{transition}, 而不是在可变长度的历史状态上操作。 \item 我们可以在每个\gls{time_step}使用相同参数的\emph{相同}\gls{transition}函数$f$。 \end{enumerate} 这两个因素使得学习在所有\gls{time_step}和所有序列长度上操作单一的模型$f$是可能的,而不需要在所有可能\gls{time_step}学习独立的模型$g^{(t)}$。 学习单一的共享模型允许泛化到没有见过的序列长度(没有出现在训练集中),并且估计模型所需的训练样本远远少于不带\gls{parameter_sharing}的模型。 % -- 367 -- 无论是循环图和\gls{unfolded_graph}都有其用途。 循环图简洁。 \gls{unfolded_graph}能够明确描述其中的计算流程。 \gls{unfolded_graph}还通过显式的信息流动路径帮助说明信息在时间上向前(计算输出和损失)和向后(计算\gls{gradient})的思想。 \section{\glsentrytext{RNN}} \label{sec:recurrent_neural_networks} 基于\secref{sec:unfolding_computational_graphs}中的图展开和\gls{parameter_sharing}的思想,我们可以设计各种\gls{RNN}。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/hidden_recurrence_rnn}} \fi \caption{计算\gls{recurrent_network}(将$\Vx$值的输入序列映射到输出值$\Vo$的对应序列)训练损失的计算图。 损失$L$衡量每个$\Vo$与相应的训练目标$\Vy$的距离。 当使用softmax输出时,我们假设$\Vo$是未归一化的对数概率。 损失$L$内部计算$\hat{\Vy} = \text{softmax}(\Vo)$,并将其与目标$\Vy$比较。 \glssymbol{RNN}输入到隐藏的连接由权重矩阵$\MU$参数化,隐藏到隐藏的循环连接由权重矩阵$\MW$参数化以及隐藏到输出的连接由权重矩阵$\MV$参数化。 \eqnref{eq:108a}定义了该模型中的前向传播。 \emph{(左)}使用循环连接绘制的~\glssymbol{RNN}~和它的损失。 \emph{(右)}同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。 } \label{fig:chap10_hidden_recurrence_rnn} \end{figure} \gls{RNN}中一些重要的设计模式包括以下几种: \begin{enumerate} \item 每个\gls{time_step}都有输出,并且\gls{hidden_unit}之间有循环连接的\gls{recurrent_network},如\figref{fig:chap10_hidden_recurrence_rnn}所示。 \item 每个\gls{time_step}都产生一个输出,只有当前时刻的输出到下个时刻的\gls{hidden_unit}之间有循环连接的\gls{recurrent_network},如\figref{fig:chap10_output_recurrence_rnn}所示。 \item \gls{hidden_unit}之间存在循环连接,但读取整个序列后产生单个输出的\gls{recurrent_network},如\figref{fig:chap10_single_output_rnn}所示。 \end{enumerate} \figref{fig:chap10_hidden_recurrence_rnn}是非常具有代表性的例子,我们将会在本章大部分涉及这个例子。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/output_recurrence_rnn}} \fi \caption{此类~\glssymbol{RNN}~的唯一循环是从输出到隐藏层的反馈连接。 在每个\gls{time_step}~$t$,输入为$\Vx_t$,\gls{hidden_layer}激活为$\Vh^{(t)}$,输出为$\Vo^{(t)}$,目标为$\Vy^{(t)}$,损失为$L^{(t)}$。 \emph{(左)}回路原理图。 \emph{(右)}展开的计算图。 这样的~\glssymbol{RNN}~没有\figref{fig:chap10_hidden_recurrence_rnn}表示的RNN那样强大(只能表示更小的函数集合)。 \figref{fig:chap10_hidden_recurrence_rnn}中的~\glssymbol{RNN}~可以选择将其想要的关于过去的任何信息放入隐藏表示$\Vh$中并且将$\Vh$传播到未来。 该图中的~\glssymbol{RNN}~被训练为将特定输出值放入$\Vo$中,并且$\Vo$是允许传播到未来的唯一信息。 此处没有从$\Vh$前向传播的直接连接。 之前的$\Vh$仅通过产生的预测间接地连接到当前。 $\Vo$通常缺乏过去的重要信息,除非它非常高维且内容丰富。 这使得该图中的~\glssymbol{RNN}~不那么强大,但是它更容易训练,因为每个\gls{time_step}可以与其他\gls{time_step}分离训练,允许训练期间更多的并行化,如\secref{sec:teacher_forcing_and_networks_with_output_recurrence}所述。 } \label{fig:chap10_output_recurrence_rnn} \end{figure} \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/single_output_rnn}} \fi \caption{关于时间展开的\gls{RNN},在序列结束时具有单个输出。 这样的网络可以用于概括序列并产生用于进一步处理的固定大小的表示。 在结束处可能存在目标(如此处所示),或者通过更下游模块的反向传播来获得输出$\Vo^{(t)}$上的梯度。 } \label{fig:chap10_single_output_rnn} \end{figure} 任何图灵可计算的函数都可以通过这样一个有限维的\gls{recurrent_network}计算,在这个意义上\figref{fig:chap10_hidden_recurrence_rnn}和\eqnref{eq:108a}的\gls{RNN}是万能的。 \glssymbol{RNN}~经过若干\gls{time_step}后读取输出,这与由图灵机所用的\gls{time_step}是渐近线性的,与输入长度也是渐近线性的\citep{Siegelmann+Sontag-1991,Siegelmann-1995,Siegelmann+Sontag-1995,Hyotyniemi-1996}。 由图灵机计算的函数是离散的,所以这些结果都是函数的具体实现,而不是近似。 \glssymbol{RNN}~作为图灵机使用时,需要一个二进制序列作为输入,其输出必须离散化以提供二进制输出。 利用单个有限大小的特定~\glssymbol{RNN}~计算在此设置下的所有函数是可能的(~\cite{Siegelmann+Sontag-1995}用了886个单元)。 图灵机的``输入''是要计算函数的详细说明(specification),所以模拟此图灵机的相同网络足以应付所有问题。 用于证明的理论~\glssymbol{RNN}~可以通过激活和权重(由无限精度的有理数表示)来模拟无限堆栈。 % -- 368 -- 现在我们研究\figref{fig:chap10_hidden_recurrence_rnn}中~\glssymbol{RNN}~的\gls{forward_propagation}公式。 这个图没有指定\gls{hidden_unit}的激活函数。 我们假设使用双曲正切激活函数。 此外,图中没有明确指定何种形式的输出和\gls{loss_function}。 我们假定输出是离散的,如用于预测词或字符的~\glssymbol{RNN}。 表示离散变量的常规方式是把输出$\Vo$作为每个离散变量可能值的非标准化对数概率。 然后,我们可以应用~\gls{softmax}~后续处理后,获得标准化后概率的输出向量$\hat \Vy$。 \glssymbol{RNN}~从特定的初始状态$\Vh^{(0)}$开始\gls{forward_propagation}。 从$t= 1$到$t = \tau$的每个\gls{time_step},我们应用以下更新方程: \begin{align} \label{eq:108a} \Va^{(t)} &= \Vb + \MW \Vh^{(t-1)} + \MU \Vx^{(t)}, \\ \Vh^{(t)} &= \tanh(\Va^{(t)} ), \\ \Vo^{(t)} &= \Vc + \MV \Vh^{(t)}, \\ \hat \Vy^{(t)} &= \text{softmax}(\Vo^{(t)}), \end{align} 其中的参数的\gls{bias_aff}向量$\Vb$和$\Vc$连同权重矩阵$\MU$、$\MV$和$\MW$,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的连接。 这个\gls{recurrent_network}将一个输入序列映射到相同长度的输出序列。 与$\Vx$序列配对的$\Vy$的总损失就是所有\gls{time_step}的损失之和。 例如,$L^{(t)}$为给定的$\Vx^{(1)}, \dots, \Vx^{(t)}$后$\Vy^{(t)}$的负对数似然,则 \begin{align} \label{eq:1012L} & L\big( \{ \Vx^{(1)}, \dots, \Vx^{(\tau)} \}, \{ \Vy^{(1)}, \dots, \Vy^{(\tau)} \} \big) \\ & = \sum_t L^{(t)} \\ & = - \sum_t \log p_{\text{model}} \big( y^{(t)} \mid \{ \Vx^{(1)}, \dots, \Vx^{(t)} \} \big) , \end{align} 其中$p_{\text{model}} \big( y^{(t)} \mid \{ \Vx^{(1)}, \dots, \Vx^{(t)} \} \big) $需要读取模型输出向量$\hat \Vy^{(t)}$中对应于$y^{(t)}$的项。 关于各个参数计算这个\gls{loss_function}的\gls{gradient}是计算成本很高的操作。 \gls{gradient}计算涉及执行一次\gls{forward_propagation}(如在\figref{fig:chap10_hidden_recurrence_rnn}\gls{unfolded_graph}中从左到右的传播),接着是由右到左的\gls{backward_propagation}。 运行时间是$\CalO(\tau)$,并且不能通过并行化来降低,因为\gls{forward_propagation}图是固有循序的;每个\gls{time_step}只能一前一后地计算。 \gls{forward_propagation}中的各个状态必须保存,直到它们\gls{backward_propagation}中被再次使用,因此内存代价也是$\CalO(\tau)$。 应用于\gls{unfolded_graph}且代价为$\CalO(\tau)$的\gls{backward_propagation}算法称为\firstall{BPTT},将在\secref{sec:computing_the_gradient_in_a_recurrent_neural_network}进一步讨论。 因此\gls{hidden_unit}之间存在循环的网络非常强大但训练代价也很大。 我们是否有其他选择呢? % -- 371 -- \subsection{\glsentrytext{teacher_forcing}和输出\glsentrytext{recurrent_network}} \label{sec:teacher_forcing_and_networks_with_output_recurrence} 仅在一个\gls{time_step}的输出和下一个\gls{time_step}的\gls{hidden_unit}间存在循环连接的网络(示于\figref{fig:chap10_output_recurrence_rnn})确实没有那么强大(因为缺乏隐藏到隐藏的循环连接)。 例如,它不能模拟通用图灵机。 因为这个网络缺少隐藏到隐藏的循环,它要求输出单元捕捉用于预测未来的关于过去的所有信息。 因为输出单元明确地训练成匹配训练集的目标,它们不太能捕获关于过去输入历史的必要信息,除非用户知道如何描述系统的全部状态,并将它作为训练目标的一部分。 消除隐藏到隐藏循环的优点在于,任何基于比较时刻$t$的预测和时刻$t$的训练目标的\gls{loss_function}中的所有\gls{time_step}都解耦了。 因此训练可以并行化,即在各时刻$t$分别计算\gls{gradient}。 没有必要先计算前一时刻的输出,因为训练集提供了前一时刻输出的理想值。 由输出反馈到模型而产生循环连接的模型可用\firstgls{teacher_forcing}进行训练。 \gls{teacher_forcing}是从最大似然\gls{criterion}派生出来的一个训练过程,训练模型时,在时刻$t+1$接收真实值$y^{(t)}$作为输入。 我们可以通过检查两个\gls{time_step}的序列看清楚这一点。 条件最大似然\gls{criterion}是 \begin{align} &\log p(\Vy^{(1)},\Vy^{(2)} \mid \Vx^{(1)}, \Vx^{(2)} ) \\ &= \log p(\Vy^{(2)} \mid \Vy^{(1)}, \Vx^{(1)}, \Vx^{(2)} ) + \log p(\Vy^{(1)} \mid \Vx^{(1)}, \Vx^{(2)}) . \end{align} % -- 372 -- 在这个例子中,\emph{同时}给定迄今为止的$\Vx$序列和来自训练集的前一$\Vy$值,我们可以看到在时刻$t=2$时,模型被训练为最大化$\Vy^{(2)}$的条件概率。 因此最大似然在训练时指定使用正确的目标值作为反馈,而不是将自己的输出反馈到模型。 如\figref{fig:chap10_teacher_forcing}所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/teacher_forcing}} \fi \caption{\gls{teacher_forcing}的示意图。 \gls{teacher_forcing}是一种训练技术,适用于输出与下一\gls{time_step}的隐藏状态存在连接的~\glssymbol{RNN}。 \emph{(左)}训练时,我们将训练集中\emph{正确}的输出$\Vy^{(t)}$反馈到$\Vh^{(t+1)}$。 \emph{(右)}当模型部署后,真正的输出通常是未知的。 在这种情况下,我们用模型的输出$\Vo^{(t)}$近似正确的输出$\Vy^{(t)}$,并反馈回模型。 } \label{fig:chap10_teacher_forcing} \end{figure} 我们使用\gls{teacher_forcing}的最初动机是为了在缺乏隐藏到隐藏连接的模型中避免\gls{BPTT}。 对于那些存在隐藏到隐藏连接的模型,只要模型一个\gls{time_step}的输出与下一\gls{time_step}计算的值存在连接,\gls{teacher_forcing}仍然可以适用。 只不过,只要\gls{hidden_unit}成为较早\gls{time_step}的函数,\glssymbol{BPTT}~算法就是必要的。 因此训练某些模型时可能要同时使用\gls{teacher_forcing}和~\glssymbol{BPTT}。 % -- 373 -- 如果之后网络在\textbf{开环}(open-loop)模式下使用,即网络输出(或输出分布的样本)反馈作为输入,那么完全使用\gls{teacher_forcing}进行训练的缺点就会出现。 在这种情况下,训练期间该网络看到的输入与测试时看到的会有很大的不同。 减轻此问题的一种方法是同时使用\gls{teacher_forcing}和自由运行的输入进行训练,例如在展开循环的输出到输入路径上预测若干个步骤之后的正确目标值。 通过这种方式,网络可以学会考虑在训练时没有接触到的输入条件(如自由运行模式下,自身生成自身),以及将状态映射回使网络几步之后生成正确输出的状态。 另外一种方式\citep{SamyBengio-et-al-arxiv2015}是通过随机选择生成值或真实的数据值作为输入以减小训练时和测试时看到的输入之间的差别。 这种方法利用了\gls{curriculum_learning}策略,逐步使用更多生成值作为输入。 \subsection{计算\glsentrytext{RNN}的\glsentrytext{gradient}} \label{sec:computing_the_gradient_in_a_recurrent_neural_network} 计算\gls{RNN}的\gls{gradient}是容易的。 我们可以简单地将\secref{sec:general_back_propagation}中的推广\gls{backward_propagation}算法应用于展开的\gls{computational_graph},而不需要特殊化的算法。 由\gls{backward_propagation}计算得到的\gls{gradient},并结合任何通用的基于\gls{gradient}的技术就可以训练~\glssymbol{RNN}。 为了获得~\glssymbol{BPTT}~算法行为的一些直观理解,我们举例说明如何通过~\glssymbol{BPTT}~计算上述\glssymbol{RNN}公式(\eqnref{eq:108a}和\eqnref{eq:1012L})的\gls{gradient}。 \gls{computational_graph}的节点包括参数$\MU,\MV,\MW, \Vb$和$\Vc$,以及以$t$为索引的节点序列$\Vx^{(t)}, \Vh^{(t)},\Vo^{(t)}$和$L^{(t)}$。 对于每一个节点$\TSN$,我们需要基于$\TSN$后面的节点的\gls{gradient},递归地计算\gls{gradient}~$\nabla_{\TSN} L$。 我们从紧接着最终损失的节点开始递归: \begin{align} \frac{\partial L}{\partial L^{(t)}} = 1. \end{align} 在这个导数中,我们假设输出$\Vo^{(t)}$作为~\gls{softmax}~的参数,我们可以从~\gls{softmax}可以获得关于输出概率的向量$\hat{\Vy}$。 我们也假设损失是迄今为止给定了输入后的真实目标$y^{(t)}$的负对数似然。 对于所有$i,t$,关于\gls{time_step}~$t$输出的\gls{gradient}~$\nabla_{\Vo^{(t)}} L$如下: \begin{align} (\nabla_{\Vo^{(t)}} L)_i = \frac{\partial L}{\partial o_i^{(t)}} = \frac{\partial L}{\partial L^{(t)}} \frac{\partial L^{(t)}}{\partial o_i^{(t)}} = \hat y_i^{(t)} - \mathbf{1}_{i,y^{(t)}}. \end{align} 我们从序列的末尾开始,反向进行计算。 在最后的\gls{time_step}~$\tau$, $\Vh^{(\tau)}$只有$\Vo^{(\tau)}$作为后续节点,因此这个\gls{gradient}很简单: \begin{align} \nabla_{\Vh^{(\tau)}} L = \MV^\top \nabla_{\Vo^{(\tau)}} L. \end{align} 然后,我们可以从时刻$t=\tau-1$到$t=1$反向迭代, 通过时间\gls{backward_propagation}\gls{gradient},注意$\Vh^{(t)}(t < \tau)$同时具有$\Vo^{(t)}$和$\Vh^{(t+1)}$两个后续节点。 因此,它的\gls{gradient}由下式计算 \begin{align} \nabla_{\Vh^{(t)}} L = \Big( \frac{\partial \Vh^{(t+1)}}{ \partial \Vh^{(t)}} \Big)^\top(\nabla_{\Vh^{(t+1)}} L) + \Big( \frac{\partial \Vo^{(t)}}{ \partial \Vh^{(t)}} \Big)^\top (\nabla_{\Vo^{(t)}} L) \\ = \MW^\top (\nabla_{\Vh^{(t+1)}} L) \text{diag} \Big( 1 - (\Vh^{(t+1)})^2 \Big) + \MV^\top ( \nabla_{\Vo^{(t)}} L ), \end{align} 其中$\text{diag} \Big( 1 - (\Vh^{(t+1)})^2 \Big) $ 表示包含元素$1 - (h_i^{(t+1)})^2$的对角矩阵。 这是关于时刻$t+1$与\gls{hidden_unit}~$i$关联的双曲正切的\gls{jacobian}。 % -- 374 -- 一旦获得了\gls{computational_graph}内部节点的\gls{gradient},我们就可以得到关于参数节点的\gls{gradient}。 因为参数在许多\gls{time_step}共享,我们必须在表示这些变量的微积分操作时谨慎对待。 我们希望实现的等式使用\secref{sec:general_back_propagation}中的{\tt bprop}方法计算\gls{computational_graph}中单一边对\gls{gradient}的贡献。 然而微积分中的$\nabla_{\MW} f$算子,计算$\MW$对于$f$的贡献时将\gls{computational_graph}中的\emph{所有}边都考虑进去了。 为了消除这种歧义,我们定义只在$t$时刻使用的虚拟变量$\MW^{(t)}$作为$\MW$的副本。 然后,我们可以使用$\nabla_{\MW^{(t)}}$表示权重在\gls{time_step}~$t$对\gls{gradient}的贡献。 使用这个表示,关于剩下参数的\gls{gradient}可以由下式给出: \begin{align} \nabla_{\Vc} L &= \sum_t \Big( \frac{\partial \Vo^{(t)}}{\partial \Vc} \Big)^\top \nabla_{\Vo^{(t)}} L = \sum_t \nabla_{\Vo^{(t)}} L ,\\ \nabla_{\Vb} L &= \sum_t \Big( \frac{\partial \Vh^{(t)}}{\partial \Vb^{(t)}} \Big)^\top \nabla_{\Vh^{(t)}} L = \sum_t \text{diag} \Big( 1 - \big( \Vh^{(t)} \big)^2 \Big) \nabla_{\Vh^{(t)}} L ,\\ \nabla_{\MV} L &= \sum_t \sum_i \Big( \frac{\partial L} {\partial o_i^{(t)}}\Big) \nabla_{\MV} o_i^{(t)} = \sum_t (\nabla_{\Vo^{(t)}} L) \Vh^{(t)^\top},\\ \nabla_{\MW} L &= \sum_t \sum_i \Big( \frac{\partial L} {\partial h_i^{(t)}}\Big) \nabla_{\MW^{(t)}} h_i^{(t)} \\ &= \sum_t \text{diag} \Big( 1 - \big( \Vh^{(t)} \big)^2 \Big) ( \nabla_{\Vh^{(t)}} L) \Vh^{(t-1)^\top} ,\\ \nabla_{\MU} L &= \sum_t \sum_i \Big( \frac{\partial L} {\partial h_i^{(t)}}\Big) \nabla_{\MU^{(t)}} h_i^{(t)} \\ &= \sum_t \text{diag} \Big( 1 - \big( \Vh^{(t)} \big)^2 \Big) ( \nabla_{\Vh^{(t)}} L) \Vx^{(t)^\top} , \end{align} 因为\gls{computational_graph}中定义的损失的任何参数都不是训练数据$\Vx^{(t)}$的父节点,所以我们不需要计算关于它的\gls{gradient}。 % -- 375 -- \subsection{作为\glsentrytext{directed_graphical_model}的\glsentrytext{recurrent_network}} \label{sec:recurrent_networks_as_directed_graphical_models} 目前为止,我们接触的\gls{recurrent_network}例子中损失$L^{(t)}$是训练目标$\Vy^{(t)}$和输出$\Vo^{(t)}$之间的\gls{cross_entropy}。 与\gls{feedforward_network}类似,原则上\gls{recurrent_network}几乎可以使用任何损失。 但必须根据任务来选择损失。 如\gls{feedforward_network},我们通常希望将~\glssymbol{RNN}~的输出解释为一个概率分布,并且我们通常使用与分布相关联的\gls{cross_entropy}来定义损失。 均方误差是与单位高斯分布的输出相关联的\gls{cross_entropy}损失,例如\gls{feedforward_network}中所使用的。 当我们使用一个预测性对数似然的训练目标,如\eqnref{eq:1012L},我们将~\glssymbol{RNN}~训练为能够根据之前的输入估计下一个序列元素$\Vy^{(t)}$的条件分布。 这可能意味着,我们最大化对数似然 \begin{align} \log p(\Vy^{(t)} \mid \Vx^{(1)},\dots, \Vx^{(t)}), \end{align} 或者,如果模型包括来自一个\gls{time_step}的输出到下一个\gls{time_step}的连接, \begin{align} \log p(\Vy^{(t)} \mid \Vx^{(1)},\dots, \Vx^{(t)},\Vy^{(1)},\dots, \Vy^{(t-1)} ). \end{align} 将整个序列$\Vy$的联合分布分解为一系列单步的概率预测是捕获关于整个序列完整联合分布的一种方法。 当我们不把过去的$\Vy$值反馈给下一步作为预测的条件时,那么\gls{directed_graphical_model}不包含任何从过去$\Vy^{(i)}$到当前$\Vy^{(t)}$的边。 在这种情况下,给定x序列后,输出的y值之间条件独立。%在这种情况下,输出$\Vy$与给定的$\Vx$序列是条件独立的。% 当我们反馈真实的$\Vy$值(不是它们的预测值,而是真正观测到或生成的值)给网络时,那么\gls{directed_graphical_model}包含所有从过去$\Vy^{(i)}$到当前$\Vy^{(t)}$的边。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/fully_connected_chain}} \fi \caption{序列$y^{(1)},y^{(2)},\dots,y^{(t)},\dots$的全连接\gls{graphical_model}。 给定先前的值,每个过去的观察值$y^{(i)}$可以影响一些$y^{(t)}$($t>i$)的条件分布。 当序列中每个元素的输入和参数的数目越来越多,根据此图直接参数化\gls{graphical_model}(如\eqnref{eq:106}中)可能是非常低效的。 \glssymbol{RNN}~可以通过高效的参数化获得相同的全连接,如\figref{fig:chap10_rnn_graphical_model_with_state}所示。 } \label{fig:chap10_fully_connected_chain} \end{figure} % -- 376 -- 举一个简单的例子,让我们考虑对标量随机变量序列$ \SetY = \{\RSy^{(1)},\dots,\RSy^{(\tau)}\}$建模的~\glssymbol{RNN},也没有额外的输入$\RSx$。 在\gls{time_step}~$t$的输入仅仅是\gls{time_step}~$t-1$的输出。 该~\glssymbol{RNN}~定义了关于$\RSy$变量的\gls{directed_graphical_model}。 我们使用链式法则(用于条件概率的\eqnref{eq:chap3_chain_rule})参数化这些观察值的联合分布: \begin{align} P(\SetY) = P(\RVy^{(1)},\dots,\RVy^{(\tau)}) = \prod_{t=1}^{\tau}P(\RVy^{(t)} \mid \RVy^{(t-1)},\RVy^{(t-2)}, \dots,\RVy^{(1)}), \end{align} 其中当$t=1$时竖杠右侧显然为空。 因此,根据这样一个模型,一组值$\{y^{(1)},\dots,y^{(\tau)} \}$的负对数似然为 \begin{align} L = \sum_{t} L^{(t)}, \end{align} 其中 \begin{align} L^{(t)} = -\log P(\RSy^{(t)} = y^{(t)} \mid y^{(t-1)},y^{(t-2)}, \dots, y^{(1)}). \end{align} \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/rnn_graphical_model_with_state}} \fi \caption{在~\glssymbol{RNN}~\gls{graphical_model}中引入状态变量,尽管它是输入的确定性函数,但它有助于我们根据\eqnref{eq:105h}获得非常高效的参数化。 序列中的每个阶段(对于$\Vh^{(t)}$和$\Vy^{(t)}$)使用相同的结构(每个节点具有相同数量的输入),并且可以与其他阶段共享相同的参数。 } \label{fig:chap10_rnn_graphical_model_with_state} \end{figure} \gls{graphical_model}中的边表示哪些变量直接依赖于其他变量。 许多\gls{graphical_model}的目标是省略不存在强相互作用的边以实现统计和计算的效率。 例如,我们通常可以作\ENNAME{Markov}假设,即\gls{graphical_model}应该只包含从$\{ \RSy^{(t-k)}, \dots, \RSy^{(t-1)}\}$到$\RSy^{(t)}$的边,而不是包含整个过去历史的边。 然而,在一些情况下,我们认为整个过去的输入会对序列的下一个元素有一定影响。 当我们认为$\RSy^{(t)}$的分布可能取决于遥远过去(在某种程度)的$\RSy^{(i)}$的值,且无法通过$\RSy^{(t-1)}$捕获$\RSy^{(i)}$的影响时,\glssymbol{RNN}~将会很有用。 解释~\glssymbol{RNN}~作为\gls{graphical_model}的一种方法是将\glssymbol{RNN}视为定义一个结构为完全图的\gls{graphical_model},且能够表示任何一对$\RSy$值之间的直接联系。 \figref{fig:chap10_fully_connected_chain}是关于$\RSy$值且具有完全图结构的\gls{graphical_model}。 该~\glssymbol{RNN}~完全图的解释基于排除并忽略模型中的\gls{hidden_unit}~$\Vh^{(t)}$。 % -- 377 -- 更有趣的是,将\gls{hidden_unit}~$\Vh^{(t)}$视为随机变量,从而产生~\glssymbol{RNN}~的\gls{graphical_model}结构\footnote{给定这些变量的父变量,其条件分布是确定性的。 尽管设计具有这样确定性的\gls{hidden_unit}的\gls{graphical_model}是很少见的,但这是完全合理的。}。 在\gls{graphical_model}中包括隐藏单元预示~\glssymbol{RNN}~能对观测的联合分布提供非常有效的参数化。 假设我们用表格表示法来表示离散值上任意的联合分布,即对每个值可能的赋值分配一个单独条目的数组,该条目表示发生该赋值的概率。 如果$y$可以取$k$个不同的值,表格表示法将有$\CalO(k^\tau)$个参数。 对比~\glssymbol{RNN},由于\gls{parameter_sharing},\glssymbol{RNN}~的参数数目为$\CalO(1)$且是序列长度的函数。 % ?? 我们可以调节~\glssymbol{RNN}~的参数数量来控制模型容量,但不用被迫与序列长度成比例。 \eqnref{eq:105h}展示了所述~\glssymbol{RNN}~通过循环应用相同的函数$f$以及在每个\gls{time_step}的相同参数$\Vtheta$,有效地参数化的变量之间的长期联系。 \figref{fig:chap10_rnn_graphical_model_with_state}说明了这个\gls{graphical_model}的解释。 在\gls{graphical_model}中结合$\Vh^{(t)}$节点可以用作过去和未来之间的中间量,从而将它们解耦。 遥远过去的变量$y^{(i)}$可以通过其对$\Vh$的影响来影响变量$y^{(t)}$。 该图的结构表明可以在\gls{time_step}使用相同的条件概率分布有效地参数化模型,并且当观察到全部变量时,可以高效地评估联合分配给所有变量的概率。 % -- 378 -- 即便使用高效参数化的\gls{graphical_model},某些操作在计算上仍然具有挑战性。 例如,难以预测序列中缺少的值。 \gls{recurrent_network}为减少的参数数目付出的代价是\emph{优化}参数可能变得困难。 在\gls{recurrent_network}中使用的\gls{parameter_sharing}的前提是相同参数可用于不同\gls{time_step}的假设。 也就是说,假设给定时刻$t$的变量后,时刻$t +1$变量的条件概率分布是\firstgls{stationary},这意味着之前的\gls{time_step}与下个\gls{time_step}之间的关系并不依赖于$t$。 原则上,可以使用$t$作为每个\gls{time_step}的额外输入,并让学习器在发现任何时间依赖性的同时,在不同\gls{time_step}之间尽可能多地共享。 相比在每个$t$使用不同的条件概率分布已经好很多了,但网络将必须在面对新$t$时进行外推。 为了完整描述将~\glssymbol{RNN}~作为\gls{graphical_model}的观点,我们必须描述如何从模型采样。 我们需要执行的主要操作是简单地从每一\gls{time_step}的条件分布采样。 然而,还有一个额外的复杂性。 \glssymbol{RNN}~必须有某种机制来确定序列的长度。 这可以通过多种方式实现。 在当输出是从词汇表获取的符号的情况下,我们可以添加一个对应于序列末端的特殊符号\citep{schmidhuber2012self}。 当产生该符号时,采样过程停止。 在训练集中,我们将该符号作为序列的一个额外成员,即紧跟每个训练样本$\Vx^{(\tau)}$之后。 % -- 379 -- 另一种选择是在模型中引入一个额外的~\ENNAME{Bernoulli}~输出,表示在每个\gls{time_step}决定继续生成或停止生成。 相比向词汇表增加一个额外符号,这种方法更通用,因为它适用于任何~\glssymbol{RNN},而不仅仅是输出符号序列的~\glssymbol{RNN}。 例如,它可以应用于一个产生实数序列的~\glssymbol{RNN}。 新的输出单元通常使用~\ENNAME{sigmoid}~单元,并以\gls{cross_entropy}作为损失函数进行训练。 在这种方法中,\ENNAME{sigmoid}~被训练为最大化正确预测的对数似然,即在每个\gls{time_step}序列决定结束或继续。 确定序列长度$\tau$的另一种方法是将一个额外的输出添加到模型并预测整数$\tau$本身。 模型可以采出$\tau$的值,然后采$\tau$步有价值的数据。 这种方法需要在每个\gls{time_step}的循环更新中增加一个额外输入,使得循环更新知道它是否是靠近所产生序列的末尾。 这种额外的输入可以是$\tau$的值,也可以是$\tau - t$即剩下\gls{time_step}的数量。 如果没有这个额外的输入,\glssymbol{RNN}~可能会产生突然结束序列,如一个句子在最终完整前结束。 此方法基于分解 \begin{align} P(\Vx^{(1)},\dots, \Vx^{(\tau)}) = P(\tau) P(\Vx^{(1)},\dots,\Vx^{(\tau)} \mid \tau) . \end{align} 直接预测$\tau$的例子见\cite{Goodfellow+et+al-ICLR2014a}。 \subsection{基于上下文的~\glssymbol{RNN}~序列建模} \label{sec:modeling_sequences_conditioned_on_context_with_rnns} 上一节描述了没有输入$\Vx$时,关于随机变量序列$y^{(t)}$的\glssymbol{RNN}如何对应于\gls{directed_graphical_model}。 当然,如\eqnref{eq:108a}所示的\glssymbol{RNN}包含一个输入序列$\Vx^{(1)},\Vx^{(2)},\dots,\Vx^{(\tau)}$。 一般情况下,\glssymbol{RNN}~允许将\gls{graphical_model}的观点扩展到不仅代表$y$变量的联合分布也能表示给定$\Vx$后$y$条件分布。 如在\secref{sec:learning_conditional_distributions_with_maximum_likelihood}的\gls{feedforward_network}情形中所讨论的,任何代表变量$P(\Vy;\Vtheta)$的模型都能被解释为代表条件分布$P(\Vy \mid \Vomega)$的模型,其中$\Vomega=\Vtheta$。 我们能像之前一样使用$P(\Vy \mid \Vomega)$代表分布$P(\Vy \mid \Vx)$来扩展这样的模型,但要令$\Vomega$是关于$\Vx$的函数。 在~\glssymbol{RNN}~的情况,这可以通过不同的方式来实现。 此处,我们回顾最常见和最明显的选择。 % -- 380 -- 之前,我们已经讨论了将$t =1, \dots, \tau$的向量$\Vx^{(t)}$序列作为输入的~\glssymbol{RNN}。 另一种选择是只使用单个向量$\Vx$作为输入。 当$\Vx$是一个固定大小的向量时,我们可以简单地将其看作产生$\Vy$序列~\glssymbol{RNN}~的额外输入。 将额外输入提供到~\glssymbol{RNN}~的一些常见方法是: \begin{enumerate} \item 在每个时刻作为一个额外输入,或 \item 作为初始状态$\Vh^{(0)}$,或 \item 结合两种方式。 \end{enumerate} 第一个也是最常用的方法如\figref{fig:chap10_conditional_rnn}所示。 输入$\Vx$和每个隐藏单元向量$\Vh^{(t)}$之间的相互作用是通过新引入的权重矩阵$\MR$参数化的,这是只包含$y$序列的模型所没有的。 同样的乘积$\Vx^\top\MR$在每个\gls{time_step}作为\gls{hidden_unit}的一个额外输入。 我们可以认为$\Vx$的选择(确定$\Vx^\top\MR$值),是有效地用于每个\gls{hidden_unit}的一个新\gls{bias_aff}参数。 权重与输入保持独立。 我们可以认为这种模型采用了非条件模型的$\Vtheta$,并将$\Vomega$代入$\Vtheta$,其中$\Vomega$内的\gls{bias_aff}参数现在是输入的函数。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/conditional_rnn}} \fi \caption{将固定长度的向量$\Vx$映射到序列$\MY$上分布的~\glssymbol{RNN}。 这类~\glssymbol{RNN}~适用于很多任务如图注,其中单个图像作为模型的输入,然后产生描述图像的词序列。 观察到的输出序列的每个元素$\Vy^{(t)}$同时用作输入(对于当前\gls{time_step})和训练期间的目标(对于前一\gls{time_step})。 } \label{fig:chap10_conditional_rnn} \end{figure} % -- 381 -- \glssymbol{RNN}~可以接收向量序列$\Vx^{(t)}$作为输入,而不是仅接收单个向量$\Vx$作为输入。 \eqnref{eq:108a}描述的~\glssymbol{RNN}~对应条件分布$P(\Vy^{(1)}, \dots, \Vy^{(\tau)} \mid \Vx^{(1)}, \dots, \Vx^{(\tau)})$,并在条件独立的假设下这个分布分解为 \begin{align} \prod_t P(\Vy^{(t)} \mid \Vx^{(1)}, \dots, \Vx^{(t)}). \end{align} 为去掉条件独立的假设,我们可以在时刻$t$的输出到时刻$t+1$的\gls{hidden_unit}添加连接,如\figref{fig:chap10_causal_rnn}所示。 该模型就可以代表关于$\Vy$序列的任意概率分布。 这种给定一个序列表示另一个序列分布的模型的还是有一个限制,就是这两个序列的长度必须是相同的。 我们将在\secref{sec:encoder_decoder_sequence_to_sequence_architectures}描述如何消除这种限制。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/causal_rnn}} \fi \caption{将可变长度的$\Vx$值序列映射到相同长度的$\Vy$值序列上分布的条件\gls{RNN}。 对比\figref{fig:chap10_hidden_recurrence_rnn},此~\glssymbol{RNN}~包含从前一个输出到当前状态的连接。 这些连接允许此\glssymbol{RNN}对给定$\Vx$的序列后相同长度的$\Vy$序列上的任意分布建模。 \figref{fig:chap10_hidden_recurrence_rnn}的~\glssymbol{RNN}~仅能表示在给定$\Vx$值的情况下,$\Vy$值彼此条件独立的分布。 } \label{fig:chap10_causal_rnn} \end{figure} % -- 382 -- \section{双向~\glssymbol{RNN}} \label{sec:bidirectional_rnns} 目前为止我们考虑的所有\gls{RNN}有一个``因果''结构,意味着在时刻$t$的状态只能从过去的序列$\Vx^{(1)},\dots,\Vx^{(t-1)}$以及当前的输入$\Vx^{(t)}$捕获信息。 我们还讨论了某些在$\Vy$可用时,允许过去的$\Vy$值信息影响当前状态的模型。 然而,在许多应用中,我们要输出的$\Vy^{(t)}$的预测可能依赖于整个输入序列。 例如,在语音识别中,由于协同发音,当前声音作为音素的正确解释可能取决于未来几个音素,甚至潜在的可能取决于未来的几个词,因为词与附近的词之间存在语言学上的依赖:如果当前的词有两种声学上合理的解释,我们可能要在更远的未来(和过去)寻找信息区分它们。 这在手写识别和许多其他序列到序列学习的任务中也是如此,将会在下一节中描述。 双向\gls{RNN}(或双向~\glssymbol{RNN})为满足这种需要而被发明\citep{Schuster+Paliwal-1997}。 他们在需要双向信息的应用中非常成功\citep{Graves-book2012},如手写识别\citep{Graves-et-al-NIPS2007,Graves+Schmidhuber-2009},语音识别\citep{Graves+Schmidhuber-2005,Graves-et-al-ICASSP2013}以及生物信息学\citep{Baldi-et-al-1999}。 顾名思义,双向~\glssymbol{RNN}~结合时间上从序列起点开始移动的~\glssymbol{RNN}~和另一个时间上从序列末尾开始移动的~\glssymbol{RNN}。 \figref{fig:chap10_bidirectional_rnn}展示了典型的双向~\glssymbol{RNN},其中$\Vh^{(t)}$代表通过时间向前移动的子~\glssymbol{RNN}~的状态,$\Vg^{(t)}$代表通过时间向后移动的子~\glssymbol{RNN}~的状态。 这允许输出单元$\Vo^{(t)}$能够计算同时依赖于过去和未来且对时刻$t$周围的输入值最敏感的表示,而不必指定$t$周围固定大小的窗口(这是\gls{feedforward_network}、\gls{convolutional_network}或具有固定大小的先行缓存器的常规~\glssymbol{RNN}~所必须要做的)。 % -- 383 -- \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/bidirectional_rnn}} \fi \caption{典型的双向\gls{RNN}中的计算,意图学习将输入序列$\Vx$映射到目标序列$\Vy$(在每个步骤$t$具有损失$L^{(t)}$)。 循环性$\Vh$在时间上向前传播信息(向右),而循环性$\Vg$在时间上向后传播信息(向左)。 因此在每个点$t$,输出单元$\Vo^{(t)}$可以受益于输入$\Vh^{(t)}$中关于过去的相关概要以及输入$\Vg^{(t)}$中关于未来的相关概要。 } \label{fig:chap10_bidirectional_rnn} \end{figure} 这个想法可以自然地扩展到2维输入,如图像,由\emph{四个}~\glssymbol{RNN}~组成,每一个沿着四个方向中的一个计算:上、下、左、右。 如果~\glssymbol{RNN}~能够学习到承载长期信息,那在2维网格每个点$(i, j)$的输出$O_{i,j}$就能计算一个主要捕捉局部信息但同时又依赖于长期输入的表示。 相比\gls{convolutional_network},应用于图像的~\glssymbol{RNN}~计算成本通常更高,但允许同一特征图的特征之间存在长期横向的相互作用\citep{Visin-et-al-arxiv2015-renet,kalchbrenner2015grid}。 实际上,对于这样的~\glssymbol{RNN},\gls{forward_propagation}公式可以写成表示使用卷积的形式,计算自底向上到每一层的输入(在整合横向相互作用的特征图的循环传播之前)。 % -- 384 -- \section{基于编码-解码的序列到序列架构} \label{sec:encoder_decoder_sequence_to_sequence_architectures} 我们已经在\figref{fig:chap10_single_output_rnn}看到\glssymbol{RNN}如何将输入序列映射成固定大小的向量,在\figref{fig:chap10_conditional_rnn}中看到\glssymbol{RNN}如何将固定大小的向量映射成一个序列,在\figref{fig:chap10_hidden_recurrence_rnn}、\figref{fig:chap10_output_recurrence_rnn}、\figref{fig:chap10_causal_rnn}和\figref{fig:chap10_bidirectional_rnn}中看到\glssymbol{RNN}如何将一个输入序列映射到等长的输出序列。 本节我们讨论如何训练\glssymbol{RNN},使其将输入序列映射到不一定等长的输出序列。 这在许多场景中都有应用,如语音识别、机器翻译或问答,其中训练集的输入和输出序列的长度通常不相同(虽然它们的长度可能相关)。 我们经常将\glssymbol{RNN}的输入称为``上下文''。 我们希望产生此上下文的表示,$C$。 这个上下文$C$可能是一个概括输入序列$\MX=(\Vx^{(1)},\dots,\Vx^{(n_x)})$的向量或者向量序列。 用于映射可变长度序列到另一可变长度序列最简单的\glssymbol{RNN}架构最初由\cite{cho-al-emnlp14}提出,之后不久由\cite{Sutskever-et-al-NIPS2014}独立开发,并且第一个使用这种方法获得翻译的最好结果。 前一系统是对另一个机器翻译系统产生的建议进行评分,而后者使用独立的\gls{recurrent_network}生成翻译。 这些作者分别将该架构称为编码-解码或序列到序列架构,如\figref{fig:chap10_rnn_encdec}所示。 这个想法非常简单:(1)\firstgls{encoder}或\,\textbf{读取器}\,(reader)或\,\textbf{输入}(input)~\glssymbol{RNN}~处理输入序列。 \gls{encoder}输出上下文$C$(通常是最终隐藏状态的简单函数)。 (2)\firstgls{decoder}或\,\textbf{写入器}(writer)或\,\textbf{输出}(output)~\glssymbol{RNN}~则以固定长度的向量(如\figref{fig:chap10_conditional_rnn})为条件产生输出序列$\MY=(\Vy^{(1)}, \dots, \Vy^{(n_y)})$。 这种架构对比本章前几节提出的架构的创新之处在于长度$n_x$和$n_y$可以彼此不同,而之前的架构约束$n_x = n_y = \tau$。 在序列到序列的架构中,两个~\glssymbol{RNN}~共同训练以最大化$\log P( \Vy^{(1)}, \dots, \Vy^{(n_y)} \mid \Vx^{(1)},\dots,\Vx^{(n_x)} )$(关于训练集中所有$\Vx$和$\Vy$对的平均)。 \gls{encoder}~\glssymbol{RNN}~的最后一个状态$\Vh_{n_x}$通常被当作输入的表示$C$并作为\gls{decoder}~\glssymbol{RNN}~的输入。 % -- 385 -- \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/rnn_encdec}} \fi \caption{在给定输入序列$(\RVx^{(1)},\RVx^{(2)},\dots,\RVx^{(n_x)})$的情况下学习生成输出序列$(\RVy^{(1)},\RVy^{(2)},\dots,\RVy^{(n_y)})$的\gls{encoder}-\gls{decoder}或序列到序列的~\glssymbol{RNN}~架构的示例。 它由读取输入序列的\gls{encoder}~\glssymbol{RNN}~以及生成输出序列(或计算给定输出序列的概率)的\gls{decoder}~\glssymbol{RNN}~组成。 \gls{encoder}~\glssymbol{RNN}~的最终隐藏状态用于计算一般为固定大小的上下文变量$C$,$C$表示输入序列的语义概要并且作为\gls{decoder}~\glssymbol{RNN}~的输入。 } \label{fig:chap10_rnn_encdec} \end{figure} 如果上下文$C$是一个向量,则\gls{decoder}~\glssymbol{RNN}~只是在\secref{sec:modeling_sequences_conditioned_on_context_with_rnns}描述的向量到序列~\glssymbol{RNN}。 正如我们所见,向量到序列~\glssymbol{RNN}~至少有两种接受输入的方法。 输入可以被提供为~\glssymbol{RNN}~的初始状态,或连接到每个\gls{time_step}中的\gls{hidden_unit}。 这两种方式也可以结合。 这里并不强制要求\gls{encoder}与\gls{decoder}的隐藏层具有相同的大小。 此架构的一个明显不足是,\gls{encoder}~\glssymbol{RNN}~输出的上下文$C$的维度太小而难以适当地概括一个长序列。 这种现象由\cite{Bahdanau-et-al-ICLR2015-small}在机器翻译中观察到。 他们提出让$C$成为可变长度的序列,而不是一个固定大小的向量。 此外,他们还引入了将序列$C$的元素和输出序列的元素相关联的\firstgls{attention_mechanism}。 读者可在\secref{sec:using_an_attention_mechanism_and_aligning_pieces_of_data}了解更多细节。 % -- 386 -- \section{深度\glsentrytext{recurrent_network}} \label{sec:deep_recurrent_networks} 大多数~\glssymbol{RNN}~中的计算可以分解成三块参数及其相关的变换: \begin{enumerate} \item 从输入到隐藏状态, \item 从前一隐藏状态到下一隐藏状态,以及 \item 从隐藏状态到输出。 \end{enumerate} 根据\figref{fig:chap10_hidden_recurrence_rnn}中的~\glssymbol{RNN}~架构,这三个块都与单个权重矩阵相关联。 换句话说,当网络被\gls{unfolding}时,每个块对应一个浅的变换。 能通过深度~\glssymbol{MLP}~内单个层来表示的变换称为浅变换。 通常,这是由学成的仿射变换和一个固定非线性表示组成的变换。 在这些操作中引入深度会有利的吗? 实验证据\citep{Graves-et-al-ICASSP2013,Pascanu-et-al-ICLR2014}强烈暗示理应如此。 实验证据与我们需要足够的深度以执行所需映射的想法一致。 读者可以参考~\cite{Schmidhuber92,ElHihi+Bengio-nips8}或~\cite{Jaeger2007}了解更早的关于深度~\glssymbol{RNN}~的研究。 \cite{Graves-et-al-ICASSP2013}第一个展示了将~\glssymbol{RNN}~的状态分为多层的显著好处,如\figref{fig:chap10_deep}~\emph{(左)}。 我们可以认为,在\figref{fig:chap10_deep}(a)所示层次结构中较低的层起到了将原始输入转化为对更高层的隐藏状态更合适表示的作用。 \cite{Pascanu-et-al-ICLR2014}更进一步提出在上述三个块中各使用一个单独的~\glssymbol{MLP}(可能是深度的),如\figref{fig:chap10_deep}(b)所示。 考虑表示容量,我们建议在这三个步中都分配足够的容量,但增加深度可能会因为优化困难而损害学习效果。 在一般情况下,更容易优化较浅的架构,加入\figref{fig:chap10_deep}(b)的额外深度导致从\gls{time_step}~$t$的变量到\gls{time_step}~$t+1$的最短路径变得更长。 例如,如果具有单个隐藏层的~\glssymbol{MLP}~被用于状态到状态的转换,那么与\figref{fig:chap10_hidden_recurrence_rnn}相比,我们就会加倍任何两个不同\gls{time_step}变量之间最短路径的长度。 然而\cite{Pascanu-et-al-ICLR2014}认为,在隐藏到隐藏的路径中引入\gls{skip_connection}可以缓和这个问题,如\figref{fig:chap10_deep}(c)所示。 % -- 387 -- \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/deep}} \fi \caption{\gls{RNN}可以通过许多方式变得更深\citep{Pascanu-et-al-ICLR2014}。 (a)隐藏循环状态可以被分解为具有层次的组。 (b)可以向输入到隐藏,隐藏到隐藏以及隐藏到输出的部分引入更深的计算(如~\glssymbol{MLP})。 这可以延长链接不同\gls{time_step}的最短路径。 (c)可以引入\gls{skip_connection}来缓解路径延长的效应。 } \label{fig:chap10_deep} \end{figure} \section{递归神经网络} \label{sec:recursive_neural_networks} 递归神经网络\footnote{我们建议不要将``递归神经网络''缩写为``\glssymbol{RNN}'',以免与``\gls{RNN}''混淆。}代表\gls{recurrent_network}的另一个扩展,它被构造为深的树状结构而不是~\glssymbol{RNN}~的链状结构,因此是不同类型的\gls{computational_graph}。 递归网络的典型\gls{computational_graph}如\figref{fig:chap10_recursive_net}所示。 递归神经网络由~\cite{Pollack90}引入,而~\cite{tr-bottou-2011}描述了这类网络的潜在用途——学习推论。 递归网络已成功地应用于输入是\emph{数据结构}的\gls{NN}~\citep{Frasconi97,Frasconi-1998},如自然语言处理\citep{Socher+al-NIPS2011,Socher+al-EMNLP2011-small,Socher-et-al-EMNLP2013}和计算机视觉\citep{Socher-2011}。 % -- 388 -- 递归网络的一个明显优势是,对于具有相同长度$\tau$的序列,深度(通过非线性操作的组合数量来衡量)可以急剧地从$\tau$减小为$\CalO(\log \tau)$,这可能有助于解决\gls{long_term_dependency}。 一个悬而未决的问题是如何以最佳的方式构造树。 一种选择是使用不依赖于数据的树结构,如平衡二叉树。 在某些应用领域,外部方法可以为选择适当的树结构提供借鉴。 例如,处理自然语言的句子时,用于递归网络的树结构可以被固定为句子语法分析树的结构(可以由自然语言语法分析程序提供)\citep{Socher+al-NIPS2011,Socher+al-EMNLP2011-small}。 理想的情况下,人们希望学习器自行发现和推断适合于任意给定输入的树结构,如\citep{tr-bottou-2011}所建议。 % -- 389 -- \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/recursive_net}} \fi \caption{递归网络将循环网络的链状计算图推广到树状计算图。 可变大小的序列$\Vx^{(1)},\Vx^{(2)},\dots,\Vx^{(t)}$可以通过固定的参数集合(权重矩阵$\MU,\MV,\MW$)映射到固定大小的表示(输出$\Vo$)。 该图展示了\gls{supervised_learning}的情况,其中提供了一些与整个序列相关的目标$\Vy$。 } \label{fig:chap10_recursive_net} \end{figure} 递归网络想法的变种存在很多可能。 例如,\cite{Frasconi97}和~\cite{Frasconi-1998}将数据与树结构相关联,并将输入和目标与树的单独节点相关联。 由每个节点执行的计算无须是传统的人工神经计算(所有输入的仿射变换后跟一个单调非线性)。 例如,\cite{Socher-et-al-EMNLP2013}提出用张量运算和双线性形式,在这之前人们已经发现当概念是由连续向量(嵌入)表示时,这种方式有利于建模概念之间的联系\citep{Weston+Bengio+Usunier-2010,Bordes-et-al-AISTATS2012-small}。 \section{\glsentrytext{long_term_dependency}的挑战} \label{sec:the_challenge_of_long_term_dependencies} 学习\gls{recurrent_network}\gls{long_term_dependency}的数学挑战在\secref{sec:long_term_dependencies}中引入。 根本问题是,经过许多阶段传播后的\gls{gradient}倾向于消失(大部分情况)或爆炸(很少,但对优化过程影响很大)。 即使我们假设\gls{recurrent_network}是参数稳定的(可存储记忆,且\gls{gradient}不爆炸),但\gls{long_term_dependency}的困难来自比短期相互作用指数小的权重(涉及许多~\gls{jacobian}~相乘)。 许多资料提供了更深层次的讨论\citep{Hochreiter91-small,Doya93,Bengio1994ITNN,Pascanu+al-ICML2013-small}。 在这一节中,我们会更详细地描述该问题。 其余几节介绍克服这个问题的方法。 % -- 390 -- \gls{recurrent_network}涉及相同函数的多次组合,每个\gls{time_step}一次。 这些组合可以导致极端非线性行为,如\figref{fig:chap10_composition_color}所示。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/composition_color}} \fi \caption{重复组合函数。 当组合许多非线性函数(如这里所示的线性tanh层)时,结果是高度非线性的,通常大多数值与微小的导数相关联,也有一些具有大导数的值,以及在增加和减小之间的多次交替。% ?? 此处,我们绘制从100维隐藏状态降到单个维度的线性投影,绘制于$y$轴上。 $x$轴是100维空间中沿着随机方向的初始状态的坐标。 因此,我们可以将该图视为高维函数的线性截面。 曲线显示每个\gls{time_step}之后的函数,或者等价地,转换函数被组合一定次数之后。 } \label{fig:chap10_composition_color} \end{figure} 特别地,\gls{RNN}所使用的函数组合有点像矩阵乘法。 我们可以把如下的循环联系 \begin{align} \Vh^{(t)} = \MW^\top \Vh^{(t-1)} \end{align} 看做是一个非常简单的、缺少非线性激活函数和输入$\Vx$的\gls{RNN}。 如\secref{sec:long_term_dependencies}描述,这种循环关系本质上描述了幂法。 它可以被简化为 \begin{align} \Vh^{(t)} = (\MW^t)^\top \Vh^{(0)}, \end{align} 而当$\MW$符合下列形式的特征分解 \begin{align} \MW = \MQ \VLambda \MQ^\top, \end{align} 其中$\MQ$正交,循环性可进一步简化为 \begin{align} \Vh^{(t)} = \MQ^\top \VLambda^t \MQ \Vh^{(0)}. \end{align} 特征值提升到$t$次后,导致幅值不到一的特征值衰减到零,而幅值大于一的就会激增。 任何不与最大特征向量对齐的$\Vh^{(0)}$的部分将最终被丢弃。 这个问题是针对\gls{recurrent_network}的。 在标量情况下,想象多次乘一个权重$w$。 该乘积$w^t$消失还是爆炸取决于$w$的幅值。 然而,如果每个时刻使用不同权重$w^{(t)}$的非\gls{recurrent_network},情况就不同了。 如果初始状态给定为$1$,那么时刻$t$的状态可以由$\prod_t w^{(t)}$给出。 假设$w^{(t)}$的值是随机生成的,各自独立,且有$0$均值$v$方差。 乘积的方差就为$\CalO(v^n)$。 为了获得某个期望的方差$v^*$,我们可以选择让单个权重的方差为$v=\sqrt[n]{v^*}$。 因此,非常深的\gls{feedforward_network}通过精心设计的比例可以避免\gls{gradient}消失和爆炸问题,如~\cite{Sussillo14}所主张的。 % -- 391 -- \glssymbol{RNN}~\gls{gradient}消失和爆炸问题是由不同研究人员独立发现\citep{Hochreiter91-small,Bengio_icnn93,Bengio1994ITNN}。 有人可能会希望通过简单地停留在\gls{gradient}不消失或爆炸的参数空间来避免这个问题。 不幸的是,为了储存记忆并对小扰动具有鲁棒性,\glssymbol{RNN}~必须进入参数空间中的\gls{gradient}消失区域\citep{Bengio_icnn93,Bengio1994ITNN}。 具体来说,每当模型能够表示\gls{long_term_dependency}时,长期相互作用的\gls{gradient}幅值就会变得指数级小(相比短期相互作用的\gls{gradient}幅值)。 这并不意味着这是不可能学习的,由于\gls{long_term_dependency}关系的信号很容易被短期相关性产生的最小波动隐藏,因而学习\gls{long_term_dependency}可能需要很长的时间。 实践中,\cite{Bengio1994ITNN}的实验表明,当我们增加了需要捕获的依赖关系的跨度,基于\gls{gradient}的优化变得越来越困难,\glssymbol{SGD}~在长度仅为10或20的序列上成功训练传统~\glssymbol{RNN}~的概率迅速变为0。 将\gls{recurrent_network}作为动力系统更深入探讨的资料见~\cite{Doya93,Bengio1994ITNN,Siegelmann+Sontag-1995}及~ \cite{Pascanu-et-al-ICML2013}的回顾。 本章的其余部分将讨论目前已经提出的降低学习\gls{long_term_dependency}(在某些情况下,允许一个~\glssymbol{RNN}~学习横跨数百步的依赖)难度的不同方法,但学习\gls{long_term_dependency}的问题仍是\gls{DL}中的一个主要挑战。 \section{\glsentrytext{ESN}} \label{sec:echo_state_networks} 从$\Vh^{(t-1)}$到$\Vh^{(t)}$的循环权重映射以及从$\Vx^{(t)}$到$\Vh^{(t)}$的输入权重映射是\gls{recurrent_network}中最难学习的参数。 研究者\citep{Jaeger-NIPS2002,Maass-et-al-2002,Jaeger+Haas-2004,Jaeger-2007}提出避免这种困难的方法是设定循环\gls{hidden_unit},使其能很好地捕捉过去输入历史,并且\emph{只学习输出权重}。 \firstgls{ESN}或~\glssymbol{ESN}~\citep{Jaeger+Haas-2004,Jaeger-2007},以及\firstgls{liquid_state_machines}\citep{Maass-et-al-2002}分别独立地提出了这种想法。 后者是类似的,只不过它使用脉冲神经元(二值输出)而不是~\glssymbol{ESN}~中的连续\gls{hidden_unit}。 \glssymbol{ESN}~和\gls{liquid_state_machines}都被称为\firstgls{reservoir_computing}\citep{Lukosevicius+Jaeger-2009},因为\gls{hidden_unit}形成了可能捕获输入历史不同方面的临时特征池。 % -- 392 -- \gls{reservoir_computing}\gls{recurrent_network}类似于\gls{kernel_machines},这是思考它们的一种方式:它们将任意长度的序列(到时刻$t$的输入历史)映射为一个长度固定的向量(循环状态$\Vh^{(t)}$),之后可以施加一个线性预测算子(通常是一个\gls{linear_regression})以解决感兴趣的问题。 训练\gls{criterion}就可以很容易地设计为输出权重的凸函数。 例如,如果输出是从\gls{hidden_unit}到输出目标的\gls{linear_regression},训练\gls{criterion}就是\gls{mean_squared_error},由于是凸的就可以用简单的学习算法可靠地解决\citep{Jaeger-NIPS2002}。 因此,重要的问题是:我们如何设置输入和循环权重才能让一组丰富的历史可以在\gls{RNN}的状态中表示? \gls{reservoir_computing}研究给出的答案是将\gls{recurrent_network}视为动态系统,并设定让动态系统接近稳定边缘的输入和循环权重。 最初的想法是使状态到状态转换函数的~\gls{jacobian}~矩阵的特征值接近1。 如\secref{sec:long_term_dependencies}解释,\gls{recurrent_network}的一个重要特征就是~\gls{jacobian}~矩阵的特征值谱$\MJ^{(t)} = \frac{\partial s^{(t)}}{\partial s^{(t-1)}}$。 特别重要的是$\MJ^{(t)}$的\firstgls{spectral_radius},定义为特征值的最大绝对值。 为了解\gls{spectral_radius}的影响,可以考虑\gls{backward_propagation}中~\gls{jacobian}~矩阵$\MJ$不随$t$改变的简单情况。 例如当网络是纯线性时,会发生这种情况。 假设$\MJ$特征值$\lambda$对应的特征向量为$\Vv$。 考虑当我们通过时间向后传播\gls{gradient}向量时会发生什么。 如果刚开始的\gls{gradient}向量为$\Vg$,然后经过\gls{backward_propagation}的一个步骤后,我们将得到$\MJ \Vg$,$n$步之后我们会得到$\MJ^n \Vg$。 现在考虑如果我们向后传播扰动版本的$\Vg$会发生什么。 如果我们刚开始是$\Vg + \delta \Vv$,一步之后,我们会得到$\MJ(\Vg + \delta \Vv)$。 $n$步之后,我们将得到$\MJ^n(\Vg + \delta \Vv)$。 由此我们可以看出,由$\Vg$开始的\gls{backward_propagation}和由$\Vg+\delta \Vv$开始的\gls{backward_propagation},$n$步之后偏离$\delta \MJ^n \Vv$。 如果$\Vv$选择为$\MJ$特征值$\lambda$对应的一个单位特征向量,那么在每一步乘~\gls{jacobian}~矩阵只是简单地缩放。 \gls{backward_propagation}的两次执行分离的距离为$\delta | \lambda |^n$。 当$\Vv$对应于最大特征值$|\lambda|$,初始扰动为$\delta$时这个扰动达到可能的最宽分离。 当$ | \lambda | > 1$,偏差$\delta | \lambda |^n$就会指数增长。 当$ | \lambda | < 1$,偏差就会变得指数小。 % -- 393 -- 当然,这个例子假定~\gls{jacobian}~矩阵在每个\gls{time_step}是相同的,即对应于没有非线性的\gls{recurrent_network}。 当非线性存在时,非线性的导数将在许多\gls{time_step}后接近零,并有助于防止因过大的\gls{spectral_radius}而导致的爆炸。 事实上,关于\gls{ESN}的最近工作提倡使用远大于1的\gls{spectral_radius}~\citep{yildiz2012re,jaeger2012long}。 我们上面说的这些关于用重复矩阵相乘进行\gls{backward_propagation}的\gls{recurrent_network}的事实同样适用于没有非线性的正向传播的网络,其状态为$\Vh^{(t+1)} = \Vh^{(t)\top} \MW $。 如果线性映射$\MW^\top$在$L^2$范数的测度下总是缩小$\Vh$,那么我们说这个映射是\firstgls{contractive}的。 当\gls{spectral_radius}小于一,则从$\Vh^{(t)}$到$\Vh^{(t+1)}$的映射是\gls{contractive}的,因此小变化在每个\gls{time_step}后变得更小。 当我们使用有限精度(如32位整数)来存储状态向量时,必然会使得网络忘掉过去的信息。 \gls{jacobian}~矩阵告诉我们$\Vh^{(t)}$一个微小的变化如何向前一步传播,或等价的,$\Vh^{(t+1)}$的\gls{gradient}如何向后一步传播。 需要注意的是,$\MW$和$\MJ$都不需要是对称的(尽管它们是实方阵),因此它们可能有复的特征值和特征向量,其中虚数分量对应于潜在的振荡行为(如果迭代地应用同一~\gls{jacobian})。 即使$\Vh^{(t)}$或$\Vh^{(t)}$中有趣的小变化在\gls{backward_propagation}中是实值的,它们仍可以用这样的复数基表示。 重要的是,当向量乘以矩阵时,这些复数基的系数幅值(复数的绝对值)会发生什么变化。 幅值大于1的特征值对应于放大(如果反复应用则指数增长)或收缩(如果反复应用则指数减小)。 非线性映射情况时,\gls{jacobian}~会在每一步任意变化。 因此,动态量变得更加复杂。 然而,一个小的初始变化多步之后仍然会变成一个大的变化。 纯线性和非线性情况的一个不同之处在于使用压缩非线性(如$\tanh$)可以使循环动态量有界。 注意,即使\gls{forward_propagation}动态量有界,\gls{backward_propagation}的动态量仍然可能无界,例如,当$\tanh$序列都在它们状态中间的线性部分,并且由\gls{spectral_radius}大于1的权重矩阵连接。 然而,所有$\tanh$单元同时位于它们的线性激活点是非常罕见的。 % -- 394 -- \gls{ESN}的策略是简单地固定权重使其具有一定的\gls{spectral_radius}如3,其中信息通过时间前向传播,但会由于饱和非线性单元(如$\tanh$)的稳定作用而不会爆炸。 最近,已经有研究表明,用于设置~\glssymbol{ESN}~权重的技术可以用来\emph{初始化}完全可训练的\gls{recurrent_network}的权重(通过时间\gls{backward_propagation}来训练隐藏到隐藏的循环权重),帮助学习\gls{long_term_dependency}~\citep{Sutskever-thesis2012,sutskeverimportance}。 在这种设定下,结合\secref{sec:parameter_initialization_strategies}中稀疏初始化的方案,设置$1.2$的初始\gls{spectral_radius}表现不错。 \section{\glsentrytext{leaky_unit}和其他多时间尺度的策略} \label{sec:leaky_units_and_other_strategiesfor_multiple_time_scales} 处理\gls{long_term_dependency}的一种方法是设计工作在多个时间尺度的模型,使模型的某些部分在细粒度时间尺度上操作并能处理小细节,而其他部分在粗时间尺度上操作并能把遥远过去的信息更有效地传递过来。 存在多种同时构建粗细时间尺度的策略。 这些策略包括在时间轴增加\gls{skip_connection},``\gls{leaky_unit}''使用不同时间常数整合信号,以及去除一些用于建模细粒度时间尺度的连接。 \subsection{时间维度的\glsentrytext{skip_connection}} \label{sec:adding_skip_connections_through_time} 增加从遥远过去的变量到目前变量的直接连接是得到粗时间尺度的一种方法。 使用这样\gls{skip_connection}的想法可以追溯到\cite{Lin-ieeetnn96},紧接是向\gls{feedforward_network}引入延迟的想法\citep{Lang+Hinton88}。 在普通的\gls{recurrent_network}中,循环从时刻$t$的单元连接到时刻$t+1$单元。 构造较长的延迟\gls{recurrent_network}是可能的\citep{Bengio91}。 正如我们在\secref{sec:long_term_dependencies}看到,\gls{gradient}可能\emph{关于时间步数}呈指数消失或爆炸。 \citep{Lin-ieeetnn96}引入了$d$延时的循环连接以减轻这个问题。 现在导数指数减小的速度与$\frac{\tau}{d}$相关而不是$\tau$。 既然同时存在延迟和单步连接,\gls{gradient}仍可能成$t$指数爆炸。 这允许学习算法捕获更长的依赖性,但不是所有的\gls{long_term_dependency}都能在这种方式下良好地表示。 % -- 395 -- \subsection{\glsentrytext{leaky_unit}和一系列不同时间尺度} \label{sec:leaky_units_and_a_spectrum_of_different_time_scales} 获得导数乘积接近1的另一方式是设置\emph{线性}自连接单元,并且这些连接的权重接近1。 我们对某些$v$值应用更新$\mu^{(t)} \gets \alpha \mu^{(t-1)} + (1-\alpha) v^{(t)}$累积一个滑动平均值$\mu^{(t)}$,其中$\alpha$是一个从$ \mu^{(t-1)}$到$ \mu^{(t)}$线性自连接的例子。 当$\alpha$接近1时,滑动平均值能记住过去很长一段时间的信息,而当$\alpha$接近0,关于过去的信息被迅速丢弃。 线性自连接的\gls{hidden_unit}可以模拟滑动平均的行为。 这种\gls{hidden_unit}称为\firstgls{leaky_unit}。 $d$~\gls{time_step}的\gls{skip_connection}可以确保单元总能被$d$个\gls{time_step}前的那个值影响。 使用权重接近1的线性自连接是确保该单元可以访问过去值的不同方式。 线性自连接通过调节实值$\alpha$(而不是调整整数值的跳跃长度)更平滑灵活地调整这种效果。 这个想法由~\cite{Mozer-nips92}和~\cite{ElHihi+Bengio-nips8}提出。 在\gls{ESN}中,\gls{leaky_unit}也被发现很有用\citep{JaegerLPS07}。 我们可以通过两种基本策略设置\gls{leaky_unit}使用的时间常数。 一种策略是手动将其固定为常数,例如在初始化时从某些分布采样它们的值。 另一种策略是使时间常数成为自由变量,并学习出来。 在不同时间尺度使用这样的\gls{leaky_unit}似乎能帮助学习\gls{long_term_dependency}~\citep{Mozer-nips92,Pascanu+al-ICML2013-small}。 \subsection{删除连接} \label{sec:removing_connections} 处理\gls{long_term_dependency}另一种方法是在多个时间尺度组织~\glssymbol{RNN}~状态的想法\citep{ElHihi+Bengio-nips8},信息在较慢的时间尺度上更容易长距离流动。 这个想法与之前讨论的时间维度上的\gls{skip_connection}不同,因为它涉及主动\emph{删除}长度为一的连接并用更长的连接替换它们。 以这种方式修改的单元被迫在长时间尺度上运作。 而通过时间\gls{skip_connection}是\emph{添加}边。 收到这种新连接的单元,可能会学习在长时间尺度上运作,但也可能选择专注于自己其他的短期连接。 % -- 396 -- 强制一组循环单元在不同时间尺度上运作有不同的方式。 一种选择是使循环单元变成\gls{leaky_unit},但不同的单元组关联不同的固定时间尺度。 这由~\cite{Mozer-nips92}提出,并被成功应用于~\cite{Pascanu+al-ICML2013-small}。 另一种选择是使显式且离散的更新发生在不同的时间,不同的单元组有不同的频率。 这是~\cite{ElHihi+Bengio-nips8}和~\cite{Koutnik-et-al-ICML2014}的方法。 它在一些基准数据集上表现不错。 \section{\glsentrytext{LSTM}和其他\glsentrytext{gated_rnn}} \label{sec:the_long_short_term_memory_and_other_gated_rnns} 本文撰写之时,实际应用中最有效的序列模型称为\firstgls{gated_rnn}。 包括基于\firstgls{LSTM}和基于\firstgls{gated_recurrent_unit}的网络。 像\gls{leaky_unit}一样,\gls{gated_rnn}~想法也是基于生成通过时间的路径,其中导数既不消失也不发生爆炸。 \gls{leaky_unit}通过手动选择常量的连接权重或参数化的连接权重来达到这一目的。 \gls{gated_rnn}~将其推广为在每个\gls{time_step}都可能改变的连接权重。 \gls{leaky_unit}允许网络在较长持续时间内\emph{积累}信息(诸如用于特定特征或类的线索)。 然而,一旦该信息被使用,让\gls{NN}\emph{遗忘}旧的状态可能是有用的。 例如,如果一个序列是由子序列组成,我们希望\gls{leaky_unit}能在各子序列内积累线索,我们需要将状态设置为0以忘记旧状态的机制。 我们希望\gls{NN}学会决定何时清除状态,而不是手动决定。 这就是\gls{gated_rnn}~要做的事。 \subsection{\glssymbol{LSTM}} \label{sec:lstm} 引入自循环的巧妙构思,以产生\gls{gradient}长时间持续流动的路径是初始\firstall{LSTM}模型的核心贡献\citep{Hochreiter+Schmidhuber-1997}。 其中一个关键扩展是使自循环的权重视上下文而定,而不是固定的\citep{Gers-et-al-2000}。 \gls{gated}此自循环(由另一个\gls{hidden_unit}控制)的权重,累积的时间尺度可以动态地改变。 在这种情况下,即使是具有固定参数的~\glssymbol{LSTM},累积的时间尺度也可以因输入序列而改变,因为时间常数是模型本身的输出。 \glssymbol{LSTM}~已经在许多应用中取得重大成功,如无约束手写识别\citep{Graves-et-al-2009}、语音识别\citep{Graves-et-al-ICASSP2013,Graves+Jaitly-ICML2014}、手写生成\citep{Graves-arxiv2013}、机器翻译\citep{Sutskever-et-al-NIPS2014}、为图像生成标题\citep{Kiros-et-al-arxiv2014,Vinyals-et-al-arxiv2014,Xu-et-al-ICML2015}和解析\citep{Vinyals2014}。 % -- 397 -- \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/lstm}} \fi \caption{\glssymbol{LSTM}~\gls{recurrent_network}``细胞''的框图。 细胞彼此循环连接,代替一般\gls{recurrent_network}中普通的\gls{hidden_unit}。 这里使用常规的人工神经元计算输入特征。 如果sigmoid输入门允许,它的值可以累加到状态。 状态单元具有线性自循环,其权重由\gls{forget_gate}控制。 细胞的输出可以被输出门关闭。 所有\gls{gated}单元都具有sigmoid非线性,而输入单元可具有任意的压缩非线性。 状态单元也可以用作\gls{gated}单元的额外输入。 黑色方块表示单个\gls{time_step}的延迟。 } \label{fig:chap10_lstm} \end{figure} \glssymbol{LSTM}~块如\figref{fig:chap10_lstm}所示。 在浅\gls{recurrent_network}的架构下,相应的\gls{forward_propagation}公式如下。 更深的架构也被成功应用\citep{Graves-et-al-ICASSP2013,Pascanu-et-al-ICLR2014}。 \glssymbol{LSTM}~\gls{recurrent_network}除了外部的~\glssymbol{RNN}~循环外,还具有内部的``\glssymbol{LSTM}~细胞''循环(自环),因此~\glssymbol{LSTM}~不是简单地向输入和循环单元的仿射变换之后施加一个逐元素的非线性。 与普通的\gls{recurrent_network}类似,每个单元有相同的输入和输出,但也有更多的参数和控制信息流动的\gls{gated}单元系统。 最重要的组成部分是状态单元$s_i^{(t)}$,与前一节讨论的\gls{leaky_unit}有类似的线性自环。 然而,此处自环的权重(或相关联的时间常数)由\firstgls{forget_gate}~$f_i^{(t)}$控制(时刻$t$和细胞$i$),由~\ENNAME{sigmoid}~单元将权重设置为0和1之间的值: \begin{align} f_i^{(t)} = \sigma \Big( b_i^f + \sum_j U_{i,j}^f x_j^{(t)} + \sum_j W_{i,j}^f h_j^{(t-1)} \Big), \end{align} 其中$\Vx^{(t)}$是当前输入向量,$\Vh^{t}$是当前隐藏层向量,$\Vh^{t}$包含所有~\glssymbol{LSTM}~细胞的输出。 $\Vb^f, \MU^f, \MW^f$分别是\gls{forget_gate}的\gls{bias_aff}、输入权重和循环权重。 因此~\glssymbol{LSTM}~细胞内部状态以如下方式更新,其中有一个条件的自环权重$f_i^{(t)}$: \begin{align} s_i^{(t)} = f_i^{(t)} s_i^{(t-1)} + g_i^{(t)} \sigma \Big( b_i + \sum_j U_{i,j} x_j^{(t)} + \sum_j W_{i,j} h_j^{(t-1)} \Big), \end{align} 其中$\Vb, \MU, \MW$分别是~\glssymbol{LSTM}~细胞中的\gls{bias_aff}、输入权重和循环权重。 \textbf{外部输入门}(external input gate)单元$g_i^{(t)}$以类似\gls{forget_gate}(使用\ENNAME{sigmoid}获得一个0和1之间的值)的方式更新,但有自身的参数: \begin{align} g_i^{(t)} = \sigma \Big( b_i^g + \sum_j U_{i,j}^g x_j^{(t)} + \sum_j W_{i,j}^g h_j^{(t-1)} \Big). \end{align} \glssymbol{LSTM}~细胞的输出$h_i^{(t)}$也可以由\textbf{输出门}(output gate)~$q_i^{(t)}$关闭(使用\ENNAME{sigmoid}单元作为\gls{gated}): \begin{align} h_i^{(t)} &= \text{tanh}\big( s_i^{(t)} \big) q_i^{(t)}, \\ q_i^{(t)} &= \sigma \Big( b_i^o + \sum_j U_{i,j}^o x_j^{(t)} + \sum_j W_{i,j}^o h_j^{(t-1)} \Big), \end{align} 其中$\Vb^o, \MU^o, \MW^o$分别是输出门的\gls{bias_aff}、输入权重和循环权重。 在某些变体中,可以选择使用细胞状态$s_i^{(t)}$作为额外的输入(及其权重),输入到第$i$个单元的三个门,如\figref{fig:chap10_lstm}所示。 这将需要三个额外的参数。 % -- 399 -- \glssymbol{LSTM}~网络比简单的循环架构更易于学习\gls{long_term_dependency},先是用于测试\gls{long_term_dependency}学习能力的人工数据集\citep{Bengio-trnn94,Hochreiter+Schmidhuber-1997,chapter-gradient-flow-2001},然后是在具有挑战性的序列处理任务上获得最先进的表现\citep{Graves-book2012,Graves-arxiv2013,Sutskever-et-al-NIPS2014}。 \glssymbol{LSTM}~的变体和替代也已经被研究和使用,这将在下文进行讨论。 \subsection{其他\glsentrytext{gated_rnn}} \label{sec:other_gated_rnns} \glssymbol{LSTM}~架构中哪些部分是真正必须的? 还可以设计哪些其他成功架构允许网络动态地控制不同单元的时间尺度和遗忘行为? 最近关于\gls{gated_rnn}~的工作给出了这些问题的某些答案,其单元也被称为\gls{gated_recurrent_unit}或~\glssymbol{gated_recurrent_unit}~\citep{cho-al-arxiv14-ssst8,Chung-et-al-NIPSDL2014-small,chung-icml15-gated,Jozefowicz-et-al-ICML2015,Chrupala-et-al-arxiv2015}。 与~\glssymbol{LSTM}~的主要区别是,单个\gls{gated}单元同时控制遗忘因子和更新状态单元的决定。 更新公式如下: \begin{align} h_i^{(t)} = u_i^{(t-1)} h_i^{(t-1)} + (1 - u_i^{(t-1)}) \sigma \Big( b_i + \sum_j U_{i,j} x_j^{(t)} + \sum_j W_{i,j} r_j^{(t-1)} h_j^{(t-1)} \Big), \end{align} 其中$\Vu$代表``更新''门,$\Vr$表示``复位''门。 它们的值就如通常所定义的: \begin{align} u_i^{(t)} = \sigma \Big( b_i^u + \sum_j U_{i,j}^u x_j^{(t)} + \sum_j W_{i,j}^u h_j^{(t)} \Big), \end{align} 和 \begin{align} r_i^{(t)} = \sigma \Big( b_i^r + \sum_j U_{i,j}^r x_j^{(t)} + \sum_j W_{i,j}^r h_j^{(t)} \Big). \end{align} 复位和更新门能独立地``忽略''状态向量的一部分。 更新门像条件渗漏累积器一样可以线性\gls{gated}任意维度,从而选择将它复制(在~\ENNAME{sigmoid}~的一个极端)或完全由新的``目标状态''值(朝向渗漏累积器的收敛方向)替换并完全忽略它(在另一个极端)。 复位门控制当前状态中哪些部分用于计算下一个目标状态,在过去状态和未来状态之间引入了附加的非线性效应。 % -- 400 -- 围绕这一主题可以设计更多的变种。 例如复位门(或\gls{forget_gate})的输出可以在多个\gls{hidden_unit}间共享。 或者,全局门的乘积(覆盖一整组的单元,例如整一层)和一个局部门(每单元)可用于结合全局控制和局部控制。 然而,一些调查发现这些~\glssymbol{LSTM}~和GRU架构的变种,在广泛的任务中难以明显地同时击败这两个原始架构\citep{Greff-et-al-arxiv2015,Jozefowicz-et-al-ICML2015}。 \cite{Greff-et-al-arxiv2015}发现其中的关键因素是\gls{forget_gate},而~\cite{Jozefowicz-et-al-ICML2015}发现向~\glssymbol{LSTM}~\gls{forget_gate}加入1的\gls{bias_aff}(由~\cite{Gers-et-al-2000}提倡)能让~\glssymbol{LSTM}~变得与已探索的最佳变种一样健壮。 \section{优化\glsentrytext{long_term_dependency}} \label{sec:optimization_for_long_term_dependencies} 我们已经在\secref{sec:long_term_dependencies}和\secref{sec:the_challenge_of_long_term_dependencies}中描述过在许多\gls{time_step}上优化~\glssymbol{RNN}~时发生的\gls{gradient}消失和爆炸的问题。 由~\cite{Martens+Sutskever-ICML2011}提出了一个有趣的想法是,二阶导数可能在一阶导数消失的同时消失。 二阶优化算法可以大致被理解为将一阶导数除以二阶导数(在更高维数,由\gls{gradient}乘以~\gls{hessian}~的逆)。 如果二阶导数与一阶导数以类似的速率收缩,那么一阶和二阶导数的比率可保持相对恒定。 不幸的是,二阶方法有许多缺点,包括高的计算成本、需要一个大的\gls{minibatch}、并且倾向于被吸引到鞍点。 \cite{Martens+Sutskever-ICML2011}发现采用二阶方法的不错结果。 之后,\cite{sutskeverimportance}发现使用较简单的方法可以达到类似的结果,例如经过谨慎初始化的~\ENNAME{Nesterov}~动量法。 更详细的内容参考~\cite{Sutskever-thesis2012}。 应用于~\glssymbol{LSTM}~时,这两种方法在很大程度上会被单纯的~\glssymbol{SGD}(甚至没有动量)取代。 这是\gls{ML}中一个延续的主题,设计一个易于优化模型通常比设计出更加强大的优化算法更容易。 % -- 401 -- \subsection{\glsentrytext{clipping_gradient}} \label{sec:clipping_gradients} 如\secref{sec:cliffs_and_exploding_gradients}讨论,强非线性函数(如由许多\gls{time_step}计算的\gls{recurrent_network})往往倾向于非常大或非常小幅度的\gls{gradient}。 如\figref{fig:chap8_cliff}和\figref{fig:chap10_cliff_clipping_color}所示,我们可以看到,\gls{objective_function}(作为参数的函数)存在一个伴随``悬崖''的``地形'':宽且相当平坦区域被\gls{objective_function}变化快的小区域隔开,形成了一种悬崖。 这导致的困难是,当参数\gls{gradient}非常大时,\gls{gradient}下降的参数更新可以将参数抛出很远,进入\gls{objective_function}较大的区域,到达当前解所作的努力变成了无用功。 \gls{gradient}告诉我们,围绕当前参数的无穷小区域内最速下降的方向。 这个无穷小区域之外,\gls{cost_function}可能开始拐头向上。 更新必须被选择为足够小,以避免沿向上的曲面走太远。 我们通常使用衰减速度足够慢的学习率,使连续的步骤具有大致相同的学习率。 适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/cliff_clipping_color}} \fi \caption{\gls{gradient_clipping}在有两个参数$\Vw$和$\Vb$的\gls{recurrent_network}中的效果示例。 \gls{gradient_clipping}可以使\gls{GD}在极陡峭的悬崖附近更合理地执行。 这些陡峭的悬崖通常发生在\gls{recurrent_network}中,位于\gls{recurrent_network}近似线性的附近。 悬崖在\gls{time_step}的数量上呈指数地陡峭,因为对于每个\gls{time_step},权重矩阵都自乘一次。 \emph{(左)}没有\gls{gradient_clipping}的\gls{GD}越过这个小峡谷的底部,然后从悬崖面接收非常大的梯度。 大梯度灾难性地将参数推到图的轴外。 \emph{(右)}使用\gls{gradient_clipping}的\gls{GD}对悬崖的反应更温和。 当它上升到悬崖面时,步长受到限制,使得它不会被推出靠近解的陡峭区域。 经~\citet{Pascanu+al-ICML2013-small}许可改编此图。 } \label{fig:chap10_cliff_clipping_color} \end{figure} % -- 402 -- 一个简单的解决方案已被从业者使用多年:\firstgls{clipping_gradient}。 此想法有不同实例\citep{Mikolov-thesis-2012,Pascanu+al-ICML2013-small}。 一种选择是在参数更新之前,\emph{逐元素}地截断\gls{minibatch}产生的参数\gls{gradient}~\citep{Mikolov-thesis-2012}。 另一种是在参数更新之前\emph{截断\gls{gradient}~$\Vg$的范数$\norm{ \Vg }$}~\citep{Pascanu+al-ICML2013-small}: \begin{align} \text{if}~ \norm{\Vg} &> v \\ \Vg &\gets \frac{\Vg v}{\norm{g}}, \end{align} 其中$v$是范数上界,$\Vg$用来更新参数。 因为所有参数(包括不同的参数组,如权重和\gls{bias_aff})的\gls{gradient}被单个缩放因子联合重整化,所以后一方法具有的优点是保证了每个步骤仍然是在\gls{gradient}方向上的,但实验表明两种形式类似。 虽然参数更新与真实\gls{gradient}具有相同的方向\gls{gradient},经过\gls{gradient}范数截断,参数更新的向量范数现在变得有界。 这种有界\gls{gradient}能避免执行\gls{gradient}爆炸时的有害一步。 事实上,当\gls{gradient}大小高于阈值时,即使是采取简单的\emph{随机步骤}往往工作得几乎一样好。 如果爆炸非常严重,\gls{gradient}数值上为{\tt Inf}或{\tt Nan}(无穷大或不是一个数字),则可以采取大小为$v$的随机一步,通常会离开数值不稳定的状态。 截断每\gls{minibatch}\gls{gradient}范数不会改变单个\gls{minibatch}的\gls{gradient}方向。 然而,对许多\gls{minibatch}使用范数截断\gls{gradient}后的平均值不等同于截断真实\gls{gradient}(使用所有的实例所形成的\gls{gradient})的范数。 大导数范数的样本,和与之一起出现在同一\gls{minibatch}的样本,其对最终方向的贡献将被截断。 不像传统\gls{minibatch}\gls{gradient}下降,其中真实\gls{gradient}的方向是等于所有\gls{minibatch}\gls{gradient}的平均。 换句话说,传统的\gls{SGD}使用\gls{gradient}的无偏估计,而使用范数截断的\gls{gradient}下降引入了经验上是有用的启发式\gls{bias_aff}。 而对于逐元素截断,更新的方向与真实\gls{gradient}或\gls{minibatch}的\gls{gradient}不再对齐,但是它仍然是一个下降方向。 还有学者提出\citep{Graves-arxiv2013}(相对于隐藏单元)截断\gls{backward_propagation}\gls{gradient},但没有公布与这些变种之间的比较; 我们推测,所有这些方法表现类似。 % -- 403 -- \subsection{引导信息流的正则化} \label{sec:regularizing_to_encourage_information_flow} \gls{gradient_clipping}有助于处理爆炸的\gls{gradient},但它无助于消失的\gls{gradient}。 为了解决消失的\gls{gradient}问题并更好地捕获\gls{long_term_dependency},我们讨论了如下想法:在展开循环架构的\gls{computational_graph}中,沿着与弧边相关联的\gls{gradient}乘积接近1的部分创建路径。 在\secref{sec:the_long_short_term_memory_and_other_gated_rnns}中已经讨论过,实现这一点的一种方法是使用~\glssymbol{LSTM}~以及其他自循环和\gls{gated}机制。 另一个想法是\gls{regularization}或约束参数,以引导``信息流''。 特别是即使\gls{loss_function}只对序列尾部的输出作惩罚,我们也希望\gls{gradient}向量$\nabla_{\Vh^{(t)}} L$在\gls{backward_propagation}时能维持其幅度。 形式上,我们要使 \begin{align} (\nabla_{\Vh^{(t)}} L) \frac{\partial \Vh^{(t)}}{\partial \Vh^{(t-1)}} \end{align} 与 \begin{align} \nabla_{\Vh^{(t)}} L \end{align} 一样大。 在这个目标下,\citet{Pascanu+al-ICML2013-small}提出以下正则项: \begin{align} \Omega = \sum_t \Bigg( \frac{ \norm{ (\nabla_{\Vh^{(t)}} L) \frac{\partial \Vh^{(t)}}{\partial \Vh^{(t-1)}}}} {\norm{\nabla_{\Vh^{(t)}} L}} -1 \Bigg)^2. \end{align} 计算这一\gls{gradient}的正则项可能会出现困难,但~\cite{Pascanu+al-ICML2013-small}提出可以将后向传播向量$\nabla_{\Vh^{(t)}} L$考虑为恒值作为近似(为了计算正则化的目的,没有必要通过它们向后传播)。 使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加~\glssymbol{RNN}~可以学习的依赖的跨度。 因为这种方法将~\glssymbol{RNN}~的动态保持在爆炸\gls{gradient}的边缘,\gls{gradient_clipping}特别重要。 如果没有\gls{gradient_clipping},\gls{gradient}爆炸将阻碍学习的成功。 这种方法的一个主要弱点是,在处理数据冗余的任务时如\gls{language_model},它并不像~\glssymbol{LSTM}~一样有效。 % -- 404 -- \section{外显记忆} \label{sec:explicit_memory} 智能需要知识并且可以通过学习获取知识,这已促使大型深度架构的发展。 然而,知识是不同的并且种类繁多。 有些知识是隐含的、潜意识的并且难以用语言表达——比如怎么行走或狗与猫的样子有什么不同。 其他知识可以是明确的、可陈述的以及可以相对简单地使用词语表达——每天常识性的知识,如``猫是一种动物'',或者为实现自己当前目标所需知道的非常具体的事实,如``与销售团队会议在141室于下午3:00开始''。 \gls{NN}擅长存储隐性知识,但是他们很难记住事实。 被存储在\gls{NN}参数中之前,\gls{SGD}需要多次提供相同的输入,即使如此,该输入也不会被特别精确地存储。 \citet{Graves-et-al-arxiv2014}推测这是因为\gls{NN}缺乏\textbf{工作存储}(working memory)系统,即类似人类为实现一些目标而明确保存和操作相关信息片段的系统。 这种外显记忆组件将使我们的系统不仅能够快速``故意''地存储和检索具体的事实,也能利用他们循序推论。 \gls{NN}处理序列信息的需要,改变了每个步骤向网络注入输入的方式,长期以来推理能力被认为是重要的,而不是对输入做出自动的、直观的反应\citep{hinton1990mapping} 。 为了解决这一难题,\citet{Weston2014}引入了\firstgls{memory_network},其中包括一组可以通过寻址机制来访问的记忆单元。 \gls{memory_network}原本需要监督信号指示他们如何使用自己的记忆单元。 \citet{Graves-et-al-arxiv2014}引入的\firstgls{NTM},不需要明确的监督指示采取哪些行动而能学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制(~见\citet{Bahdanau-et-al-ICLR2015-small}和\secref{sec:using_an_attention_mechanism_and_aligning_pieces_of_data}),允许端到端的训练。 这种软寻址机制已成为其他允许基于\gls{gradient}优化的模拟算法机制的相关架构的标准\citep{Sukhbaatar2015,Joulin+Mikolov-2015,Kumar-et-al-2015,Vinyals2015,Grefenstette-et-al-NIPS2015}。 每个记忆单元可以被认为是~\glssymbol{LSTM}~和GRU中记忆单元的扩展。 不同的是,网络输出一个内部状态来选择从哪个单元读取或写入,正如数字计算机读取或写入到特定地址的内存访问。 % -- 405 -- 产生确切整数地址的函数很难优化。 为了缓解这一问题,\glssymbol{NTM}~实际同时从多个记忆单元写入或读取。 读取时,它们采取许多单元的加权平均值。 写入时,他们对多个单元修改不同的数值。 用于这些操作的系数被选择为集中在少数单元,如通过~\ENNAME{softmax}~函数产生它们。 使用这些具有非零导数的权重允许控制访问存储器的函数能使用梯度下降法优化。 关于这些系数的\gls{gradient}指示着其中每个参数是应该增加还是减少,但\gls{gradient}通常只在接收大系数的存储器地址上具有大的值。 这些记忆单元通常扩充为包含向量,而不是由~\glssymbol{LSTM}~或GRU存储单元所存储的单个标量。 增加记忆单元大小的原因有两个。 原因之一是,我们已经增加了访问记忆单元的成本。 我们为产生用于许多单元的系数付出计算成本,但我们预期这些系数聚集在周围小数目的单元。 通过读取向量值,而不是一个标量,我们可以抵消部分成本。 使用向量值的记忆单元的另一个原因是,它们允许\textbf{基于内容的寻址}(content-based addressing),其中从一个单元读或写的权重是该单元的函数。 如果我们能够产生一个模式来匹配某些但并非所有元素,向量值单元允许我们检索一个完整向量值的记忆。 这类似于人们能够通过几个歌词回忆起一首歌曲的方式。 我们可以认为基于内容的读取指令是说,``检索一首副歌歌词中带有'我们都住在黄色潜水艇'的歌''。 当我们要检索的对象很大时,基于内容的寻址更为有用——如果歌曲的每一个字母被存储在单独的记忆单元中,我们将无法通过这种方式找到他们。 通过比较,\textbf{基于位置的寻址}(location-based addressing)不允许引用存储器的内容。 我们可以认为基于位置的读取指令是说``检索347档的歌的歌词''。 当存储单元哪怕很小时,基于位置的寻址常常也可以是完全合理的机制。 如果一个存储单元的内容在大多数\gls{time_step}上会被复制(不被忘记),则它包含的信息可以在时间上向前传播,\gls{gradient}随时间向后传播,而不会消失或爆炸。 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/memory_network}} \fi \caption{具有外显记忆网络的示意图,具备\gls{NTM}的一些关键设计元素。 在此图中,我们将模型的``\gls{representation}''部分(``任务网络'',这里是底部的循环网络)与存储事实的模型(记忆单元的集合)的``存储器''部分区分开。 任务网络学习``控制''存储器,决定从哪读取以及在哪写入(通过读取和写入机制,由指向读取和写入地址的粗箭头指示)。 } \label{fig:chap10_memory_network} \end{figure} 外显记忆的方法在\figref{fig:chap10_memory_network}说明,其中我们可以看到一个``任务神经网络''搭配了一个存储器。 虽然这一任务神经网络可以是前馈或循环的,但整个系统是一个\gls{recurrent_network}。 任务网络可以选择读取或写入特定的存储器地址。 外显记忆似乎允许模型学习普通~\glssymbol{RNN}~或~\glssymbol{LSTM} \glssymbol{RNN}~不能学习的任务。 这种优点的一个原因可能是因为信息和\gls{gradient}可以(分别在时间上向前和向后)在非常长的持续时间内传播。 % -- 406 -- 作为存储器单元的加权平均值\gls{backward_propagation}的替代,我们可以将存储器寻址系数解释为概率,并依据此概率随机从一个单元读取\citep{Zaremba+Sutskever-arxiv2015}。 优化离散决策的模型需要专门的优化算法,这将在\secref{sec:back_propagating_through_discrete_stochastic_operations}中描述。 目前为止,训练这些做离散决策的随机架构,仍比训练进行软判决的确定性算法更难。 无论是软(允许\gls{backward_propagation})或随机硬性的,用于选择一个地址的机制与先前在机器翻译的背景下引入的\gls{attention_mechanism}形式相同\citep{Bahdanau-et-al-ICLR2015-small},这在\secref{sec:using_an_attention_mechanism_and_aligning_pieces_of_data}中也有讨论。 甚至更早之前,\gls{attention_mechanism}的想法就被引入了\gls{NN},在手写生成的情况下\citep{Graves-arxiv2013},有一个被约束为通过序列只向前移动的\gls{attention_mechanism}。 在机器翻译和\gls{memory_network}的情况下,每个步骤中关注的焦点可以移动到一个完全不同的地方(相比之前的步骤)。 \gls{RNN}提供了将\gls{DL}扩展到序列数据的一种方法。 它们是我们的\gls{DL}工具箱中最后一个主要的工具。 现在我们的讨论将转移到如何选择和使用这些工具,以及如何在真实世界的任务中应用这些工具。 ================================================ FILE: Chapter11/README.md ================================================ #第十一章笔记 ================================================ FILE: Chapter11/practical_methodology.tex ================================================ % !Mode:: "TeX:UTF-8" % Translator: Yujun Li \chapter{实践方法论} \label{chap:practical_methodology} 要成功地使用深度学习技术,仅仅知道存在哪些算法和解释他们为何有效的原理是不够的。 一个优秀的机器学习实践者还需要知道如何针对具体应用挑选一个合适的算法以及如何监控,并根据实验反馈改进机器学习系统。 在\gls{ML}系统的日常开发中,实践者需要决定是否收集更多的数据、增加或减少模型\gls{capacity}、添加或删除\gls{regularization}项、改进模型的优化、改进模型的近似推断或调试模型的软件实现。 尝试这些操作都需要大量时间,因此确定正确做法,而不盲目猜测尤为重要的。 本书的大部分内容都是关于不同的\gls{ML}模型、训练算法和\gls{objective_function}。 这可能给人一种印象——成为\gls{ML}专家的最重要因素是了解各种各样的\gls{ML}技术,并熟悉各种不同的数学。 在实践中,正确使用一个普通算法通常比草率地使用一个不清楚的算法效果更好。 正确应用一个算法需要掌握一些相当简单的方法论。 本章的许多建议都来自~\cite{ng-lecture-advice}。 我们建议参考以下几个实践设计流程: \begin{itemize} \item 确定目标——使用什么样的\gls{error_metric},并为此\gls{error_metric}指定目标值。 这些目标和\gls{error_metric}取决于该应用旨在解决的问题。 % -- 409 end \item 尽快建立一个\gls{end_to_end}工作流程,包括估计合适的\gls{performance_metrics}。 % 410 head \item 搭建系统,并确定性能瓶颈。 检查哪个部分的性能差于预期,以及是否是因为\gls{overfitting}、\gls{underfitting},或者数据或软件缺陷造成的。 \item 根据具体观察反复地进行增量式的改动,如收集新数据、调整\gls{hyperparameter}或改进算法。 \end{itemize} 我们将使用街景地址号码\gls{transcription_system}~\citep{Goodfellow+et+al-ICLR2014a}作为一个运行示例。 该应用的目标是将建筑物添加到谷歌地图。 街景车拍摄建筑物,并记录与每张建筑照片相关的GPS坐标。 \gls{convolutional_network}识别每张照片上的地址号码,由谷歌地图数据库在正确的位置添加该地址。 这个商业应用是一个很好的示例,它的开发流程遵循我们倡导的设计方法。 % 410 mid 我们现在描述这个过程中的每一个步骤。 \section{\glsentrytext{performance_metrics}} \label{sec:performance_metrics} 确定目标,即使用什么\gls{error_metric},是必要的第一步,因为\gls{error_metric}将指导接下来的所有工作。 同时我们也应该了解大概能得到什么级别的目标性能。 % 410 mid 值得注意的是对于大多数应用而言,不可能实现绝对零误差。 即使你有无限的训练数据,并且恢复了真正的\gls{PD},\gls{bayes_error}仍定义了能达到的最小\gls{error_rate}。 这是因为输入特征可能无法包含输出变量的完整信息,或是因为系统可能本质上是随机的。 当然我们还会受限于有限的训练数据。 % 410 end 训练数据的数量会因为各种原因受到限制。 当目标是打造现实世界中最好的产品或服务时,我们通常需要收集更多的数据,但必须确定进一步减少误差的价值,并与收集更多数据的成本做权衡。 数据收集会耗费时间、金钱,或带来人体痛苦(例如,收集人体医疗测试数据)。 科研中,目标通常是在某个确定\gls{benchmarks}下探讨哪个算法更好,一般会固定\gls{training_set},不允许收集更多的数据。 % 411 head 如何确定合理的性能期望? 在学术界,通常我们可以根据先前公布的\gls{benchmarks}结果来估计预期\gls{error_rate}。 在现实世界中,一个应用的\gls{error_rate}有必要是安全的、具有成本效益的或吸引消费者的。 一旦你确定了想要达到的\gls{error_rate},那么你的设计将由如何达到这个\gls{error_rate}来指导。 % 411 mid 除了需要考虑\gls{performance_metrics}之外,另一个需要考虑的是度量的选择。 我们有几种不同的\gls{performance_metrics},可以用来度量一个含有\gls{ML}组件的完整应用的有效性。 这些\gls{performance_metrics}通常不同于训练模型的\gls{cost_function}。 如\secref{sec:the_performance_measure_p}所述,我们通常会度量一个系统的\gls{accuracy},或等价地,\gls{error_rate}。 然而,许多应用需要更高级的度量。 % 411 mid 有时,一种错误可能会比另一种错误更严重。 例如,垃圾邮件检测系统会有两种错误:将正常邮件错误地归为垃圾邮件,将垃圾邮件错误地归为正常邮件。 阻止正常消息比允许可疑消息通过糟糕得多。 我们希望度量某种形式的总\gls{cost},其中拦截正常邮件比允许垃圾邮件通过的\gls{cost}更高,而不是度量垃圾邮件分类的\gls{error_rate}。 % 411 mid 有时,我们需要训练检测某些罕见事件的二元分类器。 例如,我们可能会为一种罕见疾病设计医疗测试。 假设每一百万人中只有一人患病。 我们只需要让分类器一直报告没有患者,就能轻易地在检测任务上实现$99.9999\%$的正确率。 显然,正确率很难描述这种系统的性能。 解决这个问题的方法是度量\firstgls{precision}和\firstgls{recall}。 \gls{precision}是模型报告的检测是正确的比率,而\gls{recall}则是真实事件被检测到的比率。 检测器永远报告没有患者,会得到一个完美的\gls{precision},但\gls{recall}为零。 而报告每个人都是患者的检测器会得到一个完美的\gls{recall},但是\gls{precision}会等于人群中患有该病的比例(在我们的例子是$0.0001\%$,每一百万人只有一人患病)。 当使用\gls{precision}和\gls{recall}时,我们通常会画\firstgls{prcurve},$y$轴表示\gls{precision},$x$轴表示\gls{recall}。 如果检测到的事件发生了,那么分类器会返回一个较高的得分。 例如,我们将\gls{feedforward_network}设计为检测一种疾病,估计一个医疗结果由特征$\Vx$表示的人患病的概率为$\hat{y} = P(y=1\mid\Vx)$。 每当这个得分超过某个阈值时,我们报告检测结果。 通过调整阈值,我们能权衡\gls{precision}和\gls{recall}。 在很多情况下,我们希望用一个数而不是曲线来概括分类器的性能。 要做到这一点,我们可以将\gls{precision} $p$和\gls{recall} $r$转换为\firstgls{fscore} \begin{equation} F = \frac{2pr}{p+r}. \end{equation} 另一种方法是报告\,\gls{prcurve}下方的总面积。 % -- 412 head 在一些应用中,\gls{ML}系统可能会拒绝做出判断。 如果\gls{ML}算法能够估计所作判断的置信度,这将会非常有用,特别是在错误判断会导致严重危害,而人工操作员能够偶尔接管的情况下。 街景\gls{transcription_system}可以作为这种情况的一个示例。 这个任务是识别照片上的地址号码,将照片拍摄地点对应到地图上的地址。%?? 翻译的很有问题 如果地图是不精确的,那么地图的价值会严重下降。 因此只在转录正确的情况下添加地址十分重要。 如果\gls{ML}系统认为它不太能像人一样正确地转录,那么最好办法当然是让人来转录照片。 当然,只有当\gls{ML}系统能够大量降低需要人工操作处理的图片时,它才是有用的。 在这种情况下,一种自然的\gls{performance_measures}是\firstgls{coverage}。 \gls{coverage}是\gls{ML}系统能够产生响应的样本所占的比率。 我们权衡\gls{coverage}和\gls{precision}。 一个系统可以通过拒绝处理任意样本的方式来达到$100\%$的\gls{precision},但是\gls{coverage}降到了$0\%$。 对于街景任务,该项目的目标是达到人类级别的转录\gls{precision},同时保持$95\%$的\gls{coverage}。 在这项任务中,人类级别的性能是$98\%$的\gls{precision}。 % 412 end 还有许多其他的\gls{performance_measures}。 例如,我们可以度量点击率、收集用户满意度调查等等。 许多专业的应用领域也有特定的标准。 % 412 end 最重要的是首先要确定改进哪个\gls{performance_measures},然后专心提高\gls{performance_measures}。 如果没有明确的目标,那么我们很难判断\gls{ML}系统上的改动是否有所改进。 % -- 412 end \section{默认的\glsentrytext{baseline}模型} \label{sec:default_baseline_models} 确定\gls{performance_metrics}和目标后,任何实际应用的下一步是尽快建立一个合理的\gls{end_to_end}系统。 本节给出了一些关于在不同情况下使用哪种算法作为第一个\gls{baseline}方法推荐。 在本节中,我们提供了关于不同情况下使用哪种算法作为第一\gls{baseline}方法的推荐。 值得注意的是,\gls{DL}研究进展迅速,所以本书出版后很快可能会有更好的默认算法。 % 413 head 根据问题的复杂性,项目开始时可能无需使用\gls{DL}。 如果只需正确地选择几个线性权重就可能解决问题,那么项目可以开始于一个简单的统计模型,如\gls{logistic_regression}。 如果问题属于``\glssymbol{AI}-完全''类的,如\gls{object_recognition}、\gls{SR}、\gls{machine_translation}等等,那么项目开始于一个合适的\gls{DL}模型,效果会比较好。 % 413 mid 首先,根据数据的结构选择一类合适的模型。 如果项目是以固定大小的向量作为输入的\gls{supervised_learning},那么可以使用全连接的\gls{feedforward_network}。 如果输入有已知的拓扑结构(例如,输入是图像),那么可以使用\gls{convolutional_network}。 在这些情况下,刚开始可以使用某些\gls{piecewise}线性单元(\glssymbol{ReLU}\,或者其扩展,如\,\glssymbol{leaky_ReLU}、\glssymbol{PReLU}\,和\,\glssymbol{maxout})。 如果输入或输出是一个序列,可以使用\gls{gated_recurrent_net}(\glssymbol{LSTM}\,或\,\glssymbol{gated_recurrent_unit})。 % 413 mid 具有衰减\gls{learning_rate}以及\gls{momentum}的\,\glssymbol{SGD}\,是优化算法一个合理的选择 (流行的衰减方法有,衰减到固定最低\gls{learning_rate}的线性衰减、指数衰减,或每次发生验证错误停滞时将\gls{learning_rate}降低$2-10$倍,这些衰减方法在不同问题上好坏不一)。 另一个非常合理的选择是Adam算法。 \gls{batch_normalization}对优化性能有着显著的影响,特别是对\gls{convolutional_network}和具有~\gls{sigmoid}~非线性函数的网络而言。 虽然在最初的\gls{baseline}中忽略\gls{batch_normalization}是合理的,然而当优化似乎出现问题时,应该立刻使用\gls{batch_normalization}。 % 413 mid 除非\gls{training_set}包含数千万以及更多的样本,否则项目应该在一开始就包含一些温和的\gls{regularization}。 \gls{early_stopping}也被普遍采用。 \gls{dropout}~也是一个很容易实现,且兼容很多模型和训练算法的出色\gls{regularizer}。 \gls{batch_normalization}有时也能降低\gls{generalization_error},此时可以省略~\gls{dropout}~步骤,因为用于标准化变量的统计量估计本身就存在\gls{noise}。 %?? 还是有问题 % -- 413 -- end 如果我们的任务和另一个被广泛研究的任务相似,那么通过复制先前研究中已知性能良好的模型和算法,可能会得到很好的效果。 甚至可以从该任务中复制一个训练好的模型。 例如,通常会使用在ImageNet上训练好的\gls{convolutional_network}的特征来解决其他\gls{CV}任务\citep{girshickregion}。 % 414 head 一个常见问题是项目开始时是否使用\gls{unsupervised_learning},我们将在第三部分进一步探讨这个问题。 这个问题和特定领域有关。 在某些领域,比如\gls{NLP},能够大大受益于\gls{unsupervised_learning}技术,如学习\gls{unsupervised}\gls{word_embeddings}。 在其他领域,如\gls{CV},除非是在\gls{semi_supervised}的设定下(\gls{labeled}样本数量很少)\citep{Kingma-et-al-NIPS2014,Rasmus-et-al-arxiv2015},目前\gls{unsupervised_learning}并没有带来益处。 如果应用所在环境中,\gls{unsupervised_learning}被认为是很重要的,那么将其包含在第一个\gls{end_to_end}\gls{baseline}中。 否则,只有在解决\gls{unsupervised}问题时,才会第一次尝试时使用\gls{unsupervised_learning}。 在发现初始\gls{baseline}\gls{overfitting}的时候,我们可以尝试加入\gls{unsupervised_learning}。 % 414 mid \section{决定是否收集更多数据} \label{sec:determining_whether_to_gather_more_data} 在建立第一个\gls{end_to_end}系统后,就可以度量算法性能并决定如何改进算法。 许多\gls{ML}新手都忍不住尝试很多不同的算法来进行改进。 然而,收集更多的数据往往比改进学习算法要有用得多。 % 414 mid 怎样判断是否要收集更多的数据? 首先,确定\gls{training_set}上的性能是否可接受。 如果模型在\gls{training_set}上的性能就很差,学习算法都不能在\gls{training_set}上学习出良好的模型,那么就没必要收集更多的数据。 反之,可以尝试增加更多的网络层或每层增加更多的\gls{hidden_unit},以增加模型的规模。 此外,也可以尝试调整\gls{learning_rate}等\gls{hyperparameter}的措施来改进学习算法。 如果更大的模型和仔细调试的优化算法效果不佳,那么问题可能源自训练数据的\emph{质量}。 数据可能含太多\gls{noise},或是可能不包含预测输出所需的正确输入。 这意味着我们需要重新开始,收集更干净的数据或是收集特征更丰富的数据集。 % -- 414 end 如果\gls{training_set}上的性能是可接受的,那么我们开始度量\gls{test_set}上的性能。 如果\gls{test_set}上的性能也是可以接受的,那么就顺利完成了。 如果\gls{test_set}上的性能比\gls{training_set}的要差得多,那么收集更多的数据是最有效的解决方案之一。 这时主要的考虑是收集更多数据的代价和可行性,其他方法降低\gls{test_error}的代价和可行性,和增加数据数量能否显著提升\gls{test_set}性能。 在拥有百万甚至上亿用户的大型网络公司,收集大型数据集是可行的,并且这样做的成本可能比其他方法要少很多,所以答案几乎总是收集更多的训练数据。 例如,收集大型\gls{labeled}数据集是解决\gls{object_recognition}问题的主要因素之一。 在其他情况下,如医疗应用,收集更多的数据可能代价很高或者不可行。 一个可以替代的简单方法是降低模型大小或是改进\gls{regularization}(调整\gls{hyperparameter},如\gls{weight_decay}系数,或是加入\gls{regularization}策略,如\,\gls{dropout})。 如果调整\gls{regularization}\gls{hyperparameter}后,\gls{training_set}性能和\gls{test_set}性能之间的差距还是不可接受,那么收集更多的数据是可取的。 % 415 mid 在决定是否收集更多的数据时,也需要确定收集多少数据。 如\figref{fig:chap5_training_size_grows}所示,绘制曲线显示\gls{training_set}规模和\gls{generalization_error}之间的关系是很有帮助的。 根据走势延伸曲线,可以预测还需要多少训练数据来达到一定的性能。 通常,加入总数目一小部分的样本不会对\gls{generalization_error}产生显著的影响。 因此,建议在对数尺度上考虑\gls{training_set}的大小,例如在后续的实验中倍增样本数目。 % 415 mid 如果收集更多的数据是不可行的,那么改进\gls{generalization_error}的唯一方法是改进学习算法本身。 这属于研究领域,并非对应用实践者的建议。 \section{选择\glsentrytext{hyperparameter}} \label{sec:selecting_hyperparameters} 大部分\gls{DL}算法都有许多\gls{hyperparameter}来控制不同方面的算法表现。 有些\gls{hyperparameter}会影响算法运行的时间和存储成本。 有些\gls{hyperparameter}会影响学习到的模型质量,以及在新输入上推断正确结果的能力。 % -- 415 -end 有两种选择\gls{hyperparameter}的基本方法:手动选择和自动选择。 手动选择\gls{hyperparameter}需要了解\gls{hyperparameter}做了些什么,以及\gls{ML}模型如何才能取得良好的\gls{generalization}。 自动选择\gls{hyperparameter}算法大大减少了解这些想法的需要,但它们往往需要更高的计算成本。 % 416 head \subsection{手动调整\glsentrytext{hyperparameter}} \label{sec:manual_hyperparameter_tuning} 手动设置\gls{hyperparameter},我们必须了解\gls{hyperparameter}、\gls{training_error}、\gls{generalization_error}和计算资源(内存和运行时间)之间的关系。 这需要切实了解一个学习算法有效\gls{capacity}的基础概念,如\chapref{chap:machine_learning_basics}所描述的。 % 416 mid 手动搜索\gls{hyperparameter}的目标通常是最小化受限于运行时间和内存预算的\gls{generalization_error}。 我们不去探讨如何确定各种\gls{hyperparameter}对运行时间和内存的影响,因为这高度依赖于平台。 手动搜索\gls{hyperparameter}的主要目标是调整模型的有效\gls{capacity}以匹配任务的复杂性。 有效\gls{capacity}受限于三个因素:模型的表示\gls{capacity}、学习算法成功最小化训练模型\gls{cost_function}的能力以及\gls{cost_function}和训练过程\gls{regularize}模型的程度。 具有更多网络层,每层有更多\gls{hidden_unit}的模型具有较高的表示能力——能够表示更复杂的函数。 然而,如果训练算法不能找到某个合适的函数来最小化训练\gls{cost},或是\gls{regularization}项(如\gls{weight_decay})排除了这些合适的函数,那么即使模型的表达能力较高,也不能学习出合适的函数。%?? 还是太乱 % 416 mid 当\gls{generalization_error}以某个\gls{hyperparameter}为变量,作为函数绘制出来时,通常会表现为U形曲线,如\figref{fig:chap5_generalization_vs_capacity}所示。 在某个极端情况下,\gls{hyperparameter}对应着低\gls{capacity},并且\gls{generalization_error}由于\gls{training_error}较大而很高。 这便是\gls{underfitting}的情况。 另一种极端情况,\gls{hyperparameter}对应着高\gls{capacity},并且\gls{generalization_error}由于\gls{training_error}和\gls{test_error}之间的差距较大而很高。 最优的模型\gls{capacity}位于曲线中间的某个位置,能够达到最低可能的\gls{generalization_error},由某个中等的泛化差距(generalization gap)和某个中等的\gls{training_error}相加构成。 % -- 416 end 对于某些\gls{hyperparameter},当\gls{hyperparameter}数值太大时,会发生\gls{overfitting}。 例如中间层\gls{hidden_unit}的数量,增加数量能提高模型的\gls{capacity},容易发生\gls{overfitting}。%?? 原文不符 对于某些\gls{hyperparameter},当\gls{hyperparameter}数值太小时,也会发生\gls{overfitting}。 例如,最小的\gls{weight_decay}系数允许为零,此时学习算法具有最大的有效\gls{capacity},反而容易\gls{overfitting}。%?? 原文不符 这一段好像偏差较大 % 417 head 并非每个\gls{hyperparameter}都能对应着完整的U形曲线。 很多\gls{hyperparameter}是离散的,如中间层单元数目或是~\gls{maxout_unit}中线性元件的数目,这种情况只能沿曲线探索一些点。 有些\gls{hyperparameter}是二值的。 通常这些\gls{hyperparameter}用来指定是否使用学习算法中的一些可选部分,如预处理步骤减去均值并除以标准差来标准化输入特征。 这些\gls{hyperparameter}只能探索曲线上的两点。 其他一些\gls{hyperparameter}可能会有最小值或最大值,限制其探索曲线的某些部分。%?? 例如,\gls{weight_decay}系数最小是零。 这意味着,如果\gls{weight_decay}系数为零时模型\gls{underfitting},那么我们将无法通过修改\gls{weight_decay}系数探索\gls{overfitting}区域。 换言之,有些\gls{hyperparameter}只能减少模型\gls{capacity}。 % 417 mid \gls{learning_rate}可能是最重要的\gls{hyperparameter}。 如果你只有时间调整一个\gls{hyperparameter},那就调整\gls{learning_rate}。 相比其他\gls{hyperparameter},它以一种更复杂的方式控制模型的有效\gls{capacity}——当\gls{learning_rate}适合优化问题时,模型的有效\gls{capacity}最高,此时\gls{learning_rate}是\emph{正确}的,既不是特别大也不是特别小。 \gls{learning_rate}关于\emph{\gls{training_error}}具有U形曲线,如\figref{fig:chap11_lr}所示。 当\gls{learning_rate}过大时,\gls{GD}可能会不经意地增加而非减少\gls{training_error}。 在理想化的二次情况下,如果\gls{learning_rate}是最佳值的两倍大时,会发生这种情况\citep{LeCun+98backprop-small}。 当\gls{learning_rate}太小,训练不仅慢,还有可能永久停留在一个很高的\gls{training_error}。 关于这种效应,我们知之甚少(不会发生于一个凸\gls{loss_function}中)。 % 417 end \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter11/figures/lr_color}} \fi \caption{\gls{training_error}和\gls{learning_rate}之间的典型关系。 注意当\gls{learning_rate}大于最优值时误差会有显著的提升。 此图针对固定的训练时间,越小的\gls{learning_rate}有时候可以以一个正比于\gls{learning_rate}减小量的因素来减慢训练过程。 \gls{generalization_error}也会得到类似的曲线,或者由于\gls{learning_rate}过大或过小引起的正则化作用而变得复杂化。 由于一个糟糕的优化从某种程度上说可以避免\gls{overfitting},即使是\gls{training_error}相同的点也会拥有完全不同的\gls{generalization_error}。} \label{fig:chap11_lr} \end{figure} % 417 end 调整\gls{learning_rate}外的其他参数时,需要同时监测\gls{training_error}和\gls{test_error},以判断模型是否\gls{overfitting}或\gls{underfitting},然后适当调整其\gls{capacity}。 如果\gls{training_set}错误率大于目标\gls{error_rate},那么只能增加模型\gls{capacity}以改进模型。 如果没有使用\gls{regularization},并且确信优化算法正确运行,那么有必要添加更多的网络层或\gls{hidden_unit}。 然而,令人遗憾的是,这增加了模型的计算代价。 % 418 head 如果\gls{test_set}错误率大于目标\gls{error_rate},那么可以采取两个方法。 \gls{test_error}是\gls{training_error}和\gls{test_error}之间差距与\gls{training_error}的总和。 寻找最佳的\gls{test_error}需要权衡这些数值。 当\gls{training_error}较小(因此\gls{capacity}较大),\gls{test_error}主要取决于\gls{training_error}和\gls{test_error}之间的差距时,通常神经网络效果最好。 此时目标是缩小这一差距,使\gls{training_error}的增长速率不快于差距减小的速率。 要减少这个差距,我们可以改变\gls{regularization}\gls{hyperparameter},以减少有效的模型\gls{capacity},如添加~\gls{dropout}~或\gls{weight_decay}策略。 通常,最佳性能来自\gls{regularization}得很好的大规模模型,比如使用~\gls{dropout}~的神经网络。 % 418 mid 大部分\gls{hyperparameter}可以通过推理其是否增加或减少模型\gls{capacity}来设置。 部分示例如表\ref{tab:hyperparameter_effect}所示。 % 418 end 手动调整\gls{hyperparameter}时,不要忘记最终目标:提升\gls{test_set}性能。 加入\gls{regularization}只是实现这个目标的一种方法。 只要\gls{training_error}低,随时都可以通过收集更多的训练数据来减少\gls{generalization_error}。 实践中能够确保学习有效的暴力方法就是不断提高模型\gls{capacity}和\gls{training_set}的大小,直到解决问题。 这种做法增加了训练和推断的计算代价,所以只有在拥有足够资源时才是可行的。 原则上,这种做法可能会因为优化难度提高而失败,但对于许多问题而言,优化似乎并没有成为一个显著的障碍,当然,前提是选择了合适的模型。 % 419 end % -- 419 \begin{table} \centering \small \begin{tabular}{p{2.5cm}|p{1.5cm}|p{4.0cm}|p{4.0cm}} \gls{hyperparameter} & \gls{capacity}何时增加 & 原因 & 注意事项 \\ \hline \gls{hidden_unit}数量 & 增加 & 增加\gls{hidden_unit}数量会增加模型的\gls{representation}能力。 & 几乎模型每个操作所需的时间和内存代价都会随\gls{hidden_unit}数量的增加而增加。\\ \hline \gls{learning_rate} & 调至最优 & 不正确的学习速率,不管是太高还是太低都会由于优化失败而导致低有效\gls{capacity}的模型。 & \\ \hline 卷积核宽度 & 增加 & 增加卷积核宽度会增加模型的参数数量。& 较宽的卷积核导致较窄的输出尺寸,除非使用隐式零填充减少此影响,否则会降低模型\gls{capacity}。 较宽的卷积核需要更多的内存存储参数,并会增加运行时间,但较窄的输出会降低内存代价。 \\ \hline 隐式零填充 & 增加 & 在卷积之前隐式添加零能保持较大尺寸的\gls{representation}。& 大多数操作的时间和内存代价会增加。\\ \hline \gls{weight_decay}系数 & 降低 & 降低\gls{weight_decay}系数使得模型参数可以自由地变大。 & \\ \hline \gls{dropout}\,比率 & 降低 & 较少地丢弃单元可以更多地让单元彼此``协力''来适应\gls{training_set}。 & \\ \end{tabular} \caption{各种\gls{hyperparameter}对模型\gls{capacity}的影响。} \label{tab:hyperparameter_effect} \index{Dropout} \index{Weight decay} \end{table} % -- 419 \subsection{自动\glsentrytext{hyperparameter}优化算法} \label{sec:automatic_hyperparameter_optimization_algorithms} 理想的学习算法应该是只需要输入一个数据集,就可以输出学习的函数,而不需要手动调整\gls{hyperparameter}。 一些流行的学习算法,如\gls{logistic_regression}和\gls{SVM},流行的部分原因是这类算法只有一到两个\gls{hyperparameter}需要调整,它们也能表现出不错的性能。 有些情况下,所需调整的\gls{hyperparameter}数量较少时,神经网络可以表现出不错的性能;但\gls{hyperparameter}数量有几十甚至更多时,效果会提升得更加明显。 当使用者有一个很好的初始值,例如由在相同类型的应用和架构上具有经验的人确定初始值,或者使用者在相似问题上具有几个月甚至几年的神经网络\gls{hyperparameter}调整经验,那么手动调整\gls{hyperparameter}能有很好的效果。%?? 由在相同类型的应用和架构上具有经验的人确定初始 这句话好像不对吧? --没觉得有问题,你觉得是什么了 然而,对于很多应用而言,这些起点都不可用。 在这些情况下,自动算法可以找到合适的\gls{hyperparameter}。 % 420 head 如果我们仔细想想使用者搜索学习算法合适\gls{hyperparameter}的方式,我们会意识到这其实是一种优化: 我们在试图寻找\gls{hyperparameter}来优化\gls{objective_function},例如验证误差,有时还会有一些约束(如训练时间,内存或识别时间的预算)。 因此,原则上有可能开发出封装学习算法的\firstgls{hyperparameter_optimization}算法,并选择其\gls{hyperparameter},从而使用者不需要指定学习算法的\gls{hyperparameter}。 令人遗憾的是,\gls{hyperparameter}优化算法往往有自己的\gls{hyperparameter},如学习算法的每个\gls{hyperparameter}应该被探索的值的范围。 然而,这些次级\gls{hyperparameter}通常很容易选择,这是说,相同的次级\gls{hyperparameter}能够很多不同的问题上具有良好的性能。 % 420 mid \subsection{\glsentrytext{grid_search}} \label{sec:grid_search} 当有三个或更少的\gls{hyperparameter}时,常见的\gls{hyperparameter}搜索方法是\firstgls{grid_search}。 对于每个\gls{hyperparameter},使用者选择一个较小的有限值集去探索。 然后,这些\gls{hyperparameter}笛卡尔乘积得到一组组\gls{hyperparameter},\gls{grid_search}使用每组\gls{hyperparameter}训练模型。 挑选\gls{validation_set}误差最小的\gls{hyperparameter}作为最好的\gls{hyperparameter}。 如\figref{fig:chap11_grid_vs_random}所示\gls{hyperparameter}值的网格。 % -- 420 end \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \begin{tabular}{cc} \includegraphics[width=0.35\textwidth]{Chapter11/figures/grid} & \includegraphics[width=0.35\textwidth]{Chapter11/figures/random} \end{tabular} \fi \caption{\gls{grid_search}和\gls{random_search}的比较。 为了方便地说明,我们只展示两个\gls{hyperparameter}的例子,但是我们关注的问题中\gls{hyperparameter}个数通常会更多。 \emph{(左)}为了实现\gls{grid_search},我们为每个\gls{hyperparameter}提供了一个值的集合。 搜索算法对每一种在这些集合的交叉积中的\gls{hyperparameter}组合进行训练。 \emph{(右)}为了实现\gls{random_search},我们给联合\gls{hyperparameter}赋予了一个概率分布。 通常\gls{hyperparameter}之间是相互独立的。 常见的这种分布的选择是均匀分布或者是对数均匀(从对数均匀分布中抽样,就是对从均匀分布中抽取的样本进行指数运算)的。 然后这些搜索算法从联合的\gls{hyperparameter}空间中采样,然后运行每一个样本。 \gls{grid_search}和\gls{random_search}都运行了\gls{validation_set}上的误差并返回了最优的解。 这个图说明了通常只有一个\gls{hyperparameter}对结果有着重要的影响。 在这个例子中,只有水平轴上的\gls{hyperparameter}对结果有重要的作用。 \gls{grid_search}将大量的计算浪费在了指数量级的对结果无影响的\gls{hyperparameter}中,相比之下\gls{random_search}几乎每次测试都测试了对结果有影响的每个\gls{hyperparameter}的独一无二的值。 此图经~\citet{Bergstra+Bengio-LW2011}允许转载。} \label{fig:chap11_grid_vs_random} \end{figure} 应该如何选择搜索集合的范围呢? 在\gls{hyperparameter}是数值(有序)的情况下,每个列表的最小和最大的元素可以基于先前相似实验的经验保守地挑选出来,以确保最优解非常可能在所选范围内。 通常,\gls{grid_search}大约会在\firstgls{logarithmic_scale}下挑选合适的值,例如,一个\gls{learning_rate}的取值集合是$\{0.1,0.01,10^{-3},10^{-4},10^{-5}\}$,或者\gls{hidden_unit}数目的取值集合$\{50,100,200,500,1000,2000\}$。 % 421 head 通常重复进行\gls{grid_search}时,效果会最好。 例如,假设我们在集合$\{-1,0,1\}$上\gls{grid_search}\gls{hyperparameter} $\alpha$。 如果找到的最佳值是$1$,那么说明我们低估了最优值$\alpha$所在的范围,应该改变搜索格点,例如在集合$\{1,2,3\}$中搜索。 如果最佳值是$0$,那么我们不妨通过细化搜索范围以改进估计,在集合$\{-0.1,0,0.1\}$上进行\gls{grid_search}。 % -- 422 head \gls{grid_search}带来的一个明显问题是,计算代价会随着\gls{hyperparameter}数量呈指数级增长。 如果有$m$个\gls{hyperparameter},每个最多取$n$个值,那么训练和估计所需的试验数将是$O(n^m)$。 我们可以并行地进行实验,并且并行要求十分宽松(进行不同搜索的机器之间几乎没有必要进行通信)。 令人遗憾的是,由于\gls{grid_search}指数级增长的计算代价,即使是并行,我们也无法提供令人满意的搜索规模。 \subsection{\glsentrytext{random_search}} \label{sec:random_search} 幸运的是,有一个替代\gls{grid_search}的方法,并且编程简单,使用更方便,能更快地收敛到\gls{hyperparameter}的良好取值:\gls{random_search}~\citep{Bergstra+Bengio-2012-small}。 % 422 \gls{random_search}过程如下。 首先,我们为每个\gls{hyperparameter}定义一个边缘分布,例如,\gls{bernoulli_distribution}或\gls{categorical_distribution}(分别对应着二元\gls{hyperparameter}或离散\gls{hyperparameter}),或者\gls{logarithmic_scale}上的均匀分布(对应着正实值\gls{hyperparameter})。 例如, \begin{align} \texttt{log\_learning\_rate} &\sim u(-1, -5), \\ \texttt{learning\_rate} &= 10^{\texttt{log\_learning\_rate}}, \end{align} 其中,$u(a,b)$表示区间$(a,b)$上均匀采样的样本。 类似地,$\texttt{log\_number\_of\_hidden\_units}$可以从$u(\log(50), \log(2000))$上采样。 % 422 mid 与\gls{grid_search}不同,我们\emph{不需要离散化}\gls{hyperparameter}的值。这允许我们在一个更大的集合上进行搜索,而不产生额外的计算代价。%?? bin 不知道如何翻译bin,你有什么好的翻译没 实际上,如\figref{fig:chap11_grid_vs_random}所示,当有几个\gls{hyperparameter}对\gls{performance_metrics}没有显著影响时,\gls{random_search}相比于\gls{grid_search}指数级地高效。 \cite{Bergstra+Bengio-2012-small}进行了详细的研究并发现相比于\gls{grid_search}, \gls{random_search}能够更快地减小\gls{validation_set}误差(就每个模型运行的试验数而言)。 % 422 end 与\gls{grid_search}一样,我们通常会重复运行不同版本的\gls{random_search},以基于前一次运行的结果改进下一次搜索。 % 422 end \gls{random_search}能比\gls{grid_search}更快地找到良好\gls{hyperparameter}的原因是,没有浪费的实验,不像\gls{grid_search}有时会对一个\gls{hyperparameter}的两个不同值(给定其他\gls{hyperparameter}值不变)给出相同结果。 在\gls{grid_search}中,其他\gls{hyperparameter}将在这两次实验中拥有相同的值,而在\gls{random_search}中,它们通常会具有不同的值。 因此,如果这两个值的变化所对应的\gls{validation_set}误差没有明显区别的话,\gls{grid_search}会没有必要地重复两个等价的实验,而\gls{random_search}仍然会对其他\gls{hyperparameter}进行两次独立地探索。 % 423 head \subsection{基于模型的\glsentrytext{hyperparameter}优化} \label{sec:model_based_hyperparameter_optimization} \gls{hyperparameter}搜索问题可以转化为一个优化问题。 决策变量是\gls{hyperparameter}。 优化的\gls{cost}是\gls{hyperparameter}训练出来的模型在\gls{validation_set}上的误差。 在简化的设定下,可以计算\gls{validation_set}上可导误差函数关于\gls{hyperparameter}的梯度,然后我们遵循这个梯度更新\citep{bengio:1999:snowbird,bengio-hyper-NC00,maclaurin2015gradient}。 令人遗憾的是,在大多数实际设定中,这个梯度是不可用的。 这可能是因为其高额的计算代价和存储成本,也可能是因为\gls{validation_set}误差在\gls{hyperparameter}上本质上不可导,例如\gls{hyperparameter}是离散值的情况。 % 423 mid 为了弥补梯度的缺失,我们可以对\gls{validation_set}误差建模,然后通过优化该模型来提出新的\gls{hyperparameter}猜想。 大部分基于模型的\gls{hyperparameter}搜索算法,都是使用贝叶斯回归模型来估计每个\gls{hyperparameter}的\gls{validation_set}误差期望和该期望的不确定性。 因此,优化涉及到探索(探索高度不确定的\gls{hyperparameter},可能带来显著的效果提升,也可能效果很差)和使用(使用已经确信效果不错的\gls{hyperparameter}——通常是先前见过的非常熟悉的\gls{hyperparameter})之间的权衡。 关于\gls{hyperparameter}优化的最前沿方法还包括Spearmint~\citep{Snoek+al-NIPS2012-small},TPE~\citep{Bergstra+al-NIPS2011}和SMAC~\citep{hutter+hoos+leyton+brown:2011}。 % 423 end 目前,我们无法明确确定,贝叶斯\gls{hyperparameter}优化是否是一个能够实现更好\gls{DL}结果或是能够事半功倍的成熟工具。 贝叶斯\gls{hyperparameter}优化有时表现得像人类专家,能够在有些问题上取得很好的效果,但有时又会在某些问题上发生灾难性的失误。 看看它是否适用于一个特定的问题是值得尝试的,但目前该方法还不够成熟或可靠。 就像所说的那样,\gls{hyperparameter}优化是一个重要的研究领域,通常主要受\gls{DL}所需驱动,但是它不仅能贡献于整个\gls{ML}领域,还能贡献于一般的工程学。 % 424 head 大部分\gls{hyperparameter}优化算法比\gls{random_search}更复杂,并且具有一个共同的缺点,在它们能够从实验中提取任何信息之前,它们需要运行完整的训练实验。 相比于人类实践者手动搜索,考虑实验早期可以收集的信息量,这种方法是相当低效的,因为手动搜索通常可以很早判断出某组\gls{hyperparameter}是否是完全病态的。 \cite{swersky2014freeze}提出了一个可以维护多个实验的早期版本算法。 在不同的时间点,\gls{hyperparameter}优化算法可以选择开启一个新实验,``冻结''正在运行但希望不大的实验,或是``解冻''并恢复早期被冻结的,但现在根据更多信息后又有希望的实验。 % 424 \section{调试策略} \label{sec:debugging_strategies} 当一个\gls{ML}系统效果不好时,通常很难判断效果不好的原因是算法本身,还是算法实现错误。 由于各种原因,\gls{ML}系统很难调试。 % 424 在大多数情况下,我们不能提前知道算法的行为。 事实上,使用\gls{ML}的整个出发点是,它会发现一些我们自己无法发现的有用行为。 如果我们在一个\emph{新}的分类任务上训练一个神经网络,它达到$5\%$的\gls{test_error},我们没法直接知道这是期望的结果,还是次优的结果。 另一个难点是,大部分\gls{ML}模型有多个自适应的部分。 如果一个部分失效了,其他部分仍然可以自适应,并获得大致可接受的性能。 例如,假设我们正在训练多层神经网络,其中参数为权重$\MW$和\gls{bias_aff} $\Vb$。 进一步假设,我们单独手动实现了每个参数的\gls{GD}规则。 而我们在偏置更新时犯了一个错误: \begin{equation} \Vb \leftarrow \Vb - \alpha, \end{equation} 其中$\alpha$是\gls{learning_rate}。 这个错误更新没有使用梯度。 它会导致偏置在整个学习中不断变为负值,对于一个学习算法来说这显然是错误的。 然而只是检查模型输出的话,该错误可能并不是显而易见的。 根据输入的分布,权重可能可以自适应地补偿负的偏置。 % -- 425 head 大部分神经网络的调试策略都是解决这两个难题的一个或两个。 我们可以设计一种足够简单的情况,能够提前得到正确结果,判断模型预测是否与之相符;我们也可以设计一个测试,独立检查神经网络实现的各个部分。 一些重要的调试检测如下所列。 \emph{可视化计算中模型的行为}:%?? in action 当训练模型检测图像中的对象时,查看一些模型检测到部分重叠的图像。 在训练语音生成模型时,试听一些生成的语音样本。 这似乎是显而易见的,但在实际中很容易只注意量化\gls{performance_metrics},如\gls{accuracy}或对数似然。 直接观察\gls{ML}模型运行其任务,有助于确定其达到的量化性能数据是否看上去合理。 错误评估模型性能可能是最具破坏性的错误之一,因为它们会使你在系统出问题时误以为系统运行良好。 % 425 mid \emph{可视化最严重的错误}: 大多数模型能够输出运行任务时的某种置信度量。 例如,基于\,\gls{softmax}\,输出层的分类器给每个类分配一个概率。 因此,分配给最有可能的类的概率给出了模型在其分类决定上的置信估计值。 通常,相比于正确预测的概率最大似然训练会略有高估。 但是由于实际上模型的较小概率指示结果对应着正确的标签的可能也较小,因此它们在一定意义上还是有些用的。 通过查看\gls{training_set}中很难正确建模的样本,通常可以发现该数据预处理或者标记方式的问题。 例如,街景\gls{transcription_system}原本有个问题是,地址号码检测系统会将图像裁剪得过于紧密,而省略掉了一些数字。 然后转录网络会给这些图像的正确答案分配非常低的概率。 将图像排序,确定置信度最高的错误,显示系统的裁剪有问题。 修改检测系统裁剪更宽的图像,使整个系统获得了更好的性能,即便转录网络需要能够处理地址号码中位置和范围更大变化的情况。 % 425 end \emph{根据训练和\gls{test_error}检测软件}: 我们往往很难确定底层软件是否是正确实现。 训练和\gls{test_error}能够提供一些线索。 如果\gls{training_error}较低,但是\gls{test_error}较高,那么很有可能训练过程是在正常运行,但模型由于算法原因\gls{overfitting}了。 另一种可能是,\gls{test_error}没有被正确地度量,可能是由于训练后保存模型再重载去度量\gls{test_set}时出现问题,或者是因为测试数据和训练数据预处理的方式不同。 如果训练和\gls{test_error}都很高,那么很难确定是软件错误,还是由于算法原因模型\gls{underfitting}。 这种情况需要进一步的测试,如下面所述。 % -- 426 head \emph{拟合极小的数据集}: 当\gls{training_set}上有很大的误差时,我们需要确定问题是真正的\gls{underfitting},还是软件错误。 通常,即使是小模型也可以保证很好地拟合一个足够小的数据集。 例如,只有一个样本的分类数据可以通过正确设置输出层的偏置来拟合。 通常,如果不能训练一个分类器来正确标注一个单独的样本,或不能训练一个\gls{AE}来成功地精准再现一个单独的样本,或不能训练一个生成模型来一致地生成一个单独的样本,那么很有可能是由于软件错误阻止\gls{training_set}上的成功优化。 此测试可以扩展到只有少量样本的小数据集上。 % 426 mid \emph{比较反向传播导数和数值导数}: 如果读者正在使用一个需要实现梯度计算的软件框架,或者在添加一个新操作到求导库中,必须定义它的\texttt{bprop}方法,那么常见的错误原因是没能正确地实现梯度表达。 验证这些求导正确性的一种方法是比较实现的自动求导和通过\firstgls{finite_difference}计算的导数。 因为 \begin{equation} f'(x) = \lim_{\epsilon \to 0} \frac{f(x+\epsilon) - f(x)}{\epsilon}, \end{equation} 我们可以使用小的、有限的$\epsilon$近似导数: \begin{equation} f'(x) \approx \frac{f(x+\epsilon) - f(x)}{\epsilon}. \end{equation} 我们可以使用\firstgls{centered_difference}提高近似的\gls{accuracy}: \begin{equation} f'(x) \approx \frac{ f(x+\frac{1}{2}\epsilon) - f(x-\frac{1}{2}\epsilon) }{\epsilon}. \end{equation} 扰动大小$\epsilon$必须足够大,以确保该扰动不会由于数值计算的有限\gls{precision}问题产生舍入误差。 % 426 end 通常,我们会测试向量值函数$g:\SetR^m \to \SetR^n$的梯度或\,\gls{jacobian}\,矩阵。 令人遗憾的是,\gls{finite_difference}只允许我们每次计算一个导数。 我们可以使用\gls{finite_difference} $mn$次评估$g$的所有偏导数,也可以将该测试应用于一个新函数(在函数$g$的输入输出都加上随机投影)。%?? 后面这句好像不对? g的输入输出都使用随机投影的 例如,我们可以将导数实现的测试用于函数$f(x) = \Vu^T g(\Vv x)$,其中$\Vu$和$\Vv$是随机向量。%?? 这句也不对 正确计算$f'(x)$要求能够正确地通过$g$反向传播,但是使用\gls{finite_difference}能够高效地计算,因为$f$只有一个输入和一个输出。 通常,一个好的方法是在多个$\Vu$值和$\Vv$值上重复这个测试,可以减少测试忽略了垂直于随机投影的错误的几率。%?? 很难 % 427 head 如果我们可以在复数上进行数值计算,那么使用复数作为函数的输入会有非常高效的数值方法估算梯度\citep{Squire+Trapp-1998}。 该方法基于如下观察 \begin{align} f(x + i\epsilon) &= f(x) + i\epsilon f'(x) + O(\epsilon^2) ,\\ \text{real}( f(x+i\epsilon) ) &= f(x) + O(\epsilon^2), \quad \text{image}( \frac{f(x+i\epsilon)}{ \epsilon } ) = f'(x) + O(\epsilon^2), \end{align} 其中$i=\sqrt{-1}$。 和上面的实值情况不同,这里不存在消除影响,因为我们对$f$在不同点上计算差分。 因此我们可以使用很小的$\epsilon$,比如$\epsilon = 10^{-150}$,其中误差$O(\epsilon^2)$对所有实用目标都是微不足道的。 % 427 mid \emph{监控激活函数值和梯度的直方图}: 可视化神经网络在大量训练迭代后(也许是一个\gls{epoch})收集到的激活函数值和梯度的统计量往往是有用的。 \gls{hidden_unit}的预激活值可以告诉我们该单元是否饱和,或者它们饱和的频率如何。 例如,对于整流器,它们多久关一次?是否有单元一直关闭? 对于双曲正切单元而言,预激活绝对值的平均值可以告诉我们该单元的饱和程度。 在深度网络中,传播梯度的快速增长或快速消失,可能会阻碍优化过程。 最后,比较参数梯度和参数的量级也是有帮助的。 正如\citep{Bottou-DLSS2015}所建议的,我们希望参数在一个\gls{minibatch}更新中变化的幅度是参数量值$1\%$这样的级别,而不是$50\%$或者$0.001\%$(这会导致参数移动得太慢)。 也有可能是某些参数以良好的步长移动,而另一些停滞。 如果数据是稀疏的(比如自然语言),有些参数可能很少更新,检测它们变化时应该记住这一点。 % 428 head 最后,许多\gls{DL}算法为每一步产生的结果提供了某种保证。 例如,在第三部分,我们将看到一些使用代数解决优化问题的近似推断算法。 通常,这些可以通过测试它们的每个保证来调试。 某些优化算法提供的保证包括,\gls{objective_function}值在算法的迭代步中不会增加,某些变量的导数在算法的每一步中都是零,所有变量的梯度在收敛时会变为零。 通常,由于舍入误差,这些条件不会在数字计算机上完全成立,因此调试测试应该包含一些容差参数。 % 428 mid \section{示例:多位数字识别} \label{sec:example_multi_digit_number_recognition} 为了\gls{end_to_end}说明如何在实践中应用我们的设计方法论,我们从设计\gls{DL}组件的视角出发,简单地介绍下街景\gls{transcription_system}。 显然,整个系统的许多其他组件,如街景车、数据库设施等等,也是极其重要的。 % 428 mid 从\gls{ML}任务的视角出发,首先这个过程要采集数据。 街景车收集原始数据,然后操作员手动提供标签。 转录任务开始前有大量的数据处理工作,包括在转录前使用其他\gls{ML}技术\emph{探测}房屋号码。 % 428 mid 转录项目开始于选择\gls{performance_metrics}和对这些度量的期望值。 一个重要的总原则是度量的选择要符合项目的业务目标。 因为地图只有是高\gls{accuracy}时才有用,所以为这个项目设置高\gls{accuracy}的要求非常重要。 具体地,目标是达到人类水平,$98\%$的\gls{accuracy}。 这种程度的\gls{accuracy}并不是总能达到。 为了达到这个级别的\gls{accuracy},街景\gls{transcription_system}牺牲了\gls{coverage}。 因此在保持\gls{accuracy} $98\%$的情况下,\gls{coverage}成了这个项目优化的主要\gls{performance_metrics}。 随着\gls{convolutional_network}的改进,我们能够降低网络拒绝转录输入的置信度阈值,最终超出了\gls{coverage} $95\%$的目标。 % -- 428 end 在选择量化目标后,我们推荐方法的下一步是要快速建立一个合理的\gls{baseline}系统。 对于视觉任务而言,\gls{baseline}系统是带有\gls{ReLU}的\gls{convolutional_network}。 转录项目开始于一个这样的模型。 当时,使用\gls{convolutional_network}输出预测序列并不常见。 开始时,我们使用一个尽可能简单的\gls{baseline}模型,该模型输出层的第一个实现包含$n$个不同的~\gls{softmax_unit}来预测$n$个字符的序列。 我们使用与训练分类任务相同的方式来训练这些~\gls{softmax_unit},独立地训练每个~\gls{softmax_unit}。 % 429 head 我们建议反复细化这些\gls{baseline},并测试每个变化是否都有改进。 街景\gls{transcription_system}的第一个变化受激励于\gls{coverage}指标的理论理解和数据结构。 具体地,当输出序列的概率低于某个值$t$即$p(\Vy\mid\Vx) < t$时,网络拒绝为输入$\Vx$分类。 最初,$p(\Vy\mid\Vx)$的定义是临时的,简单地将所有~\gls{softmax}输出乘在一起。 这促使我们发展能够真正计算出合理对数似然的特定输出层和\gls{cost_function}。%?? 后来是否该去掉? 这种方法使得样本拒绝机制更有效。 此时,\gls{coverage}仍低于$90\%$,但该方法没有明显的理论问题了。 因此,我们的方法论建议综合\gls{training_set}和\gls{test_set}性能,以确定问题是否是\gls{underfitting}或\gls{overfitting}。 在这种情况下,训练和\gls{test_set}误差几乎是一样的。 事实上,这个项目进行得如此顺利的主要原因是有数以千万计的\gls{labeled}样本数据集可用。 因为训练和\gls{test_set}的误差是如此相似,这表明要么是这个问题\gls{underfitting},要么是训练数据的问题。 我们推荐的调试策略之一是可视化模型最糟糕的错误。 在这种情况下,这意味着可视化 不正确而模型给了最高置信度的\gls{training_set}转录结果。 结果显示,主要是输入图像裁剪得太紧,有些和地址相关的数字被裁剪操作除去了。 例如,地址``1849''的图片可能裁切得太紧,只剩下``849''是可见的。 如果我们花费几周时间改进确定裁剪区域的地址号码检测系统的\gls{accuracy},或许也可以解决这个问题。%?? 与之不同,项目团队采取了更实际的办法,简单地系统性扩大裁剪区域的宽度,使其大于地址号码检测系统预测的区域宽度。%?? ’大于‘ 不对吧, 加个 使其 这种单一改变将\gls{transcription_system}的\gls{coverage}提高了$10$个百分点。 % -- 429 end 最后,性能提升的最后几个百分点来自调整\gls{hyperparameter}。 这主要包括在保持一些计算代价限制的同时加大模型的规模。 因为\gls{training_error}和\gls{test_error}保持几乎相等,所以明确表明性能不足是由\gls{underfitting}造成的,数据集本身也存在一些问题。 总体来说,转录项目是非常成功的,可以比人工速度更快、代价更低地转录数以亿计的地址。 我们希望本章中介绍的设计原则能带来其他更多类似的成功。 % -- 430 -- ================================================ FILE: Chapter12/README.md ================================================ #第十二章笔记 ================================================ FILE: Chapter12/annotations.txt ================================================ {'user': 'acct:corenel@hypothes.is', 'text': '在本章中', 'origin_text': ' !!!本章!!! ,我们将介绍如何使用深度学习解决计算机视觉、语音识别、自然语言处', 'time': '2017-01-19T11:11'} {'user': 'acct:corenel@hypothes.is', 'text': '来解决', 'origin_text': ' 本章,我们将介绍如何使用深度学习 !!!解决!!! 计算机视觉、语音识别、自然语言处理以及其他商业领域中的应用。首', 'time': '2017-01-19T11:11'} {'user': 'acct:corenel@hypothes.is', 'text': '首先,我们将讨论在许多重要的AI应用中所需的大规模神经网络的实现。', 'origin_text': '解决计算机视觉、语音识别、自然语言处理以及其他商业领域中的应用。 !!!首先我们讨论在许多最重要的AI应用中所需的大规模神经网络的实现。!!! 接着,我们回顾深度学习已经成功应用的几个特定领域。尽管深度学', 'time': '2017-01-19T11:14'} {'user': 'acct:corenel@hypothes.is', 'text': '其次,我们将回顾深度学习已经成功应用的几个特定领域。', 'origin_text': '先我们讨论在许多最重要的AI应用中所需的大规模神经网络的实现。 !!!接着,我们回顾深度学习已经成功应用的几个特定领域。!!! 尽管深度学习的一个目标是设计能够处理各种任务的算法,然而截止目', 'time': '2017-01-19T11:15'} {'user': 'acct:corenel@hypothes.is', 'text': '深度学习的应用', 'origin_text': '尽管深度学习的一个目标是设计能够处理各种任务的算法,然而截止目前 !!!应用深度学习!!! 仍然需要一定程度的特殊化。例如,计算机视觉中的任务对每一个样本', 'time': '2017-01-19T11:16'} {'user': 'acct:corenel@hypothes.is', 'text': '其中一个关键的因素就是网络规模的巨大提升', 'origin_text': '纪80年代,如今神经网络的精度以及处理任务的复杂度都有一定提升, !!!网络规模的巨大提升是一个关键的因素!!! 。正如我们在\\sec?中看到的一样,在过去的三四十年中,网络规', 'time': '2017-01-19T11:25'} {'user': 'acct:corenel@hypothes.is', 'text': '在过去的三十年内', 'origin_text': '的巨大提升是一个关键的因素。正如我们在\\sec?中看到的一样, !!!在过去的三四十年中!!! ,网络规模是以指数级的速度递增的,尽管如今的人工神经网络的规模也', 'time': '2017-01-19T11:29'} {'user': 'acct:corenel@hypothes.is', 'text': '。然而如今的人工神经网络的规模也仅仅和昆虫的神经系统差不多。', 'origin_text': '中看到的一样,在过去的三四十年中,网络规模是以指数级的速度递增的 !!!,尽管如今的人工神经网络的规模也仅仅和昆虫的神经系统差不多。!!! 大规模神经网络的必要性,所以深度学习需要高性能的硬件设施和软', 'time': '2017-01-19T11:30'} {'user': 'acct:corenel@hypothes.is', 'text': '由于规模的大小对于神经网络来说至关重要,因此深度学习需要高性能的硬件设施和软件实现。', 'origin_text': ',尽管如今的人工神经网络的规模也仅仅和昆虫的神经系统差不多。 !!!大规模神经网络的必要性,所以深度学习需要高性能的硬件设施和软件实现。!!! 快速的CPU实现传统的神经网络是用单台机器的CPU来训', 'time': '2017-01-19T11:34'} {'user': 'acct:corenel@hypothes.is', 'text': '得', 'origin_text': '11年,最好的CPU在训练神经网络时使用定点运算能够比浮点运算跑 !!!的!!! 更快。通过调整定点运算的实现方式,{Vanhoucke-et-', 'time': '2017-01-19T11:39'} {'user': 'acct:corenel@hypothes.is', 'text': '3倍于一个强浮点运算系统的速度', 'origin_text': '算的实现方式,{Vanhoucke-et-al-2011}获得了 !!!相对一个很强的浮点运算系统3倍的加速!!! 。因为各个新型CPU都有各自不同的特性,所以有时候采用浮点运算', 'time': '2017-01-19T13:16'} {'user': 'acct:corenel@hypothes.is', 'text': '一条重要的准则就是,通过特殊设计的数值运算,我们可以获得巨大的回报。', 'origin_text': '型CPU都有各自不同的特性,所以有时候采用浮点运算实现会更快。 !!!一条重要的准则就是通过特殊设计的数值运算可以获得巨大的回报。!!! 除了选择定点运算或者浮点运算以外,还包括其他的策略,如通过优化', 'time': '2017-01-19T11:50'} {'user': 'acct:corenel@hypothes.is', 'text': '其他的策略还包括了如', 'origin_text': '数值运算可以获得巨大的回报。除了选择定点运算或者浮点运算以外, !!!还包括其他的策略,如!!! 通过优化数据结构避免高速缓存缺失、使用向量指令等。如果模型规模', 'time': '2017-01-19T11:51'} {'user': 'acct:corenel@hypothes.is', 'text': '图形处理器(GPU)最初是为图形应用而开发的专用硬件组件。', 'origin_text': '。GPU 实现许多现代神经网络的实现基于图形处理器。 !!!GPU是一种特殊设计的硬件,设计的原始目的是为了处理图形应用!!! 。视频游戏系统的消费市场刺激了图形处理硬件的发展。它为视频游', 'time': '2017-01-19T12:04'} {'user': 'acct:corenel@hypothes.is', 'text': '视频游戏的渲染', 'origin_text': '展。它为视频游戏所设计的特性也可以使神经网络的计算受益。 !!!视频游戏!!! 要求许多操作能够快速并行地实现。环境和角色模型通过一系列顶点的', 'time': '2017-01-19T12:06'} {'user': 'acct:corenel@hypothes.is', 'text': '显卡必须并行地对许多顶点执行矩阵乘法与除法', 'origin_text': '的3D坐标确定。为了将大量的3D坐标转化为2D显示器上的坐标, !!!显卡必须快速实现矩阵乘法或者除法!!! 。之后,显卡必须并行地实现每个像素上的计算来确定每个像素点的颜', 'time': '2017-01-19T12:09'} {'user': 'acct:corenel@hypothes.is', 'text': '执行', 'origin_text': '以使神经网络的计算受益。视频游戏要求许多操作能够快速并行地 !!!实现!!! 。环境和角色模型通过一系列顶点的3D坐标确定。为了将大量的3', 'time': '2017-01-19T12:09'} {'user': 'acct:corenel@hypothes.is', 'text': '显卡必须并行地在每个像素上执行诸多计算,', 'origin_text': '为2D显示器上的坐标,显卡必须快速实现矩阵乘法或者除法。之后, !!!显卡必须并行地实现每个像素上的计算!!! 来确定每个像素点的颜色。在这两种情况下,计算都是非常简单的,并', 'time': '2017-01-19T12:10'} {'user': 'acct:corenel@hypothes.is', 'text': '不需要通过{\\tt if}语句来判断确定每个顶点需要乘哪个矩阵\n', 'origin_text': '算。例如,同一个刚体内的每个顶点都会乘上相同的矩阵;也就是说, !!!不需要通过{\\tt if}判断确定顶点需要乘哪个矩阵!!! 。计算过程也是完全相互独立的,因此也能够并行操作。计算过程还', 'time': '2017-01-19T12:12'} {'user': 'acct:corenel@hypothes.is', 'text': '各个计算过程之间', 'origin_text': '就是说,不需要通过{\\tt if}判断确定顶点需要乘哪个矩阵。 !!!计算过程!!! 也是完全相互独立的,因此也能够并行操作。计算过程还涉及处理大量', 'time': '2017-01-19T12:13'} {'user': 'acct:corenel@hypothes.is', 'text': '能够实现并行操作', 'origin_text': '}判断确定顶点需要乘哪个矩阵。计算过程也是完全相互独立的,因此 !!!也能够并行操作!!! 。计算过程还涉及处理大量内存缓冲以及描述每一个对象的纹理(颜色', 'time': '2017-01-19T12:14'} {'user': 'acct:corenel@hypothes.is', 'text': '描述每一个需要被渲染的对象的纹理(颜色模式)的位图信息', 'origin_text': '独立的,因此也能够并行操作。计算过程还涉及处理大量内存缓冲以及 !!!描述每一个对象的纹理(颜色模式)如何渲染的位图信息!!! 。总的来说,这使显卡设计为拥有高度并行特性以及很高的内存带宽,', 'time': '2017-01-19T12:15'} {'user': 'acct:corenel@hypothes.is', 'text': '神经网络算法所需要的性能特性是相同的', 'origin_text': '度以及更弱的处理分支运算的能力。与上述的实时图形算法相比, !!!神经网络算法需要的是相同的性能特性!!! 。神经网络算法通常涉及大量参数、激活值、梯度值的缓冲区,其中每', 'time': '2017-01-19T12:17'} {'user': 'acct:corenel@hypothes.is', 'text': 'GPU一个显著的优势是其极高的内存带宽', 'origin_text': '存(cache),所以内存带宽通常会成为主要瓶颈。相比CPU, !!!GPU极高的内存带宽成为了一个显著的优势!!! 。神经网络的训练算法通常并不涉及分支运算和复杂的控制指令,所以', 'time': '2017-01-19T12:28'} {'user': 'acct:corenel@hypothes.is', 'text': '通常并不涉及大量的分支运算与复杂的控制指令', 'origin_text': 'PU极高的内存带宽成为了一个显著的优势。神经网络的训练算法通常 !!!并不涉及分支运算和复杂的控制指令!!! ,所以更适合在GPU硬件上训练。由于神经网络能够被分为多个单独', 'time': '2017-01-19T12:31'} {'user': 'acct:corenel@hypothes.is', 'text': '只要将计算的输出值作为像素值写入缓冲区,GPU就可以用于科学计算', 'origin_text': '颜色的任务。原则上,GPU不要求这些像素值实际基于渲染任务。 !!!将计算的输出值作为像素值写入缓冲区,GPU可以用于科学计算!!! 。{Steinkrau2005}在GPU上实现了一个两层全连接', 'time': '2017-01-19T12:35'} {'user': 'acct:corenel@hypothes.is', 'text': '加速监督卷积网络的训练', 'origin_text': 'lla:inria-00112631}也论证了相同的技术可以用来 !!!加速训练监督卷积网络!!! 。使用显卡训练神经网络的热度在通用GPU发布以后开始爆炸性', 'time': '2017-01-19T12:37'} {'user': 'acct:corenel@hypothes.is', 'text': '在通用GPU发布以后,使用显卡训练神经网络的热度开始爆炸性地增长', 'origin_text': '2631}也论证了相同的技术可以用来加速训练监督卷积网络。 !!!使用显卡训练神经网络的热度在通用GPU发布以后开始爆炸性增长!!! 。这种通用GPU可以执行任意的代码,而并非仅仅渲染子程序。N', 'time': '2017-01-19T12:38'} {'user': 'acct:corenel@hypothes.is', 'text': '模型', 'origin_text': '得我们可以用一种像C一样的语言实现任意代码。由于相对简便的编程 !!!语言!!! ,强大的并行能力以及巨大的内存带宽,通用GPU为我们提供了训练神', 'time': '2017-01-19T12:39'} {'user': 'acct:corenel@hypothes.is', 'text': '所采用', 'origin_text': '理想平台。在它发布以后不久,这个平台就迅速被深度学习的研究者们 !!!接纳了!!! {cite?}。如何在通用GPU上写高效的代码依然是一个难题', 'time': '2017-01-19T12:40'} {'user': 'acct:corenel@hypothes.is', 'text': '良好', 'origin_text': '如何在通用GPU上写高效的代码依然是一个难题。在GPU上获得 !!!很好!!! 表现所需的技术与CPU上的技术非常不同。比如说,基于CPU的良', 'time': '2017-01-19T12:45'} {'user': 'acct:corenel@hypothes.is', 'text': '访问', 'origin_text': '联读/写数据的方式。通常来说,如果在nnn个线程中,线程iii !!!对应!!! 的是第i+ji+ji+j处的内存,其中jjj是222的某个幂的倍', 'time': '2017-01-19T13:20'} {'user': 'acct:corenel@hypothes.is', 'text': ',那么内存操作就易于级联。', 'origin_text': '是第i+ji+ji+j处的内存,其中jjj是222的某个幂的倍数 !!!。!!! 具体的设定在不同的GPU型号中有所区别。GPU另一个常见的设', 'time': '2017-01-19T13:21'} {'user': 'acct:corenel@hypothes.is', 'text': '难以执行分支操作', 'origin_text': '的设定是使一个组中的所有线程都同时执行同一指令。这意味着GPU !!!上的分支操作是很困难的!!! 。线程被分为一个个称作warp的小组。在一个warp中的每一', 'time': '2017-01-19T13:22'} {'user': 'acct:corenel@hypothes.is', 'text': '组织好', 'origin_text': '非并行的方式。由于实现高效GPU代码的困难性,研究人员应该 !!!构建!!! 他们的工作流程,避免对每一个新的模型或算法都编写新的GPU代码。', 'time': '2017-01-19T13:24'} {'user': 'acct:corenel@hypothes.is', 'text': '机器学习库Pylearn2 {cite?}将其所有的机器学习算法都通过调用Theano {cite?}和cuda-convnet {cite?}所提供的高性能操作来指定。', 'origin_text': '件库解决这个问题,然后再从库中调用所需要的操作确定模型。例如, !!!机器学习库Pylearn2 {cite?}通过调用Theano {cite?}和cuda-convnet {cite?}提供的高性能操作,囊括了许多机器学习算法!!! 。这种分解方法还可以简化对多种硬件的支持。例如,同一个The', 'time': '2017-01-19T13:29'} {'user': 'acct:corenel@hypothes.is', 'text': '因此,', 'origin_text': '规模的分布式实现在许多情况下,单个机器的计算资源是有限的。 !!!因此!!! 我们希望把训练或者推断的任务分摊到多个机器上进行。分布式的', 'time': '2017-01-20T03:06'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{数据并行}', 'origin_text': '现的,因为每一个输入的样本都可以在单独的机器上运行。这也被称为 !!!数据并行!!! 。同样的,模型并行也是可行的,其中多个机器共同运行一个数据点', 'time': '2017-01-20T03:09'} {'user': 'acct:corenel@hypothes.is', 'text': '同样地', 'origin_text': '个输入的样本都可以在单独的机器上运行。这也被称为数据并行。 !!!同样的!!! ,模型并行也是可行的,其中多个机器共同运行一个数据点,每一个机器', 'time': '2017-01-20T03:09'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{模型并行}', 'origin_text': '样本都可以在单独的机器上运行。这也被称为数据并行。同样的, !!!模型并行!!! 也是可行的,其中多个机器共同运行一个数据点,每一个机器负责模型的', 'time': '2017-01-20T03:10'} {'user': 'acct:corenel@hypothes.is', 'text': '训练', 'origin_text': '器共同运行一个数据点,每一个机器负责模型的一个部分。对于推断和 !!!学习!!! ,这都是可行的。训练中,数据并行在某种程度上说更难。对于', 'time': '2017-01-20T03:10'} {'user': 'acct:corenel@hypothes.is', 'text': '在训练过程中,数据并行某种程度上来说更加困难', 'origin_text': '个机器负责模型的一个部分。对于推断和学习,这都是可行的。 !!!训练中,数据并行在某种程度上说更难!!! 。对于随机梯度下降的单步来说,我们可以增加minibatch的', 'time': '2017-01-20T03:39'} {'user': 'acct:corenel@hypothes.is', 'text': '通常我们得到的回报并不会线性增长', 'origin_text': '我们可以增加minibatch的大小,但是从优化性能的角度来说, !!!通常我们得到反馈少于线性的反馈!!! 。使用多个机器并行地计算多个梯度下降步是一个更好的选择。不幸', 'time': '2017-01-20T03:42'} {'user': 'acct:corenel@hypothes.is', 'text': '步骤', 'origin_text': '我们得到反馈少于线性的反馈。使用多个机器并行地计算多个梯度下降 !!!步!!! 是一个更好的选择。不幸的是,梯度下降的标准定义完全是一个串行的', 'time': '2017-01-20T03:43'} {'user': 'acct:corenel@hypothes.is', 'text': '看', 'origin_text': '来说,我们可以增加minibatch的大小,但是从优化性能的角度 !!!来说!!! ,通常我们得到反馈少于线性的反馈。使用多个机器并行地计算多个梯', 'time': '2017-01-20T03:52'} {'user': 'acct:corenel@hypothes.is', 'text': '并', 'origin_text': '理器的核共用存有参数的内存。每一个核在无锁情况下读取了这些参数 !!!,然后!!! 计算对应的梯度,然后在无锁状态下更新了这些参数。这种方法减少了', 'time': '2017-01-20T03:54'} {'user': 'acct:corenel@hypothes.is', 'text': '删去 了', 'origin_text': '中,几个处理器的核共用存有参数的内存。每一个核在无锁情况下读取 !!!了!!! 这些参数,然后计算对应的梯度,然后在无锁状态下更新了这些参数。', 'time': '2017-01-20T03:54'} {'user': 'acct:corenel@hypothes.is', 'text': '删去 了', 'origin_text': '锁情况下读取了这些参数,然后计算对应的梯度,然后在无锁状态下更新 !!!了!!! 这些参数。这种方法减少了每一个梯度下降所获得的平均提升,因为一', 'time': '2017-01-20T03:54'} {'user': 'acct:corenel@hypothes.is', 'text': '由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步梯度下降所获得的平均提升。', 'origin_text': '这些参数,然后计算对应的梯度,然后在无锁状态下更新了这些参数。 !!!这种方法减少了每一个梯度下降所获得的平均提升,因为一些核把其他的核所更新的参数(写)覆盖了。!!! 但因为更新步数的速率增加,总体上还是加快了学习过程。{Dea', 'time': '2017-01-20T04:34'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{参数服务器}', 'origin_text': 'IPS2012}率先提出了多机器无锁的梯度下降方法,其中参数是由 !!!参数服务器!!! 管理而非存储在共用的内存中。分布式的异步梯度下降方法依然是训练', 'time': '2017-01-20T04:34'} {'user': 'acct:corenel@hypothes.is', 'text': '保留了', 'origin_text': '参数服务器管理而非存储在共用的内存中。分布式的异步梯度下降方法 !!!依然是!!! 训练深度神经网络的基本方法,被工业界很多机器学习组所使用{cit', 'time': '2017-01-20T04:35'} {'user': 'acct:corenel@hypothes.is', 'text': '基本策略', 'origin_text': '共用的内存中。分布式的异步梯度下降方法依然是训练深度神经网络的 !!!基本方法!!! ,被工业界很多机器学习组所使用{cite?}。学术界的深度学习', 'time': '2017-01-20T04:35'} {'user': 'acct:corenel@hypothes.is', 'text': '并被', 'origin_text': '中。分布式的异步梯度下降方法依然是训练深度神经网络的基本方法, !!!被!!! 工业界很多机器学习组所使用{cite?}。学术界的深度学习研究', 'time': '2017-01-20T04:35'} {'user': 'acct:corenel@hypothes.is', 'text': '仍专注于', 'origin_text': '学习研究者们通常无法负担那么大规模的分布式学习系统,但是一些研究 !!!关注于!!! 如何在校园环境中相对较廉价的硬件系统中构造分布式网络{cite?', 'time': '2017-01-20T04:37'} {'user': 'acct:corenel@hypothes.is', 'text': '使用相对廉价的硬件系统', 'origin_text': '担那么大规模的分布式学习系统,但是一些研究关注于如何在校园环境中 !!!相对较廉价的硬件系统中!!! 构造分布式网络{cite?}。模型压缩在许多商业应', 'time': '2017-01-20T04:38'} {'user': 'acct:corenel@hypothes.is', 'text': '开发者们', 'origin_text': '在许多情况下,相比开发者,终端用户的可用资源往往更有限。例如, !!!研究者们!!! 可以使用巨大的计算机集群训练一个语音识别的网络,然后发布到移动手', 'time': '2017-01-20T04:39'} {'user': 'acct:corenel@hypothes.is', 'text': '然后将其部署到手机上', 'origin_text': '例如,研究者们可以使用巨大的计算机集群训练一个语音识别的网络, !!!然后发布到移动手机上!!! 。减少推断所需开销的一个关键策略是模型压缩{cite?}。', 'time': '2017-01-20T04:40'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{模型压缩}', 'origin_text': '网络,然后发布到移动手机上。减少推断所需开销的一个关键策略是 !!!模型压缩!!! {cite?}。模型压缩的基本思想是用一个更小的模型取代替原始', 'time': '2017-01-20T04:40'} {'user': 'acct:corenel@hypothes.is', 'text': '从而使得用来存储于评估所需的内存与运行时间更少', 'origin_text': '}。模型压缩的基本思想是用一个更小的模型取代替原始耗时的模型, !!!只需更少内存和运行时间来存储和评估!!! 。原始模型的规模很大,且主要为了防止过拟合时,模型压缩可以起', 'time': '2017-01-20T05:06'} {'user': 'acct:corenel@hypothes.is', 'text': '当原始模型由于为了防止过拟合而变得很大时', 'origin_text': '型取代替原始耗时的模型,只需更少内存和运行时间来存储和评估。 !!!原始模型的规模很大,且主要为了防止过拟合时!!! ,模型压缩可以起到作用。在许多情况下,拥有最小泛化误差的模型往', 'time': '2017-01-20T05:16'} {'user': 'acct:corenel@hypothes.is', 'text': '的成本很高', 'origin_text': '型往往是多个独立训练而成的模型的集成。评估所有nnn个集成成员 !!!是昂贵的!!! 。有时候,当单个模型很大(例如,如果它使用Dropout正则化', 'time': '2017-01-20T10:01'} {'user': 'acct:corenel@hypothes.is', 'text': '能够学习到某个函数$f(x)$', 'origin_text': 'ropout正则化)时,其泛化能力也会很好。这些巨大的模型 !!!学习某个函数f(x)f(x)f(\\Vx)时!!! ,但选用的参数数量超过了任务所需的参数数量。仅仅训练样本数是有', 'time': '2017-01-20T10:04'} {'user': 'acct:corenel@hypothes.is', 'text': '只是因为训练样本数是有限的,所以模型的规模才变得必要。', 'origin_text': 'x)f(\\Vx)时,但选用的参数数量超过了任务所需的参数数量。 !!!仅仅训练样本数是有限的,所以网络的规模是受限的。!!! 只要我们拟合了这个函数f(x)f(x)f(\\Vx),我们就可以', 'time': '2017-01-20T10:29'} {'user': 'acct:corenel@hypothes.is', 'text': '我们就可以通过将$f$应用与随机采样点$x$,来生成有无穷多训练样本的训练集', 'origin_text': '是受限的。只要我们拟合了这个函数f(x)f(x)f(\\Vx), !!!我们就可以生成一个拥有了无穷多训练样本的训练集,只需将fff作用于任意生成的xx\\Vx。!!! 然后,我们使用这些样本训练一个新的更小的模型,在这些点上拟合f', 'time': '2017-01-20T10:31'} {'user': 'acct:corenel@hypothes.is', 'text': '使其能够在', 'origin_text': '成的xx\\Vx。然后,我们使用这些样本训练一个新的更小的模型, !!!在!!! 这些点上拟合f(x)f(x)f(\\Vx)。为了更加充分地利用了', 'time': '2017-01-20T10:32'} {'user': 'acct:corenel@hypothes.is', 'text': '最好从类似于之后将提供给模型的真实测试数据的分布中', 'origin_text': '(x)f(\\Vx)。为了更加充分地利用了这个新的小模型的容量, !!!最好能够从一个类似于真实的测试数据(后面会用到)的分布中!!! 采样xx\\Vx。这个过程可以通过损坏训练样本或者从原始训练数据', 'time': '2017-01-20T10:37'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{动态结构}', 'origin_text': '一般来说,加速数据处理系统的一种策略是构造一个系统,这个系统用 !!!动态结构!!! 描述图中处理输入的所需计算过程。在给定一个输入的情况中,数据处', 'time': '2017-01-20T10:39'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{条件计算}', 'origin_text': '隐藏单元)哪一部分用于计算。这种神经网络中的动态结构有时被称为 !!!条件计算!!! {cite?}。由于模型结构许多部分可能只跟输入的一小部分有关', 'time': '2017-01-20T10:51'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{级联}', 'origin_text': '集需要应用于特定的输入。在分类器中加速推断的可行策略是使用 !!!级联!!! 的分类器。当目标是检测罕见对象(或事件)的是否存在,可以应用级', 'time': '2017-01-20T10:56'} {'user': 'acct:corenel@hypothes.is', 'text': '当目标是检测罕见对象(或事件)是否存在时', 'origin_text': '的输入。在分类器中加速推断的可行策略是使用级联的分类器。 !!!当目标是检测罕见对象(或事件)的是否存在!!! ,可以应用级联策略。要确定对象是否存在,我们必须使用具有高容量', 'time': '2017-01-20T10:57'} {'user': 'acct:corenel@hypothes.is', 'text': '高容量、运行成本高', 'origin_text': '否存在,可以应用级联策略。要确定对象是否存在,我们必须使用具有 !!!高容量、运行昂贵!!! 的复杂分类器。 然而,因为对象是罕见的,我们通常可以使用更少的', 'time': '2017-01-20T10:59'} {'user': 'acct:corenel@hypothes.is', 'text': '第一个', 'origin_text': '对象的输入。在这些情况下,我们可以训练一序列分类器。序列中的 !!!第一!!! 分类器具有低容量,训练为具有高召回率。换句话说,他们被训练为确', 'time': '2017-01-20T11:00'} {'user': 'acct:corenel@hypothes.is', 'text': '最后一个', 'origin_text': '换句话说,他们被训练为确保对象存在时,我们不会错误地拒绝输入。 !!!最终的!!! 分类器训练为具有高精度。在测试时,我们按照顺序运行分类器进行推', 'time': '2017-01-20T11:00'} {'user': 'acct:corenel@hypothes.is', 'text': '由于系统中的一些个体成员具有高容量,因此系统作为一个整体显然也具有高容量', 'origin_text': '。一种方法是使级联中靠后的成员单独具有高容量。在这种情况下, !!!系统作为一个整体显然具有高容量,因为它的一些个体成员是高容量的!!! 。 还可以使用另一种级联,其中每个单独的模型具有低容量,但是由', 'time': '2017-01-20T11:14'} {'user': 'acct:corenel@hypothes.is', 'text': '实现了', 'origin_text': '合,整个系统具有高容量。{Viola01}使用级联的增强决策树 !!!实现!!! 适合在手持数字相机中使用的快速并且鲁棒的面部检测器。本质上,它', 'time': '2017-01-20T11:15'} {'user': 'acct:corenel@hypothes.is', 'text': '。分类器检查许多的窗口,如果这些窗口内不包含面部则拒绝。', 'origin_text': '棒的面部检测器。本质上,它们的分类器使用滑动窗口方法来定位面部 !!!,许多窗口会被检查,如果它们不包含面部则被拒绝。!!! 级联的另一个版本使用早期模型来实现一种硬性的注意机制:级联的早', 'time': '2017-01-20T11:18'} {'user': 'acct:corenel@hypothes.is', 'text': '硬注意机制', 'origin_text': '它们不包含面部则被拒绝。级联的另一个版本使用早期模型来实现一种 !!!硬性的注意机制!!! :级联的早期成员定位对象,并且级联的后续成员在给定对象位置的情况', 'time': '2017-01-20T11:30'} {'user': 'acct:corenel@hypothes.is', 'text': '级联前部的成员', 'origin_text': '被拒绝。级联的另一个版本使用早期模型来实现一种硬性的注意机制: !!!级联的早期成员!!! 定位对象,并且级联的后续成员在给定对象位置的情况下执行进一步处理', 'time': '2017-01-20T11:32'} {'user': 'acct:corenel@hypothes.is', 'text': ':', 'origin_text': '理。例如,Google使用两步级联从街景视图图像中转换地址编号 !!!,!!! 首先使用一个机器学习模型查找地址编号,然后使用另一个机器学习模型', 'time': '2017-01-20T11:32'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{选通器}', 'origin_text': '种方法没有实现加速推断计算的目标。类似的,我们可以使用称为 !!!选通器!!! 的神经网络来选择在给定当前输入的情况下将使用几个专家网络中的哪一', 'time': '2017-01-20T11:37'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{专家混合体}', 'origin_text': '用几个专家网络中的哪一个来计算输出。这个想法的第一个版本被称为 !!!专家混合体!!! {cite?},其中选通器为每个专家输出一个概率或权重(通过非线', 'time': '2017-01-20T11:38'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '个样本的选通器选择单个专家,我们就会获得一个特殊的硬专家混合体, !!! % 刚性~!!! {cite?},这可以加速推断和训练的时间。当选通器决策的数量', 'time': '2017-01-20T11:56'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '的硬专家混合体, % 刚性~{cite?},这可以加速推断和训练 !!!的时间!!! 。当选通器决策的数量很小的时候,这个策略效果会很好,因为它不是', 'time': '2017-01-20T11:57'} {'user': 'acct:corenel@hypothes.is', 'text': '一种隐藏单元的条件Dropout的形式', 'origin_text': 't-al-arXiv2015}使用强化学习技术(策略梯度)来学习 !!!一种形式的隐藏单元的条件Dropout!!! ,减少了实际的计算成本,而不会对近似的质量产生负面影响。另', 'time': '2017-01-21T03:48'} {'user': 'acct:corenel@hypothes.is', 'text': '因而不能完全得到动态结构所带来的计算益处', 'origin_text': '是有效的。较为先进的方法一般采用对许多可能的输入使用加权平均, !!!因此不能收获动态结构所有可能的计算益处!!! 。先进的注意机制在\\sec?中描述。使用动态结构化系统的', 'time': '2017-01-21T04:54'} {'user': 'acct:corenel@hypothes.is', 'text': '将在', 'origin_text': '权平均,因此不能收获动态结构所有可能的计算益处。先进的注意机制 !!!在!!! \\sec?中描述。使用动态结构化系统的主要障碍是由于系统针', 'time': '2017-01-21T04:54'} {'user': 'acct:corenel@hypothes.is', 'text': 'CPU实现会十分缓慢', 'origin_text': '是,这些专用的子程序难以高效地实现。由于缺乏高速缓存的一致性, !!!CPU实现将是缓慢的!!! 。GPU的实现也将是缓慢的,因为缺乏级联的内存操作以及warp', 'time': '2017-01-21T06:45'} {'user': 'acct:corenel@hypothes.is', 'text': '此外,由于缺乏级联的内存操作以及warp成员使用不同分支时需要串行化操作,GPU的实现也会很慢', 'origin_text': '高效地实现。由于缺乏高速缓存的一致性,CPU实现将是缓慢的。 !!!GPU的实现也将是缓慢的,因为缺乏级联的内存操作以及warp成员使用不同分支时需要串行化操作!!! 。在一些情况下,可以将样本分成组缓解这些问题,这些组都采用相同', 'time': '2017-01-21T06:45'} {'user': 'acct:corenel@hypothes.is', 'text': '可以通过将样本分成组,并且都采用相同的分支并且同时处理这些样本组的方式来缓解这些问题', 'origin_text': '作以及warp成员使用不同分支时需要串行化操作。在一些情况下, !!!可以将样本分成组缓解这些问题,这些组都采用相同的分支并且同时处理这些样本组!!! 。在离线环境中,这是最小化处理固定量样本所需时间的一项可接受的', 'time': '2017-01-21T06:49'} {'user': 'acct:corenel@hypothes.is', 'text': '然而在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题', 'origin_text': '线环境中,这是最小化处理固定量样本所需时间的一项可接受的策略。 !!!在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题!!! 。例如,如果我们分配一台机器处理级联中的第一步,另一台机器处理', 'time': '2017-01-21T06:50'} {'user': 'acct:corenel@hypothes.is', 'text': '基于以电压或电流表示连续值的物理实现', 'origin_text': '专用集成电路的数字(基于数字的二进制表示),模拟{cite?}( !!!基于作为电压或电流连续值的物理实现!!! )和混合实现(组合数字和模拟组件)。近年来更灵活的可编程门阵列', 'time': '2017-01-21T07:07'} {'user': 'acct:corenel@hypothes.is', 'text': '现场可编程门阵列', 'origin_text': '值的物理实现)和混合实现(组合数字和模拟组件)。近年来更灵活的 !!!可编程门阵列!!! 实现(其中电路的具体细节可以建立后写入芯片)也得到了长足发展。', 'time': '2017-01-21T07:32'} {'user': 'acct:corenel@hypothes.is', 'text': '在制造完成后', 'origin_text': '组件)。近年来更灵活的可编程门阵列实现(其中电路的具体细节可以 !!!建立后!!! 写入芯片)也得到了长足发展。虽然CPU和GPU上的软件实现通', 'time': '2017-01-21T07:32'} {'user': 'acct:corenel@hypothes.is', 'text': '这与20世纪90年代的情况(上一个神经网络时代)的不同之处在于,神经网络的硬件实现(从开始到芯片可用可能需要两年)跟不上快速进展和价格低廉的通用CPU的脚步', 'origin_text': '最近计算速度的改进来自于核心的并行化(无论CPU还是GPU)。 !!!这与20世纪90年代的情况(前面的神经网络时代)非常不同,其中神经网络的硬件实现(从开始到芯片的可用性可能需要两年)不能跟上快速进展和价格低廉的通用CPU的脚步!!! 。因此,在针对诸如手机等低功率设备开发新的硬件设计时,研究专用', 'time': '2017-01-21T12:04'} {'user': 'acct:corenel@hypothes.is', 'text': '因此,在针对诸如手机等低功率设备开发新的硬件设计,并且想要用于深度学习的一般公众应用(例如,具有语音、计算机视觉或自然语言功能的设施)等时,研究专用硬件能够进一步推动其发展。', 'origin_text': '性可能需要两年)不能跟上快速进展和价格低廉的通用CPU的脚步。 !!!因此,在针对诸如手机等低功率设备开发新的硬件设计时,研究专用硬件是进一步推动其发展的方式,旨在用于深度学习的一般公众应用(例如,具有语音、计算机视觉或自然语言功能的设施)。!!! 最近对基于反向传播神经网络的低精度实现的工作{cite?}表', 'time': '2017-01-21T12:55'} {'user': 'acct:corenel@hypothes.is', 'text': '对与数字的', 'origin_text': '的要求。显而易见的是,在训练期间需要比在推断时更高的精度,并且 !!!数字!!! 某些形式的动态定点表示可以用于减少每个数需要的存储空间。传统的', 'time': '2017-01-21T12:56'} {'user': 'acct:corenel@hypothes.is', 'text': '能够', 'origin_text': '训练期间需要比在推断时更高的精度,并且数字某些形式的动态定点表示 !!!可以用于!!! 减少每个数需要的存储空间。传统的定点数限制为固定范围(其对应于', 'time': '2017-01-21T12:56'} {'user': 'acct:corenel@hypothes.is', 'text': '被限制在了一个固定范围之内', 'origin_text': '式的动态定点表示可以用于减少每个数需要的存储空间。传统的定点数 !!!限制为固定范围!!! (其对应于浮点表示中的给定指数)。动态定点表示在一组数字 (例', 'time': '2017-01-21T12:57'} {'user': 'acct:corenel@hypothes.is', 'text': '而动态定点表示', 'origin_text': '传统的定点数限制为固定范围(其对应于浮点表示中的给定指数)。 !!!动态定点表示!!! 在一组数字 (例如一个层中的所有权重) 之间共享该范围。使用定', 'time': '2017-01-21T12:57'} {'user': 'acct:corenel@hypothes.is', 'text': '。', 'origin_text': '用较少的比特能够减少执行乘法所需的硬件表面积、功率需求和计算时间 !!!,!!! 并且乘法是使用或训练反向传播的现代深度网络中要求最高的操作。', 'time': '2017-01-21T12:58'} {'user': 'acct:corenel@hypothes.is', 'text': '而乘法已经', 'origin_text': '较少的比特能够减少执行乘法所需的硬件表面积、功率需求和计算时间, !!!并且乘法!!! 是使用或训练反向传播的现代深度网络中要求最高的操作。计算', 'time': '2017-01-21T12:58'} {'user': 'acct:corenel@hypothes.is', 'text': '一直以来,', 'origin_text': '练反向传播的现代深度网络中要求最高的操作。计算机视觉 !!!一直以来!!! 计算机视觉就是深度学习应用中几个最活跃的研究方向之一。因为视觉', 'time': '2017-01-21T13:30'} {'user': 'acct:corenel@hypothes.is', 'text': '由于生成模型已经是深度学习研究的指导原则,因此还有大量图像合成工作使用了深度模型', 'origin_text': '多数计算机视觉中的深度学习往往用于对象识别或者某种形式的检测。 !!!因为生成模型已经是深度学习研究的指导原则,还有大量使用深度模型的图像合成工作!!! 。尽管图像合成通常不包括在计算机视觉内,但是能够进行图像合成的', 'time': '2017-01-22T01:46'} {'user': 'acct:corenel@hypothes.is', 'text': '即修复图像中的缺陷或从图像中移除对象这样的计算机视觉任务', 'origin_text': '包括在计算机视觉内,但是能够进行图像合成的模型通常用于图像恢复, !!!修复图像中的缺陷或从图像中移除对象这样的计算机视觉任务!!! 。预处理许多应用领域需要复杂精细的预处理,因为原始', 'time': '2017-01-22T01:47'} {'user': 'acct:corenel@hypothes.is', 'text': '由于原始输入往往以深度学习架构难以表示的形式出现,许多应用领域需要复杂精细的预处理。', 'origin_text': '缺陷或从图像中移除对象这样的计算机视觉任务。预处理 !!!许多应用领域需要复杂精细的预处理,因为原始输入以许多深度学习架构难以表示的形式出现。!!! 计算机视觉通常只需要相对少的这种预处理。图像应该被标准化,从', 'time': '2017-01-22T01:52'} {'user': 'acct:corenel@hypothes.is', 'text': '池化区域', 'origin_text': '不总是必要的。一些卷积模型接受可变大小的输入并动态地调整它们的 !!!池区域!!! 大小以保持输出大小恒定{cite?}。其他卷积模型具有可变大小', 'time': '2017-01-22T01:54'} {'user': 'acct:corenel@hypothes.is', 'text': '一种只对训练集做预处理', 'origin_text': '进行去噪或标注的模型{cite?}。数据集增强可以被看作是 !!!预处理训练集!!! 的方式。数据集增强是减少大多数计算机视觉模型泛化误差的一种极好', 'time': '2017-01-22T01:59'} {'user': 'acct:corenel@hypothes.is', 'text': '测试时', 'origin_text': '数据集增强是减少大多数计算机视觉模型泛化误差的一种极好方法。在 !!!测试时间!!! 可用的一个相关想法是生成模型相同输入的许多不同版本(例如,在稍微', 'time': '2017-01-22T02:14'} {'user': 'acct:corenel@hypothes.is', 'text': '类似想法', 'origin_text': '多数计算机视觉模型泛化误差的一种极好方法。在测试时间可用的一个 !!!相关想法!!! 是生成模型相同输入的许多不同版本(例如,在稍微不同的位置处裁剪的', 'time': '2017-01-22T02:14'} {'user': 'acct:corenel@hypothes.is', 'text': '将同一输入的许多不同版本传给模型', 'origin_text': '视觉模型泛化误差的一种极好方法。在测试时间可用的一个相关想法是 !!!生成模型相同输入的许多不同版本!!! (例如,在稍微不同的位置处裁剪的相同图像),并且在模型的不同实例', 'time': '2017-01-22T02:16'} {'user': 'acct:corenel@hypothes.is', 'text': '其目的', 'origin_text': '助于减少泛化误差。其他种类的预处理被应用于训练集和测试集, !!!目的!!! 是将每个样本置于更规范的形式,以便减少模型需要考虑的变化量。减', 'time': '2017-01-22T02:24'} {'user': 'acct:corenel@hypothes.is', 'text': '减少数据中的变化量既能够减少泛化误差,也能够减小拟合训练集所需模型的大小。', 'origin_text': '的是将每个样本置于更规范的形式,以便减少模型需要考虑的变化量。 !!!减少数据中的变化量可以减少泛化误差并减小拟合训练集所需模型的大小。!!! 更简单的任务可以通过更小的模型来解决,而更简单的解决方案泛化能', 'time': '2017-01-22T02:43'} {'user': 'acct:corenel@hypothes.is', 'text': '为啥注释也出来了', 'origin_text': '预处理通常是不必要的,并且最好只是让模型学习哪些变异性应该保留。 !!!%应该变得不变。!!! 例如,用于分类ImageNet的AlexNet系统仅具有一个预', 'time': '2017-01-22T03:02'} {'user': 'acct:corenel@hypothes.is', 'text': '在许多任务中,对比度是能够安全移除的最为明显的变化源之一。', 'origin_text': 'e?}。\\subsubsection{对比度归一化} !!!可以为许多任务安全移除的最明显的变化源之一是图像中的对比度量。!!! 对比度仅指图像中亮像素和暗像素之间差异的大小。量化图像对比度', 'time': '2017-01-22T05:37'} {'user': 'acct:corenel@hypothes.is', 'text': '简单地说,对比度指的是图像中亮像素和暗像素之间差异的大小。', 'origin_text': '可以为许多任务安全移除的最明显的变化源之一是图像中的对比度量。 !!!对比度仅指图像中亮像素和暗像素之间差异的大小。!!! 量化图像对比度有许多方式。在深度学习中,对比度通常指的是图像', 'time': '2017-01-22T03:29'} {'user': 'acct:corenel@hypothes.is', 'text': '因为没有', 'origin_text': '于某个常数sss来防止图像具有变化的对比度。这种方法非常复杂, !!!没有!!! 缩放因子可以改变零对比度图像(所有像素都具有相等强度的图像)的对', 'time': '2017-01-22T05:53'} {'user': 'acct:corenel@hypothes.is', 'text': '引入一个', 'origin_text': '以真实标准差通常仅能放大传感器噪声或压缩伪像。这种现象启发我们 !!!引入!!! 小的正的正则化参数λλ\\lambda来平衡估计的标准差。或者,', 'time': '2017-01-22T07:48'} {'user': 'acct:corenel@hypothes.is', 'text': '感兴趣的', 'origin_text': 'X} )^2} }}.\\end{align}从大图像中剪切 !!!有趣!!! 对象所组成的数据集不可能包含任何具有几乎恒定强度的图像。在这些', 'time': '2017-01-22T07:49'} {'user': 'acct:corenel@hypothes.is', 'text': '小区域', 'origin_text': '得激进的正则化更有用。在处理从CIFAR-10数据中随机选择的 !!!补丁!!! 时,{Coates2011}使用ϵ=0,λ=10ϵ=0,λ=10', 'time': '2017-01-22T07:51'} {'user': 'acct:corenel@hypothes.is', 'text': '从而', 'origin_text': '不是L2L2L^2范数来定义GCN,因为标准差包括除以像素数量, !!!因此!!! 基于标准差的GCN允许使用与图像大小无关的固定的sss。然而,', 'time': '2017-01-22T11:16'} {'user': 'acct:corenel@hypothes.is', 'text': '能够', 'origin_text': '来定义GCN,因为标准差包括除以像素数量,因此基于标准差的GCN !!!允许!!! 使用与图像大小无关的固定的sss。然而,观察到L2L2L^2范', 'time': '2017-01-22T11:16'} {'user': 'acct:corenel@hypothes.is', 'text': '包括除以像素数量这一步', 'origin_text': '偏向于根据标准差而不是L2L2L^2范数来定义GCN,因为标准差 !!!包括除以像素数量!!! ,因此基于标准差的GCN允许使用与图像大小无关的固定的sss。', 'time': '2017-01-22T11:16'} {'user': 'acct:corenel@hypothes.is', 'text': '对此有所说明', 'origin_text': '们的直觉。我们可以把GCN理解成到球壳的一种映射。\\fig? !!!给了一个说明!!! 。这可能是一个有用的属性,因为神经网络往往更好地响应空间方向,', 'time': '2017-01-22T11:21'} {'user': 'acct:corenel@hypothes.is', 'text': '主成分', 'origin_text': '不同于GCN。sphering并不会使数据位于球形壳上,而是将 !!!主要分量!!! 重新缩放以具有相等方差,使得PCA使用的多变量正态分布具有球形等', 'time': '2017-01-22T11:29'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{白化}', 'origin_text': '用的多变量正态分布具有球形等高线。 sphering通常被称为 !!!白化!!! 。全局对比度归一化常常不能突出我们想要突出的图像特征,例如', 'time': '2017-01-22T11:30'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{sphering}', 'origin_text': '。}\\end{figure}与直觉相反的是,存在被称为 !!!sphering!!! 的预处理操作,并且它不同于GCN。sphering并不会使数据', 'time': '2017-01-22T11:31'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{局部对比度归一化}', 'origin_text': '存在大的差异。然而,它不能确保暗区内的边缘突出。这催生了 !!!局部对比度归一化!!! 。局部对比度归一化确保对比度在每个小窗口上被归一化,而不是作', 'time': '2017-01-22T11:32'} {'user': 'acct:corenel@hypothes.is', 'text': '使用的则是', 'origin_text': '窗口中所有像素的平均值和标准差~{cite?}。在其他情况下, !!!这是使用!!! 以要修改的像素为中心的高斯权重的加权平均和加权标准差。在彩色图', 'time': '2017-01-22T13:18'} {'user': 'acct:corenel@hypothes.is', 'text': '归一化', 'origin_text': '处理不同的颜色通道,而其他策略组合来自不同通道的信息以使每个像素 !!!标准化!!! {cite?}。局部对比度归一化通常可以通过使用可分离卷积', 'time': '2017-01-22T13:18'} {'user': 'acct:corenel@hypothes.is', 'text': '元素级', 'origin_text': 'sec?)来计算特征映射所需要的局部平均值和局部标准差,然后使用 !!!元素层面!!! 的减法和元素层面的除法实现不同的特征映射。局部对比度归一化', 'time': '2017-01-22T13:19'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '特征映射所需要的局部平均值和局部标准差,然后使用元素层面的减法和 !!!元素层面的!!! 除法实现不同的特征映射。局部对比度归一化是可微分的操作,并', 'time': '2017-01-22T13:19'} {'user': 'acct:corenel@hypothes.is', 'text': '作为一种非线性函数应用于网络隐藏层', 'origin_text': '不同的特征映射。局部对比度归一化是可微分的操作,并且还可以 !!!应用于网络隐藏层的非线性作用!!! ,以及应用于输入的预处理操作。与全局对比度归一化一样,我们', 'time': '2017-01-22T13:20'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{自动语音识别}', 'origin_text': ',y_{N})表示目标的输出序列(通常是一个词或者字符的序列)。 !!!自动语音识别!!! 任务指的是构造一个函数$f^_{\\text{ASR}},使得它能', 'time': '2017-01-23T01:38'} {'user': 'acct:corenel@hypothes.is', 'text': '子音素状态', 'origin_text': '作由如下过程生成:首先,一个HMM生成了一个音素的序列以及离散的 !!!音素子状态!!! (比如每一个音素的开始,中间,结尾),然后GMM把每一个离散的状', 'time': '2017-01-23T09:33'} {'user': 'acct:corenel@hypothes.is', 'text': '当时', 'origin_text': '到90年代初期,大量语音识别系统使用了神经网络{cite?}。 !!!在那段时间!!! ,基于神经网络的ASR的表现和GMM-HMM系统的表现差不多。', 'time': '2017-01-23T09:37'} {'user': 'acct:corenel@hypothes.is', 'text': '这个结果优于或者说是可以与基于HMM的结果相比 \n', 'origin_text': 'footnote{39})上达到了262626\\%的音素错误率, !!!这个结果优于或者是可比于基于HMM的结果!!! 。从那时起,TIMIT成为了音素识别的一个基准数据集,在语音识', 'time': '2017-01-23T09:45'} {'user': 'acct:corenel@hypothes.is', 'text': '结果是', 'origin_text': '的系统中已经付出的巨大努力,工业界并没有迫切转向神经网络的需求。 !!!结果!!! ,直到21世纪00年代末期,学术界和工业界的研究者们更多的是用神', 'time': '2017-01-23T09:46'} {'user': 'acct:corenel@hypothes.is', 'text': '对于基本的电话识别工作流程的一个扩展工作是', 'origin_text': '可以参考{mohamed2012understanding}。 !!!关于基本电话通道识别的一个扩展工作包括了!!! 添加说话人自适应相关特征{cite?}的方法,可以进一步地降低错', 'time': '2017-01-23T11:35'} {'user': 'acct:corenel@hypothes.is', 'text': '这可以', 'origin_text': '一个扩展工作包括了添加说话人自适应相关特征{cite?}的方法, !!!可以!!! 进一步地降低错误率。紧接着的工作是将结构从音素识别(TIMIT', 'time': '2017-01-23T11:35'} {'user': 'acct:corenel@hypothes.is', 'text': '则是', 'origin_text': '特征{cite?}的方法,可以进一步地降低错误率。紧接着的工作 !!!是!!! 将结构从音素识别(TIMIT所主要关注的)转向了大规模词汇语音识', 'time': '2017-01-23T11:44'} {'user': 'acct:corenel@hypothes.is', 'text': '手机端', 'origin_text': '这些合作所带来的突破性进展,这些技术现在被广泛应用在产品中,比如 !!!移动手机端!!! 。随后,当他们使用了越来越大的带标签的数据集,加入了各种初', 'time': '2017-01-23T11:51'} {'user': 'acct:corenel@hypothes.is', 'text': '。', 'origin_text': '音识别性能上的这些突破是史无前例的(大约303030\\%的提高) !!!,!!! 在这之前的长达十年左右的时间基于GMM-HMM的系统的传统技术已', 'time': '2017-01-23T11:53'} {'user': 'acct:corenel@hypothes.is', 'text': '在这之前的长达十年左右的时间内,尽管数据集的规模随时间增长,然而基于GMM-HMM的系统的传统技术已经停滞不前了', 'origin_text': '识别性能上的这些突破是史无前例的(大约303030\\%的提高), !!!在这之前的长达十年左右的时间基于GMM-HMM的系统的传统技术已经停滞不前了,尽管数据集的规模是随时间增长的!!! (见{Deng+Yu-2014}的图2.4)。这也导致了语音识', 'time': '2017-01-23T11:54'} {'user': 'acct:corenel@hypothes.is', 'text': '删去空格', 'origin_text': '至今。其中的一个创新点是卷积网络的应用~{cite?}。 !!!卷积网络 !!! 在时间和频率维度复用了权重,改进了之前的仅对时间使用重复权值的时', 'time': '2017-01-23T11:55'} {'user': 'acct:corenel@hypothes.is', 'text': '在时域与频域上', 'origin_text': '其中的一个创新点是卷积网络的应用~{cite?}。卷积网络 在 !!!时间和频率维度!!! 复用了权重,改进了之前的仅对时间使用重复权值的时延神经网络。这', 'time': '2017-01-23T11:55'} {'user': 'acct:corenel@hypothes.is', 'text': '在时域上', 'origin_text': 'te?}。卷积网络 在时间和频率维度复用了权重,改进了之前的仅 !!!对时间!!! 使用重复权值的时延神经网络。这种新的二维的卷积模型并不是将输入', 'time': '2017-01-23T11:57'} {'user': 'acct:corenel@hypothes.is', 'text': '能够使用', 'origin_text': '信息~{cite?}。自然语言处理自然语言处理让计算机 !!!使用!!! 人类语言,例如英语或法语。让简单的程序能够高效明确地解析,计算', 'time': '2017-01-23T12:12'} {'user': 'acct:corenel@hypothes.is', 'text': '为了让简单的程序能够高效明确地解析,计算机程序读取与发出的语言通常是经过特殊化的', 'origin_text': '语言处理自然语言处理让计算机使用人类语言,例如英语或法语。 !!!让简单的程序能够高效明确地解析,计算机程序通常读取和发出特殊化的语言!!! 。而自然的语言通常是模糊的,并且会违背形式的描述。自然语言处', 'time': '2017-01-23T12:30'} {'user': 'acct:corenel@hypothes.is', 'text': '可能不遵循', 'origin_text': '程序通常读取和发出特殊化的语言。而自然的语言通常是模糊的,并且 !!!会违背!!! 形式的描述。自然语言处理中的应用如机器翻译,学习者必须用一种人', 'time': '2017-01-23T12:32'} {'user': 'acct:corenel@hypothes.is', 'text': '自然语言处理包含了诸如机器翻译等的应用', 'origin_text': '殊化的语言。而自然的语言通常是模糊的,并且会违背形式的描述。 !!!自然语言处理中的应用如机器翻译!!! ,学习者必须用一种人类语言读取句子并用另一种人类语言发出等同的句', 'time': '2017-01-23T12:32'} {'user': 'acct:corenel@hypothes.is', 'text': '学习者需要读取一种人类语言的句子,并另一种人类语言发出等同的句子', 'origin_text': '模糊的,并且会违背形式的描述。自然语言处理中的应用如机器翻译, !!!学习者必须用一种人类语言读取句子并用另一种人类语言发出等同的句子!!! 。许多NLP应用程序基于语言模型,语言模型定义了关于自然语言中', 'time': '2017-01-23T12:51'} {'user': 'acct:corenel@hypothes.is', 'text': '、', 'origin_text': '许多NLP应用程序基于语言模型,语言模型定义了关于自然语言中的字 !!!,!!! 字符或字节序列的概率分布。与本章讨论的其他应用一样,非常', 'time': '2017-01-23T12:51'} {'user': 'acct:corenel@hypothes.is', 'text': '通常我们必须使用', 'origin_text': '程序,一些领域特定的策略也很重要。为了构建自然语言的有效模型, !!!通常必须使用!!! 专门处理序列数据的技术。在很多情况下,我们将自然语言视为一系列', 'time': '2017-01-23T12:52'} {'user': 'acct:corenel@hypothes.is', 'text': '\\emph{语言模型}', 'origin_text': '意义上都高效,研究者已经开发了几种策略。nnn-gram !!!语言模型!!! 定义了自然语言中标记序列的概率分布。根据模型的设计,标记可以是', 'time': '2017-01-24T03:12'} {'user': 'acct:corenel@hypothes.is', 'text': '因为最大似然估计可以通过简单地统计每个可能的$n$-gram在训练集中出现的次数来获得。', 'origin_text': '小nnn值的不同模型建模。训练nnn-gram模型是简单的, !!!因为最大似然估计可以简单地统计每个可能的nnn-gram在训练集中出现的次数。 !!! ', 'time': '2017-01-24T08:04'} {'user': 'acct:corenel@hypothes.is', 'text': '删去。(并入上一句)', 'origin_text': ', \\dots, x_{t-1}) }\\end{align} !!!简单地查找两个存储的概率就能计算。!!! 为了在PnPnP_n中精确地再现推断,我们训练Pn−1Pn−1P', 'time': '2017-01-24T08:10'} {'user': 'acct:corenel@hypothes.is', 'text': '这使得下式可以简单地通过查找两个存储的概率来计算', 'origin_text': '训练nnn-gram模型和n−1n−1n-1 gram模型。 !!!这使得它很容易计算概率!!! :P(xt∣xt−n+1,…,xt−1)=Pn(xt−n+1,', 'time': '2017-01-24T08:11'} {'user': 'acct:corenel@hypothes.is', 'text': '最后一个字符', 'origin_text': '现推断,我们训练Pn−1Pn−1P_{n-1}时必须省略每个序列 !!!最后的字符!!! 。举个例子,我们演示三元模型如何计算句子”{\\tt THE ', 'time': '2017-01-24T08:17'} {'user': 'acct:corenel@hypothes.is', 'text': '将演示', 'origin_text': '1P_{n-1}时必须省略每个序列最后的字符。举个例子,我们 !!!演示!!! 三元模型如何计算句子”{\\tt THE DOG RAN AWAY', 'time': '2017-01-24T08:28'} {'user': 'acct:corenel@hypothes.is', 'text': '边际概率', 'origin_text': '为句子的开头没有上下文。取而代之,在句子的开头我们必须使用词的 !!!边缘概率!!! 。因此我们计算P3(𝚃𝙷𝙴\xa0𝙳𝙾𝙶\xa0𝚁𝙰𝙽)', 'time': '2017-01-24T08:48'} {'user': 'acct:corenel@hypothes.is', 'text': '使用了', 'origin_text': '类别的概念,然后属于同一类别的词共享词之间的统计强度。这个想法 !!!使用!!! 聚类算法,基于它们与其他词同时出现的频率,将该组词分成集群或类。', 'time': '2017-01-25T02:43'} {'user': 'acct:corenel@hypothes.is', 'text': '此处应分段', 'origin_text': '些问题,语言模型必须能够在一个词和其他语义相似的词之间共享知识。 !!!为了提高!!! nnn-gram模型的统计效率,\\textbf{基于类的语言模型', 'time': '2017-01-25T02:44'} {'user': 'acct:corenel@hypothes.is', 'text': '神经语言模型能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。', 'origin_text': '序列建模~{cite?}。不同于基于类的nnn-gram模型, !!!神经语言模型在识别两个相似的词的基础上,而不丧失将每个词编码为彼此不同的能力。!!! 神经语言模型共享一个词(及其上下文)和其他类似词(和上下文之间', 'time': '2017-01-25T05:21'} {'user': 'acct:corenel@hypothes.is', 'text': '句子长度的指数级别数量', 'origin_text': '个训练语句传递到指数数量的语义相关语句。维数灾难需要模型泛化到 !!!相对句子长度是指数多!!! 的句子。该模型通过将每个训练句子与指数数量的类似句子相关联克服', 'time': '2017-01-25T08:38'} {'user': 'acct:corenel@hypothes.is', 'text': '不仅仅', 'origin_text': '剧性变化。使用分布式表示来改进自然语言处理模型的基本思想 !!!不用!!! 局限于神经网络。它还可以用于图模型,其中分布式表示是多个潜变量', 'time': '2017-01-25T09:05'} {'user': 'acct:corenel@hypothes.is', 'text': '使用', 'origin_text': '示来改进自然语言处理模型的基本思想不用局限于神经网络。它还可以 !!!用于!!! 图模型,其中分布式表示是多个潜变量的形式。高维输出在许多', 'time': '2017-01-25T09:05'} {'user': 'acct:corenel@hypothes.is', 'text': '计算成本是非常高的', 'origin_text': '单位。对于大词汇表,由于词汇量很大,在词的选择上表示输出分布的 !!!计算可能是昂贵的!!! 。在许多应用中,𝕍V\\SetV包含数十万词。表示这种分布的', 'time': '2017-01-25T09:55'} {'user': 'acct:corenel@hypothes.is', 'text': '这造成了表示该矩阵的高存储成本,以及与之相乘的高计算成本。', 'origin_text': '|| \\SetV |,描述该仿射变换线性分量的权重矩阵非常大。 !!!这增加了表示该矩阵的高存储成本,以及乘以它的高计算成本。!!! 因为softmax要在所有|𝕍||V|| \\SetV |输出', 'time': '2017-01-25T11:00'} {'user': 'acct:corenel@hypothes.is', 'text': '都有', 'origin_text': '练期间(计算似然性及其梯度)和测试期间(计算所有或所选词的概率) !!!同时!!! 出现。对于专门的损失函数,可以有效地计算梯度 {cite?},', 'time': '2017-01-25T11:02'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '?},但是应用于传统softmax输出层的标准交叉熵损失时会出现 !!!了!!! 许多困难。假设hh\\Vh是用于预测输出概率ŷ\xa0y^\\hat', 'time': '2017-01-25T11:02'} {'user': 'acct:corenel@hypothes.is', 'text': '。在', 'origin_text': ' O(|𝕍|nh)O(|V|nh)O(|\\SetV| n_h) !!!。!!! nhnhn_h为数千和|𝕍||V|| \\SetV |数十万的', 'time': '2017-01-25T11:03'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': 'nn-gram模型提供。稍作修改,这种方法也可以在神经语言模型 !!!模型!!! 的softmax层中使用额外的输出值,而不是单独的sigmoid', 'time': '2017-01-25T11:14'} {'user': 'acct:corenel@hypothes.is', 'text': '引发', 'origin_text': '模型的潜在泛化优势仅限于最常用的词,这大概是最没用的。这个缺点 !!!激发!!! 了处理高维输出替代方法的探索,如下所述。\\subsubsec', 'time': '2017-01-25T11:15'} {'user': 'acct:corenel@hypothes.is', 'text': '无需进行', 'origin_text': '到log|𝕍|log\u2061|V|\\log |\\SetV|一样低,而 !!!无需!!! 与|𝕍||V||\\SetV|成比例数量(并且也与隐藏单元数量n', 'time': '2017-01-25T11:21'} {'user': 'acct:corenel@hypothes.is', 'text': '等等。', 'origin_text': '构是先建立词的类别,然后是词类别的类别,然后是词类别的类别的类别 !!!等等!!! 这些嵌套类别构成一棵树,其叶子为词。在平衡树中,树的深度为lo', 'time': '2017-01-25T11:22'} {'user': 'acct:corenel@hypothes.is', 'text': '事倍功半', 'origin_text': '关联的位数量近似等于该词频率的对数。然而在实践中,节省计算通常 !!!不值得努力!!! ,因为输出概率的计算仅是神经语言模型中总计算的一部分。例如,假', 'time': '2017-01-25T13:41'} {'user': 'acct:corenel@hypothes.is', 'text': '分支因子为$\\sqrt{|\\SetV|}$的树', 'origin_text': '得多,大约为10310310^3或更大。我们可以定义深度为2和 !!!分支因子为|𝕋|‾‾‾√|T|\\sqrt{|\\SetT|}的树!!! ,而不用仔细优化分支因子为222的树。这样的树对应于简单定义一', 'time': '2017-01-25T13:43'} {'user': 'acct:corenel@hypothes.is', 'text': '计算所有$|\\SetV|$个词', 'origin_text': '概率)都带来了计算上的好处。当然即使使用分层softmax, !!!计算所有|𝕋||T||\\SetT|个词!!! 的概率仍将是昂贵的。另一个重要的操作是在给定上下文中选择最可能', 'time': '2017-01-25T13:52'} {'user': 'acct:corenel@hypothes.is', 'text': '加速神经语言模型训练的一种方式是,避免明确计算所有未出现在下一位置的词对梯度的贡献。', 'origin_text': '为词类选择得不好。\\subsubsection{重要采样} !!!加速神经语言模型训练的一种方式是避免明确计算所有词(未出现在下一位置)对梯度的贡献。!!! 每个不正确的词在此模型下应该具有低概率。枚举所有这些词的计算成', 'time': '2017-01-26T01:19'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '有词(未出现在下一位置)对梯度的贡献。每个不正确的词在此模型下 !!!应该!!! 具有低概率。枚举所有这些词的计算成本可能会很高。相反,我们可', 'time': '2017-01-26T01:20'} {'user': 'acct:corenel@hypothes.is', 'text': 'pre-softmax', 'origin_text': 'al \\theta},\\end{align}其中aa\\Va是 !!!presoftmax!!! 激活(或得分)向量,每个词对应一个元素。第一项是\\textbf', 'time': '2017-01-26T01:21'} {'user': 'acct:corenel@hypothes.is', 'text': '项,', 'origin_text': '第一项是\\textbf{正相}(positive phase) !!!项!!! 推动ayaya_y向上,而第二项是\\textbf{负相}(neg', 'time': '2017-01-26T01:22'} {'user': 'acct:corenel@hypothes.is', 'text': ';', 'origin_text': '{正相}(positive phase)项推动ayaya_y向上 !!!,!!! 而第二项是\\textbf{负相}(negative phase)', 'time': '2017-01-26T01:22'} {'user': 'acct:corenel@hypothes.is', 'text': '的成本可能是很高的', 'origin_text': 'i出现的次数。由于各种原因,训练产生这种稀疏向量的机器学习模型 !!!可能是昂贵的!!! 。在学习的早期,模型可能不会真的使输出真正稀疏。此外,将输出', 'time': '2017-01-26T01:36'} {'user': 'acct:corenel@hypothes.is', 'text': '负词是被随机选取的,如使用启发式采样更可能被误解的词。', 'origin_text': '正词”(在目标中非零的那些词)和相等数量的”负词”的重构损失。 !!!随机选择负词,如使用启发式采样更可能被误解的词。!!! 该启发式过采样引入的偏差则可以使用重要性权重校正。在所', 'time': '2017-01-26T03:49'} {'user': 'acct:corenel@hypothes.is', 'text': '当然,避免每次计算时使用所有参数的模型则是一个例外。', 'origin_text': '。相比之下,将神经网络的参数数目加倍通常也大致加倍计算时间。 !!!避免每次计算时使用所有参数的模型是例外。!!! 嵌入层每次只索引单个嵌入,所以我们可以增加词汇量,而不会增加每', 'time': '2017-01-26T03:58'} {'user': 'acct:corenel@hypothes.is', 'text': '集成学习领域', 'origin_text': '任何集成,如果集成成员产生独立的错误,这种技术可以减少测试误差。 !!!集成的领域!!! 提供了许多方法来组合集成成员的预测,包括统一加权和在验证集上选择', 'time': '2017-01-26T05:06'} {'user': 'acct:corenel@hypothes.is', 'text': '理想情况下', 'origin_text': '”apple red”的短语。提议机制提出建议翻译的许多变体, !!!理想地!!! 应包括”red apple”。翻译系统的第二个组成部分(语言模', 'time': '2017-01-26T05:09'} {'user': 'acct:corenel@hypothes.is', 'text': '图像的标题生成', 'origin_text': '的系统。这个想法已经成功应用于很多领域,不仅仅是机器翻译,还包括 !!!为图像生成标题!!! 。}\\end{figure}\\begin{figure}[htp', 'time': '2017-01-26T08:14'} {'user': 'acct:corenel@hypothes.is', 'text': '学习具有相同含义的句子的表示是有用的', 'origin_text': '方式。 早期模型只能表示单个词或短语。从表示学习的观点来看, !!!具有相同含义的句子具有类似表示是有用的!!! ,无论它们是以源语言还是以目标语言书写。研究者首先使用卷积和R', 'time': '2017-01-26T08:24'} {'user': 'acct:corenel@hypothes.is', 'text': '删去', 'origin_text': '统的基于短语表中频率计数的方法相比,可以产生较低的对齐错误率。 !!!甚至!!! 有更早的工作{cite?}研究跨语言词向量。 这种方法的存在很', 'time': '2017-01-26T08:47'} {'user': 'acct:corenel@hypothes.is', 'text': '在对', 'origin_text': '集上训练的更高效的跨语言对齐~{cite?} 。历史观点 !!!在!!! 反向传播的第一次探索中,{Rumelhart86b-small}', 'time': '2017-01-26T08:58'} {'user': 'acct:corenel@hypothes.is', 'text': '为标志', 'origin_text': '自然语言处理的历史是由流行表示(对模型输入不同方式的表示)的变化 !!!标志!!! 的 。在早期对符号和词建模的工作之后,神经网络在NLP上一些', 'time': '2017-01-26T09:33'} {'user': 'acct:corenel@hypothes.is', 'text': '对词建模', 'origin_text': '序列。{BenDucVin01-small} 将焦点重新引到 !!!建模词!!! 并引入神经语言模型,能产生可解释的词嵌入。这些神经模型已经从在', 'time': '2017-01-26T09:33'} {'user': 'acct:corenel@hypothes.is', 'text': '基础的', 'origin_text': '在本节中,我们介绍深度学习一些其他类型的应用,它们与上面讨论的 !!!标准!!! 对象识别、语音识别和自然语言处理任务不同。本书的第三部分将扩大', 'time': '2017-01-26T09:34'} {'user': 'acct:corenel@hypothes.is', 'text': '。', 'origin_text': '目的仍然是为了销售产品)。两者都依赖于预测用户和项目之间的关联 !!!,!!! 如果展示了广告或向该用户推荐了该产品,推荐系统要么预测一些行为', 'time': '2017-01-26T09:48'} {'user': 'acct:corenel@hypothes.is', 'text': '推荐系统通过预测一些行为的概率(用户购买产品或该行为的一些代替)或预期增益(其可取决于产品的价值)来向用户展示广告或是推荐产品。', 'origin_text': '仍然是为了销售产品)。两者都依赖于预测用户和项目之间的关联, !!!如果展示了广告或向该用户推荐了该产品,推荐系统要么预测一些行为的概率(用户购买产品或该行为的一些代替)或预期增益(其可取决于产品的价值)。!!! 目前,互联网的资金主要来自于各种形式的在线广告。经济的主要部', 'time': '2017-01-26T09:50'} {'user': 'acct:corenel@hypothes.is', 'text': '都使用了', 'origin_text': '的主要部分依靠网上购物。 包括Amazon和eBay在内的公司 !!!使用!!! 机器学习(包括深度学习)推荐他们的产品。有时,项目不是实际出售', 'time': '2017-01-26T09:51'} {'user': 'acct:corenel@hypothes.is', 'text': '这种关联问题可以视作监督学习问题来处理', 'origin_text': '话、推荐专家建议、匹配视频游戏的玩家或匹配约会的人。通常, !!!这种关联问题像监督学习问题一样处理!!! :给出一些关于项目和关于用户的信息,预测感兴趣的行为(用户点击广', 'time': '2017-01-26T09:53'} {'user': 'acct:corenel@hypothes.is', 'text': '泛化', 'origin_text': '些预测输入的最小信息:用户ID和项目ID。在这种情况下,唯一的 !!!推广!!! 方式依赖于不同用户或不同项目的目标变量值之间的模式相似性。假设', 'time': '2017-01-26T10:45'} {'user': 'acct:corenel@hypothes.is', 'text': '二维或三维', 'origin_text': '{u,i}之间的平方误差。当用户嵌入和项目嵌入首次缩小到低维度( !!!两个或三个!!! )时,它们就可以方便地可视化,或者可以将用户或项目彼此进行比较(', 'time': '2017-01-26T11:39'} {'user': 'acct:corenel@hypothes.is', 'text': '缺失条目', 'origin_text': 'd \\MB = \\MV’$。SVD的一个问题是它以任意方式处理 !!!丢失的条目!!! ,如同它们对应于目标值0。相反,我们希望避免为缺失条目做出的预', 'time': '2017-01-26T11:42'} {'user': 'acct:corenel@hypothes.is', 'text': 'Netflix奖的预测比赛中(目的是仅基于大量匿名用户的之前评级预测电影的评级)', 'origin_text': '使用基于梯度的优化最小化。SVD和式 \\eq?中的双线性预测在 !!!Netflix奖(目的是仅基于大量匿名用户的之前评级预测电影的评级)的竞争中!!! 表现得非常好{cite?}。许多机器学习专家参加了2006年和', 'time': '2017-01-26T11:47'} {'user': 'acct:corenel@hypothes.is', 'text': 'Netflix比赛方法的获胜方法中', 'origin_text': '经网络之一是基于RBM的无向概率模型~{cite?}。RBM是 !!!赢得Netflix比赛方法!!! 的一个重要组成部分{cite?}。神经网络社群中也已经探索了对', 'time': '2017-01-26T11:49'} {'user': 'acct:corenel@hypothes.is', 'text': '专用的深度学习架构', 'origin_text': '目特征集到嵌入的映射可以通过深度学习架构学习{cite?}。 !!!专用深度学习架构!!! ,如卷积网络已经应用于从丰富内容中提取特征,如提取用于音乐推荐的', 'time': '2017-01-26T11:51'} {'user': 'acct:corenel@hypothes.is', 'text': '然后只能获得该类别正确与否的反馈', 'origin_text': '一个类别ŷ\xa0y^\\hat y(通常是基于模型最高概率的类别), !!!无论这是否是正确的类别都只能获得反馈!!! 。显然,每个样本传达的信息少于监督的情况(其中真实标签yyy是', 'time': '2017-01-26T11:55'} {'user': 'acct:corenel@hypothes.is', 'text': '比有监督的情况(其中真实标签$y$是可直接访问的)少', 'origin_text': '无论这是否是正确的类别都只能获得反馈。显然,每个样本传达的信息 !!!少于监督的情况(其中真实标签yyy是可直接访问的)!!! ,因此需要更多的样本。更糟糕的是,如果我们不够小心,即使收集越', 'time': '2017-01-26T11:56'} {'user': 'acct:corenel@hypothes.is', 'text': '选择', 'origin_text': '果我们不够小心,即使收集越来越多的数据,我们得到的系统可能会继续 !!!挑选!!! 错误的决定,因为正确的决定最初只有很低的概率:直到学习者选择正确', 'time': '2017-01-26T11:57'} {'user': 'acct:corenel@hypothes.is', 'text': '。', 'origin_text': '的系统可能会继续挑选错误的决定,因为正确的决定最初只有很低的概率 !!!:!!! 直到学习者选择正确的决定之前都无法学习正确的决定。这类似于强化', 'time': '2017-01-26T11:58'} {'user': 'acct:corenel@hypothes.is', 'text': '在学习者选择正确的决定之前,该系统都无法学习正确的决定。', 'origin_text': '系统可能会继续挑选错误的决定,因为正确的决定最初只有很低的概率: !!!直到学习者选择正确的决定之前都无法学习正确的决定。!!! 这类似于强化学习的情况,其中仅观察到所选动作的奖励。一般来说,', 'time': '2017-01-26T11:59'} {'user': 'acct:corenel@hypothes.is', 'text': '动作', 'origin_text': '例如,我们至少知道用户身份,并且我们要选择一个项目。从上下文到 !!!操作!!! 的映射也称为策略。学习者和数据分布(现在取决于学习者的行动)之', 'time': '2017-01-26T12:20'} {'user': 'acct:corenel@hypothes.is', 'text': '动作', 'origin_text': '时更容易。在一般的强化学习场景中,高奖励或低奖励可能是由最近的 !!!行动!!! 或很久以前的行动引起的。术语contextual bandit', 'time': '2017-01-26T12:21'} {'user': 'acct:corenel@hypothes.is', 'text': '动作', 'origin_text': '般的强化学习场景中,高奖励或低奖励可能是由最近的行动或很久以前的 !!!行动!!! 引起的。术语contextual bandit 指的是在一些输', 'time': '2017-01-26T12:21'} {'user': 'acct:corenel@hypothes.is', 'text': '由于使用了符号\\citep{Rumelhart86b-small}和词嵌入\\citep{Deerwester90,BenDucVin01-small},深度学习方法在语言模型、机器翻译和自然语言处理方面非常成功。\n', 'origin_text': 'tual bandit 的技术。知识表示、推理和回答 !!!深度学习方法在语言模型、机器翻译和自然语言处理方面非常成功,因为使用符号{cite?}和词嵌入{cite?}。!!! 这些嵌入表示关于单个词或概念的语义知识。研究前沿是为短语或', 'time': '2017-01-26T12:31'} {'user': 'acct:corenel@hypothes.is', 'text': '则没有', 'origin_text': '一组有序的对象对。集合中的对具有这种关系,而那些不在集合中的对 !!!没有!!! 。例如,我们可以在实体集1,2,31,2,3{ 1, 2, 3', 'time': '2017-01-26T12:31'} {'user': 'acct:corenel@hypothes.is', 'text': '以最大化捕获他们联合分布为训练目标', 'origin_text': '体和关系的表示可以将知识库中的每个三元组作为训练样本来学习,并且 !!!最大化捕获他们联合分布的训练目标!!! {cite?}。除了训练数据,我们还需定义训练的模型族。一', 'time': '2017-01-26T12:52'} {'user': 'acct:corenel@hypothes.is', 'text': '相当于', 'origin_text': '-2011} 用向量表示实体而矩阵表示关系,其思想是关系在实体上 !!!像!!! 运算符。或者,关系可以被认为是任何其他实体{cite?},允许', 'time': '2017-01-26T13:05'} {'user': 'acct:corenel@hypothes.is', 'text': '包括了', 'origin_text': '提供了有代表性的样本。第二部分介绍了涉及深度学习的现代实践, !!!包括!!! 所有非常成功的方法。一般而言,这些方法使用代价函数的梯度寻找模', 'time': '2017-01-26T13:11'} {'user': 'acct:corenel@hypothes.is', 'text': '。并且相比目前为止所描述的情况,其中的挑战更困难并且远远没有解决。', 'origin_text': '部分,开始进入研究领域,旨在使用较少的训练数据或执行更多样的任务 !!!,其中的挑战更困难并且远远没有解决(相比目前为止所描述的情况)。!!! ', 'time': '2017-01-26T13:12'} {'user': 'acct:corenel@hypothes.is', 'text': '本项调查提供了在本文写作之时的具有代表性的样本。', 'origin_text': '景。我们不可能一下子描述全面覆盖主题的所有略微相似的应用 。 !!!在本文写作之时,这项调查尽可能提供了有代表性的样本。!!! 第二部分介绍了涉及深度学习的现代实践,包括所有非常成功的方法', 'time': '2017-01-26T13:15'} {'user': 'acct:corenel@hypothes.is', 'text': '我们不可能全面描述与此主题相关的所有应用 。', 'origin_text': '(除了这里描述的应用以外),并且肯定会在此之后应用于更多的场景。 !!!我们不可能一下子描述全面覆盖主题的所有略微相似的应用 。!!! 在本文写作之时,这项调查尽可能提供了有代表性的样本。第二部', 'time': '2017-01-26T13:17'} {'user': 'acct:corenel@hypothes.is', 'text': '记忆网络最开始是被用来完成一个玩具问答任务', 'origin_text': '特定声明性事实的最佳方法是使用显式记忆机制,如\\sec?所述。 !!!记忆网络首先被提出解决一个玩具问答任务!!! {cite?}。{Kumar-et-al-arxiv2015}', 'time': '2017-01-26T13:18'} ============================= Replies ============================= {'user': 'acct:swordyork@hypothes.is', 'text': '已完成合并,你的建议都太好了!多谢!', 'time': '2017-03-03T10:52'} ================================================ FILE: Chapter12/applications.tex ================================================ % !Mode:: "TeX:UTF-8" % Translator: Tianfan Fu: 12.1~12.3 Shenjian Zhao: 12.4~12.5 \chapter{应用} \label{chap:applications} 在本章中,我们将介绍如何使用\gls{DL}来解决\gls{CV}、\gls{SR}、\gls{NLP}以及其他商业领域中的应用。 首先我们将讨论在许多最重要的~\glssymbol{AI}~应用中所需的大规模\gls{NN}的实现。 接着,我们将回顾\gls{DL}已经成功应用的几个特定领域。 尽管\gls{DL}的一个目标是设计能够处理各种任务的算法,然而截止目前\gls{DL}的应用仍然需要一定程度的特化。 例如,\gls{CV}中的任务对每一个样本都需要处理大量的输入特征(像素)。 \gls{NLP}任务的每一个输入特征都需要对大量的可能值(词汇表中的词)建模。 % 431 \section{大规模\glsentrytext{DL}} \label{sec:large_scale_deep_learning} % 431 \gls{DL}的基本思想基于\gls{connectionism}:尽管\gls{ML}模型中单个生物性的神经元或者说是单个特征不是智能的,但是大量的神经元或者特征作用在一起往往能够表现出智能。 我们必须着重强调神经元数量必须\emph{很大}这个事实。 相比20世纪80年代,如今\gls{NN}的精度以及处理任务的复杂度都有一定提升,其中一个关键的因素就是网络规模的巨大提升 。 正如我们在\secref{sec:increasing_model_sizes}中看到的一样,在过去的三十年内,网络规模是以指数级的速度递增的。 然而如今的\gls{ANN}的规模也仅仅和昆虫的神经系统差不多。 由于规模的大小对于神经网络来说至关重要,因此深度学习需要高性能的硬件设施和软件实现。 %大规模\gls{NN}的必要性,所以\gls{DL}需要高性能的硬件设施和软件实现。 % 431 \subsection{快速的CPU实现} \label{sec:fast_cpu_implementations} 传统的\gls{NN}是用单台机器的CPU来训练的。 如今,这种做法通常被视为是不可取的。 现在,我们通常使用~\glssymbol{GPU}~或者许多台机器的CPU连接在一起进行计算。 在使用这种昂贵配置之前,为论证CPU无法承担\gls{NN}所需的巨大计算量,研究者们付出了巨大的努力。 % 432 head 描述如何实现高效的数值CPU代码已经超出了本书的讨论范围,但是我们在这里还是要强调通过设计一些特定的CPU上的操作可以大大提升效率。 例如,在2011年,最好的CPU在训练\gls{NN}时使用\gls{fixed_point_arithmetic}能够比\gls{float_point_arithmetic}跑得更快。 通过调整\gls{fixed_point_arithmetic}的实现方式,\citet{Vanhoucke-et-al-2011}获得了3倍于一个强\gls{float_point_arithmetic}系统的速度。 % 相对一个很强的\gls{float_point_arithmetic}系统3倍的加速 因为各个新型CPU都有各自不同的特性,所以也有时候采用\gls{float_point_arithmetic}实现会更快。 % 一条重要的准则就是通过特殊设计的数值运算可以获得巨大的回报。 一条重要的准则就是,通过特殊设计的数值运算,我们可以获得巨大的回报。 除了选择\gls{fixed_point_arithmetic}或者\gls{float_point_arithmetic}以外,其他的策略还包括了如通过优化数据结构避免高速缓存缺失、使用向量指令等。 %还包括其他的策略,如通过优化数据结构避免高速缓存缺失、使用向量指令等。 \gls{ML}的研究者们一般会忽略这些实现的细节,但是如果模型的性能限制了模型能达到的规模,那该模型的准确性就要受到影响。 % 432 \subsection{GPU 实现} \label{sec:gpu_implementations} 许多现代\gls{NN}的实现基于\firstall{GPU}。 \glsacr{GPU}最初是为图形应用而开发的专用硬件组件。 %是一种特殊设计的硬件,设计的原始目的是为了处理图形应用。 视频游戏系统的消费市场刺激了图形处理硬件的发展。 它为视频游戏所设计的特性也可以使\gls{NN}的计算受益。 % 432 视频游戏的渲染要求许多操作能够快速并行地执行。 环境和角色模型通过一系列顶点的3D坐标确定。 为了将大量的3D坐标转化为2D显示器上的坐标,显卡必须并行地对许多顶点执行矩阵乘法与除法。 %显卡必须快速实现矩阵乘法或者除法。 之后,显卡必须并行地在每个像素上执行诸多计算,来确定每个像素点的颜色。 在这两种情况下,计算都是非常简单的,并且不涉及CPU通常遇到的复杂的分支运算。 例如,同一个刚体内的每个顶点都会乘上相同的矩阵;也就是说,不需要通过{\tt if}语句来判断确定每个顶点需要乘哪个矩阵。 各个计算过程之间也是完全相互独立的,因此能够实现并行操作。 计算过程还涉及处理大量内存缓冲以及描述每一个需要被渲染的对象的纹理(颜色模式)的位图信息。 总的来说,这使显卡设计为拥有高度并行特性以及很高的内存带宽,同时也付出了一些代价,如相比传统的CPU更慢的时钟速度以及更弱的处理分支运算的能力。 % p 433 与上述的实时图形算法相比,\gls{NN}算法所需要的性能特性是相同的。 \gls{NN}算法通常涉及大量参数、激活值、梯度值的缓冲区,其中每个值在每一次训练迭代中都要被完全更新。 这些缓冲太大,会超出传统的桌面计算机的高速缓存(cache),所以内存带宽通常会成为主要瓶颈。 相比CPU,\glssymbol{GPU}~一个显著的优势是其极高的内存带宽。 \gls{NN}的训练算法通常并不涉及大量的分支运算与复杂的控制指令,所以更适合在~\glssymbol{GPU}~硬件上训练。 由于\gls{NN}能够被分为多个单独的``神经元'',并且独立于同一层内其他神经元进行处理,所以\gls{NN}可以从~\glssymbol{GPU}~的并行特性中受益匪浅。 % 433 \glssymbol{GPU}~硬件最初专为图形任务而设计。 随着时间的推移,\glssymbol{GPU}~也变得更灵活,允许定制的子程序处理转化顶点坐标或者计算像素颜色的任务。 原则上,\glssymbol{GPU}~不要求这些像素值实际基于渲染任务。 只要将计算的输出值作为像素值写入缓冲区,\glssymbol{GPU}~就可以用于科学计算。 \citet{Steinkrau2005}在GPU上实现了一个两层全连接的\gls{NN},并获得了相对基于CPU的基准方法三倍的加速。 不久以后,\citet{chellapilla:inria-00112631}也论证了相同的技术可以用来加速\gls{supervised}\gls{convolutional_network}的训练。 % 433 在\gls{GP_GPU}~发布以后,使用显卡训练\gls{NN}的热度开始爆炸性地增长。 这种\gls{GP_GPU}~可以执行任意的代码,而并非仅仅渲染子程序。 NVIDIA的CUDA编程语言使得我们可以用一种像C一样的语言实现任意代码。 由于相对简便的编程模型,强大的并行能力以及巨大的内存带宽,\gls{GP_GPU}~为我们提供了训练\gls{NN}的理想平台。 在它发布以后不久,这个平台就迅速被\gls{DL}的研究者们所采纳~\citep{RainaICML09-small,Ciresan-2010}。 如何在\gls{GP_GPU}~上写高效的代码依然是一个难题。 在~\glssymbol{GPU}~上获得良好表现所需的技术与CPU上的技术非常不同。 比如说,基于CPU的良好代码通常被设计为尽可能从高速缓存中读取更多的信息。 然而在~\glssymbol{GPU}~中,大多数可写内存位置并不会被高速缓存,所以计算某个值两次往往会比计算一次然后从内存中读取更快。 \glssymbol{GPU}~代码是天生多线程的,不同线程之间必须仔细协调好。 例如,如果能够把数据\firstgls{coalesced}起来,那么涉及内存的操作一般会更快。 当几个线程同时需要读/写一个值时,像这样的\gls{coalesced}会作为一次内存操作出现。 不同的~\glssymbol{GPU}~可能采用不同的\gls{coalesced}读/写数据的方式。 通常来说,如果在$n$个线程中,线程$i$访问的是第$i+j$处的内存,其中$j$是$2$的某个幂的倍数,那么内存操作就易于\gls{coalesced}。 具体的设定在不同的~\glssymbol{GPU}~型号中有所区别。 \glssymbol{GPU}~另一个常见的设定是使一个组中的所有线程都同时执行同一指令。 这意味着~\glssymbol{GPU}~难以执行分支操作。 线程被分为一个个称作~\textbf{warp}~的小组。 在一个~\gls{warp}~中的每一个线程在每一个循环中执行同一指令,所以当同一个~\gls{warp}~中的不同线程需要执行不同的指令时,需要使用串行而非并行的方式。 % 434 由于实现高效~\glssymbol{GPU}~代码的困难性,研究人员应该组织好他们的工作流程,避免对每一个新的模型或算法都编写新的~\glssymbol{GPU}~代码。 通常来讲,人们会选择建立一个包含高效操作(如卷积和矩阵乘法)的软件库解决这个问题,然后再从库中调用所需要的操作确定模型。 %例如,\gls{ML}库Pylearn2 \citep{pylearn2_arxiv_2013}通过调用Theano \citep{bergstra+al:2010-scipy-short,Bastien-2012}和cuda-convnet \citep{Krizhevsky2010tr}提供的高性能操作,囊括了许多\gls{ML}算法。 例如,\gls{ML}库Pylearn2 \citep{pylearn2_arxiv_2013}将其所有的\gls{ML}算法都通过调用Theano~\citep{bergstra+al:2010-scipy-short,Bastien-2012}和cuda-convnet~\citep{Krizhevsky2010tr} 所提供的高性能操作来指定。 这种分解方法还可以简化对多种硬件的支持。 例如,同一个Theano程序可以在CPU或者~\glssymbol{GPU}~上运行,而不需要改变调用Theano的方式。 其他库如Tensorflow~\citep{tensorflow}和Torch~\citep{Torch-2011}也提供了类似的功能。 % 434 end \subsection{大规模的分布式实现} \label{sec:large_scale_distributed_implementations} 在许多情况下,单个机器的计算资源是有限的。 因此,我们希望把训练或者推断的任务分摊到多个机器上进行。 % 434 end 分布式的推断是容易实现的,因为每一个输入的样本都可以在单独的机器上运行。 这也被称为\firstgls{data_parallelism}。 同样地,\firstgls{model_parallelism}也是可行的,其中多个机器共同运行一个数据点,每一个机器负责模型的一个部分。 对于推断和训练,这都是可行的。 % 435 在训练过程中,\gls{data_parallelism}某种程度上来说更加困难。 对于\gls{SGD}的单步来说,我们可以增加\gls{minibatch}的大小,但是从优化性能的角度来说,我们得到的回报通常并不会线性增长。 使用多个机器并行地计算多个\gls{GD}步骤是一个更好的选择。 不幸的是,\gls{GD}的标准定义完全是一个串行的过程: 第$t$步的梯度是第$t-1$步所得参数的函数。 % 435 这个问题可以使用\firstgls{ASGD}\citep{BenDucVin01-small,Recht-et-al-NIPS2011}解决。 在这个方法中,几个处理器的核共用存有参数的内存。 每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下增量更新这些参数。 %这种方法减少了每一个\gls{GD}所获得的平均提升,因为一些核把其他的核所更新的参数(写)覆盖了。 由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步\gls{GD}所获得的平均提升。 但因为更新步数的速率增加,总体上还是加快了学习过程。 \citet{Dean-et-al-NIPS2012}率先尝试了无锁的\gls{GD}方法的多机器实现,其中参数是由\firstgls{parameter_server}管理而非存储在共用的内存中。 分布式的异步\gls{GD}方法目前依然是训练大型\gls{DNN}的基本策略,并被工业界很多\gls{ML}组所使用\citep{chilimbi2014project,Wu-et-al-arXiv2015}。 学术界的\gls{DL}研究者们通常无法负担那么大规模的分布式学习系统,但是仍有一些研究关注于如何在校园环境中使用相对廉价的硬件系统构造分布式网络~\citep{icml2013_coates13}。 % 435 \subsection{\glsentrytext{model_compression}} \label{sec:model_compression} % 435 在许多商业应用的\gls{ML}模型中,一个时间和内存开销较小的推断算法比一个时间和内存开销较小的训练算法要更为重要。 对于那些不需要个性化设计的应用来说,我们只需要一次性的训练模型,然后它就可以被成千上万的用户使用。 在许多情况下,相比开发者,终端用户的可用资源往往更有限。 例如,开发者们可能会使用巨大的计算机集群训练一个\gls{SR}的网络,然后将其部署到移动手机上。 减少推断所需开销的一个关键策略是\firstgls{model_compression}~\citep{bucilua2006model}。 \gls{model_compression}的基本思想是用一个更小的模型取代原始耗时的模型,从而使得存储与评估模型所需的内存与运行时间更少。 当原始模型的规模主要由防止\gls{overfitting}的需求驱动时,\gls{model_compression}就可以起到作用。 在许多情况下,拥有最小\gls{generalization}误差的模型往往是多个独立训练而成的模型的\gls{ensemble}。 评估所有$n$个\gls{ensemble}成员的成本很高。 有时候,当单个模型很大(例如,如果它使用~\gls{dropout}~正则化)时,其\gls{generalization}能力也会很好。 % 436 这些巨大的模型能够学习到某个函数$f(\Vx)$,但选用的参数数量超过了任务所需的参数数量。 %仅仅训练样本数是有限的,所以网络的规模是受限的。 只是因为训练样本数是有限的,所以模型的规模才变得必要。 只要我们拟合了这个函数$f(\Vx)$,我们就可以通过将$f$作用于随机采样点$x$来生成有无穷多训练样本的训练集。 %我们就可以生成一个拥有了无穷多训练样本的训练集,只需将$f$作用于任意生成的$\Vx$。 然后,我们使用这些样本训练一个新的更小的模型,使其能够在这些点上拟合$f(\Vx)$。 为了更加充分地利用了这个新的小模型的\gls{capacity},最好从类似于真实测试数据(之后将提供给模型)的分布中采样$\Vx$。 这个过程可以通过损坏训练样本或者从原始训练数据训练的生成模型中采样完成。 此外,我们还可以仅在原始训练数据上训练一个更小的模型,但只是为了复制模型的其他特征,比如在不正确的类上的后验分布\citep{Hinton-dark-2014,hinton2015distilling}。 % 436 \subsection{\glsentrytext{dynamic_structure}} \label{sec:dynamic_structure} 一般来说,加速数据处理系统的一种策略是构造一个系统,这个系统用\firstgls{dynamic_structure}描述图中处理输入的所需计算过程。 在给定一个输入的情况中,数据处理系统可以动态地决定运行神经网络系统的哪一部分。 单个神经网络内部同样也存在\gls{dynamic_structure},给定输入信息,决定特征(\gls{hidden_unit})哪一部分用于计算。 这种神经网络中的\gls{dynamic_structure}有时被称为\firstgls{conditional_computation}\citep{Bengio-chapterSLSP-2013,bengio2013estimating}。 由于模型结构许多部分可能只跟输入的一小部分有关,只计算那些需要的特征可以起到加速的目的。 % 436 \gls{dynamic_structure}计算是一种基础的计算机科学方法,广泛应用于软件工程项目。 应用于神经网络的最简单的\gls{dynamic_structure}基于决定神经网络(或者其他\gls{ML}模型)中的哪些子集需要应用于特定的输入。 % 437 在分类器中加速推断的可行策略是使用\firstgls{cascade}的分类器。 当目标是检测罕见对象(或事件)是否存在时,可以应用\gls{cascade}策略。 要确定对象是否存在,我们必须使用具有高\gls{capacity}、运行成本高的复杂分类器。 然而,因为对象是罕见的,我们通常可以使用更少的计算拒绝不包含对象的输入。 在这些情况下,我们可以训练一序列分类器。 序列中的第一个分类器具有低\gls{capacity},训练为具有高\gls{recall}。 换句话说,他们被训练为确保对象存在时,我们不会错误地拒绝输入。 最后一个分类器被训练为具有高精度。 在测试时,我们按照顺序运行分类器进行推断,一旦\gls{cascade}中的任何一个拒绝它,就选择抛弃。 总的来说,这允许我们使用高\gls{capacity}模型以较高的置信度验证对象的存在,而又不会强制我们为每个样本付出完全推断的成本。 有两种不同的方式可以使得\gls{cascade}实现高\gls{capacity}。 一种方法是使\gls{cascade}中靠后的成员单独具有高\gls{capacity}。 在这种情况下,由于系统中的一些个体成员具有高\gls{capacity},因此系统作为一个整体显然也具有高\gls{capacity}。 还可以使用另一种\gls{cascade},其中每个单独的模型具有低\gls{capacity},但是由于许多小型模型的组合,整个系统具有高\gls{capacity}。 \citet{Viola01}使用\gls{cascade}的增强\gls{decision_tree}实现了适合在手持数字相机中使用的快速并且鲁棒的面部检测器。 本质上,它们的分类器使用滑动窗口方法来定位面部。 分类器会检查许多的窗口,如果这些窗口内不包含面部则被拒绝。 \gls{cascade}的另一个版本使用靠前的模型来实现一种硬\gls{attention_mechanism}:\gls{cascade}的先遣成员定位对象,\gls{cascade}的后续成员在给定对象位置的情况下执行进一步处理。 例如,Google使用两步\gls{cascade}从街景视图图像中转换地址编号:首先使用一个\gls{ML}模型查找地址编号,然后使用另一个\gls{ML}模型将其转录\citep{Goodfellow+et+al-ICLR2014a}。 % 437 \gls{decision_tree}本身是\gls{dynamic_structure}的一个例子,因为树中的每个节点决定应该使用哪个子树来评估输入。 一个结合\gls{DL}和\gls{dynamic_structure}的简单方法是训练一个\gls{decision_tree},其中每个节点使用神经网络做出决策\citep{guo1992classification},虽然这种方法没有实现加速推断计算的目标。 % 437 end 类似的,我们可以使用称为\firstgls{gater}的神经网络来选择在给定当前输入的情况下将使用几个\firstgls{expert_network}中的哪一个来计算输出。 这个想法的第一个版本被称为\firstgls{mixture_of_experts}\citep{Nowlan90,Jacobs-nc91},其中\gls{gater}为每个专家输出一个概率或权重(通过非线性的\gls{softmax}获得),并且最终输出由各个专家输出的加权组合获得。 在这种情况下,使用\gls{gater}不会降低计算成本,但如果每个样本的\gls{gater}选择单个专家,我们就会获得一个特殊的\firstgls{hard_mixture_of_experts}\,\citep{collobert:2001:rr01-12,collobert:2002},这可以加速推断和训练。 当\gls{gater}决策的数量很小时,这个策略效果会很好,因为它不是组合的。 但是当我们想要选择不同的单元或参数子集时,不可能使用``软开关'',因为它需要枚举(和计算输出)所有的\gls{gater}配置。 为了解决这个问题,许多工作探索了几种方法来训练组合的\gls{gater}。 \citet{bengio2013estimating}提出使用\gls{gater}概率梯度的若干估计器,而~\citet{Bacon-et-al-RLDM2015,BengioE-et-al-arXiv2015}使用\gls{RL}技术(\firstgls{policy_gradient})来学习一种条件的~\gls{dropout}~形式(作用于\gls{hidden_unit}块),减少了实际的计算成本,而不会对近似的质量产生负面影响。 % 438 另一种\gls{dynamic_structure}是开关,其中隐藏单元可以根据具体情况从不同单元接收输入。 这种动态路由方法可以理解为\firstgls{attention_mechanism} \citep{Olshausen1993}。 目前为止,硬性开关的使用在大规模应用中还没有被证明是有效的。 较为先进的方法一般采用对许多可能的输入使用加权平均,因此不能完全得到\gls{dynamic_structure}所带来的计算益处。 先进的\gls{attention_mechanism}将在\secref{sec:using_an_attention_mechanism_and_aligning_pieces_of_data}中描述。 % 438 使用动态结构化系统的主要障碍是由于系统针对不同输入的不同代码分支导致的并行度降低。 这意味着网络中只有很少的操作可以被描述为对样本\gls{minibatch}的矩阵乘法或批量卷积。 我们可以写更多的专用子程序,用不同的核对样本做卷积,或者通过不同的权重列来乘以设计矩阵的每一行。 不幸的是,这些专用的子程序难以高效地实现。 由于缺乏高速缓存的一致性,CPU实现会十分缓慢。 此外,由于缺乏\gls{coalesced}的内存操作以及~\gls{warp}~成员使用不同分支时需要串行化操作,\glssymbol{GPU}~的实现也会很慢。 在一些情况下,我们可以通过将走同一个分支的样本分到同一组,从而可以同时处理这些样本组的方式来缓解这些问题。 在离线环境中,这是最小化处理固定量样本所需时间的一项可接受的策略。 然而在实时系统中,样本必须连续处理,对工作负载进行分区可能会导致负载均衡问题。 例如,如果我们分配一台机器处理\gls{cascade}中的第一步,另一台机器处理\gls{cascade}中的最后一步,那么第一台机器将倾向于过载,最后一个机器倾向于欠载。 如果每个机器被分配以实现神经\gls{decision_tree}的不同节点,也会出现类似的问题。 % 439 \subsection{深度网络的专用硬件实现} \label{sec:specialized_hardware_implementations_of_deep_networks} %439 自从早期的神经网络研究以来,硬件设计者已经致力于可以加速\gls{NN}算法的训练和/或推断的专用硬件实现。 读者可以查看早期和更近的专用硬件深度网络的评论\citep{Lindsey+Lindblad-1994,Beiu-et-al-2003,Misra+Saha-2010}。 %439 不同形式的专用硬件\citep{Graf+Jackel-1989,Mead+Ismail-2012,Kim-et-al-2009,Pham-et-al-2012,Chen-et-al-IEEE2014,Chen-et-al-ACM2014}的研究已经持续了好几十年,比如\firstall{ASIC}的数字(基于数字的二进制表示),模拟\citep{Graf+Jackel-1989,Mead+Ismail-2012}(基于以电压或电流表示连续值的物理实现)和混合实现(组合数字和模拟组件)。 近年来更灵活的\firstall{FPGA}实现(其中电路的具体细节可以在制造完成后写入芯片)也得到了长足发展。 % 439 mid 虽然CPU和~\glssymbol{GPU}~上的软件实现通常使用32或64位的精度来表示浮点数,但是长期以来使用较低的精度在更短的时间内完成推断也是可行的\citep{Holt-et-al-1991,Holi+Hwang-1993,Presley-et-al-1994,Simard+Graf-NIPS1994,Wawrzynek-et-al-IEEE1996,Savich-et-al-2007}。 这已成为近年来更迫切的问题,因为\gls{DL}在工业产品中越来越受欢迎,并且由于更快的硬件产生的巨大影响已经通过~\glssymbol{GPU}~的使用得到了证明。 激励当前对深度网络专用硬件研究的另一个因素是单个CPU或~\glssymbol{GPU}~核心的进展速度已经减慢,并且最近计算速度的改进来自于核心的并行化(无论CPU还是~\glssymbol{GPU})。 这与20世纪90年代的情况(上一个神经网络时代)不同,当时\gls{NN}的硬件实现(从开始到芯片可用可能需要两年)跟不上快速进展和价格低廉的通用CPU的脚步。 因此,在针对诸如手机等低功率设备开发新的硬件设计,并且想要用于\gls{DL}的一般公众应用(例如,具有语音、\gls{CV}或自然语言功能的设施)等时,研究专用硬件能够进一步推动其发展。 % 440 head 最近对基于\gls{BP}\gls{NN}的低精度实现的工作\citep{Vanhoucke-et-al-2011,Courbariaux-et-al-ICLR2015workshop,Gupta-et-al-2015}表明,8和16位之间的精度足以满足使用或训练基于\gls{BP}的\gls{DNN}的要求。 显而易见的是,在训练期间需要比在推断时更高的精度,并且数字某些形式的动态定点表示能够减少每个数需要的存储空间。 传统的定点数被限制在了一个固定范围之内(其对应于浮点表示中的给定指数)。 而动态定点表示在一组数字 (例如一个层中的所有权重) 之间共享该范围。 使用定点代替浮点表示并且每个数使用较少的比特能够减少执行乘法所需的硬件表面积、功率需求和计算时间。 而乘法是使用或训练\gls{BP}的现代深度网络中要求最高的操作。 % 440 new \section{\glsentrytext{CV}} \label{sec:computer_vision} 一直以来,\gls{CV}就是\gls{DL}应用中几个最活跃的研究方向之一。 因为视觉是一个对人类以及许多动物毫不费力,但对计算机却充满挑战的任务\citep{ballard1983parallel}。 \gls{DL}中许多流行的标准基准任务包括\gls{object_recognition}以及光学字符识别。 % 440 \gls{CV}是一个非常广阔的发展领域,其中包括多种多样的处理图片的方式以及应用方向。 \gls{CV}的应用广泛:从复现人类视觉能力(比如识别人脸)到创造全新的视觉能力。 举个后者的例子,近期一个新的\gls{CV}应用是从视频中可视物体的振动中识别相应的声波\citep{Davis2014VisualMic}。 大多数\gls{CV}领域的\gls{DL}研究未曾关注过这样一个奇异的应用,它扩展了图像的范围,而不是仅仅关注于\gls{AI}中较小的核心目标——复制人类的能力。 无论是报告图像中存在哪个物体,还是给图像中每个对象添加包围它的边框, 或从图像中转录符号序列,或给图像中的每个像素标记它所属对象的标识, 大多数\gls{CV}中的\gls{DL}往往用于\gls{object_recognition}或者某种形式的检测。 由于\gls{generative_model}已经是\gls{DL}研究的指导原则,因此还有大量图像合成工作使用了深度模型。 尽管图像合成(``\emph{无中生有}'')通常不包括在\gls{CV}内,但是能够进行图像合成的模型常常用于图像恢复,即修复图像中的缺陷或从图像中移除对象这样的\gls{CV}任务。 % 441 \subsection{预处理} \label{sec:preprocessing} % 441 由于原始输入往往以\gls{DL}架构难以表示的形式出现,许多应用领域需要复杂精细的预处理。 \gls{CV}通常只需要相对少的这种预处理。 图像应该被标准化,从而使得它们的像素都在相同并且合理的范围内,比如$[0,1]$或者$[-1,1]$。 将$[0,1]$中的图像与$[0,255]$中的图像混合通常会导致失败。 将图像格式化为具有相同的比例严格上说是唯一一种必要的预处理。 许多\gls{CV}架构需要标准尺寸的图像,因此必须裁剪或缩放图像以适应该尺寸。 然而,严格地说即使是这种重新调整比例的操作并不总是必要的。 一些卷积模型接受可变大小的输入并动态地调整它们的\gls{pooling}区域大小以保持输出大小恒定\citep{Waibel89b}。 其他卷积模型具有可变大小的输出,其尺寸随输入自动缩放,例如对图像中的每个像素进行\gls{denoise}或标注的模型\citep{Hadsell-RSS-07}。 % 441 \gls{dataset_augmentation}可以被看作是一种只对训练集做预处理的方式。 \gls{dataset_augmentation}是减少大多数\gls{CV}模型\gls{generalization}误差的一种极好方法。 在测试时可用的一个相关想法是将同一输入的许多不同版本传给模型(例如,在稍微不同的位置处裁剪的相同图像),并且在模型的不同实例上决定模型的输出。 后一个想法可以被理解为集成方法,并且有助于减少\gls{generalization}误差。 % 441 其他种类的预处理需要同时应用于训练集和测试集,其目的是将每个样本置于更规范的形式,以便减少模型需要考虑的变化量。 减少数据中的变化量既能够减少\gls{generalization}误差,也能够减小拟合训练集所需模型的大小。 更简单的任务可以通过更小的模型来解决,而更简单的解决方案\gls{generalization}能力一般更好。 这种类型的预处理通常被设计为去除输入数据中的某种可变性,这对于人工设计者来说是容易描述的,并且人工设计者能够保证不受到任务影响。 当使用大型数据集和大型模型训练时,这种预处理通常是不必要的,并且最好就让模型去学习哪些变化性应该保留。 例如,用于分类ImageNet的AlexNet系统仅具有一个预处理步骤:对每个像素减去训练样本的平均值\citep{Krizhevsky-2012}。 % 442 \subsubsection{对比度归一化} \label{sec:contrast_normalization} % 442 在许多任务中,对比度是能够安全移除的最为明显的变化源之一。 简单地说,对比度指的是图像中亮像素和暗像素之间差异的大小。 量化图像对比度有许多方式。 在\gls{DL}中,对比度通常指的是图像或图像区域中像素的\gls{standard_deviation}。 假设我们有一个张量表示的图像$\TSX \in\SetR^{r\times c\times 3}$,其中$\TEX_{i,j,1}$表示第$i$行第$j$列红色的强度,$\TEX_{i,j,2}$对应的是绿色的强度,$\TEX_{i,j,3}$对应的是蓝色的强度。 然后整个图像的对比度可以表示如下: \begin{align} \label{eqn:121} \sqrt{\frac{1}{3rc}\sum_{i=1}^{r} \sum_{j=1}^{c}\sum_{k=1}^{3} (\TEX_{i,j,k} - \bar{\TSX} )^2}, \end{align} 其中$\bar{\TSX}$是整个图片的平均强度,满足 \begin{align} \label{eqn:122} \bar{\TSX} = \frac{1}{3rc}\sum_{i=1}^{r} \sum_{j=1}^{c}\sum_{k=1}^{3}\TEX_{i,j,k}. \end{align} \firstall{GCN}旨在通过从每个图像中减去其平均值,然后重新缩放其使得其像素上的\gls{standard_deviation}等于某个常数$s$来防止图像具有变化的对比度。 这种方法非常复杂,因为没有缩放因子可以改变零对比度图像(所有像素都具有相等强度的图像)的对比度。 具有非常低但非零对比度的图像通常几乎没有信息内容。 在这种情况下除以真实\gls{standard_deviation}通常仅能放大传感器噪声或压缩伪像。 这种现象启发我们引入一个小的正的\gls{regularization}参数$\lambda$来平衡估计的\gls{standard_deviation}。 或者,我们至少可以约束分母使其大于等于$\epsilon$。 给定一个输入图像$\TSX$,\gls{GCN}产生输出图像$\TSX'$,定义为 \begin{align} \label{eqn:123} \TEX'_{i,j,k} = s\frac{\TEX_{i,j,k} - \bar{\TEX}}{\max\{ \epsilon, \sqrt{ \lambda + {\frac{1}{3rc}\sum_{i=1}^{r}\sum_{j=1}^{c}\sum_{k=1}^{3}} (\TEX_{i,j,k} - \bar{\TEX} )^2} \}}. \end{align} % 442 end 从大图像中剪切感兴趣的对象所组成的数据集不太可能包含任何强度几乎恒定的图像。 在这些情况下,通过设置$\lambda = 0$来忽略小分母问题是安全的,并且在非常罕见的情况下为了避免除以$0$,通过将$\epsilon$设置为一个非常小的值比如说$10^{-8}$。 这也是~\citet{Goodfellow+al-arxiv-2013}在CIFAR-10数据集上所使用的方法。 随机剪裁的小图像更可能具有几乎恒定的强度,使得激进的\gls{regularization}更有用。 在处理从CIFAR-10数据中随机选择的小区域时,\citet{Coates2011}使用$\epsilon = 0, \lambda = 10$。 % 443 尺度参数$s$通常可以设置为$1$(如~\citet{Coates2011}所采用的),或选择使所有样本上每个像素的\gls{standard_deviation}接近$1$(如\citet{Goodfellow+al-arxiv-2013}所采用的)。 % 443 mid \eqnref{eqn:123}中的\gls{standard_deviation}仅仅是对图片$L^2$范数的重新缩放(假设图像的平均值已经被移除)。 我们更偏向于根据\gls{standard_deviation}而不是$L^2$范数来定义~\glssymbol{GCN},因为\gls{standard_deviation}包括除以像素数量这一步,从而基于\gls{standard_deviation}的~\glssymbol{GCN}~能够使用与图像大小无关的固定的$s$。 然而,观察到$L^2$范数与\gls{standard_deviation}成比例,能够帮助我们建立一种直观的感觉。 我们可以把~\glssymbol{GCN}~理解成到球壳的一种映射。 \figref{fig:gcn_sphere_color}对此有所说明。 这可能是一个有用的属性,因为\gls{NN}往往能更好地响应空间方向,而不是精确的位置。 响应相同方向上的多个距离需要具有共线权重向量但具有不同偏置的\gls{hidden_unit}。 这样的情况对于学习算法来说可能是困难的。 此外,许多浅层的图模型把多个分离的模式表示在一条线上会出现问题。 \glssymbol{GCN}~采用一个样本一个方向\footnote{译者:所有样本相似的距离}而不是不同的方向和距离来避免这些问题。 % 444 head \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter12/figures/gcn_sphere_color}} \fi \caption{\glssymbol{GCN}~将样本投影到一个球上。 \emph{(左)}原始的输入数据可能拥有任意的范数。 \emph{(中)}$\lambda=0$时候的~\glssymbol{GCN}~可以完美地将所有的非零样本投影到球上。 这里我们令$s=1$,$\epsilon = 10^{-8}$。 由于我们使用的~\glssymbol{GCN}~是基于归一化\gls{standard_deviation}而不是$L^2$范数,所得到的球并不是单位球。 \emph{(右)}$\lambda>0$的\gls{regularization}~\glssymbol{GCN}~将样本投影到球上,但是并没有完全地丢弃其范数中变化。 $s$和$\epsilon$的取值与之前一样。} \label{fig:gcn_sphere_color} \end{figure} % 443 tail % 444 head 与直觉相反的是,存在被称为~\textbf{sphering}~的预处理操作,并且它不同于~\glssymbol{GCN}。 \gls{sphering}~并不会使数据位于球形壳上,而是将主成分重新缩放以具有相等方差,使得~\glssymbol{PCA}~使用的多变量正态分布具有球形等高线。 \gls{sphering}~通常被称为\firstgls{whitening}。 % 444 head \gls{GCN}常常不能突出我们想要突出的图像特征,例如边缘和角。 如果我们有一个场景,包含了一个大的黑暗区域和一个大的明亮的区域(例如一个城市广场有一半的区域处于建筑物的阴影之中), 则\gls{GCN}将确保暗区域的亮度与亮区域的亮度之间存在大的差异。 然而,它不能确保暗区内的边缘突出。 % 444 这催生了\firstall{LCN} 。 \gls{LCN}确保对比度在每个小窗口上被归一化,而不是作为整体在图像上被归一化。 关于\gls{LCN}和\gls{GCN}的比较可以参考\figref{fig:122}。 % 444 % src0 gray0, gcn0? lcn0 % src1? gcn1? gray1? lcn1 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centering \begin{tabular}{ccc} \includegraphics[width=.3\figwidth]{Chapter12/figures/gray0.jpg} & \includegraphics[width=.3\figwidth]{Chapter12/figures/gcn0.jpg} & \includegraphics[width=.3\figwidth]{Chapter12/figures/lcn0.jpg} \\ \includegraphics[width=.3\figwidth]{Chapter12/figures/gray1.jpg} & % ?? may be problem \includegraphics[width=.3\figwidth]{Chapter12/figures/gcn1.jpg} & \includegraphics[width=.3\figwidth]{Chapter12/figures/lcn1.jpg}\\ Input image & GCN & LCN \end{tabular} \fi \caption{\gls{GCN}和\gls{LCN}的比较。直观上说,\gls{GCN}的效果很巧妙。它使得所有的图片的尺度都差不多,这减轻了学习算法处理多个尺度的负担。\gls{LCN}更多地改变了图像,丢弃了所有相同强度的区域。这使得模型能够只关注于边缘。较好的纹理区域,如第二行的屋子,可能会由于归一化核的过高带宽而丢失一些细节。} \label{fig:122} \end{figure} \gls{LCN}的各种定义都是可行的。 在所有情况下,我们可以通过减去邻近像素的平均值并除以邻近像素的\gls{standard_deviation}来修改每个像素。 在一些情况下,计算的是以当前要修改的像素为中心的矩形窗口中所有像素的平均值和\gls{standard_deviation}~\citep{Pinto08}。 在其他情况下,使用的则是以要修改的像素为中心的高斯权重的加权平均和加权\gls{standard_deviation}。 在彩色图像的情况下,一些策略单独处理不同的颜色通道,而其他策略组合来自不同通道的信息以使每个像素归一化\citep{sermanet-icpr-12}。 % 444 \gls{LCN}通常可以通过使用可分离卷积(参考\secref{sec:efficient_convolution_algorithms})来计算\gls{feature_map}的局部平均值和局部\gls{standard_deviation},然后在不同的\gls{feature_map}上使用逐元素的减法和除法来实现。 % 444 \gls{LCN}是可微分的操作,并且还可以作为一种非线性作用应用于网络隐藏层,以及应用于输入的预处理操作。 % 444 与\gls{GCN}一样,我们通常需要\gls{regularization}\gls{LCN}来避免出现除以零的情况。 事实上,因为\gls{LCN}通常作用于较小的窗口,所以\gls{regularization}更加重要。 较小的窗口更可能包含彼此几乎相同的值,因此更可能具有零\gls{standard_deviation}。 % 445 \subsection{\glsentrytext{dataset_augmentation}} \label{sec:dataset_augmentation_chap12} 如\secref{sec:dataset_augmentation_chap7}中讲到的一样,我们很容易通过增加训练集的额外副本来增加训练集的大小,进而改进分类器的\gls{generalization}能力。 这些额外副本可以通过对原始图像进行一些变化来生成,但是并不改变其类别。 \gls{object_recognition}这个分类任务特别适合于这种形式的\gls{dataset_augmentation},因为类别信息对于许多变换是不变的,而我们可以简单地对输入应用诸多几何变换。 如前所述,分类器可以受益于随机平移或者旋转,以及某些情况下输入的翻转,以此增强数据集。 在专门的\gls{CV}应用中,存在很多更高级的用以\gls{dataset_augmentation}的变换。 这些方案包括图像中颜色的随机扰动~\citep{Krizhevsky-2012},以及对输入的非线性几何变形~\citep{LeCun98-small}。 % 445 \section{\glsentrytext{SR}} \label{sec:speech_recognition} % 446 \gls{SR}任务在于将一段包括了自然语言发音的声学信号映射到对应说话人意图表达的词序列上。 令$\MX=(\Vx^{(1)},\Vx^{(2)},\ldots,\Vx^{(T)})$表示语音的输入向量(传统做法以$20$ms为一帧分割信号)。 许多\gls{SR}的系统通过特殊的手工设计方法预处理输入信号,从而提取特征,但是某些\gls{DL}系统\citep{jaitly2011learning}直接从原始输入中学习特征。 令$\Vy=(y_{1},y_{2},\ldots,y_{N})$表示目标的输出序列(通常是一个词或者字符的序列)。 \firstall{ASR}任务指的是构造一个函数$f^*_{\text{ASR}}$,使得它能够在给定声学序列$\MX$的情况下计算最有可能的语言序列$\Vy$: \begin{align} \label{eqn:124} f^*_{\text{ASR}}(\MX) = \underset{\Vy}{\arg\max} P^*(\RVy \mid \RMX = \MX), \end{align} 其中$P^*$是给定输入值$\MX$时对应目标$\Vy$的真实条件分布。 % 446 从20世纪80年代直到约2009-2012年,最先进的\gls{SR}系统是\firstall{HMM}和\firstall{GMM}的结合。 \glssymbol{GMM}~对声学特征和\firstgls{phoneme}之间的关系建模\citep{Bahl87},\glssymbol{HMM}~对\gls{phoneme}序列建模。 \glssymbol{GMM}-\glssymbol{HMM}~模型将语音信号视作由如下过程生成:首先,一个~\glssymbol{HMM}~生成了一个\gls{phoneme}的序列以及离散的子\gls{phoneme}状态(比如每一个\gls{phoneme}的开始,中间,结尾),然后~\glssymbol{GMM}~把每一个离散的状态转化为一个简短的声音信号。 尽管直到最近~\glssymbol{GMM}-\glssymbol{HMM}~一直在~\glssymbol{ASR}~中占据主导地位,\gls{SR}仍然是\gls{NN}所成功应用的第一个领域。 从20世纪80年代末期到90年代初期,大量\gls{SR}系统使用了\gls{NN}~\citep{Bourlard-cspla89,Waibel89b,Robinson+Fallside91,Bengio91z,Bengio92c,Konig96}。 当时,基于\gls{NN}的~\glssymbol{ASR}~的表现和~\glssymbol{GMM}-\glssymbol{HMM}~系统的表现差不多。 比如说,\citet{Robinson+Fallside91}在TIMIT数据集\citep{garofolo1993darpa}(有$39$个区分的\gls{phoneme}% ?? error )上达到了$26$\%的\gls{phoneme}错误率,这个结果优于或者说是可以与基于~\glssymbol{HMM}~的结果相比。 从那时起,TIMIT成为了\gls{phoneme}识别的一个基准数据集,在\gls{SR}中的作用就和MNIST在\gls{object_recognition}中的作用差不多。 然而,由于\gls{SR}软件系统中复杂的工程因素以及在基于~\glssymbol{GMM}-\glssymbol{HMM}~的系统中已经付出的巨大努力,工业界并没有看到迫切转向\gls{NN}的需求。 结果,直到21世纪00年代末期,学术界和工业界的研究者们更多的是用\gls{NN}为~\glssymbol{GMM}-\glssymbol{HMM}~系统学习一些额外的特征。 % 447 之后,随着\emph{更大更深}的模型以及更大的数据集的出现,通过使用\gls{NN}代替~\glssymbol{GMM}~来实现将声学特征转化为\gls{phoneme}(或者子\gls{phoneme}状态)的过程可以大大地提高识别的精度。 从2009年开始,\gls{SR}的研究者们将一种\gls{unsupervised_learning}的\gls{DL}方法应用于\gls{SR}。 这种\gls{DL}方法基于训练一个被称作是\gls{RBM}的无向概率模型,从而对输入数据建模。 \gls{RBM}将会在第三部分中描述。 为了完成\gls{SR}任务,\gls{unsupervised}的\gls{pretraining}被用来构造一个\gls{deep_feedforward_network},这个\gls{NN}每一层都是通过训练\gls{RBM}来初始化的。 这些网络的输入是从一个固定规格的输入窗(以当前帧为中心)的谱声学表示抽取,预测了当前帧所对应的~\glssymbol{HMM}~状态的条件概率。 训练一个这样的\gls{NN}能够可以显著提高在TIMIT数据集上的识别率~\citep{mohamed2009deep,Mohamed+Dahl+Hinton-2012},并将\gls{phoneme}级别的错误率从大约$26$\%降到了$20.7$\%。 关于这个模型成功原因的详细分析可以参考\citet{mohamed2012understanding}。 对于基本的电话识别工作流程的一个扩展工作是添加说话人自适应相关特征\citep{mohamed2011deep}的方法,这可以进一步地降低错误率。 紧接着的工作则将结构从\gls{phoneme}识别(TIMIT所主要关注的)转向了大规模词汇语音识别\citep{Dahl2012},这不仅包含了识别\gls{phoneme},还包括了识别大规模词汇的序列。 \gls{SR}上的深度网络从最初的使用\gls{RBM}进行\gls{pretraining}发展到了使用诸如\gls{ReLU}和~\gls{dropout}~这样的技术~\citep{Zeiler+al-ICASSP-2013,Dahl-et-al-ICASSP2013}。 从那时开始,工业界的几个语音研究组开始寻求与学术圈的研究者之间的合作。 \citet{Hinton-et-al-2012}描述了这些合作所带来的突破性进展,这些技术现在被广泛应用在产品中,比如移动手机端。 % 447 随后,当研究组使用了越来越大的带标签的数据集,加入了各种初始化,训练方法以及调试\gls{DNN}的结构之后, 他们发现这种\gls{unsupervised}的\gls{pretraining}方式是没有必要的,或者说不能带来任何显著的改进。 % 447 用\gls{SR}中词错误率来衡量,在\gls{SR}性能上的这些突破是史无前例的(大约$30$\%的提高)。 在这之前的长达十年左右的时间内,尽管数据集的规模是随时间增长的(见~\citet{Deng+Yu-2014}的图2.4),但基于~\glssymbol{GMM}-\glssymbol{HMM}~的系统的传统技术已经停滞不前了。 这也导致了\gls{SR}领域快速地转向\gls{DL}的研究。 在大约的两年时间内,工业界的大多数的\gls{SR}产品都包含了\gls{DNN},这种成功也激发了~\glssymbol{ASR}领~域对\gls{DL}算法和结构的一波新的研究浪潮,并且影响至今。 % 448 其中的一个创新点是\gls{convolutional_network}的应用~\citep{Sainath-et-al-ICASSP2013}。 \gls{convolutional_network}在时域与频域上复用了权重,改进了之前的仅在时域上复用权重的\gls{TDNNs}。 这种新的二维的卷积模型并不是将输入的频谱当作一个长的向量,而是当成是一个图像,其中一个轴对应着时间,另一个轴对应的是谱分量的频率。 % 448 完全抛弃~\glssymbol{HMM}~并转向研究\gls{end_to_end}\gls{DL}\gls{SR}系统是至今仍然活跃的另一个重要推动。 这个领域第一个主要的突破是~\citet{Graves-et-al-ICASSP2013},其中训练了一个深度的\gls{LSTM}\gls{RNN}(见\secref{sec:the_long_short_term_memory_and_other_gated_rnns}),使用了帧到\gls{phoneme}对其的~\glssymbol{MAP}~推断,就像~\citet{LeCun98-small}以及CTC框架~\citep{Graves-et-al-2006,Graves-book2012}中一样。 一个深度\gls{RNN}~\citep{Graves-et-al-ICASSP2013}每个\gls{time_step}的各层都有状态变量,使得它的\gls{unfolded_graph}具有两种不同深度:一种是普通的根据层的堆叠衡量的深度,另一种根据时间\gls{unfolding}衡量的深度。 这个工作把TIMIT数据集上\gls{phoneme}的错误率记录降到了的新低$17.7$\%。 关于应用于其他领域的深度\gls{RNN}的变种可以参考~\citet{Pascanu-et-al-ICLR2014,Chung-et-al-NIPSDL2014-small}。 % 448 另一个\gls{end_to_end}\gls{DL}\gls{SR}方向的最新进展是让系统学习如何将\firstgls{phonetic}层级的信息与\firstgls{acoustic}层级的信息``对齐''~\citep{Chorowski-et-al-arxiv2014,llu_is2015b}。 % 448 % Translator: Shenjian Zhao \section{\glsentrytext{NLP}} \label{sec: natural_language_processing} \firstgls{NLP}让计算机能够使用人类语言,例如英语或法语。 为了让简单的程序能够高效明确地解析,计算机程序通常读取和发出特殊化的语言。 而自然的语言通常是模糊的,并且可能不遵循严格的形式描述。 \gls{NLP}中的应用如机器翻译,学习者需要读取一种人类语言的句子,并用另一种人类语言发出相同意思的句子。 许多~\glssymbol{NLP}~应用程序基于\gls{language_model},\gls{language_model}定义了关于自然语言中的字、字符或字节序列的概率分布。 % -- 448 -- 与本章讨论的其他应用一样,非常通用的\gls{NN}技术可以成功地应用于\gls{NLP}。 然而,为了实现卓越的性能并扩展到大型应用程序,一些领域特定的策略也很重要。 为了构建自然语言的有效模型,通常必须使用专门处理序列数据的技术。 在很多情况下,我们将自然语言视为一系列词,而不是单个字符或字节序列。 因为可能的词总数非常大,基于词的\gls{language_model}必须在极高维度和稀疏的离散空间上操作。 为使这种空间上的模型在计算和统计意义上都高效,研究者已经开发了几种策略。 \subsection{\glsentrytext{n_gram}} \label{sec:n_grams} \firstgls{language_model}定义了自然语言中\gls{token}序列的概率分布。 根据模型的设计,\gls{token}可以是词、字符、甚至是字节。 \gls{token}总是离散的实体。 最早成功的\gls{language_model}基于固定长度序列的\gls{token}模型,称为~\gls{n_gram}。 一个~\gls{n_gram}~是一个包含$n$个\gls{token}的序列。 基于~\gls{n_gram}~的模型定义一个条件概率——给定前$n-1$个\gls{token}后,第$n$个\gls{token}出现的条件概率。 该模型使用这些条件分布的乘积定义更长(长度大于$n$)序列的概率分布: \begin{align} P(x_1, \dots, x_\tau) = P(x_1, \dots, x_{n-1}) \prod_{t=n}^\tau P(x_t \mid x_{t-n+1}, \dots, x_{t-1} ). \end{align} 这个分解可以由概率的链式法则证明。 初始序列 $P(x_1, \dots, x_{n-1})$的概率分布可以通过带有较小$n$值的不同模型建模。 训练~\gls{n_gram}~模型是简单的,因为\gls{maximum_likelihood_estimation}可以通过简单地统计每个可能的~\gls{n_gram}~在训练集中出现的次数来获得。 几十年来,基于~\gls{n_gram}~的模型都是统计\gls{language_model}的核心模块~\citep{Jelinek+Mercer80,Katz87,Chen+Goodman99}。 对于小的$n$值,模型有特定的名称:$n=1$称为\firstgls{unigram},$n=2$称为\firstgls{bigram}及$n=3$称为\firstgls{trigram}。 这些名称源于相应数字的拉丁前缀和希腊后缀``-gram'',gram的意思是所写之物。 % -- 449 -- 通常我们同时训练~\gls{n_gram}~模型和$n-1$ gram模型。 这使得下式可以简单地通过查找两个存储的概率来计算。 \begin{align} \label{eq:ml-ngram} P(x_t \mid x_{t-n+1}, \dots, x_{t-1}) = \frac{P_n(x_{t-n+1}, \dots, x_t)} { P_{n-1}( x_{t-n+1}, \dots, x_{t-1}) } \end{align} 为了在$P_n$中精确地再现\gls{inference},我们训练$P_{n-1}$时必须省略每个序列最后一个字符。 举个例子,我们演示三元模型如何计算句子``{\tt THE DOG RAN AWAY}.''的概率。 句子的第一个词不能通过上述条件概率的公式计算,因为句子的开头没有上下文。 取而代之,在句子的开头我们必须使用词的边缘概率。 因此我们计算$P_3({\tt THE\ DOG\ RAN})$。 最后,可以使用条件分布$P({\tt AWAY} \mid {\tt DOG\ RAN})$(典型情况)来预测最后一个词。 将这与\eqnref{eq:ml-ngram}放在一起,我们得到: \begin{align} P({\tt THE\ DOG\ RAN\ AWAY}) = P_3({\tt THE\ DOG\ RAN}) P_3({\tt DOG\ RAN\ AWAY}) / P_2({\tt DOG\ RAN}). \end{align} \gls{n_gram}~模型最大似然的基本限制是,在许多情况下从训练集计数估计得到的$P_n$很可能为零(即使元组$(x_{t-n+1}, \dots, x_{t})$可能出现在测试集中)。 这可能会导致两种不同的灾难性后果。 当$P_{n-1}$为零时,该比率是未定义的,因此模型甚至不能产生有意义的输出。 当$P_{n-1}$非零而$P_n$为零时,测试样本的对数似然为 $-\infty$。 为避免这种灾难性的后果,大多数~\gls{n_gram}~模型采用某种形式的\firstgls{smoothing}。 \gls{smoothing}技术将概率质量从观察到的元组转移到类似的未观察到的元组。 见~\citet{Chen+Goodman99}的综述和实验对比。 其中一种基本技术基于向所有可能的下一个符号值添加非零概率质量。 这个方法可以被看作带有一个计数参数符合均匀或~\ENNAME{Dirichlet}~分布的先验的贝叶斯\gls{inference}。 另一个非常流行的想法是包含高阶和低阶~\gls{n_gram}~模型的混合模型,其中高阶模型提供更多的\gls{capacity},而低阶模型尽可能地避免零计数。 如果上下文$x_{t-n+k}, \ldots, x_{t-1}$的频率太小而不能使用高阶模型,\textbf{回退方法}(back-off methods)就查找低阶~\gls{n_gram} 。 更正式地说,它们通过上下文$x_{t-n+k}, \ldots, x_{t-1}$估计$x_t$上的分布,并增加$k$直到找到足够可靠的估计。 % -- \450 -- 经典的~\gls{n_gram}~模型特别容易引起\gls{curse_of_dimensionality}。 因为存在$|\SetV|^n$可能的~\gls{n_gram},而且 $|\SetV|$ 通常很大。 即使有大量训练数据和适当的$n$,大多数~\gls{n_gram}~也不会出现在训练集中。 看待经典~\gls{n_gram}~模型的一种观点是把它看作执行最近邻查询。 换句话说,它可以被视为局部\gls{nonparametric}预测器,类似于$k$-最近邻。 这些极端局部预测器面临的统计问题已经在\secref{sec:local_constancy_and_smoothness_regularization}中描述过。 \gls{language_model}的问题甚至比普通模型更严重,因为任何两个不同的词在\gls{one_hot}向量空间中的距离彼此相同。 因此,难以大量利用来自任何``邻居''的信息 —— 只有重复相同上下文的训练样本对局部泛化有用。 为了克服这些问题,\gls{language_model}必须能够在一个词和其他语义相似的词之间共享知识。 为了提高~\gls{n_gram}~模型的统计效率,\textbf{基于类的语言模型}(class-based language model)~\citep{Brown92,Ney+Kneser93,Niesler98}引入词类别的概念,然后属于同一类别的词共享词之间的统计强度。 这个想法使用了聚类算法,基于它们与其他词同时出现的频率,将该组词分成集群或类。 随后,模型可以在条件竖杠的右侧使用词类ID而不是单个词ID。 使用混合或回退(fallback)策略将词模型和类模型组成复合模型也是可能的。 尽管词类提供了在序列之间泛化的方式,但其中一些词被相同类的另一个替换,导致该\gls{representation}丢失了很多信息。 \subsection{\glsentrytext{NLM}} \label{sec:neural_language_models} \firstall{NLM}是一类用来克服\gls{curse_of_dimensionality}的\gls{language_model},它使用词的\gls{distributed_representation}对自然语言序列建模~\citep{BenDucVin01-small}。 不同于基于类的~\gls{n_gram}~模型,\gls{NLM}在能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。 \gls{NLM}共享一个词(及其上下文)和其他类似词(和上下文之间)的统计强度。 模型为每个词学习的\gls{distributed_representation},允许模型处理具有类似共同特征的词来实现这种共享。 例如,如果词{\tt dog}和词{\tt cat}映射到具有许多共同属性的表示,则包含词{\tt cat}的句子可以影响模型对包含词{\tt dog}的句子做出的预测,反之亦然。 因为这样的属性很多,所以存在许多泛化的方式,可以将信息从每个训练语句传递到指数数量的语义相关语句。 \gls{curse_of_dimensionality}需要模型泛化到指数多的句子(指数相对句子长度而言)。 该模型通过将每个训练句子与指数数量的类似句子相关联克服这个问题。 % -- 451 -- 我们有时将这些词\gls{representation}称为\firstgls{word_embedding}。 在这个解释下,我们将原始符号视为维度等于词表大小的空间中的点。 词\gls{representation}将这些点嵌入到较低维的特征空间中。 在原始空间中,每个词由一个\gls{one_hot}向量表示,因此每对词彼此之间的欧氏距离都是$\sqrt{2}$。 在嵌入空间中,经常出现在类似上下文(或共享由模型学习的一些``特征''的任何词对)中的词彼此接近。 这通常导致具有相似含义的词变得邻近。 \figref{fig:chap12_word_embeddings_color}放大了学到的\gls{word_embedding}空间的特定区域,我们可以看到语义上相似的词如何映射到彼此接近的表示。 \begin{figure}[htp] \centering \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \includegraphics{Chapter12/figures/word_embeddings_color.pdf} \fi \caption{从\gls{NMT}模型获得的\gls{word_embedding}的二维可视化\citep{Bahdanau-et-al-ICLR2015-small}。 此图在语义相关词的特定区域放大,它们具有彼此接近的嵌入向量。 国家在左图,数字在右图。 注意,这些嵌入是为了可视化才表示为2维。 在实际应用中,嵌入通常具有更高的维度并且可以同时捕获词之间多种相似性。 } \label{fig:chap12_word_embeddings_color} \end{figure} 其他领域的\gls{NN}也可以定义嵌入。 例如,\gls{convolutional_network}的隐藏层提供``图像嵌入''。 因为自然语言最初不在实值向量空间上,所以~\glssymbol{NLP}~从业者通常对嵌入的这个想法更感兴趣。 隐藏层在表示数据的方式上提供了更显著的质上的变化。 % -- 452 -- 使用\gls{distributed_representation}来改进\gls{NLP}模型的基本思想不必局限于\gls{NN}。 它还可以用于\gls{graphical_model},其中\gls{distributed_representation}是多个\gls{latent_variable}的形式\citep{Mnih+Hinton-2007}。 \subsection{高维输出} \label{sec:high_dimensional_outputs} 在许多自然语言应用中,我们通常希望我们的模型产生词(而不是字符)作为输出的基本单位。 对于大词汇表,由于词汇量很大,以在所有可能的词上进行选择的形式表示输出分布的计算成本可能非常高。 在许多应用中,$\SetV$包含数十万词。 表示这种分布的朴素方法是应用一个仿射变换,将隐藏表示转换到输出空间,然后应用~\ENNAME{softmax}~函数。 假设我们的词汇表$\SetV$大小为$| \SetV |$。 因为其输出维数为$| \SetV |$,描述该仿射变换线性分量的权重矩阵非常大。 这造成了表示该矩阵的高存储成本,以及与之相乘的高计算成本。 因为~\ENNAME{softmax}~要在所有$| \SetV |$输出之间归一化,所以在训练时以及测试时执行全矩阵乘法是必要的 ——我们不能仅计算与正确输出的权重向量的点积。 因此,输出层的高计算成本在训练期间(计算似然性及其梯度)和测试期间(计算所有或所选词的概率)都有出现。 对于专门的\gls{loss_function},可以有效地计算梯度 \citep{Vincent2015},但是应用于传统~\ENNAME{softmax}~输出层的标准\gls{cross_entropy}损失时会出现许多困难。 假设$\Vh$是用于预测输出概率$\hat \Vy$的顶部隐藏层。 如果我们使用学到的权重$\MW$和学到的\gls{bias_aff} $\Vb$参数化从$\Vh$到$\hat \Vy$的变换,则仿射~\ENNAME{softmax}~输出层执行以下计算: \begin{align} \label{eq:softmax-over-words} a_i &= b_i + \sum_j W_{ij} h_j \;\;\; \forall i \in \{1,\ldots,|\SetV|\}, \\ \hat{y}_i &= \frac{e^{a_i}}{\sum_{i'=1}^{|\SetV|} e^{a_{i'}}}. \end{align} 如果$\Vh$包含$n_h$个元素,则上述操作复杂度是 $O(|\SetV| n_h)$。 在$n_h$为数千和$| \SetV |$数十万的情况下,这个操作占据了\gls{NLM}的计算开销的一大部分。 % -- 453 -- \subsubsection{使用\glsentrytext{shortlist}} 第一个\gls{NLM}~\citep{BenDucVin01-small,Bengio-nnlm2003-small}通过将词汇量限制为10,000或20,000来减轻大词汇表上~\ENNAME{softmax}~的高成本。 \citet{Schwenk+Gauvain2002}和 \citet{Schwenk-2007}在这种方法的基础上建立新的方式,将词汇表$\SetV$分为最常见词汇(由\gls{NN}处理)的\firstgls{shortlist}~$\SetL$和较稀有词汇的尾列表$\SetT = \SetV \backslash \SetL$(由\gls{n_gram}模型处理)。 为了组合这两个预测,\gls{NN}还必须预测在上下文$C$之后出现的词位于尾列表的概率。 我们可以添加额外的~\ENNAME{sigmoid}~输出单元估计 $P(i \in \SetT \mid C)$实现这个预测。 用上这个额外输出,我们就可以估计$\SetV$中所有词的概率分布,如下: \begin{align} P(y=i\mid C) =& 1_{i \in \SetL} P(y=i\mid C, i \in \SetL) (1 - P(i \in \SetT\mid C)) \nonumber \\ & + 1_{i \in \SetT} P(y=i\mid C, i \in \SetT) P(i \in \SetT\mid C), \end{align} 其中$P(y=i\mid C, i \in \SetL)$由\gls{NLM}提供$P(y=i\mid C, i \in \SetT)$由~\gls{n_gram}~模型提供。 稍作修改,这种方法也可以在\gls{NLM}的~\ENNAME{softmax}~层中使用额外的输出值,而不是单独的~\ENNAME{sigmoid}~单元。 \gls{shortlist}方法的一个明显缺点是,\gls{NLM}的潜在泛化优势仅限于最常用的词,而在这部分词上,\gls{NLM}大概相对来说是用处最小的。 这个缺点引发了处理高维输出替代方法的探索,如下所述。 \subsubsection{分层Softmax} 减少大词汇表$\SetV$上高维输出层计算负担的经典方法~\citep{Goodman2001}是分层地分解概率。 $|\SetV|$因子可以降低到$\log |\SetV|$一样低,而无需执行与$|\SetV|$成比例数量(并且也与隐藏单元数量$n_h$成比例)的计算。 \citet{BengioTR1215}和~\citet{Morin+Bengio-2005-small} 将这种因子分解方法引入\gls{NLM}中。 % -- 454 -- 我们可以认为这种层次结构是先建立词的类别,然后是词类别的类别,然后是词类别的类别的类别等等。 这些嵌套类别构成一棵树,其叶子为词。 在平衡树中,树的深度为$\log |\SetV|$。 选择一个词的概率是由路径(从树根到包含该词叶子的路径)上的每个节点通向该词分支概率的乘积给出。 \figref{fig:chap12_word_hierarchy}是一个简单的例子。 \citet{Mnih+Hinton-2009}也描述了使用多个路径来识别单个词的方法,以便更好地建模具有多个含义的词。 此时计算词的概率则涉及在导向该词的所有路径上进行求和。 \begin{figure}[htp] \centering \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \includegraphics{Chapter12/figures/word_hierarchy.pdf} \fi % Magic incantation to allow math in caption \captionsetup{singlelinecheck=off} % Part of the incantation is that we must define the [] argument \caption[.]{词类别简单层次结构的示意图,其中8个词$w_0,\dots,w_7$组织成三级层次结构。 树的叶子表示实际特定的词。 内部节点表示词的组别。 任何节点都可以通过二值决策序列($0$=左,$1$=右)索引,从根到达节点。 超类$(0)$包含类$(0,0)$和$(0,1)$,其中分别包含词$\{w_0,w_1\}$和$\{w_2,w_3\}$的集合,类似地超类$(1)$包含类$(1,0)$和$(1,1)$,分别包含词$\{w_4,w_5\}$和$\{w_6,w_7\}$。 如果树充分平衡,则最大深度(二值决策的数量)与词数$| \SetV |$的对数同阶:从$| \SetV |$个词中选一个词只需执行$\CalO(\log |\SetV|)$次操作(从根开始的路径上的每个节点一次操作)。 在该示例中,我们乘三次概率就能计算词$y$的概率,这三次概率与从根到节点$y$的路径上每个节点向左或向右的二值决策相关联。 令$b_i(y)$为遍历树移向$y$时的第$i$个二值决策。 对输出$\RSy$进行采样的概率可以通过条件概率的链式法则分解为条件概率的乘积,其中每个节点由这些位的前缀索引。 例如,节点$(1,0)$对应于前缀$(b_0(w_4)=1, b_1(w_4)=0)$,并且$w_4$的概率可以如下分解: \begin{align} P(\RSy = w_4) &= P(\RSb_0 = 1, \RSb_1 = 0, \RSb_2 = 0) \\ &= P(\RSb_0 = 1) P(\RSb_1 = 0 \mid \RSb_0 = 1) P(\RSb_2 = 0 \mid \RSb_0 = 1, \RSb_1 = 0). \end{align} } \label{fig:chap12_word_hierarchy} \end{figure} 为了预测树的每个节点所需的条件概率,我们通常在树的每个节点处使用\gls{logistic_regression}模型,并且为所有这些模型提供与输入相同的上下文$C$。 因为正确的输出编码在训练集中,我们可以使用\gls{supervised_learning}训练\gls{logistic_regression}模型。 我们通常使用标准\gls{cross_entropy}损失,对应于最大化正确判断序列的对数似然。 因为可以高效地计算输出对数似然(低至$\log |\SetV|$而不是$ |\SetV|$),所以也可以高效地计算梯度。 这不仅包括关于输出参数的梯度,而且还包括关于隐藏层激活的梯度。 优化树结构从而最小化期望的计算量是可能的,但通常不实际。 给定词的相对频率,信息理论的工具可以指定如何选择最佳的二进制编码。 为此,我们可以构造树,使得与词相关联的位数量近似等于该词频率的对数。 然而在实践中,节省计算通常事倍功半,因为输出概率的计算仅是\gls{NLM}中总计算的一部分。 例如,假设有$l$个全连接的宽度为$n_h$的隐藏层。 令$n_b$是识别一个词所需比特数的加权平均值,其加权由这些词的频率给出。 在这个例子中,计算隐藏激活所需的操作数增长为$O(ln_h^2)$,而输出计算增长为$O(n_h n_b)$。 只要$ n_b \leq l n_h$,相比于收缩$n_b$,我们可以通过收缩$n_h$减少更多的计算量。 事实上,$n_b$通常很小。 因为词汇表的大小很少超过一百万而$\log_ 2(10^6) \approx 20$,所以可以将$n_b$减小到大约20,但$n_h$通常大得多,大约为$10^3$或更大。 与其仔细优化分支因子为$2$的树,我们不如定义深度为2和分支因子为$\sqrt{|\SetT|}$的树。 这样的树对应于简单定义一组互斥的词类。 基于深度为$2$的树的简单方法可以获得层级策略大部分的计算益处。 % -- 455 -- 一个仍然有点开放的问题是如何最好地定义这些词类,或者说如何定义一般的词层次结构。 早期工作使用现有的层次结构\citep{Morin+Bengio-2005-small} ,但理想情况下也可以与\gls{NLM}联合学习层次结构。 学习层次结构很困难。 对数似然的精确优化似乎难以解决,因为词层次的选择是离散的,不适于基于梯度的优化。 然而,我们可以使用离散优化来近似地最优化词类的分割。 分层~\ENNAME{softmax}~的一个重要优点是,它在训练期间和测试期间(如果在测试时我们想计算特定词的概率)都带来了计算上的好处。 当然即使使用分层~\ENNAME{softmax},计算所有$|\SetV|$个词概率的成本仍是很高的。 另一个重要的操作是在给定上下文中选择最可能的词。 不幸的是,树结构不能为这个问题提供高效精确的解决方案。 分层~\ENNAME{softmax}~的一个缺点是在实践中倾向于表现得比基于采样的方法差,基于采样的方法我们将在下文描述。 这可能是因为词类选择得不好。 \subsubsection{\glsentrytext{importance_sampling}} \label{sec:importance_sampling_chap12} 加速\gls{NLM}训练的一种方式是,避免明确地计算所有未出现在下一位置的词对梯度的贡献。 每个不正确的词在此模型下具有低概率。 枚举所有这些词的计算成本可能会很高。 相反,我们可以仅采样词的子集。 使用\eqnref{eq:softmax-over-words}中引入的符号,梯度可以写成如下形式: \begin{align} \frac{\partial \log P(y \mid C)}{\partial \theta} &= \frac{\partial \log {\rm softmax}_y(\Va)}{\partial \theta} \\ &= \frac{\partial}{\partial \theta} \log \frac{e^{a_y}}{\sum_i e^{a_i}} \\ &= \frac{\partial}{\partial \theta} (a_y - \log \sum_i e^{a_i}) \\ &= \frac{\partial a_y}{\partial \theta} - \sum_i P(y = i \mid C) \frac{\partial a_i}{\partial \theta}, \end{align} 其中$\Va$是~\ENNAME{presoftmax}~激活(或得分)向量,每个词对应一个元素。 第一项是\textbf{正相}(positive phase)项,推动$a_y$向上;而第二项是\textbf{负相}(negative phase)项,对于所有$i$以权重$P(i \mid C)$推动$a_i$向下。 由于负相项是期望值,我们可以通过\gls{monte_carlo}采样估计。 然而,这将需要从模型本身采样。 从模型中采样需要对词汇表中所有的$i$计算$P(i \mid C)$,这正是我们试图避免的。 我们可以从另一个分布中采样,而不是从模型中采样,这个分布称为\firstgls{proposal_distribution}(记为$q$),并通过适当的权重校正从错误分布采样引入的\gls{bias_sta} \citep{Bengio+Senecal-2003-small,Bengio+Senecal-2008}。 这是一种称为\firstgls{importance_sampling}的更通用技术的应用,我们将在\secref{sec:importance_sampling_chap12}中更详细地描述。 不幸的是,即使精确\gls{importance_sampling}也不一定有效,因为我们需要计算权重$p_i / q_i$,其中的$p_i = P(i \mid C)$只能在计算所有得分$a_i$后才能计算。 这个应用采取的解决方案称为\gls{biased_importance_sampling},其中重要性权重被归一化至加和为1。 当对负词$n_i$进行采样时,相关联的梯度被加权为: \begin{align} w_i = \frac{p_{n_i} / q_{n_i}}{\sum_{j=1}^N p_{n_j} / q_{n_j}}. \end{align} 这些权重用于对来自$q$的$m$个负样本给出适当的重要性,以估计负相项对梯度的贡献: \begin{align} \sum_{i=1}^{|\SetV|} P(i \mid C) \frac{\partial a_i}{\partial \theta} \approx \frac{1}{m} \sum_{i=1}^m w_i \frac{\partial a_{n_i}}{\partial \theta}. \end{align} \gls{unigram}或\gls{bigram}分布可以很好地作为\gls{proposal_distribution} $q$。 从数据估计这种分布的参数是很容易的。 在估计参数之后,也可以非常高效地从这样的分布采样。 \firstgls{importance_sampling}不仅可以加速具有较大~\ENNAME{softmax}~输出的模型。 更一般地,它可以加速具有大稀疏输出层的训练,其中输出是稀疏向量而不是$n$选$1$。 其中一个例子是\firstgls{bag_of_words}。 \gls{bag_of_words}具有稀疏向量$\Vv$,其中$v_i$表示词汇表中的词$i$存不存在文档中。 或者,$v_i$可以指示词$i$出现的次数。 由于各种原因,训练产生这种稀疏向量的\gls{ML}模型的成本可能很高。 在学习的早期,模型可能不会真的使输出真正稀疏。 此外,将输出的每个元素与目标的每个元素进行比较,可能是描述训练的\gls{loss_function}最自然的方式。 这意味着稀疏输出并不一定能带来计算上的好处,因为模型可能会选择使大多数输出非零,而所有这些非零值都需要与相应的训练目标进行比较( 即使训练目标是零)。 \citet{Dauphin2011-small} 证明可以使用\gls{importance_sampling}加速这种模型。 高效算法最小化``正词''(在目标中非零的那些词)和相等数量的``负词''的重构损失。 负词是被随机选取的,如使用启发式采样更可能被误判的词。 该启发式过采样引入的偏差则可以使用重要性权重校正。 % -- 458 -- 在所有这些情况下,输出层梯度估计的计算复杂度被减少为与负样本数量成比例,而不是与输出向量的大小成比例。 \subsubsection{噪声对比估计和排名损失} \label{sec:combining_neural_language_models_with_n_grams} 为减少训练大词汇表的\gls{NLM}的计算成本,研究者也提出了其他基于采样的方法。 早期的例子是 \citet{Collobert+Weston-ICML2008}提出的排名损失,将\gls{NLM}每个词的输出视为一个得分,并试图使正确词的得分$a_y$比其他词的得分$a_i$排名更高。提出的排名损失则是 \begin{align} L = \sum_i \max(0,1-a_y+a_i). \end{align} 如果观察到词的得分$a_y$远超过负词的得分$a_i$(相差大于1),则第$i$项梯度为零。 这个\gls{criterion}的一个问题是它不提供估计的条件概率,条件概率在很多应用中是有用的,包括语音识别和文本生成(包括诸如翻译的条件文本生成任务)。 最近用于\gls{NLM}的训练目标是噪声对比估计,将在\secref{sec:noise_contrastive_estimation}中介绍。 这种方法已成功应用于\gls{NLM}~\citep{Mnih+Teh-ICML2012,Mnih2013}。 % -- 459 -- \subsection{结合\glsentrytext{n_gram}和\glsentrytext{NLM}} \gls{n_gram}~模型相对\gls{NN}的主要优点是~\gls{n_gram}~模型具有更高的模型\gls{capacity}(通过存储非常多的元组的频率),并且处理样本只需非常少的计算量(通过查找只匹配当前上下文的几个元组)。 如果我们使用哈希表或树来访问计数,那么用于~\gls{n_gram}~的计算量几乎与\gls{capacity}无关。 相比之下,将\gls{NN}的参数数目加倍通常也大致加倍计算时间。 当然,避免每次计算时使用所有参数的模型是一个例外。 嵌入层每次只索引单个嵌入,所以我们可以增加词汇量,而不会增加每个样本的计算时间。 一些其他模型,例如平铺\gls{convolutional_network},可以在减少\gls{parameter_sharing}程度的同时添加参数以保持相同的计算量。然而,基于矩阵乘法的典型\gls{NN}层需要与参数数量成比例的计算量。 因此,增加\gls{capacity}的一种简单方法是将两种方法结合,由\gls{NLM}和~\gls{n_gram}~\gls{language_model}组成\gls{ensemble}~\citep{BenDucVin01-small,Bengio-nnlm2003-small}。 对于任何\gls{ensemble},如果\gls{ensemble}成员产生的错误相互独立,这种技术可以减少测试误差。 \gls{ensemble}学习领域提供了许多方法来组合\gls{ensemble}成员的预测,包括平均权重的加权和针对验证集选择权重。 \citet{Mikolov-Interspeech-2011} 扩展了\gls{ensemble},不是仅包括两个模型,而是包括大量模型。 我们也可以将\gls{NN}与最大熵模型配对并联合训练\citep{Mikolov-ASRU-2011}。 该方法可以被视为训练具有一组额外输入的\gls{NN},额外输入直接连接到输出并且不连接到模型的任何其他部分。 额外输入是输入上下文中特定~\gls{n_gram}~是否存在的指示器,因此这些变量是非常高维且非常稀疏的。 模型\gls{capacity}的增加是巨大的 (架构的新部分包含高达$| sV |^n$个参数 ),但是处理输入所需的额外计算量是很小的(因为额外输入非常稀疏)。 \subsection{\glsentrytext{NMT}} \label{sec:neural_machine_translation} 机器翻译以一种自然语言读取句子并产生等同含义的另一种语言的句子。 机器翻译系统通常涉及许多组件。 在高层次,通常有一个组件负责提出许多候选翻译。 由于语言之间的差异,这些翻译中的许多翻译是不符合语法的。 例如,许多语言在名词后放置形容词,因此直接翻译成英语时,它们会产生诸如``apple red''的短语。 提议机制提出建议翻译的许多变体,理想情况下应包括``red apple''。 翻译系统的第二个组件(\gls{language_model})评估提议的翻译,并可以评估``red apple''比``apple red''更好。 % -- 460 -- 最早的机器翻译\gls{NN}探索中已经纳入了\gls{encoder}和\gls{decoder}的想法(Allen 1987; Chrisman 1991; Forcada and Ñeco 1997),而翻译中\gls{NN}的第一个大规模有竞争力的用途是通过\gls{NLM}升级翻译系统的\gls{language_model}~\citep{Schwenk-et-al-IWSLT2006,Schwenk-2010}。 之前,大多数机器翻译系统在该组件使用~\gls{n_gram}~模型。 机器翻译中基于~\gls{n_gram}~的模型不仅包括传统的回退~\gls{n_gram}~模型~\citep{Jelinek+Mercer80,Katz87,Chen+Goodman99},而且包括\textbf{最大熵语言模型}(maximum entropy language models)~\citep{MaxEnt96},其中给定上下文中常见的词,affine-softmax层预测下一个词。 传统\gls{language_model}仅仅报告自然语言句子的概率。 因为机器翻译涉及给定输入句子产生输出句子,所以将自然\gls{language_model}扩展为条件的是有意义的。 如\secref{sec:learning_conditional_distributions_with_maximum_likelihood}所述可以直接地扩展一个模型,该模型定义某些变量的边缘分布,以便在给定上下文$C$($C$可以是单个变量或变量列表)的情况下定义该变量的条件分布。 \citet{Devlin-et-al-ACL2014}在一些统计机器翻译的基准中击败了最先进的技术,他给定源语言中的短语$\RSs_1, \RSs_2,\ldots, \RSs_k$后使用~\glssymbol{MLP}~对目标语言的短语$\RSt_1, \RSt_2,\ldots, \RSt_k$进行评分。 这个~\glssymbol{MLP}~估计$P(\RSt_1, \RSt_2,\ldots, \RSt_k \mid \RSs_1, \RSs_2,\ldots, \RSs_k)$。 这个~\glssymbol{MLP}~的估计替代了条件~\gls{n_gram}~模型提供的估计。 基于~\glssymbol{MLP}~方法的缺点是需要将序列预处理为固定长度。 为了使翻译更加灵活,我们希望模型允许可变的输入长度和输出长度。 \glssymbol{RNN}~具备这种能力。 \secref{sec:modeling_sequences_conditioned_on_context_with_rnns}描述了给定某些输入后,表示(输出)序列上的条件分布的~\glssymbol{RNN}~的几种构造方法,并且\secref{sec:encoder_decoder_sequence_to_sequence_architectures}描述了当输入是序列时如何实现这种条件分布。 在所有情况下,一个模型首先读取输入序列并产生概括输入序列的数据结构。我们称这个概括为``上下文''~$C$。 上下文$C$可以是向量列表,也可以是向量或张量。 读取输入以产生$C$的模型可以是~\glssymbol{RNN}~\citep{Cho-et-al-EMNLP2014,Sutskever-et-al-NIPS2014,Jean-et-al-arxiv2014}或\gls{convolutional_network}~\citep{Kalchbrenner+Blunsom-EMNLP2013}。 另一个模型(通常是RNN),则读取上下文$C$并且生成目标语言的句子。 在\figref{fig:chap12_encoder_decoder_architecture}中展示了这种用于机器翻译的\gls{encoder}-\gls{decoder}框架的总体思想。 % -- 461 -- \begin{figure}[htp] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter12/figures/encoder_decoder_architecture.pdf}} \fi \caption{\gls{encoder}-\gls{decoder}架构在直观\gls{representation}(例如词序列或图像)和语义\gls{representation}之间来回映射。 通过将一种模态数据的\gls{encoder}的输出(例如从法语句子到捕获句子含义的隐藏\gls{representation}的\gls{encoder}映射)作为另一模态数据的\gls{decoder}的输入(如\gls{decoder}将捕获句子含义的隐藏\gls{representation}映射到英语),我们可以训练将一种模态转换到另一种模态的系统。 这个想法已经成功应用于很多领域,不仅仅是机器翻译,还包括为图像生成标题。 } \label{fig:chap12_encoder_decoder_architecture} \end{figure} 为生成以源句为条件的整句,模型必须具有表示整个源句的方式。 早期模型只能表示单个词或短语。 从\gls{representation_learning}的观点来看,具有相同含义的句子具有类似\gls{representation}是有用的,无论它们是以源语言还是以目标语言书写。 研究者首先使用卷积和~\glssymbol{RNN}~的组合探索该策略~\citep{Kalchbrenner+Blunsom-EMNLP2013}。 后来的工作介绍了使用~\glssymbol{RNN}~对所提议的翻译进行打分\citep{Cho-et-al-EMNLP2014}或生成翻译句子\citep{Sutskever-et-al-NIPS2014}。 \cite{Jean-et-al-arxiv2014}将这些模型扩展到更大的词汇表。 % -- 462 -- \subsubsection{使用\glsentrytext{attention_mechanism}并对齐数据片段} \label{sec:using_an_attention_mechanism_and_aligning_pieces_of_data} 使用固定大小的表示概括非常长的句子(例如60个词)的所有语义细节是非常困难的。 这需要使用足够大的RNN,并且用足够长时间训练得很好才能实现,如 \citet{Cho-et-al-EMNLP2014}和\citet{Sutskever-et-al-NIPS2014}所表明的。 然而,更高效的方法是先读取整个句子或段落(以获得正在表达的上下文和焦点),然后一次翻译一个词,每次聚焦于输入句子的不同部分来收集产生下一个输出词所需的语义细节。 这正是~\citet{Bahdanau-et-al-ICLR2015-small}第一次引入的想法。 \figref{fig:chap12_attention}中展示了\gls{attention_mechanism},其中每个\gls{time_step}关注输入序列的特定部分。 \begin{figure}[htp] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter12/figures/attention.pdf}} \fi \caption{由~\citet{Bahdanau-et-al-ICLR2015-small}引入的现代\gls{attention_mechanism},本质上是加权平均。 \gls{attention_mechanism}对具有权重$\alpha^{(t)}$的特征向量$\Vh^{(t)}$进行加权平均形成上下文向量$\Vc$。 在一些应用中,特征向量$\Vh$是\gls{NN}的\gls{hidden_unit},但它们也可以是模型的原始输入。 权重$\alpha^{(t)}$由模型本身产生。 它们通常是区间$[0,1]$中的值,并且旨在仅仅集中在单个$\Vh^{(t)}$周围,使得加权平均近似模拟精确地读取一个特定\gls{time_step}的特征向量。 权重$\alpha^{(t)}$通常由模型另一部分发出的相关性得分应用softmax函数后产生。 \gls{attention_mechanism}在计算上需要比直接索引期望的$\Vh^{(t)}$付出更高的代价,但直接索引不能使用\gls{GD}训练。 基于加权平均的\gls{attention_mechanism}是平滑、可微的近似,可以使用现有优化算法训练。 } \label{fig:chap12_attention} \end{figure} 我们可以认为基于\gls{attention_mechanism}的系统有三个组件: \begin{itemize} \item 读取器\emph{读取}原始数据(例如源语句中的源词)并将其转换为\gls{distributed_representation},其中一个特征向量与一个词的位置相关联。 \item 用于存储读取器输出的特征向量的列表。这可以被理解为一个包含事实序列的\emph{存储器},之后可以从中检索,而检索不必以相同的顺序发生,也不必访问全部。 \item 最后一个程序\emph{利用}存储器的内容顺序地执行任务,每个\gls{time_step}聚焦于某个存储器元素的内容(或几个,具有不同权重)。 \end{itemize} 第三组件可以生成翻译结果语句。 % -- 463 -- 当用一种语言书写的句子中的词与另一种语言的翻译语句中的相应词对齐时,可以使对应的\gls{word_embedding}相关联。 早期的工作表明,我们可以学习将一种语言中的\gls{word_embedding}与另一种语言中的\gls{word_embedding}相关联的翻译矩阵\citep{Kocisky-et-al-ACL2014},与传统的基于短语表中频率计数的方法相比,可以产生较低的对齐错误率。 更早的工作\citep{Klementiev-et-al-COLING2012}也对跨语言词向量进行了研究。 这种方法存在很多的扩展。 例如,允许在更大数据集上训练的更高效的跨语言对齐~\citep{Gouws-et-al-arxiv2014} 。 \subsection{历史展望} \label{sec:historical_perspective_chap12} 在对\gls{back_propagation}的第一次探索中,\citet{Rumelhart86b-small}等人提出了\gls{distributed_representation}符号的思想,其中符号对应于家族成员的标识,而\gls{NN}捕获家族成员之间的关系,训练样本形成三元组如(Colin,Mother,Victoria)。 \gls{NN}的第一层学习每个族成员的表示。例如,Colin的特征可能代表Colin所在的族树,他所在树的分支,他来自哪一代等等。 我们可以将\gls{NN}认为是计算一组学到的规则,这些规则将属性关联在一起从而可以获得期望的预测结果。 模型于是可以进行预测,例如推断谁是Colin的母亲。 \cite{Deerwester90}将符号嵌入的想法扩展到对词的嵌入。 这些嵌入使用SVD学习。 后来,嵌入通过\gls{NN}学习。 \gls{NLP}的历史是由流行表示(对模型输入不同方式的表示)的变化为标志的。 在早期对符号和词建模的工作之后,\gls{NN}在\glssymbol{NLP}上一些最早的应用\citep{Miikkulainen91,Schmidhuber96}将输入表示为字符序列。 \citet{BenDucVin01-small} 将焦点重新引到对词建模并引入\gls{NLM},能产生可解释的\gls{word_embedding}。 这些神经模型已经从一开始在一小组符号上定义的表示(20世纪80年代)扩展到现代应用中的数百万字(包括专有名词和拼写错误)。 这种计算扩展的努力导致了\secref{sec:high_dimensional_outputs}中描述的技术发明。 % -- 464 -- 最初,使用词作为\gls{language_model}的基本单元改进了语言建模的性能 \citep{BenDucVin01-small}。 而今,新技术不断推动基于字符 \citep{Sutskever-et-al-ICML2011})和基于词的模型一起向前发展,最近的工作 \citep{gillick2015multilingual}甚至建模Unicode字符的单个字节。 \gls{NLM}背后的思想已经扩展到多个\gls{NLP}应用,如解析\citep{Henderson-NAACL2003,Henderson-ACL2004,Collobert-AISTATS2011}、词性标注、语义角色标注、分块等,有时使用共享\gls{word_embedding}的单一多任务学习架构\citep{Collobert+Weston-ICML2008,collobert2011natural}。 随着t-SNE~\gls{dimensionality_reduction}算法的发展\citep{VanDerMaaten08-small}以及Joseph Turian在2009年引入的专用于可视化词嵌入的应用,用于分析\gls{language_model}嵌入的二维可视化成为一种流行的工具。 \section{其他应用} \label{sec:other_applications} 在本节中,我们介绍\gls{DL}一些其他类型的应用,它们与上面讨论的标准对象识别、语音识别和\gls{NLP}任务不同。 本书的第三部分将扩大这个范围,甚至进一步扩展到仍是目前主要研究领域的任务。 \subsection{\glsentrytext{recommender_system}} \label{sec:recommender_systems} 信息技术部门中\gls{ML}的主要应用之一是向潜在用户或客户推荐项目。 这可以分为两种主要的应用:在线广告和项目建议(通常这些建议的目的仍然是为了销售产品)。 两者都依赖于预测用户和项目之间的关联, 一旦向该用户展示了广告或推荐了该产品,\gls{recommender_system}要么预测一些行为的概率(用户购买产品或该行为的一些代替)或预期增益(其可取决于产品的价值)。 目前,互联网的资金主要来自于各种形式的在线广告。 经济的主要部分依靠网上购物。 包括Amazon和eBay在内的公司都使用了\gls{ML}(包括\gls{DL})推荐他们的产品。 有时,项目不是实际出售的产品,而是如选择在社交网络新闻信息流上显示的帖子、推荐观看的电影、推荐笑话、推荐专家建议、匹配视频游戏的玩家或匹配约会的人。 % -- 465 -- 通常,这种关联问题可以作为\gls{supervised_learning}问题来处理:给出一些关于项目和关于用户的信息,预测感兴趣的行为(用户点击广告、输入评级、点击``喜欢''按钮、 购买产品,在产品上花钱、花时间访问产品页面等)。 通常这最终会归结到回归问题(预测一些条件期望值)或概率分类问题(预测一些离散事件的条件概率)。 早期\gls{recommender_system}的工作依赖于这些预测输入的最小信息:用户ID和项目ID。 在这种情况下,唯一的泛化方式依赖于不同用户或不同项目的目标变量值之间的模式相似性。 假设用户1和用户2都喜欢项目A,B和C. 由此,我们可以推断出用户1和用户2具有类似的口味。 如果用户1喜欢项目D,那么这可以强烈提示用户2也喜欢D。 基于此原理的算法称为\firstgls{collaborative_filtering}。 非参数方法(例如基于估计偏好模式之间相似性的最近邻方法)和参数方法都可能用来解决这个问题。 参数方法通常依赖于为每个用户和每个项目学习\gls{distributed_representation}(也称为嵌入)。 目标变量的双线性预测(例如评级)是一种简单的参数方法,这种方法非常成功,通常被认为是最先进系统的组成部分。 通过用户嵌入和项目嵌入之间的点积(可能需要使用仅依赖于用户ID或项目ID的常数来校正)获得预测。 令$\hat{\MR}$是包含我们预测的矩阵,$\MA$矩阵行中是用户嵌入,$\MB$矩阵列中具有项目嵌入。 令$\Vb$和$\Vc$是分别包含针对每个用户(表示用户平常坏脾气或积极的程度)以及每个项目(表示其大体受欢迎程度)的\gls{bias_aff}向量。 因此,双线性预测如下获得: \begin{equation} \label{eq:bilinear-prediction} \hat{R}_{u,i} = b_u + c_i + \sum_j A_{u,j} B_{j,i}. \end{equation} 通常,人们希望最小化预测评级$\hat{R}_{u,i}$ 和实际评级${R}_{u,i}$ 之间的平方误差。 当用户嵌入和项目嵌入首次缩小到低维度(两个或三个)时,它们就可以方便地可视化,或者可以将用户或项目彼此进行比较(就像\gls{word_embedding})。 获得这些嵌入的一种方式是对实际目标(例如评级)的矩阵$\MR$进行\gls{SVD}。 这对应于将$\MR = \MU \MD \MV'$(或归一化的变体)分解为两个因子的乘积,低秩矩阵 $\MA=\MU \MD$ 和 $\MB = \MV'$。 \glssymbol{SVD}的一个问题是它以任意方式处理缺失条目,如同它们对应于目标值0。 相反,我们希望避免为缺失条目做出的预测付出任何代价。 幸运的是,观察到的评级的平方误差总和也可以使用基于梯度的优化最小化。 \glssymbol{SVD}~和\eqnref{eq:bilinear-prediction}中的双线性预测在~\ENNAME{Netflix}~奖竞赛中(目的是仅基于大量匿名用户的之前评级预测电影的评级)表现得非常好\citep{bennett2007netflix}。 许多\gls{ML}专家参加了2006年和2009年之间的这场比赛。 它提高了使用先进\gls{ML}的\gls{recommender_system}的研究水平,并改进了\gls{recommender_system}。 即使简单的双线性预测或~\glssymbol{SVD}~本身并没有赢得比赛,但它是大多数竞争对手提出的整体模型中一个组成部分,包括胜者\citep{BigChaos-Netflix2009,Koren09}。 % -- 466 -- 除了这些具有\gls{distributed_representation}的双线性模型之外,第一次用于\gls{collaborative_filtering}的\gls{NN}之一是基于~\glssymbol{RBM}~的无向概率模型~\citep{Salakhutdinov-2007-short}。 \glssymbol{RBM}~是~\ENNAME{Netflix}~比赛获胜方法的一个重要组成部分\citep{BigChaos-Netflix2009,Koren09}。 \gls{NN}社群中也已经探索了对评级矩阵进行因子分解的更高级变体\citep{Salakhutdinov2008-small}。 然而,\gls{collaborative_filtering}系统有一个基本限制:当引入新项目或新用户时,缺乏评级历史意味着无法评估其与其他项目或用户的相似性,或者说无法评估新的用户和现有项目的联系。 这被称为冷启动推荐问题。 解决冷启动推荐问题的一般方式是引入单个用户和项目的额外信息。 例如,该额外信息可以是用户简要信息或每个项目的特征。 使用这种信息的系统被称为\,\textbf{基于内容的推荐系统}(content-based recommender system)。 从丰富的用户特征或项目特征集到嵌入的映射可以通过\gls{DL}架构学习\citep{Huang-et-al-2013,Elkahky-et-al-2015}。 专用的\gls{DL}架构,如\gls{convolutional_network}已经应用于从丰富内容中提取特征,如提取用于音乐推荐的音乐音轨\citep{vandenOord-et-al-NIPS2013}。 在该工作中,\gls{convolutional_network}将声学特征作为输入并计算相关歌曲的嵌入。 该歌曲嵌入和用户嵌入之间的点积则可以预测用户是否将收听该歌曲。 % -- 467 -- \subsubsection{\glsentrytext{exploration}与\glsentrytext{exploitation}} 当向用户推荐时,会产生超出普通\gls{supervised_learning}范围的问题,并进入\gls{RL}的领域。 理论上,许多推荐问题最准确的描述是\gls{contextual_bandit}\citep{Langford+Zhang-NIPS2008,Lu-et-al-2010}。 问题是,当我们使用\gls{recommender_system}收集数据时,我们得到是一个有偏且不完整的用户偏好观:我们只能看到用户对推荐给他们项目的反应,而不是其他项目。 此外,在某些情况下,我们可能无法获得未向其进行推荐的用户的任何信息(例如,在广告竞价中,可能是广告的建议价格低于最低价格阈值,或者没有赢得竞价,因此广告不会显示)。 更重要的是,我们不知道推荐任何其他项目会产生什么结果。 这就像训练一个分类器,为每个训练样本$\Vx$挑选一个类别$\hat y$(通常是基于模型最高概率的类别),然后只能获得该类别正确与否的反馈。 显然,每个样本传达的信息少于监督的情况(其中真实标签$y$是可直接访问的),因此需要更多的样本。 更糟糕的是,如果我们不够小心,即使收集越来越多的数据,我们得到的系统可能会继续选择错误的决定,因为正确的决定最初只有很低的概率:直到学习者选择正确的决定之前,该系统都无法学习正确的决定。 这类似于\gls{RL}的情况,其中仅观察到所选动作的奖励。 一般来说,\gls{RL}会涉及许多动作和许多奖励的序列。 \gls{bandit}~情景是\gls{RL}的特殊情况,其中学习者仅采取单一动作并接收单个奖励。 \gls{bandit}~问题在学习者知道哪个奖励与哪个动作相关联的时候,是更容易的。 在一般的\gls{RL}场景中,高奖励或低奖励可能是由最近的动作或很久以前的动作引起的。 术语\firstgls{contextual_bandit}指的是在一些输入变量可以通知决定的上下文中采取动作的情况。 例如,我们至少知道用户身份,并且我们要选择一个项目。 从上下文到动作的映射也称为\firstgls{policy}。 学习者和数据分布(现在取决于学习者的动作)之间的反馈循环是\gls{RL}和\gls{bandit}研究的中心问题。 % -- 468 -- \gls{RL}需要权衡\firstgls{exploration}与\firstgls{exploitation}。 \gls{exploitation}指的是从目前学到的最好\gls{policy}采取动作,也就是我们所知的将获得高奖励的动作。 \firstgls{exploration}是指采取行动以获得更多的训练数据。 如果我们知道给定上下文$\Vx$,动作$a$给予我们1的奖励,但我们不知道这是否是最好的奖励。 我们可能想利用我们目前的\gls{policy},并继续采取行动$a$相对肯定地获得1的奖励。 然而,我们也可能想通过尝试动作$a'$来探索。 我们不知道尝试动作$a'$会发生什么。 我们希望得到2的奖励,但有获得0奖励的风险。 无论如何,我们至少获得了一些知识。 \firstgls{exploration}可以以许多方式实现,从覆盖可能动作的整个空间的随机动作到基于模型的方法(基于预期回报和模型对该回报不确定性的量来计算动作的选择)。 许多因素决定了我们喜欢\gls{exploration}或\gls{exploitation}的程度。 最突出的因素之一是我们感兴趣的时间尺度。 如果代理只有短暂的时间积累奖励,那么我们喜欢更多的\gls{exploitation}。 如果代理有很长时间积累奖励,那么我们开始更多的\gls{exploration},以便使用更多的知识更有效地规划未来的动作。 \gls{supervised_learning}在\gls{exploration}或\gls{exploitation}之间没有权衡,因为监督信号总是指定哪个输出对于每个输入是正确的。 我们总是知道标签是最好的输出,没有必要尝试不同的输出来确定是否优于模型当前的输出 。 除了权衡\gls{exploration}和\gls{exploitation}之外,\gls{RL}背景下出现的另一个困难是难以评估和比较不同的\gls{policy}。 \gls{RL}包括学习者和环境之间的相互作用。 这个反馈回路意味着使用固定的测试集输入评估学习者的表现不是直接的。 \gls{policy}本身确定将看到哪些输入。 \citet{Dudik-2011} 提出了评估\gls{contextual_bandit}的技术。 % -- 469 -- \subsection{知识表示、推理和回答} \label{sec:knowledge_representation_reasoning and_question_answering} 因为使用符号嵌入\citep{Rumelhart86b-small}和词嵌入\citep{Deerwester90,BenDucVin01-small},\gls{DL}方法在\gls{language_model}、机器翻译和\gls{NLP}方面非常成功。 这些嵌入表示关于单个词或概念的语义知识。 研究前沿是为短语或词和事实之间的关系开发嵌入。 搜索引擎已经使用\gls{ML}来实现这一目的,但是要改进这些更高级的表示还有许多工作要做。 \subsubsection{知识、联系和回答} 一个有趣的研究方向是确定如何训练\gls{distributed_representation}才能捕获两个实体之间的\firstgls{relation}。 数学中,\gls{binary_relation}是一组有序的对象对。 集合中的对具有这种关系,而那些不在集合中的对则没有。 例如,我们可以在实体集$\{ 1, 2, 3 \}$上定义关系``小于''来定义有序对的集合$\SetS = \{ (1, 2), (1, 3), (2, 3) \}$。 一旦这个关系被定义,我们可以像动词一样使用它。 因为$(1, 2) \in \SetS$,我们说1小于2。 因为$(2, 1) \not \in \SetS$,我们不能说2小于1。 当然,彼此相关的实体不必是数字。 我们可以定义关系{\tt is\_a\_type\_of}包含如{\tt(狗,哺乳动物)}的元组。 在~\glssymbol{AI}~的背景下,我们将\gls{relation}看作句法上简单且高度结构化的语言。 \gls{relation}起到动词的作用,而\gls{relation}的两个参数发挥着主体和客体的作用。 这些句子是一个三元组\gls{token}的形式: \begin{align} ({\rm subject}, {\rm verb}, {\rm object}) \end{align} 其值是 \begin{align} ({\rm entity}_i, {\rm relation}_j, {\rm entity}_k). \end{align} 我们还可以定义\firstgls{attribute},类似于\gls{relation}的概念,但只需要一个参数: \begin{align} ( {\rm entity}_i, {\rm attribute}_j ). \end{align} 例如,我们可以定义{\tt has\_fur} 属性,并将其应用于像{\tt 狗}这样的实体。 许多应用中需要表示\gls{relation}和推理。 我们如何在\gls{NN}中做到这一点? \gls{ML}模型当然需要训练数据。 我们可以推断非结构化自然语言组成的训练数据集中实体之间的\gls{relation},也可以使用明确定义\gls{relation}的结构化数据库。 这些数据库的共同结构是\gls{relational_database},它存储这种相同类型的信息,虽然没有格式化为三元\gls{token}的句子。 当数据库旨在将日常生活中常识或关于应用领域的专业知识传达给\gls{AI}系统时,我们将这种数据库称为\gls{knowledge_base}。 \gls{knowledge_base}包括一般的像{\tt Freebase}、{\tt OpenCyc}、 {\tt WordNet}、 {\tt Wikibase}\footnote{分别可以在如下网址获取: \url{freebase.com}, \url{cyc.com/opencyc}, \url{wordnet.princeton.edu}, \url{wikiba.se}}~等等,和专业的知识库,如GeneOntology\footnote{\url{geneontology.org}}。 实体和\gls{relation}的\gls{representation}可以将\gls{knowledge_base}中的每个三元组作为训练样本来学习,并且以最大化捕获它们的联合分布为训练目标\citep{Bordes-et-al-LSML2013}。 除了训练数据,我们还需定义训练的模型族。 一种常见的方法是将\gls{NLM}扩展到模型实体和\gls{relation}。 \gls{NLM}学习提供每个词\gls{distributed_representation}的向量。 他们还通过学习这些向量的函数来学习词之间的相互作用,例如哪些词可能出现在词序列之后。 我们可以学习每个关系的嵌入向量将这种方法扩展到实体和\gls{relation}。 事实上,建模语言和通过\gls{relation}编码建模知识的联系非常接近,研究人员可以\emph{同时}使用\gls{knowledge_base}\emph{和}自然语言句子训练这样的实体表示\citep{bordes-aaai-2011,Bordes-et-al-AISTATS2012-small,Wang-et-al-EMNLP2014},或组合来自多个\gls{relational_database}的数据~\citep{Bordes-et-al-NIPS2013}。 可能与这种模型相关联的特定参数化有许多种。 早期关于学习实体间\gls{relation}的工作~\citep{Paccanaro2000}假定高度受限的参数形式(``线性关系嵌入''),通常对\gls{relation}使用与实体形式不同的表示。 例如,\citet{Paccanaro2000}和~\citet{bordes-aaai-2011} 用向量表示实体而矩阵表示\gls{relation},其思想是\gls{relation}在实体上相当于运算符。 或者,关系可以被认为是任何其他实体\citep{Bordes-et-al-AISTATS2012-small},允许我们关于关系作声明,但是更灵活的是将它们结合在一起并建模联合分布的机制。 这种模型的实际短期应用是\firstgls{link_prediction}:预测\gls{knowledge_graph}中缺失的弧。 这是基于旧事实推广新事实的一种形式。 目前存在的大多数\gls{knowledge_base}都是通过人力劳动构建的,这往往使\gls{knowledge_base}缺失许多并且可能是大多数真正的关系。 请查看~\citet{Wang-et-al-AAAI2014}、\citet{Lin-et-al-AAAI2015}和~\citet{Garcia-Duran-et-al-arxiv2015}中这样应用的例子。 我们很难评估\gls{link_prediction}任务上模型的性能,因为我们的数据集只有正样本(已知是真实的事实)。 如果模型提出了不在数据集中的事实,我们不确定模型是犯了错误还是发现了一个新的以前未知的事实。 度量基于测试模型如何将已知真实事实的留存集合与不太可能为真的其他事实相比较,因此有些不精确。 构造感兴趣的负样本(可能为假的事实)的常见方式是从真实事实开始,并创建该事实的损坏版本,例如用随机选择的不同实体替换\gls{relation}中的一个实体 。 通用的测试精度(10$\%$度量)计算模型在该事实的所有损坏版本的前10$\%$中选择``正确''事实的次数。 \gls{knowledge_base}和\gls{distributed_representation}的另一个应用是\firstgls{word_sense_disambiguation} \citep{Navigli+Verlardi-2005,Bordes-et-al-AISTATS2012-small},这个任务决定在某些语境中哪个词的意义是恰当。 最后,知识的\gls{relation}结合一个推理过程和对自然语言的理解可以让我们建立一个一般的问答系统。 一般的问答系统必须能处理输入信息并记住重要的事实,并以之后能检索和推理的方式组织。 这仍然是一个困难的开放性问题,只能在受限的``玩具''环境下解决。 目前,记住和检索特定声明性事实的最佳方法是使用显式记忆机制,如\secref{sec:explicit_memory}所述。 \gls{memory_network}最开始是被用来解决一个玩具问答任务\citep{Weston2014}。 \citet{Kumar-et-al-arxiv2015} 提出了一种扩展,使用GRU~\gls{recurrent_network}将输入读入存储器并且在给定存储器的内容后产生回答。 \gls{DL}已经应用于其他许多应用(除了这里描述的应用以外),并且肯定会在此之后应用于更多的场景。 我们不可能全面描述与此主题相关的所有应用 。 本项调查尽可能地提供了在本文写作之时的代表性样本 第二部分介绍了涉及\gls{DL}的现代实践,包括了所有非常成功的方法。 一般而言,这些方法使用\gls{cost_function}的梯度寻找模型(近似于某些所期望的函数)的参数。 当具有足够的训练数据时,这种方法是非常强大的。 我们现在转到第三部分,开始进入研究领域,旨在使用较少的训练数据或执行更多样的任务。 而且相比目前为止所描述的情况,其中的挑战更困难并且远远没有解决。 ================================================ FILE: Chapter13/README.md ================================================ #第十三章笔记 ================================================ FILE: Chapter13/annotations.txt ================================================ {'user': 'acct:Cherish@hypothes.is', 'text': '均涉及', 'origin_text': ' 许多深度学习的研究前沿 !!!涉及到了!!! 构建输入的概率模型pmodel(x)pmodel(x)p_{\\t', 'time': '2017-02-18T03:18'} {'user': 'acct:Cherish@hypothes.is', 'text': '在给定任一变量的前提下,该模型可以通过概率推断预测其环境中的其他任何变量', 'origin_text': 'l(x)p_{\\text{model}}(\\Vx)。原则上说, !!!给定任何其他变量的情况下,这样的模型可以使用概率推断来预测其环境中的任何变量!!! 。许多这样的模型还具有潜变量 hh\\Vh,其中pmodel(x', 'time': '2017-02-18T07:41'} {'user': 'acct:Cherish@hypothes.is', 'text': '描述了一种基于潜变量的最简单的概率模型', 'origin_text': '基于潜变量的分布式表示继承了表示学习的所有优点。在本章中, !!!我们描述了一些带有潜变量的最简单的概率模型!!! :线性因子模型。这些模型有时被用来构建混合块模型~{cite?', 'time': '2017-02-18T07:41'} {'user': 'acct:Cherish@hypothes.is', 'text': '同时,也介绍了', 'origin_text': '块模型~{cite?}或者更大的深度概率模型~{cite?}。 !!!他们还展示了!!! 构建生成模型所需的许多基本方法,更先进的深层模型也将在此基础上进', 'time': '2017-02-18T07:55'} {'user': 'acct:Cherish@hypothes.is', 'text': '基本方法', 'origin_text': '的深度概率模型~{cite?}。他们还展示了构建生成模型所需的 !!!许多基本方法!!! ,更先进的深层模型也将在此基础上进一步扩展。线性因子模型通', 'time': '2017-02-18T07:55'} {'user': 'acct:Cherish@hypothes.is', 'text': '在此基础上,深层模型将得到进一步扩展', 'origin_text': '~{cite?}。他们还展示了构建生成模型所需的许多基本方法, !!!更先进的深层模型也将在此基础上进一步扩展!!! 。线性因子模型通过使用随机线性解码器函数来定义,该函数通过', 'time': '2017-02-18T07:57'} {'user': 'acct:Cherish@hypothes.is', 'text': '通过', 'origin_text': '法,更先进的深层模型也将在此基础上进一步扩展。线性因子模型 !!!通过使用!!! 随机线性解码器函数来定义,该函数通过对hh\\Vh的线性变换以及添', 'time': '2017-02-18T07:58'} {'user': 'acct:Cherish@hypothes.is', 'text': '有趣的是,通过这些模型我们能够发现一些符合简单联合分布的解释性因子。', 'origin_text': '数通过对hh\\Vh的线性变换以及添加噪声来生成xx\\Vx。 !!!这些模型很有趣,因为它们使得我们能够发现一些拥有简单联合分布的解释性因子!!! 。 线性解码器的简单性使得它们成为了最早被广泛研究的对潜变量建', 'time': '2017-02-18T08:02'} {'user': 'acct:Cherish@hypothes.is', 'text': '基于', 'origin_text': '解释性因子。 线性解码器的简单性使得它们成为了最早被广泛研究的 !!!对!!! 潜变量建模的模型。线性因子模型描述如下的数据生成过程。 ', 'time': '2017-02-18T08:13'} {'user': 'acct:Cherish@hypothes.is', 'text': '利用线性因子模型描述数据生成过程', 'origin_text': '的简单性使得它们成为了最早被广泛研究的对潜变量建模的模型。 !!!线性因子模型描述如下的数据生成过程!!! 。 首先,我们从一个分布中抽取解释性因子hh\\Vhh∼p(h', 'time': '2017-02-18T08:16'} {'user': 'acct:Cherish@hypothes.is', 'text': '因此易于从中采样', 'origin_text': '(hi)p(\\Vh) = \\prod_{i}^{}p(h_i), !!!所以很容易从中采样!!! 。接下来,在给定因子的情况下,我们对实值的可观察变量进行抽样', 'time': '2017-02-18T08:21'} {'user': 'acct:Cherish@hypothes.is', 'text': '服从以方差为单位矩阵', 'origin_text': '的选择上有所不同。因子分析~{cite?}中,潜变量的先验 !!!是一个方差为单位矩阵!!! 的高斯分布h∼\ue23a(h;0,I),h∼N(h;0,I),\\beg', 'time': '2017-02-18T08:26'} {'user': 'acct:Cherish@hypothes.is', 'text': '在给定h的条件下观察值Xi', 'origin_text': 'athbf{0},\\MI),\\end{align}同时,假定 !!!观察值xixix_i在给定hh\\Vh的条件下!!! 是条件独立的。具体的说,噪声可以被假设为是从对角协方差矩阵的高', 'time': '2017-02-18T08:33'} {'user': 'acct:Cherish@hypothes.is', 'text': '具体来说', 'origin_text': '假定观察值xixix_i在给定hh\\Vh的条件下是条件独立的。 !!!具体的说!!! ,噪声可以被假设为是从对角协方差矩阵的高斯分布中抽出的,协方差矩', 'time': '2017-02-18T08:33'} {'user': 'acct:Cherish@hypothes.is', 'text': '可以假设噪声', 'origin_text': 'xixix_i在给定hh\\Vh的条件下是条件独立的。具体的说, !!!噪声可以被假设为!!! 是从对角协方差矩阵的高斯分布中抽出的,协方差矩阵为ψ=diag(', 'time': '2017-02-18T08:34'} {'user': 'acct:Cherish@hypothes.is', 'text': '作轻微调整', 'origin_text': 'n}为了将PCA引入到概率框架中,我们可以对因子分析模型 !!!进行轻微修改!!! ,使条件方差σ2iσi2\\sigma_i^2等于同一个值。在这', 'time': '2017-02-18T08:37'} {'user': 'acct:Cherish@hypothes.is', 'text': '利用了一种观察现象', 'origin_text': '数WW\\MW和σ2σ2\\sigma^2。这个概率PCA模型 !!!利用了这样一种观察到的现象!!! :除了一些小且剩余的至多为σ2σ2\\sigma^2的重构误差 ,', 'time': '2017-02-18T08:38'} {'user': 'acct:Cherish@hypothes.is', 'text': '维', 'origin_text': 'ow{} 0时, 概率PCA所定义的密度函数在WW\\MW的ddd !!!维列!!! 生成空间周围非常尖锐。这导致模型会为没有在一个超空间附近聚集的', 'time': '2017-02-18T08:40'} {'user': 'acct:Cherish@hypothes.is', 'text': '维', 'origin_text': '期望等于将x−bx−b\\Vx - \\Vb投影到WW\\MW的ddd !!!列的!!! 生成空间,与PCA一样。当σ→0σ→0\\sigma\\xri', 'time': '2017-02-18T08:40'} {'user': 'acct:Cherish@hypothes.is', 'text': '超空间', 'origin_text': 'W\\MW的ddd维列生成空间周围非常尖锐。这导致模型会为没有在 !!!一个超空间!!! 附近聚集的数据分配非常低的概率独立分量分析独立', 'time': '2017-02-18T08:41'} {'user': 'acct:Cherish@hypothes.is', 'text': '潜在信号', 'origin_text': 'te?}。它是一种建模线性因子的方法,旨在将观察到的信号分离成 !!!许多潜在信号!!! ,这些潜在信号通过伸缩并叠加可以恢复成观察数据。这些信号是完全', 'time': '2017-02-18T08:44'} {'user': 'acct:Cherish@hypothes.is', 'text': '伸缩和叠加', 'origin_text': '子的方法,旨在将观察到的信号分离成许多潜在信号,这些潜在信号通过 !!!伸缩并叠加!!! 可以恢复成观察数据。这些信号是完全独立的,而不是仅仅彼此不相关', 'time': '2017-02-18T08:44'} {'user': 'acct:Cherish@hypothes.is', 'text': '它的目的并非', 'origin_text': '),我们可以尽可能恢复接近独立的潜在因子。这是一种常用的方法, !!!它并不是!!! 用来捕捉高级别的抽象因果因子,而是恢复已经混合在一起的低级别信号', 'time': '2017-02-18T08:48'} {'user': 'acct:Cherish@hypothes.is', 'text': '去掉“每个”', 'origin_text': '混合在一起的低级别信号。在该设置中,每个训练样本对应一个时刻, !!!每个!!! xixix_i是一个传感器对混合信号的观察值,并且每个hihih', 'time': '2017-02-18T08:50'} {'user': 'acct:Cherish@hypothes.is', 'text': '传感器', 'origin_text': '号。在该设置中,每个训练样本对应一个时刻,每个xixix_i是 !!!一个传感器!!! 对混合信号的观察值,并且每个hihih_i是单个原始信号的一个估', 'time': '2017-02-18T08:50'} {'user': 'acct:Cherish@hypothes.is', 'text': '去掉“并且每个”', 'origin_text': '对应一个时刻,每个xixix_i是一个传感器对混合信号的观察值, !!!并且每个!!! hihih_i是单个原始信号的一个估计。例如,我们可能有nnn', 'time': '2017-02-18T08:51'} {'user': 'acct:Cherish@hypothes.is', 'text': '估计', 'origin_text': '传感器对混合信号的观察值,并且每个hihih_i是单个原始信号的 !!!一个估计!!! 。例如,我们可能有nnn个人同时说话。 如果我们具有放置在不', 'time': '2017-02-18T08:54'} {'user': 'acct:Cherish@hypothes.is', 'text': '如果我们在不同位置放置n个不同的麦克风', 'origin_text': '个原始信号的一个估计。例如,我们可能有nnn个人同时说话。 !!!如果我们具有放置在不同位置的nnn个不同的麦克风!!! ,则ICA可以检测每个麦克风的音量变化,并且分离信号,使得每个h', 'time': '2017-02-18T08:57'} {'user': 'acct:Cherish@hypothes.is', 'text': '放置在受试者头部的多个电极传感器', 'origin_text': '通常用于脑电图的神经科学,一种用于记录源自大脑的电信号的技术。 !!!放置在对象的头部上的许多电极传感器!!! 用于测量来自身体的许多电信号。实验者通常仅对来自大脑的信号感兴', 'time': '2017-02-18T09:01'} {'user': 'acct:Cherish@hypothes.is', 'text': '多种电信号', 'origin_text': '号的技术。放置在对象的头部上的许多电极传感器用于测量来自身体的 !!!许多电信号!!! 。实验者通常仅对来自大脑的信号感兴趣,但是来自受试者的心脏和眼', 'time': '2017-02-18T09:01'} {'user': 'acct:Cherish@hypothes.is', 'text': '心脏', 'origin_text': '许多电信号。实验者通常仅对来自大脑的信号感兴趣,但是来自受试者 !!!的心脏!!! 和眼睛的信号强到足以混淆在受试者的头皮处进行的测量。信号到达电', 'time': '2017-02-18T09:02'} {'user': 'acct:Cherish@hypothes.is', 'text': '其', 'origin_text': '自大脑的信号感兴趣,但是来自受试者的心脏和眼睛的信号强到足以混淆 !!!在受试者的!!! 头皮处进行的测量。信号到达电极,并且混合在一起,因此为了分离源', 'time': '2017-02-18T09:02'} {'user': 'acct:Cherish@hypothes.is', 'text': '的测量结果', 'origin_text': '趣,但是来自受试者的心脏和眼睛的信号强到足以混淆在受试者的头皮处 !!!进行的测量!!! 。信号到达电极,并且混合在一起,因此为了分离源于心脏与源于大脑', 'time': '2017-02-18T09:03'} {'user': 'acct:Cherish@hypothes.is', 'text': '正交矩阵', 'origin_text': '昂贵且数值不稳定的操作。ICA的一些变种通过将WW\\MW约束为 !!!正交!!! 来避免这个有问题的操作。ICA的所有变种要求p(h)p(h', 'time': '2017-02-18T09:06'} {'user': 'acct:Cherish@hypothes.is', 'text': '该', 'origin_text': '不稳定的操作。ICA的一些变种通过将WW\\MW约束为正交来避免 !!!这个有问题的!!! 操作。ICA的所有变种要求p(h)p(h)p(\\Vh)是非', 'time': '2017-02-18T09:06'} {'user': 'acct:Cherish@hypothes.is', 'text': '均要求', 'origin_text': 'W\\MW约束为正交来避免这个有问题的操作。ICA的所有变种 !!!要求!!! p(h)p(h)p(\\Vh)是非高斯的。这是因为如果p(h)p', 'time': '2017-02-18T09:10'} {'user': 'acct:Cherish@hypothes.is', 'text': '“定义”后加逗号', 'origin_text': '分析经常在学习稀疏特征时使用。按照我们对生成模型这个术语的 !!!定义!!! ICA的许多变种不是生成模型。在本书中,生成模型可以直接表示p', 'time': '2017-02-18T09:13'} {'user': 'acct:Cherish@hypothes.is', 'text': '没有', 'origin_text': '。ICA的许多变种仅知道如何在xx\\Vx和hh\\Vh之间变换, !!!但没有!!! 任何表示p(h)p(h)p(\\Vh)的方式,因此也无法确定p(x', 'time': '2017-02-18T09:14'} {'user': 'acct:Cherish@hypothes.is', 'text': '这就是', 'origin_text': '这是在没有显式表示p(h)p(h)p(\\Vh)的情况下完成的。 !!!这是!!! 为什么ICA更多用作分离信号的分析工具,而不是用于生成数据或估计', 'time': '2017-02-18T09:15'} {'user': 'acct:Cherish@hypothes.is', 'text': '多被用作分离信号的分析', 'origin_text': '示p(h)p(h)p(\\Vh)的情况下完成的。这是为什么ICA !!!更多用作分离信号的分析工具!!! ,而不是用于生成数据或估计其密度。正如PCA可以推广到\\c', 'time': '2017-02-18T09:18'} {'user': 'acct:Cherish@hypothes.is', 'text': '也可以', 'origin_text': '正如PCA可以推广到\\chap?中描述的非线性自编码器,ICA !!!可以!!! 推广到非线性生成模型,其中我们使用非线性函数fff来生成观测数据', 'time': '2017-02-18T09:18'} {'user': 'acct:Cherish@hypothes.is', 'text': '首先', 'origin_text': '(编码器)完美逆作用的解码器相关联,所以可以直接从模型生成样本( !!!通过首先!!! 从p(h)p(h)p(\\Vh)采样,然后使用解码器)。IC', 'time': '2017-02-18T09:23'} {'user': 'acct:Cherish@hypothes.is', 'text': '鼓励组内依赖关系、抑制组间依赖关系', 'origin_text': '(\\Vh)采样,然后使用解码器)。ICA的另一个推广是通过 !!!在组内鼓励统计依赖关系在组之间抑制依赖关系来!!! 学习特征组。当相关单元的组被选为不重叠时,这被称为独立子空间分', 'time': '2017-02-18T09:25'} {'user': 'acct:Cherish@hypothes.is', 'text': '这种方法应用于自然图像时,可以', 'origin_text': '元组形成一定程度的重叠。这能够鼓励相邻的单元学习类似的特征。 !!!当应用于自然图像时,这种地质ICA方法!!! 学习Gabor滤波器,从而使得相邻特征具有相似的定向、位置或频率', 'time': '2017-02-18T09:28'} {'user': 'acct:Cherish@hypothes.is', 'text': '不同', 'origin_text': '有相似的定向、位置或频率。在每个区域内出现类似Gabor函数的 !!!许多不同!!! 相位存在抵消作用,使得在小区域上的池化产生了平移不变性。慢', 'time': '2017-02-18T09:28'} {'user': 'acct:Cherish@hypothes.is', 'text': '学习', 'origin_text': '变性。慢特征分析慢特征分析是使用来自时间信号的信息 !!!来学习!!! 不变特征的线性因子模型~{cite?}。慢特征分析的想法源', 'time': '2017-02-18T09:38'} {'user': 'acct:Cherish@hypothes.is', 'text': '不发生改变', 'origin_text': '为白色,并再次恢复成黑色。通过比较,指示斑马是否在图像中的特征 !!!将根本不改变!!! ,并且描述斑马位置的特征将缓慢地改变。因此,我们可能希望正则化', 'time': '2017-02-18T09:40'} {'user': 'acct:Cherish@hypothes.is', 'text': '将模型正则化', 'origin_text': '不改变,并且描述斑马位置的特征将缓慢地改变。因此,我们可能希望 !!!正则化我们的模型!!! ,从而能够学习到那些随时间变化较为缓慢的特征。慢原则早于慢', 'time': '2017-02-18T09:40'} {'user': 'acct:Cherish@hypothes.is', 'text': '可以向', 'origin_text': '于可以使用梯度下降训练的任何可微分模型。 为了引入慢原则,我们 !!!可以通过向!!! 代价函数添加以下项λ∑tL(f(x(t+1)),f(x(t))', 'time': '2017-02-18T09:41'} {'user': 'acct:Cherish@hypothes.is', 'text': '均方误差', 'origin_text': '^{(t+1)})之间的距离的损失函数。LLL的一个常见选择是 !!!平均平方误差!!! 。慢特征分析是慢原则中一个特别高效的应用。由于它被应用于', 'time': '2017-02-18T09:43'} {'user': 'acct:Cherish@hypothes.is', 'text': '并不', 'origin_text': '闭式解训练,所以它是高效的。像ICA的一些变体一样,SFA本身 !!!不是!!! 生成模型,只是在输入空间和特征空间之间定义了一个线性映射,但是没', 'time': '2017-02-18T09:47'} {'user': 'acct:Cherish@hypothes.is', 'text': '变种', 'origin_text': '提取器,并且可以通过闭式解训练,所以它是高效的。像ICA的一些 !!!变体!!! 一样,SFA本身不是生成模型,只是在输入空间和特征空间之间定义了', 'time': '2017-02-18T09:47'} {'user': 'acct:Cherish@hypothes.is', 'text': '但并不', 'origin_text': '身不是生成模型,只是在输入空间和特征空间之间定义了一个线性映射, !!!但是没有!!! 定义特征空间的先验,因此输入空间中不存在p(x)p(x)p(\\V', 'time': '2017-02-18T09:49'} {'user': 'acct:Cherish@hypothes.is', 'text': '来说', 'origin_text': '经元学到的特征有许多共同特性~{cite?}。因此从生物学角度 !!!上说!!! SFA是一个合理的有依据的模型。SFA的一个主要优点是,即', 'time': '2017-02-18T10:02'} {'user': 'acct:Cherish@hypothes.is', 'text': '这些潜在因子', 'origin_text': ')。已知潜在因子如何改变的情况下,我们能够通过理论分析解出表达 !!!这些因子!!! 的最佳函数。在实践中,基于模拟数据的实验上,使用深度SFA似乎', 'time': '2017-02-18T10:03'} {'user': 'acct:Cherish@hypothes.is', 'text': '学习', 'origin_text': ',使得难以确定模型将学习到什么特征。深度SFA也已经被用于 !!!学习用在!!! 对象识别和姿态估计的特征~{cite?}。到目前为止,慢原则尚', 'time': '2017-02-18T10:04'} {'user': 'acct:Cherish@hypothes.is', 'text': '仍', 'origin_text': '尚未成为任何最先进的技术应用的基础。究竟是什么因素限制了其性能 !!!也!!! 有待研究。我们推测,或许慢度先验是太过强势,并且,最好添加这样', 'time': '2017-02-18T10:09'} {'user': 'acct:Cherish@hypothes.is', 'text': '太过强势', 'origin_text': '究竟是什么因素限制了其性能也有待研究。我们推测,或许慢度先验 !!!是太过强势!!! ,并且,最好添加这样一个先验使得当前时间步到下一个时间步的预测更', 'time': '2017-02-18T10:10'} {'user': 'acct:Cherish@hypothes.is', 'text': '严格来说', 'origin_text': '子模型,已作为一种无监督特征学习和特征提取机制得到了广泛研究。 !!!严格地说!!! ,术语”稀疏编码”是指在该模型中推断hh\\Vh值的过程,而”稀疏', 'time': '2017-02-18T10:13'} {'user': 'acct:Cherish@hypothes.is', 'text': '其他大多数', 'origin_text': '的过程,但是通常这两个概念都可以用术语”稀疏编码”描述。像 !!!大多数其他!!! 线性因子模型一样,它使用了线性的解码器加上噪音的方式获得一个xx', 'time': '2017-02-18T10:14'} {'user': 'acct:Cherish@hypothes.is', 'text': '包括', 'origin_text': '择一个峰值很尖锐且接近000的分布~{cite?}。常见的选择 !!!包括了!!! 可分解的Laplace,Cauchy或者可分解的Student-', 'time': '2017-02-18T10:14'} {'user': 'acct:Cherish@hypothes.is', 'text': '在此', 'origin_text': '中,我们将ββ\\beta视为超参数。通常将其设置为111,因为 !!!其在此!!! 优化问题中λλ\\lambda的作用类似,没有必要使用两个超参数。', 'time': '2017-02-18T10:20'} {'user': 'acct:Cherish@hypothes.is', 'text': '去掉“时”', 'origin_text': '差,而不是编码器中的泛化误差。当稀疏编码用作分类器的特征提取器 !!!时!!! ,而不是使用参数化的函数来预测编码值时,基于优化的稀疏编码模型的', 'time': '2017-02-18T10:23'} {'user': 'acct:Cherish@hypothes.is', 'text': '可得到', 'origin_text': '来预测编码值时,基于优化的稀疏编码模型的编码过程中较小的泛化误差 !!!可导致!!! 更好的泛化能力。{Coates2011b}证明了在对象识别任务', 'time': '2017-02-18T10:24'} {'user': 'acct:Cherish@hypothes.is', 'text': '先通过', 'origin_text': '个缺点是它不直接通过非参数编码器进行反向传播,这使得我们很难采用 !!!先使用!!! 无监督方式预训练稀疏编码模型然后使用监督方式对其进行微调的方法。', 'time': '2017-02-18T10:26'} {'user': 'acct:Cherish@hypothes.is', 'text': '后通过', 'origin_text': '行反向传播,这使得我们很难采用先使用无监督方式预训练稀疏编码模型 !!!然后使用!!! 监督方式对其进行微调的方法。允许近似导数的稀疏编码模型的修改版', 'time': '2017-02-18T10:26'} {'user': 'acct:Cherish@hypothes.is', 'text': '这种现象发生的原因', 'origin_text': '够很好地重构数据并为分类器提供有用的特征时,也会发生这种情况。 !!!这种现象原因!!! 是每个单独的特征可以很好地被学习到,但是隐含编码值的因子先验会导', 'time': '2017-02-18T10:27'} ============================= Replies ============================= ================================================ FILE: Chapter13/linear_factor_models.tex ================================================ % !Mode:: "TeX:UTF-8" % Translator: Tianfan Fu \chapter{\glsentrytext{linear_factor}} \label{chap:linear_factor_models} 许多深度学习的研究前沿均涉及构建输入的概率模型$p_{\text{model}}(\Vx)$。 原则上说,给定任何其他变量的情况下,这样的模型可以使用概率推断来预测其环境中的任何变量。 许多这样的模型还具有\gls{latent_variable} $\Vh$,其中$p_{\text{model}}(\Vx) = \SetE_{\Vh}\, p_{\text{model}}(\Vx\mid\Vh)$。 这些\gls{latent_variable}提供了表示数据的另一种方式。 我们在\gls{deep_feedforward_network}和\gls{recurrent_network}中已经发现,基于\gls{latent_variable}的分布式表示继承了\gls{representation_learning}的所有优点。 % 479 在本章中,我们描述了一些基于\gls{latent_variable}的最简单的概率模型:\firstgls{linear_factor}。 这些模型有时被用来作为混合模型的组成模块~\citep{Hinton-nips95,ghahramani96em,Roweis+Saul+Hinton-2002}或者更大的深度概率模型~\citep{tang2012deep}。 同时,也介绍了构建\gls{generative_model}所需的许多基本方法,在此基础上更先进的深度模型也将得到进一步扩展。 % 479 \gls{linear_factor}通过随机线性\gls{decoder}函数来定义,该函数通过对$\Vh$的线性变换以及添加噪声来生成$\Vx$。 % 479 有趣的是,通过这些模型我们能够发现一些符合简单联合分布的解释性因子。 %这些模型很有趣,因为它们使得我们能够发现一些拥有简单联合分布的解释性因子。 线性\gls{decoder}的简单性使得它们成为了最早被广泛研究的\gls{latent_variable}模型。 % 479 \gls{linear_factor}描述如下的数据生成过程。 首先,我们从一个分布中抽取解释性因子$\Vh$ \begin{align} \label{eqn:131} \RVh \sim p(\Vh), \end{align} 其中$p(\Vh)$是一个\gls{factorial}分布,满足$p(\Vh) = \prod_{i}^{}p(h_i)$,所以易于从中采样。 接下来,在给定因子的情况下,我们对实值的可观察变量进行采样 \begin{align} \label{eqn:132} \Vx = \MW \Vh + \Vb + \text{noise}, \end{align} 其中噪声通常是对角化的(在维度上是独立的)且服从高斯分布。 这在\figref{fig:linear_factors}有具体说明。 % 480 \begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter13/figures/linear_factors}} \fi \caption{描述\gls{linear_factor}族的\gls{directed_graphical_model},其中我们假设观察到的数据向量$\Vx$是通过独立的\gls{latent}因子$\Vh$的线性组合再加上一定噪声获得的。 不同的模型,比如\gls{PPCA},\gls{FA}或者是~\glssymbol{ICA},都是选择了不同形式的噪声以及先验$p(\Vh)$。} \label{fig:linear_factors} \end{figure} \section{\glsentrytext{PPCA}和\glsentrytext{FA}} \label{sec:probabilistic_PCA_and_factor_analysis} % 480 \firstgls{PPCA}、\gls{FA}和其他\gls{linear_factor}是上述等式(\eqnref{eqn:131}和\eqnref{eqn:132})的特殊情况,并且仅在对观测到$\Vx$之前的噪声分布和\gls{latent_variable} $\Vh$先验的选择上有所不同。 % 480 在\firstgls{FA}~\citep{Bartholomew-1987,Basilevsky94}中,\gls{latent_variable}的先验是一个方差为单位矩阵的\gls{gaussian_distribution} \begin{align} \label{eqn:133} \RVh \sim \CalN(\Vh; \mathbf{0},\MI), \end{align} 同时,假定在给定$\Vh$的条件下观察值$x_i$是\firstgls{conditional_independent}的。 具体来说,我们可以假设噪声是从对角协方差矩阵的高斯分布中抽出的,\gls{covariance_matrix}为$\Vpsi = \text{diag}(\Vsigma^2)$,其中$\Vsigma^2 = [\sigma_1^2,\sigma_2^2,\ldots,\sigma_n^2]^{\top}$表示一个向量,每个元素表示一个变量的方差。 % 480 因此,\gls{latent_variable}的作用是\emph{捕获}不同观测变量$x_i$之间的\emph{依赖关系}。 实际上,可以容易地看出$\Vx$服从\gls{multivariate_normal_distribution},并满足 \begin{align} \label{eqn:134} \RVx \sim \CalN(\Vx; \Vb, \MW\MW^{\top}+\Vpsi). \end{align} % 480 end % 481 head 为了将~\glssymbol{PCA}~引入到概率框架中,我们可以对\gls{FA}模型作轻微修改,使条件方差$\sigma_i^2$等于同一个值。 在这种情况下,$\Vx$的协方差简化为$\MW\MW^{\top}+\sigma^2\MI$,这里的$\sigma^2$是一个标量。 由此可以得到条件分布,如下: \begin{align} \label{eqn:135} \RVx \sim \CalN(\Vx; \Vb, \MW\MW^{\top} + \sigma^2\MI ), \end{align} 或者等价地 \begin{align} \label{eqn:136} \RVx = \MW\RVh + \Vb + \sigma\RVz, \end{align} 其中$\RVz \sim \CalN(\Vz;\mathbf{0},\MI)$是高斯噪声。 之后~\citet{Tipping99}提出了一种迭代的~\glssymbol{EM}~算法来估计参数$\MW$和$\sigma^2$。 % 481 这个\firstgls{PPCA}模型利用了这样一种观察现象:除了一些微小残余的\firstgls{reconstruction_error}(至多为$\sigma^2$),数据中的大多数变化可以由\gls{latent_variable} $\Vh$描述。 通过\citet{Tipping99}的研究我们可以发现,当$\sigma \xrightarrow{} 0$时,\gls{PPCA}~退化为~\glssymbol{PCA}。 在这种情况下,给定$\Vx$情况下$\Vh$的条件期望等于将$\Vx - \Vb$投影到$\MW$的$d$列所生成的空间上,与~\glssymbol{PCA}~一样。 % 481 当$\sigma\xrightarrow{} 0$时, \gls{PPCA}~所定义的密度函数在$d$维的$\MW$的列生成空间周围非常尖锐。 这导致模型会为没有在一个超平面附近聚集的数据分配非常低的概率。 %如果某些数据实际上没有集中在超平面附近,这会导致模型为数据分配非常低的可能性。 % 481 %导致模型会为没有在一个超空间附近聚集的数据分配非常低的概率” \section{\glsentrytext{ICA}} \label{sec:independent_component_analysis_ica} % 481 \firstall{ICA}是最古老的\gls{representation_learning}算法之一~\citep{Herault+Ans-1984,Jutten+Herault-91,Comon94,Hyvarinen-1999,Hyvarinen-2001,Hinton-ICA-2001,Teh-2003}。 它是一种建模线性因子的方法,旨在将观察到的信号分离成许多潜在信号,这些潜在信号通过缩放和叠加可以恢复成观察数据。 这些信号是完全独立的,而不是仅仅彼此不相关\footnote{\secref{sec:expectation_variance_and_covariance}讨论了不相关变量和独立变量之间的差异。}。 % 481 许多不同的具体方法被称为~\glssymbol{ICA}。 与我们本书中描述的其他\gls{generative_model}最相似的~\glssymbol{ICA}~变种~\citep{Pham-et-al-1992}训练了完全参数化的\gls{generative_model}。 \gls{latent}因子$\Vh$的先验$p(\Vh)$,必须由用户提前给出并固定。 接着模型确定性地生成$\Vx = \MW \Vh$。 我们可以通过非线性变化(使用\eqnref{eqn:3.47})来确定$p(\Vx)$。 然后通过一般的方法比如最大化似然进行学习。 % 482 head 这种方法的动机是,通过选择一个独立的$p(\Vh)$,我们可以尽可能恢复接近独立的潜在因子。 这是一种常用的方法,它并不是用来捕捉高级别的抽象因果因子,而是恢复已经混合在一起的低级别信号。 在该设置中,每个训练样本对应一个时刻,每个$x_i$是一个传感器对混合信号的观察值,并且每个$h_i$是单个原始信号的一个估计。 例如,我们可能有$n$个人同时说话。 如果我们在不同位置放置$n$个不同的麦克风,则~\glssymbol{ICA}~可以检测每个麦克风的音量变化,并且分离信号,使得每个$h_i$仅包含一个人清楚地说话。 这通常用于脑电图的神经科学,这种技术可用于记录源自大脑的电信号。 放置在受试者头部上的许多电极传感器用于测量来自身体的多种电信号。 实验者通常仅对来自大脑的信号感兴趣,但是来自受试者心脏和眼睛的信号强到足以混淆在受试者头皮处的测量结果。 信号到达电极,并且混合在一起,因此为了分离源于心脏与源于大脑的信号,并且将不同脑区域中的信号彼此分离,\glssymbol{ICA}~是必要的。 % 482 mid 如前所述,\glssymbol{ICA}~存在许多变种。 一些版本在$\Vx$的生成中添加一些噪声,而不是使用确定性的\gls{decoder}。 大多数方法不使用\gls{maximum_likelihood}准则,而是旨在使$\Vh = \MW^{-1}\Vx$的元素彼此独立。 许多准则能够达成这个目标。 \eqnref{eqn:3.47}需要用到$\MW$的行列式,这可能是代价很高且数值不稳定的操作。 \glssymbol{ICA}~的一些变种通过将$\MW$约束为正交来避免这个有问题的操作。 % 482 mid \glssymbol{ICA}~的所有变种均要求$p(\Vh)$是非高斯的。 这是因为如果$p(\Vh)$是具有高斯分量的独立先验,则$\MW$是不可识别的。 对于许多$\MW$值,我们可以在$p(\Vx)$上获得相同的分布。 这与其他\gls{linear_factor}有很大的区别,例如\gls{PPCA}~和\gls{FA}通常要求$p(\Vh)$是高斯的,以便使模型上的许多操作具有\gls{closed_form_solution}。 在用户明确指定分布的\gls{maximum_likelihood}方法中,一个典型的选择是使用$p(h_i) = \frac{d}{dh_i}\sigma(h_i)$。 这些非高斯分布的典型选择在$0$附近具有比高斯分布更高的峰值,因此我们也可以看到\gls{ICA}经常用于学习稀疏特征。 % 483 head 按照我们对\gls{generative_model}这个术语的定义,\glssymbol{ICA}~的许多变种不是\gls{generative_model}。 在本书中,\gls{generative_model}可以直接表示$p(\Vx)$,也可以认为是从$p(\Vx)$中抽取样本。 \glssymbol{ICA}~的许多变种仅知道如何在$\Vx$和$\Vh$之间变换,而没有任何表示$p(\Vh)$的方式,因此也无法在$p(\Vx)$上施加分布。 例如,许多~\glssymbol{ICA}~变量旨在增加$\Vh = \MW^{-1}\Vx$的样本峰度,因为高峰度说明了$p(\Vh)$是非高斯的,但这是在没有显式表示$p(\Vh)$的情况下完成的。 这就是为什么~\glssymbol{ICA}~多被用作分离信号的分析工具,而不是用于生成数据或估计其密度。 % 483 head 正如~\glssymbol{PCA}~可以推广到\chapref{chap:autoencoders}中描述的非线性\gls{AE},\glssymbol{ICA}~也可以推广到非线性\gls{generative_model},其中我们使用非线性函数$f$来生成观测数据。 关于非线性~\glssymbol{ICA}~最初的工作可以参考~\citet{hyvarinen1999nonlinear},它和\gls{ensemble_learning}的成功结合可以参见~\citet{roberts2001independent,lappalainen2000nonlinear}。 \glssymbol{ICA}~的另一个非线性扩展是\firstall{NICE}方法~\citep{Dinh-et-al-arxiv2014},这个方法堆叠了一系列可逆变换(在\gls{encoder}阶段),其特性是能高效地计算每个变换的~\gls{jacobian}~行列式。 这使得我们能够精确地计算似然,并且像~\glssymbol{ICA}~一样,\glssymbol{NICE}~尝试将数据变换到具有因子的边缘分布的空间。 由于非线性\gls{encoder}的使用,这种方法更可能成功。%\footnote{译者注:相比于~\glssymbol{ICA}} 因为\gls{encoder}和一个能进行完美逆变换的\gls{decoder}相关联,所以可以直接从模型生成样本(首先从$p(\Vh)$采样,然后使用\gls{decoder})。 % 483 \glssymbol{ICA}~的另一个推广是通过鼓励组内统计依赖关系、抑制组间依赖关系来学习特征组\citep{hyvarinen1999emergence,HyvarinenA2001}。 当相关单元的组被选为不重叠时,这被称为\firstgls{ISA}。 我们还可以向每个\gls{hidden_unit}分配空间坐标,并且空间上相邻的单元组形成一定程度的重叠。 这能够鼓励相邻的单元学习类似的特征。 当应用于自然图像时,这种\firstgls{tICA}方法可以学习Gabor滤波器,从而使得相邻特征具有相似的方向、位置或频率。 在每个区域内出现类似Gabor函数的许多不同相位存在抵消作用,使得在小区域上的\gls{pooling}产生了平移不变性。 % 483 end \section{\glsentrytext{SFA}} \label{sec:slow_feature_analysis} % 484 head \firstall{SFA}是使用来自时间信号的信息学习不变特征的\gls{linear_factor}~\citep{WisSej2002}。 % 484 \gls{SFA}的想法源于所谓的\firstgls{slow_principle}。 其基本思想是,与场景中起描述作用的单个量度相比,场景的重要特性通常变化得非常缓慢。 例如,在\gls{CV}中,单个像素值可以非常快速地改变。 如果斑马从左到右移动穿过图像并且它的条纹穿过对应的像素时,该像素将迅速从黑色变为白色,并再次恢复成黑色。 通过比较,指示斑马是否在图像中的特征将不发生改变,并且描述斑马位置的特征将缓慢地改变。 因此,我们可能希望将模型\gls{regularize},从而能够学习到那些随时间变化较为缓慢的特征。 % 484 \gls{slow_principle}早于\gls{SFA},并已被应用于各种模型~\citep{Hinton89b,Foldiak89,MobahiCollobertWestonICML2009,Bergstra+Bengio-2009}。 一般来说,我们可以将\gls{slow_principle}应用于可以使用\gls{GD}训练的任何可微分模型。 为了引入\gls{slow_principle},我们可以向\gls{cost_function}添加以下项 \begin{align} \label{eqn:137} \lambda \sum_t L(f(\Vx^{(t+1)}),f(\Vx^{(t)})), \end{align} 其中$\lambda$是确定慢度\gls{regularization}强度的超参数项,$t$是样本时间序列的索引,$f$是需要\gls{regularize}的\gls{feature_extractor},$L$是测量$f(\Vx^{(t)})$和$f(\Vx^{(t+1)})$之间的距离的\gls{loss_function}。 $L$的一个常见选择是\gls{mean_squared_error}。 % 484 \gls{SFA}是\gls{slow_principle}中一个特别高效的应用。 由于它被应用于线性\gls{feature_extractor},并且可以通过\gls{closed_form_solution}训练,所以它是高效的。 像~\glssymbol{ICA}~的一些变种一样,\glssymbol{SFA}~本身并不是\gls{generative_model},只是在输入空间和特征空间之间定义了一个线性映射,但是没有定义特征空间的先验,因此没有在输入空间上施加分布$p(\Vx)$。 % 484 \glssymbol{SFA}~算法~\citep{WisSej2002}先将$f(\Vx;\theta)$定义为线性变换,然后求解如下优化问题 \begin{align} \label{eqn:138} \min_{\Vtheta} \SetE_t (f(\Vx^{(t+1)})_i - f(\Vx^{(t)})_i )^2 \end{align} 并且满足下面的约束: \begin{align} \label{eqn:139} \SetE_t f(\Vx^{(t)})_i = 0 \end{align} 以及 \begin{align} \label{eqn:1310} \SetE_t [ f(\Vx^{(t)})_i^2 ] =1. \end{align} % 485 学习特征具有零均值的约束对于使问题具有唯一解是必要的; 否则我们可以向所有特征值添加一个常数, 并获得具有相等慢度目标值的不同解。 特征具有单位方差的约束对于防止所有特征趋近于$0$的病态解是必要的。 与~\glssymbol{PCA}~类似,\glssymbol{SFA}~特征是有序的,其中学习第一特征是最慢的。 要学习多个特征,我们还必须添加约束 \begin{align} \label{eqn:1311} \forall i