Showing preview only (2,381K chars total). Download the full file or copy to clipboard to get everything.
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都有各自不同的特性,所以有时候采用浮点运算', '
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
SYMBOL INDEX (4 symbols across 2 files)
FILE: docs/assets/js/plugins/respond.js
function callMedia (line 333) | function callMedia(){
FILE: scripts/parse_gls.py
function create_gls_dict (line 5) | def create_gls_dict():
function replace_single_gls (line 27) | def replace_single_gls(tex, p, term_dict):
function replace_all_gls (line 38) | def replace_all_gls(input_tex, term_name_dict, term_symbol_dict):
Condensed preview — 148 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,507K chars).
[
{
"path": "Chapter1/README.md",
"chars": 7,
"preview": "#第一章笔记\n"
},
{
"path": "Chapter1/annotations.txt",
"chars": 70796,
"preview": "{'user': 'acct:swordyork@hypothes.is', 'text': '不通顺', 'origin_text': '到迅速解决,比如那些可以通过一系列形式的数学规则来描述的问题。 !!!人工智能的真正挑战被证明是解"
},
{
"path": "Chapter1/introduction.tex",
"chars": 26303,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Shenjian Zhao\n\\chapter{引言}\n\\label{chap:introduction}\n远在古希腊时期,发明家就梦想着创造能自主思考的机器。\n神话人物"
},
{
"path": "Chapter10/README.md",
"chars": 7,
"preview": "#第十章笔记\n"
},
{
"path": "Chapter10/annotations.txt",
"chars": 14212,
"preview": "{'user': 'acct:zhaoyu611@hypothes.is', 'text': '这里指', 'origin_text': '的不同部分共享参数。参数共享使得模型能够扩展到不同形式的样本( !!!如!!! 不同的长度)并进"
},
{
"path": "Chapter10/sequence_modeling_rnn.tex",
"chars": 57438,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Shenjian Zhao\n\\chapter{序列建模:循环和递归网络}\n\\label{chap:sequence_modeling_recurrent_and_rec"
},
{
"path": "Chapter11/README.md",
"chars": 8,
"preview": "#第十一章笔记\n"
},
{
"path": "Chapter11/practical_methodology.tex",
"chars": 27724,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{实践方法论}\n\\label{chap:practical_methodology}\n要成功地使用深度学习技术,仅仅知道存在哪些算法"
},
{
"path": "Chapter12/README.md",
"chars": 8,
"preview": "#第十二章笔记\n"
},
{
"path": "Chapter12/annotations.txt",
"chars": 43292,
"preview": "{'user': 'acct:corenel@hypothes.is', 'text': '在本章中', 'origin_text': ' !!!本章!!! ,我们将介绍如何使用深"
},
{
"path": "Chapter12/applications.tex",
"chars": 53465,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Tianfan Fu: 12.1~12.3 Shenjian Zhao: 12.4~12.5\n\\chapter{应用}\n\\label{chap:applications"
},
{
"path": "Chapter13/README.md",
"chars": 8,
"preview": "#第十三章笔记\n"
},
{
"path": "Chapter13/annotations.txt",
"chars": 12262,
"preview": "{'user': 'acct:Cherish@hypothes.is', 'text': '均涉及', 'origin_text': ' 许多深度学习的研究前沿 !!!涉及到了!!! 构建输入的概率模型"
},
{
"path": "Chapter13/linear_factor_models.tex",
"chars": 17247,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Tianfan Fu\n\\chapter{\\glsentrytext{linear_factor}}\n\\label{chap:linear_factor_models}\n"
},
{
"path": "Chapter14/README.md",
"chars": 8,
"preview": "#第十四章笔记\n"
},
{
"path": "Chapter14/annotations.txt",
"chars": 25797,
"preview": "{'user': 'acct:huangpingchun@hypothes.is', 'text': '原文\\nA regularized autoencoder can be nonlinear and\\novercomplete but"
},
{
"path": "Chapter14/autoencoders.tex",
"chars": 31898,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Shenjian Zhao\n\\chapter{\\glsentrytext{AE}}\n\\label{chap:autoencoders}\n\\firstgls{AE}是\\g"
},
{
"path": "Chapter15/README.md",
"chars": 8,
"preview": "#第十五章笔记\n"
},
{
"path": "Chapter15/annotations.txt",
"chars": 3477,
"preview": "{'user': 'acct:cnscottzheng@hypothes.is', 'text': '这里用“普适于” 好像不太准确。', 'origin_text': '很多信息处理任务,非常容易或者非常困难取决于信息是如何表示的。 !"
},
{
"path": "Chapter15/representation_learning.tex",
"chars": 43298,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{\\glsentrytext{representation_learning}}\n\\label{chap:representatio"
},
{
"path": "Chapter16/README.md",
"chars": 8,
"preview": "#第十六章笔记\n"
},
{
"path": "Chapter16/annotations.txt",
"chars": 36998,
"preview": "{'user': 'acct:swordyork@hypothes.is', 'text': '与原文意思不同', 'origin_text': ' !!!深度学习为研究者们提供了许多指"
},
{
"path": "Chapter16/structured_probabilistic_modelling.tex",
"chars": 42758,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Tianfan Fu\n\\chapter{\\glsentrytext{DL}中的\\glsentrytext{structured_probabilistic_models"
},
{
"path": "Chapter17/README.md",
"chars": 8,
"preview": "#第十七章笔记\n"
},
{
"path": "Chapter17/annotations.txt",
"chars": 25847,
"preview": "{'user': 'acct:caszhang@hypothes.is', 'text': '总是', 'origin_text': ':Las Vegas算法和蒙特卡罗算法。Las Vegas算法 !!!通常!!! 精确地返回一个正确"
},
{
"path": "Chapter17/monte_carlo_methods.tex",
"chars": 21468,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Tianfan Fu\n\\chapter{\\glsentrytext{monte_carlo}方法}\n\\label{chap:monte_carlo_methods}\n%"
},
{
"path": "Chapter18/README.md",
"chars": 8,
"preview": "#第十八章笔记\n"
},
{
"path": "Chapter18/confronting_the_partition_function.tex",
"chars": 40243,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{直面\\glsentrytext{partition_function}}\n\\label{chap:confronting_the_"
},
{
"path": "Chapter19/README.md",
"chars": 8,
"preview": "#第十九章笔记\n"
},
{
"path": "Chapter19/annotations.txt",
"chars": 17477,
"preview": "{'user': 'acct:caszhang@hypothes.is', 'text': '推断困难通常是指', 'origin_text': '通常我们有一系列可见变量vv\\\\Vv和一系列潜变量 hh\\\\Vh。 !!!难以推断的原因在"
},
{
"path": "Chapter19/approximate_inference.tex",
"chars": 31969,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Tianfan Fu \n\\chapter{\\glsentrytext{approximate_inference}}\n\\label{chap:approximate_i"
},
{
"path": "Chapter2/README.md",
"chars": 7,
"preview": "#第二章笔记\n"
},
{
"path": "Chapter2/annotations.txt",
"chars": 18324,
"preview": "{'user': 'acct:badpoem@hypothes.is', 'text': 'deep learning algorithms. 此处考虑语义对比应该加回算法二字。改为深度学习算法。', 'origin_text': '线性代"
},
{
"path": "Chapter2/linear_algebra.tex",
"chars": 24892,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{线性代数}\n\\label{chap:linear_algebra}\n\n线性代数作为数学的一个分支,广泛应用于科学和工程中。\n然而,"
},
{
"path": "Chapter20/README.md",
"chars": 8,
"preview": "#第二十章笔记\n"
},
{
"path": "Chapter20/deep_generative_models.tex",
"chars": 91212,
"preview": "\\chapter{深度\\glsentrytext{generative_model}}\n\\label{chap:deep_generative_models}\n在本章中,我们介绍几种具体的\\gls{generative_model},这些模"
},
{
"path": "Chapter3/README.md",
"chars": 7,
"preview": "#第三章笔记\n"
},
{
"path": "Chapter3/annotations.txt",
"chars": 12543,
"preview": "{'user': 'acct:kkpoker@hypothes.is', 'text': '据此', 'origin_text': '方式来使用概率论。首先,概率法则告诉我们AI系统应该如何推理, !!!所以!!! 我们设计一些算法来计"
},
{
"path": "Chapter3/probability_and_information_theory.tex",
"chars": 32992,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Kai Li\n\\chapter{概率与信息论}\n\\label{chap:probability_and_information_theory}\n\n本章我们讨论概率论和信"
},
{
"path": "Chapter4/README.md",
"chars": 7,
"preview": "#第四章笔记\n"
},
{
"path": "Chapter4/annotations.txt",
"chars": 4543,
"preview": "{'user': 'acct:EmisXXY@hypothes.is', 'text': '一组两两正交的特征向量', 'origin_text': '为Hessian矩阵是实对称的,我们可以将其分解成一组实特征值和 !!!特征向量的正交"
},
{
"path": "Chapter4/numerical_computation.tex",
"chars": 22695,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Shenjian Zhao\n\\chapter{数值计算}\n\\label{chap:numerical_computation}\n\n\\gls{ML}算法通常需要大量的数值"
},
{
"path": "Chapter5/README.md",
"chars": 7,
"preview": "#第五章笔记\n"
},
{
"path": "Chapter5/annotations.txt",
"chars": 22324,
"preview": "{'user': 'acct:wheaio@hypothes.is', 'text': '观点?', 'origin_text': '面的部分,前往\\\\sec?。\\\\sec?涵盖了一些传统机器学习技术 !!!的观点!!! ,这些技术对深"
},
{
"path": "Chapter5/machine_learning_basics.tex",
"chars": 79964,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{\\glsentrytext{ML}基础}\n\\label{chap:machine_learning_basics}\n\\gls{DL"
},
{
"path": "Chapter6/README.md",
"chars": 7,
"preview": "#第六章笔记\n"
},
{
"path": "Chapter6/annotations.txt",
"chars": 14706,
"preview": "{'user': 'acct:zplin@hypothes.is', 'text': '保证全局收敛', 'origin_text': '型的线性方程求解器,或者用于训练逻辑回归或SVM的凸优化算法那样 !!!具有全局的收敛保证!!! "
},
{
"path": "Chapter6/deep_feedforward_networks.tex",
"chars": 69371,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Kai Li\n\\chapter{\\glsentrytext{deep_feedforward_network}}\n\\label{chap:deep_feedforwar"
},
{
"path": "Chapter7/README.md",
"chars": 7,
"preview": "#第七章笔记\n"
},
{
"path": "Chapter7/annotations.txt",
"chars": 13840,
"preview": "{'user': 'acct:vsooda@hypothes.is', 'text': '中文语法有误。考虑:\\n显示地对标签噪声进行建模是防止这一点的一种方法。', 'origin_text': '\\u2061p(y∣x)\\\\log p("
},
{
"path": "Chapter7/regularization.tex",
"chars": 59332,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Shenjian Zhao\n\\chapter{\\glsentrytext{DL}中的正则化}\n\\label{chap:regularization_for_deep_l"
},
{
"path": "Chapter8/README.md",
"chars": 7,
"preview": "#第八章笔记\n"
},
{
"path": "Chapter8/annotations.txt",
"chars": 13484,
"preview": "{'user': 'acct:happynoom@hypothes.is', 'text': '复杂度随着输入维度增加呈几何级数增长', 'origin_text': '性分类器而言,精确地最小化0−10−10-1损失通常是不可解的( !"
},
{
"path": "Chapter8/optimization_for_training_deep_models.tex",
"chars": 73313,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Yujun Li \n\\chapter{\\glsentrytext{deep_model}中的优化}\n\\label{chap:optimization_for_train"
},
{
"path": "Chapter9/README.md",
"chars": 7,
"preview": "#第九章笔记\n"
},
{
"path": "Chapter9/annotations.txt",
"chars": 41140,
"preview": "{'user': 'acct:zhiding@hypothes.is', 'text': '卷积神经网络', 'origin_text': '看作是二维的像素网格)。卷积网络在诸多应用领域都表现优异。“ !!!卷积网络!!! ”一词表明"
},
{
"path": "Chapter9/convolutional_networks.tex",
"chars": 43858,
"preview": "% !Mode:: \"TeX:UTF-8\"\n% Translator: Kai Li\n\\chapter{\\glsentrytext{convolutional_network}}\n\\label{chap:convolutional_netw"
},
{
"path": "Makefile",
"chars": 259,
"preview": "all:\n\txelatex dlbook_cn.tex && bibtex dlbook_cn.aux && texindy dlbook_cn.idx && makeglossaries dlbook_cn && xelatex dlbo"
},
{
"path": "README.md",
"chars": 6420,
"preview": "# Deep Learning 中文翻译\n\n在众多网友的帮助和校对下,中文版终于出版了。尽管还有很多问题,但至少90%的内容是可读的,并且是准确的。\n我们尽可能地保留了原书[Deep Learning](http://www.deeplea"
},
{
"path": "acknowledgments.tex",
"chars": 6522,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\chapter*{中文版致谢}\n\\addcontentsline{toc}{chapter}{致谢}\n\n首先,我们要感谢原作者在本书翻译时给予我们的大力帮助。特别是,原作者和我们分享了书中的原图"
},
{
"path": "acknowledgments_github.md",
"chars": 5583,
"preview": "#致谢\n\n\n2016年12月8日\n------------\n - @tttwwy ==> 链接问题\n - @tankeco ==> Chapter12 语句不通\n - @fairmiracle ==> Chapter2 公式问题,Chapt"
},
{
"path": "applied_math_and_machine_learning_basics.tex",
"chars": 571,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\part{应用数学与机器学习基础}\n\\label{part:applied_math_and_machine_learning_basics}\n\n\\newpage\n\n本书这一部分将介绍理解\\gl"
},
{
"path": "breakcites.sty",
"chars": 615,
"preview": "% breakcites\n% Style file to allow citations to be broken across lines.\n% - Don Hosek 3/14/89 (LaTeX209-Version)\n% - L"
},
{
"path": "deep_learning_research.tex",
"chars": 2277,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\part{深度学习研究}\n\\label{part:deep_learning_research}\n\n\\newpage\n本书这一部分描述目前研究社群所追求的、更有远见和更先进的\\gls{DL}方法"
},
{
"path": "deep_networks_modern_practices.tex",
"chars": 1135,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\part{深度网络:现代实践}\n\\label{part:deep_networks_modern_practices}\n\n\\newpage\n本书这一部分总结现代\\gls{DL}用于解决实际应用的"
},
{
"path": "dlbook_cn.bib",
"chars": 2,
"preview": " \n"
},
{
"path": "dlbook_cn.tex",
"chars": 3950,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\documentclass[twoside,nofonts,fancyhdr,openany,UTF8]{ctexbook}\n\\usepackage{natbib}\n\n% CJK related"
},
{
"path": "docs/Gemfile",
"chars": 73,
"preview": "source 'https://rubygems.org'\ngem 'github-pages', group: :jekyll_plugins\n"
},
{
"path": "docs/_config.yml",
"chars": 2026,
"preview": "title: Deep Learning Book Chinese Translation\ndescription: \ndisqus_shortname: exacity\nreading_time: "
},
{
"path": "docs/_includes/browser-upgrade.html",
"chars": 203,
"preview": "<!--[if lt IE 9]><div class=\"upgrade\"><strong><a href=\"http://whatbrowser.org/\">Your browser is quite old!</strong> Why "
},
{
"path": "docs/_includes/disqus_comments.html",
"chars": 1306,
"preview": "{% if site.disqus_shortname %}\n <script type=\"text/javascript\">\n /* * * CONFIGURATION VARIABLES: EDIT BEFORE P"
},
{
"path": "docs/_includes/feed-footer.html",
"chars": 274,
"preview": "<p><a href="{{ site.url }}{{ post.url }}">{{ post.title | xml_escape }}</a> was originally p"
},
{
"path": "docs/_includes/footer.html",
"chars": 240,
"preview": "<span>© {{ site.time | date: '%Y' }} {{ site.owner.name }}. Powered by <a href=\"http://jekyllrb.com\" rel=\"nofollow\""
},
{
"path": "docs/_includes/gallery",
"chars": 577,
"preview": "{% assign images = include.images | split:\" \" %}\n{% assign caption = include.caption %}\n{% assign cols = include.cols %}"
},
{
"path": "docs/_includes/head.html",
"chars": 4109,
"preview": "<meta charset=\"utf-8\">\n<title>{% if page.title %}{{ page.title }} – {% endif %}{{ site.title }}</title>\n<meta name"
},
{
"path": "docs/_includes/math_symbol.html",
"chars": 9070,
"preview": "\\(\n\\newcommand{\\argmax}{\\arg\\max}\n\\newcommand{\\argmin}{\\arg\\min}\n\\newcommand{\\sigmoid}{\\text{sigmoid}}\n\\newcommand{\\norm"
},
{
"path": "docs/_includes/navigation.html",
"chars": 659,
"preview": "<nav id=\"dl-menu\" class=\"dl-menuwrapper\" role=\"navigation\">\n\t<button class=\"dl-trigger\">Open Menu</button>\n\t<ul class=\"d"
},
{
"path": "docs/_includes/pagination.html",
"chars": 2322,
"preview": "{% if paginator.total_pages > 1 %}\n<div class=\"pagination\">\n <ul class=\"inline-list\">\n {% comment %} Link for previo"
},
{
"path": "docs/_includes/read-more.html",
"chars": 1039,
"preview": "<div class=\"read-more\">\n {% for post in site.related_posts limit:1 %}\n <div class=\"read-more-header\">\n <a href="
},
{
"path": "docs/_includes/read-time-index.html",
"chars": 190,
"preview": "{% assign readtime = post.content | strip_html | number_of_words | divided_by:site.words_per_minute %}\nReading time ~{% "
},
{
"path": "docs/_includes/read-time.html",
"chars": 185,
"preview": "{% assign readtime = content | strip_html | number_of_words | divided_by:site.words_per_minute %}\nReading time ~{% if re"
},
{
"path": "docs/_includes/scripts.html",
"chars": 1163,
"preview": "<script type=\"text/javascript\" src=\"//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>\n"
},
{
"path": "docs/_includes/social-share.html",
"chars": 749,
"preview": "<div class=\"social-share\">\n <ul class=\"socialcount socialcount-small inline-list\">\n <li class=\"facebook\"><a href=\"ht"
},
{
"path": "docs/_layouts/page.html",
"chars": 2244,
"preview": "<!doctype html>\n<!--[if lt IE 7]><html class=\"no-js lt-ie9 lt-ie8 lt-ie7\" lang=\"en\"> <![endif]-->\n<!--[if (IE 7)&!(IEMob"
},
{
"path": "docs/_layouts/post-index.html",
"chars": 1365,
"preview": "<!doctype html>\n<!--[if lt IE 7]><html class=\"no-js lt-ie9 lt-ie8 lt-ie7\" lang=\"en\"> <![endif]-->\n<!--[if (IE 7)&!(IEMob"
},
{
"path": "docs/_layouts/post.html",
"chars": 2866,
"preview": "<!doctype html>\n<!--[if lt IE 7]><html class=\"no-js lt-ie9 lt-ie8 lt-ie7\" lang=\"en\"> <![endif]-->\n<!--[if (IE 7)&!(IEMob"
},
{
"path": "docs/_posts/2016-12-01-Chapter1_introduction.md",
"chars": 19909,
"preview": "---\ntitle: 引言\nlayout: post\nshare: false\n---\n远在古希腊时期,发明家就梦想着创造能自主思考的机器。\n神话人物皮格马利翁(Pygmalion)、代达罗斯(Daedalus)和赫淮斯托斯(Hephaes"
},
{
"path": "docs/_posts/2016-12-02-Chapter2_linear_algebra.md",
"chars": 22443,
"preview": "---\ntitle: 线性代数\nlayout: post\nshare: false\n---\n\n线性代数作为数学的一个分支,广泛应用于科学和工程中。\n然而,因为线性代数主要是面向连续数学,而非离散数学,所以很多计算机科学家很少接触它。\n掌握好"
},
{
"path": "docs/_posts/2016-12-03-Chapter3_probability_and_information_theory.md",
"chars": 25141,
"preview": "---\ntitle: 概率与信息论\nlayout: post\nshare: false\n---\n\n本章我们讨论概率论和信息论。\n\n概率论是用于表示不确定性声明的数学框架。\n<!-- %(statement要不要换一下说法) -->\n它不仅提"
},
{
"path": "docs/_posts/2016-12-04-Chapter4_numerical_computation.md",
"chars": 17189,
"preview": "---\ntitle: 数值计算\nlayout: post\nshare: false\n---\n\n机器学习算法通常需要大量的数值计算。\n这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,而不是通过解析过程推导出公式来提供正确解的方法。\n"
},
{
"path": "docs/_posts/2016-12-05-Chapter5_machine_learning_basics.md",
"chars": 60470,
"preview": "---\ntitle: 机器学习基础\nlayout: post\nshare: false\n---\n深度学习是机器学习的一个特定分支。\n我们要想充分理解深度学习,必须对机器学习的基本原理有深刻的理解。\n本章将探讨贯穿本书其余部分的一些机器学习重"
},
{
"path": "docs/_posts/2016-12-06-Chapter6_deep_feedforward_networks.md",
"chars": 58264,
"preview": "---\ntitle: 深度前馈网络\nlayout: post\nshare: false\n---\n\n深度前馈网络,也叫作前馈神经网络或者多层感知机,是典型的深度学习模型。前馈网络的目标是近似某个函数$f^*$。\n例如,对于分类器,$y = f"
},
{
"path": "docs/_posts/2016-12-07-Chapter7_regularization.md",
"chars": 44812,
"preview": "---\ntitle: 深度学习中的正则化\nlayout: post\nshare: false\n---\n机器学习中的一个核心问题是设计不仅在训练数据上表现好,并且能在新输入上泛化好的算法。\n在机器学习中,许多策略显式地被设计来减少测试误差(可"
},
{
"path": "docs/_posts/2016-12-08-Chapter8_optimization_for_training_deep_models.md",
"chars": 54634,
"preview": "---\ntitle: 深度模型中的优化\nlayout: post\nshare: false\n---\n<!-- % 267 head -->\n深度学习算法在许多情况下都涉及到优化。\n例如,模型中的进行推断(如\\,PCA)涉及到求解优化问题。\n"
},
{
"path": "docs/_posts/2016-12-09-Chapter9_convolutional_networks.md",
"chars": 34922,
"preview": "---\ntitle: 卷积网络\nlayout: post\nshare: false\n---\n\n卷积网络{cite?},也叫做卷积神经网络,是一种专门用来处理具有类似网格结构的数据的神经网络。\n例如时间序列数据(可以认为是在时间轴上有规律地采"
},
{
"path": "docs/_posts/2016-12-10-Chapter10_sequence_modeling_rnn.md",
"chars": 40389,
"preview": "---\ntitle: 序列建模:循环和递归网络\nlayout: post\nshare: false\n---\n循环神经网络或~RNN~{cite?}是一类用于处理序列数据的神经网络。\n就像卷积网络是专门用于处理网格化数据$\\TSX$(如一个图"
},
{
"path": "docs/_posts/2016-12-11-Chapter11_practical_methodology.md",
"chars": 18930,
"preview": "---\ntitle: 实践方法论\nlayout: post\nshare: false\n---\n要成功地使用深度学习技术,仅仅知道存在哪些算法和解释他们为何有效的原理是不够的。\n一个优秀的机器学习实践者还需要知道如何针对具体应用挑选一个合适的"
},
{
"path": "docs/_posts/2016-12-12-Chapter12_applications.md",
"chars": 40169,
"preview": "---\ntitle: 应用\nlayout: post\nshare: false\n---\n\n在本章中,我们将介绍如何使用深度学习来解决计算机视觉、语音识别、自然语言处理以及其他商业领域中的应用。\n首先我们将讨论在许多最重要的~AI~应用中所需"
},
{
"path": "docs/_posts/2016-12-13-Chapter13_linear_factor_models.md",
"chars": 12752,
"preview": "---\ntitle: 线性因子模型\nlayout: post\nshare: false\n---\n\n\n\n\n许多深度学习的研究前沿均涉及构建输入的概率模型$p_{\\text{model}}(\\Vx)$。\n原则上说,给定任何其他变量的情况下,这样"
},
{
"path": "docs/_posts/2016-12-14-Chapter14_autoencoders.md",
"chars": 21024,
"preview": "---\ntitle: 自编码器\nlayout: post\nshare: false\n---\n自编码器是神经网络的一种,经过训练后能尝试将输入复制到输出。\n自编码器内部有一个隐藏层 $\\Vh$,可以产生编码表示输入。\n该网络可以看作由两部分组"
},
{
"path": "docs/_posts/2016-12-15-Chapter15_representation_learning.md",
"chars": 28537,
"preview": "---\ntitle: 表示学习\nlayout: post\nshare: false\n---\n\n<!-- % 517 head -->\n\n在本章中,首先我们会讨论学习表示是什么意思,以及表示的概念如何有助于深度框架的设计。\n我们探讨学习算法如"
},
{
"path": "docs/_posts/2016-12-16-Chapter16_structured_probabilistic_modelling.md",
"chars": 32579,
"preview": "---\ntitle: 深度学习中的结构化概率模型\nlayout: post\nshare: false\n---\n<!-- % 549 -->\n\n\n<!-- %深度学习为研究者们提供了许多指导性的建模和设计算法的思路。%?? -->\n深度学习为"
},
{
"path": "docs/_posts/2016-12-17-Chapter17_monte_carlo_methods.md",
"chars": 15975,
"preview": "---\ntitle: 蒙特卡罗方法\nlayout: post\nshare: false\n---\n<!-- % 581 -->\n\n随机算法可以粗略地分为两类:Las Vegas\\,算法和蒙特卡罗算法。\nLas Vegas\\,算法总是精确地返回"
},
{
"path": "docs/_posts/2016-12-18-Chapter18_confronting_the_partition_function.md",
"chars": 29815,
"preview": "---\ntitle: 直面配分函数\nlayout: post\nshare: false\n---\n<!-- % 597 -->\n在\\sec?中,我们看到许多概率模型(通常是无向图模型)由一个未归一化的概率分布 $\\tilde{p}(\\RVx,"
},
{
"path": "docs/_posts/2016-12-19-Chapter19_approximate_inference.md",
"chars": 26446,
"preview": "---\ntitle: 近似推断\nlayout: post\nshare: false\n---\n<!-- % 623 -->\n\n\n许多概率模型很难训练的原因是很难进行推断。\n在深度学习中,通常我们有一系列可见变量$\\Vv$和一系列潜变量 $\\V"
},
{
"path": "docs/_posts/2016-12-20-Chapter20_deep_generative_models.md",
"chars": 65361,
"preview": "---\ntitle: 深度生成模型\nlayout: post\nshare: false\n---\n在本章中,我们介绍几种具体的生成模型,这些模型可以使用\\chap?至\\chap?中出现的技术构建和训练。\n所有这些模型在某种程度上都代表了多个变"
},
{
"path": "docs/_sass/_animations.scss",
"chars": 7707,
"preview": "/* ==========================================================================\n Animations\n ========================="
},
{
"path": "docs/_sass/_coderay.scss",
"chars": 1871,
"preview": "/* ==========================================================================\n CodeRay Syntax Highlighting\n ========"
},
{
"path": "docs/_sass/_dl-menu.scss",
"chars": 5702,
"preview": "/* ==========================================================================\n DL Menu\n ============================"
},
{
"path": "docs/_sass/_elements.scss",
"chars": 2840,
"preview": "/* ==========================================================================\n Base Elements and Components\n ======="
},
{
"path": "docs/_sass/_grid.scss",
"chars": 1235,
"preview": "/* ==========================================================================\n Grid\n ==============================="
},
{
"path": "docs/_sass/_mixins.scss",
"chars": 2620,
"preview": "/* ==========================================================================\n Mixins\n ============================="
},
{
"path": "docs/_sass/_page.scss",
"chars": 8771,
"preview": "/* ==========================================================================\n Page layout\n ========================"
},
{
"path": "docs/_sass/_reset.scss",
"chars": 3540,
"preview": "/* ==========================================================================\n Reset CSS\n Adapted from http://github"
},
{
"path": "docs/_sass/_site.scss",
"chars": 1421,
"preview": "/* ==========================================================================\n Site utilities\n ====================="
},
{
"path": "docs/_sass/_syntax.scss",
"chars": 3602,
"preview": "/* ==========================================================================\n Syntax Highlighting\n ================"
},
{
"path": "docs/_sass/_typography.scss",
"chars": 2444,
"preview": "/* ==========================================================================\n Typography\n ========================="
},
{
"path": "docs/_sass/_variables.scss",
"chars": 1912,
"preview": "/* ==========================================================================\n SCSS Variables\n ====================="
},
{
"path": "docs/_sass/vendor/font-awesome/_animated.scss",
"chars": 715,
"preview": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n -webkit-animation: fa-spin 2s infinite line"
},
{
"path": "docs/_sass/vendor/font-awesome/_bordered-pulled.scss",
"chars": 592,
"preview": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n padding: .2em .25em .15em;\n border: so"
},
{
"path": "docs/_sass/vendor/font-awesome/_core.scss",
"chars": 459,
"preview": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n display: inline-block;\n font: normal norm"
},
{
"path": "docs/_sass/vendor/font-awesome/_fixed-width.scss",
"chars": 120,
"preview": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n width: (18em / 14);\n text-align: center;\n}\n"
},
{
"path": "docs/_sass/vendor/font-awesome/_icons.scss",
"chars": 44553,
"preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters th"
},
{
"path": "docs/_sass/vendor/font-awesome/_larger.scss",
"chars": 375,
"preview": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-pr"
},
{
"path": "docs/_sass/vendor/font-awesome/_list.scss",
"chars": 378,
"preview": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n padding-left: 0;\n margin-left: $fa-li-width;\n li"
},
{
"path": "docs/_sass/vendor/font-awesome/_mixins.scss",
"chars": 946,
"preview": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n display: inline-block;\n font: normal normal normal #{$fa-"
},
{
"path": "docs/_sass/vendor/font-awesome/_path.scss",
"chars": 783,
"preview": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n font-family: 'FontAwesome';\n src: url('#{$fa-font-path}/f"
},
{
"path": "docs/_sass/vendor/font-awesome/_rotated-flipped.scss",
"chars": 672,
"preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, "
},
{
"path": "docs/_sass/vendor/font-awesome/_stacked.scss",
"chars": 482,
"preview": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n position: relative;\n display: inline-block;"
},
{
"path": "docs/_sass/vendor/font-awesome/_variables.scss",
"chars": 19859,
"preview": "// Variables\n// --------------------------\n\n$fa-font-path: \"../fonts\" !default;\n$fa-font-size-base: 14px !defau"
},
{
"path": "docs/_sass/vendor/font-awesome/font-awesome.scss",
"chars": 405,
"preview": "/*!\n * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/lice"
},
{
"path": "docs/_sass/vendor/magnific-popup/_settings.scss",
"chars": 2843,
"preview": "////////////////////////\n// Settings //\n////////////////////////\n\n// overlay\n$mfp-overlay-color: "
},
{
"path": "docs/_sass/vendor/magnific-popup/magnific-popup.scss",
"chars": 13322,
"preview": "/* Magnific Popup CSS */\n\n@import \"settings\";\n\n////////////////////////\n//\n// Contents:\n//\n// 1. Default Settings\n// 2. "
},
{
"path": "docs/assets/css/main.scss",
"chars": 449,
"preview": "---\nsitemap: false\n---\n\n/*\n *\n * HPSTR\n *\n * Designer: Michael Rose\n * Twitter: http://twitter.com/mmistakes\n *\n*/\n\n/"
},
{
"path": "docs/assets/js/_main.js",
"chars": 1334,
"preview": "/*! Plugin options and other jQuery stuff */\n\n// dl-menu options\n$(function() {\n $( '#dl-menu' ).dlmenu({\n animation"
},
{
"path": "docs/assets/js/plugins/jquery.dlmenu.js",
"chars": 7201,
"preview": "/**\n * jquery.dlmenu.js v1.0.1\n * http://www.codrops.com\n *\n * Licensed under the MIT license.\n * http://www.opensource."
},
{
"path": "docs/assets/js/plugins/jquery.fitvids.js",
"chars": 2915,
"preview": "/*global jQuery */\n/*jshint multistr:true, browser:true */\n/*!\n* FitVids 1.0\n*\n* Copyright 2011, Chris Coyier - http://c"
},
{
"path": "docs/assets/js/plugins/jquery.magnific-popup.js",
"chars": 45280,
"preview": "/*! Magnific Popup - v0.9.3 - 2013-07-16\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2013 Dmitry Sem"
},
{
"path": "docs/assets/js/plugins/respond.js",
"chars": 9747,
"preview": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nic"
},
{
"path": "docs/index.html",
"chars": 1385,
"preview": "---\nlayout: post-index\ntitle: Deep Learning Book Chinese Translation\ncomments: false\n---\n\n{% for post in paginator.posts"
},
{
"path": "math_symbol.tex",
"chars": 9205,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\newcommand{\\argmax}{\\arg\\max}\n\\newcommand{\\argmin}{\\arg\\min}\n\\newcommand{\\sigmoid}{\\text{sigmoid}"
},
{
"path": "natbib.bst",
"chars": 26224,
"preview": "%% \r\n%% This is file `natbib.bst', generated \r\n%% on <1994/9/16> with the docstrip utility (2.2h).\r\n%% \r\n%% The original"
},
{
"path": "notation.tex",
"chars": 5718,
"preview": "% !Mode:: \"TeX:UTF-8\"\n%TODO\n\\chapter*{数学符号}\n\\label{notation}\n\n\\addcontentsline{toc}{chapter}{数学符号}\n\n\n本节简要介绍本书所使用的数学符号。 \n"
},
{
"path": "scripts/parse_anno.py",
"chars": 1224,
"preview": "import json\n\n# download the raw annotations from hypothes\n# for example https://hypothes.is/api/search?_separate_replies"
},
{
"path": "scripts/parse_gls.py",
"chars": 2177,
"preview": "#!/usr/bin/env python3\nimport sys\nimport re\n\ndef create_gls_dict():\n term_file = open('../terminology.tex', 'r')\n "
},
{
"path": "terminology.tex",
"chars": 101404,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\newglossaryentry{DL}\n{\n name=深度学习,\n description={deep learning},\n sort={deep learning},\n}\n\n\\ne"
},
{
"path": "website.tex",
"chars": 185,
"preview": "% !Mode:: \"TeX:UTF-8\"\n\\chapter*{网站}\n\\addcontentsline{toc}{chapter}{网站}\n\n\\centerline{www.deeplearningbook.org}\n\n\\ \\\\\n\\ \\\\"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the exacity/deeplearningbook-chinese GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 148 files (2.2 MB), approximately 595.9k tokens, and a symbol index with 4 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.