Skip to content

Commit 61d89cd

Browse files
committed
update
1 parent 517b3df commit 61d89cd

8 files changed

+703
-612
lines changed

A-深度学习/C-专题-优化算法.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Index
3838

3939

4040
## 梯度下降
41-
> 数学/[梯度下降法](../数学/深度学习的核心.md#梯度下降法)
41+
> ../数学/[梯度下降法](../C-数学/B-深度学习的核心#梯度下降法)
4242
4343
- 梯度下降是一种**优化算法**,通过**迭代**的方式寻找模型的**最优参数**
4444
- 所谓最优参数指的是使**目标函数**达到最小值时的参数;
@@ -60,7 +60,7 @@ Index
6060

6161
### 小批量随机梯度下降
6262
- 为了降低随机梯度的**方差**,使模型迭代更加稳定,实践中会使用**一批**随机数据的损失来近似平均损失。
63-
> ./机器学习基础/[偏差与方差](./ML-机器学习基础.md#偏差与方差)
63+
> ../机器学习基础/[偏差与方差](../A-机器学习/A-机器学习基础#偏差与方差)
6464
- 使用批训练的另一个主要目的,是为了利用高度优化的**矩阵运算**以及**并行计算框架**
6565

6666
### 小批量 SGD 的更新过程
@@ -156,7 +156,7 @@ Index
156156
> Hinton, 2012
157157
- RMSProp 主要是为了解决 AdaGrad 方法中**学习率过度衰减**的问题—— AdaGrad 根据平方梯度的**整个历史**来收缩学习率,可能使得学习率在达到局部最小值之前就变得太小而难以继续训练;
158158
- RMSProp 使用**指数衰减平均**(递归定义)以丢弃遥远的历史,使其能够在找到某个“凸”结构后快速收敛;此外,RMSProp 还加入了一个超参数 `ρ` 用于控制衰减速率。
159-
> ./术语表/[指数衰减平均](./Base-A-术语表.md#指数加权平均指数衰减平均)
159+
> ./术语表/[指数衰减平均](./备忘-术语表#指数加权平均指数衰减平均)
160160
- 具体来说(对比 AdaGrad 的算法描述),即修改 `r`
161161
<div align="center"><a href="http://www.codecogs.com/eqnedit.php?latex=\fn_jvn&space;\begin{aligned}&space;&r\leftarrow&space;\mathbb{E}[g^2]_t=\rho\cdot\mathbb{E}[g^2]_{t-1}&plus;(1-\rho)\cdot&space;g^2&space;\end{aligned}"><img src="../_assets/公式_20180819204219.png" height="" /></a></div>
162162
@@ -226,7 +226,7 @@ Index
226226
- 梯度下降使用的梯度信息实际上是**一阶导数**
227227
- 牛顿法除了一阶导数外,还会使用**二阶导数**的信息
228228
- 根据导数的定义,一阶导描述的是函数值的变化率,即**斜率**;二阶导描述的则是斜率的变化率,即曲线的弯曲程度——**曲率**
229-
> 数学/[泰勒级数](../数学/微积分的本质.md#泰勒级数)
229+
> 数学/[泰勒级数](../C-数学/B-微积分的本质#泰勒级数)
230230
231231
**牛顿法更新过程** TODO
232232
> 《统计学习方法》 附录 B

A-深度学习/D-专题-序列建模.md

+55-55
Original file line numberDiff line numberDiff line change
@@ -2,82 +2,82 @@
22
===
33

44
**相关专题**
5-
- [专题-RNN](./DL-B-专题-RNN.md)
6-
- [专题-DNN](./DL-B-专题-DNN.md)
5+
- [专题-RNN](./B-专题-RNN.md)
6+
- [专题-RNN](./B-专题-RNN.md)
77

88
Index
99
---
1010
<!-- TOC -->
1111

1212
- [序列建模简述](#序列建模简述)
1313
- [Seq2Seq](#seq2seq)
14-
- [解码方法(贪心、Beam Search、维特比算法)](#解码方法贪心beam-search维特比算法)
15-
- [Beam Search(集束搜索)](#beam-search集束搜索)
16-
- [维特比(Viterbi)算法 TODO](#维特比viterbi算法-todo)
17-
- [其他最短路径算法](#其他最短路径算法)
18-
- [构建 Seq2Seq 一般做法](#构建-seq2seq-一般做法)
14+
- [解码方法(贪心、Beam Search、维特比算法)](#解码方法贪心beam-search维特比算法)
15+
- [Beam Search(集束搜索)](#beam-search集束搜索)
16+
- [维特比(Viterbi)算法 TODO](#维特比viterbi算法-todo)
17+
- [其他最短路径算法](#其他最短路径算法)
18+
- [构建 Seq2Seq 一般做法](#构建-seq2seq-一般做法)
1919
- [序列的表示学习](#序列的表示学习)
20-
- [学习任务无关的 Sentence Embedding](#学习任务无关的-sentence-embedding)
20+
- [学习任务无关的 Sentence Embedding](#学习任务无关的-sentence-embedding)
2121
- [CNN 与序列建模](#cnn-与序列建模)
22-
- [一维卷积](#一维卷积)
22+
- [一维卷积](#一维卷积)
2323
- [时间卷积网络(TCN)](#时间卷积网络tcn)
24-
- [WaveNet](#wavenet)
25-
- [因果卷积](#因果卷积)
26-
- [空洞卷积](#空洞卷积)
27-
- [Highway 网络](#highway-网络)
28-
- [残差模块](#残差模块)
24+
- [WaveNet](#wavenet)
25+
- [因果卷积](#因果卷积)
26+
- [空洞卷积](#空洞卷积)
27+
- [Highway 网络](#highway-网络)
28+
- [残差模块](#残差模块)
2929
- [Reference](#reference)
3030

3131
<!-- /TOC -->
3232

3333
## 序列建模简述
3434
> [从循环到卷积,探索序列建模的奥秘](https://mp.weixin.qq.com/s/f0sv7c-H5o5L_wy2sUonUQ) - 机器之心
3535
- 序列建模就是将一个**输入/观测**序列映射到一个**输出/标记**序列
36-
> 《统计学习方法》中称之为标注问题
36+
> 《统计学习方法》中称之为标注问题
3737
-**传统机器学习**方法中,常用的模型有:隐马尔可夫模型(HMM),条件随机场(CRF)等
38-
> 机器学习专题 TODO
38+
> 机器学习专题 TODO
3939
-**深度学习领域**的很长一段时间里,RNN/LSTM 都是序列建模的首选。
40-
> 《深度学习》 10 序列建模:循环和递归网络
40+
> 《深度学习》 10 序列建模:循环和递归网络
4141
- 最近,CNN 开始在序列建模领域流行,一个**关键想法**是——在一维时间序列上使用**一维卷积运算**
42-
<div align="center"><img src="../_assets/TIM截图20180808105242.png" height="" /></div>
42+
<div align="center"><img src="../_assets/TIM截图20180808105242.png" height="" /></div>
4343

44-
> [CNN for Sentence Classification](https://arxiv.org/abs/1408.5882) (Kim, 2014)
44+
> [CNN for Sentence Classification](https://arxiv.org/abs/1408.5882) (Kim, 2014)
4545
4646

4747
## Seq2Seq
4848
- Seq2Seq 的核心思想是把一个输出序列,通过**编码**(Encode)和**解码**(Decode)两个过程映射到一个新的输出序列。
49-
<div align="center"><img src="../_assets/seq2seq.png" height="" /></div>
50-
51-
> [Translation with a Sequence to Sequence Network and Attention](https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html) — PyTorch
49+
<div align="center"><img src="../_assets/seq2seq.png" height="" /></div>
50+
51+
> [Translation with a Sequence to Sequence Network and Attention](https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html) — PyTorch
5252
- 经典的 Seq2Seq 模型中,**编码器**(Encoder)和**解码器**(Decoder)都使用 **RNN** 进行建模
53-
<!-- <div align="center"><img src="../_assets/seq2seq-text.jpg" height="250" /></div> -->
54-
<div align="center"><img src="../_assets/TIM截图20180829162307.png" height="" /></div>
55-
56-
> 上图是一次**机器翻译**的过程,输入是一个源语言的一个句子 "A B C",Encoder 一次读入每个单词直到结束符 `<EOS>`(End of Sequence);<br/>
57-
> 在解码的第一步,Decoder 先读取 **Encoder 的最终状态**,生成目标语言的第一个词 'W',接着 Decoder 读取第一步的输出 'W' 作为第二步的输入,进而生成第二个词 'X',如此直到生成 `<EOS>` 或达到指定**最大长度**
58-
>> Decoder 生成每个词还要结合当前时间步的隐状态(如果是 LSTM 还有 记忆状态),更深入的细节暂时略过。
53+
<!-- <div align="center"><img src="../_assets/seq2seq-text.jpg" height="250" /></div> -->
54+
<div align="center"><img src="../_assets/TIM截图20180829162307.png" height="" /></div>
55+
56+
> 上图是一次**机器翻译**的过程,输入是一个源语言的一个句子 "A B C",Encoder 一次读入每个单词直到结束符 `<EOS>`(End of Sequence);<br/>
57+
> 在解码的第一步,Decoder 先读取 **Encoder 的最终状态**,生成目标语言的第一个词 'W',接着 Decoder 读取第一步的输出 'W' 作为第二步的输入,进而生成第二个词 'X',如此直到生成 `<EOS>` 或达到指定**最大长度**
58+
>> Decoder 生成每个词还要结合当前时间步的隐状态(如果是 LSTM 还有 记忆状态),更深入的细节暂时略过。
5959
- Seq2Seq 之所以流行,是因为它为不同的问题提供了一套**端到端**(End to End)的解决方案,免去了繁琐的中间步骤,从输入直接得到结果.
6060
- 根据任务的输入输出差异,编码器和解码器的设计也不尽相同,但是“Encoder-Decoder”的结构都是一致的。
61-
- **机器翻译**:输入源语言的一个句子,输出目标语言的句子;
62-
- **机器问答**:输入问题/查询,输出答案;
63-
- **文本摘要**:输入一个长句或段落,输出一个摘要短句;
64-
- **语音识别**:输入是音频序列信号,输出为识别出的文本;
65-
- **图像描述**:输入是图像经过视觉网络的特征,输出是图像的描述文本。
66-
- ...
61+
- **机器翻译**:输入源语言的一个句子,输出目标语言的句子;
62+
- **机器问答**:输入问题/查询,输出答案;
63+
- **文本摘要**:输入一个长句或段落,输出一个摘要短句;
64+
- **语音识别**:输入是音频序列信号,输出为识别出的文本;
65+
- **图像描述**:输入是图像经过视觉网络的特征,输出是图像的描述文本。
66+
- ...
6767

6868
### 解码方法(贪心、Beam Search、维特比算法)
6969

7070
- Seq2Seq 中的解码方法主要有三种:**贪心****Beam Search****维特比算法**(动态规划)
7171
- 这三种方法的思想本质上是一致的,假设选取相同的评价标准(比如概率最大、路径最短等)
72-
- **贪心**每到达一个节点,只选择当前状态的**最优结果**,其他都忽略,直到最后一个节点;贪心法只能得到某个局部最优解;
73-
- **Beam Search** 会在每个节点保存当前**最优的 k 个结果**(排序后),其他结果将被“剪枝”,因为每次都有 k 个分支进入下一个状态。Beam Search 也不能保证全局最优,但能以较大的概率得到全局最优解。
74-
- **维特比算法**利用**动态规划**的方法可以保证得到全局最优解,但是当候选状态极大时,需要消耗大量的时间和空间搜索和保存状态,因此维特比算法只适合状态集比较小的情况。
72+
- **贪心**每到达一个节点,只选择当前状态的**最优结果**,其他都忽略,直到最后一个节点;贪心法只能得到某个局部最优解;
73+
- **Beam Search** 会在每个节点保存当前**最优的 k 个结果**(排序后),其他结果将被“剪枝”,因为每次都有 k 个分支进入下一个状态。Beam Search 也不能保证全局最优,但能以较大的概率得到全局最优解。
74+
- **维特比算法**利用**动态规划**的方法可以保证得到全局最优解,但是当候选状态极大时,需要消耗大量的时间和空间搜索和保存状态,因此维特比算法只适合状态集比较小的情况。
7575

7676
#### Beam Search(集束搜索)
7777
- Beam Search 是一种启发式算法
7878
- 该方法会保存前 `beam_size` 个最佳状态,每次解码时会根据所有保存的状态进行下一步**扩展****排序**,依然只保留前 `beam_size` 个最佳状态;循环迭代至最后一步,保存最佳选择。
7979
- Beam Search 图示
80-
<div align="center"><img src="../_assets/TIM截图20180829172245.png" height="" /></div>
80+
<div align="center"><img src="../_assets/TIM截图20180829172245.png" height="" /></div>
8181

8282
-`beam_size = 1` 时,Beam Search 即退化为贪心搜索
8383
- 一般为了计算资源和性能的平衡,`beam_size` 会选择一个适中的范围;通常 `beam_size``8~12` 即可(机器翻译、文本摘要)
@@ -89,22 +89,22 @@ Index
8989

9090
#### 其他最短路径算法
9191
- Dijkstra 算法(迪杰斯特拉算法)
92-
- 基于贪心
93-
- 用于求解某个顶点到其他所有顶点之间的最短路径
94-
- 时间复杂度 `O(N^2)`
95-
- Dijkstra 算法的使用范围比 Viterbi 算法更广,可用于求解大部分图结构中的最短路径。
92+
- 基于贪心
93+
- 用于求解某个顶点到其他所有顶点之间的最短路径
94+
- 时间复杂度 `O(N^2)`
95+
- Dijkstra 算法的使用范围比 Viterbi 算法更广,可用于求解大部分图结构中的最短路径。
9696
- Floyd 算法(弗洛伊德算法)
97-
- 求解的是每一对顶点之间的最短路径
98-
- 时间复杂度 `O(N^3)`
97+
- 求解的是每一对顶点之间的最短路径
98+
- 时间复杂度 `O(N^3)`
9999

100100

101101
### 构建 Seq2Seq 一般做法
102102
- 堆叠 RNN/CNN
103-
> [CNN 与序列建模](#cnn-与序列建模)
103+
> [CNN 与序列建模](#cnn-与序列建模)
104104
- Dropout 机制
105105
- **残差**连接
106106
- **Attention 机制**
107-
> [Attention 专题](./DL-C-专题-Attention.md)
107+
<!-- > [Attention 专题](./DL-C-专题-Attention.md) -->
108108

109109

110110
## 序列的表示学习
@@ -122,21 +122,21 @@ Index
122122

123123
## CNN 与序列建模
124124
- 一般认为 CNN 擅长处理**网格结构的数据**,比如图像(二维像素网络)
125-
- 卷积层试图将神经网络中的每一小块进行更加深入的分析,从而得出抽象程度更高的特征。
126-
- 一般来说通过卷积层处理的神经元结点矩阵会变得更深,即神经元的组织在第三个维度上会增加。
125+
- 卷积层试图将神经网络中的每一小块进行更加深入的分析,从而得出抽象程度更高的特征。
126+
- 一般来说通过卷积层处理的神经元结点矩阵会变得更深,即神经元的组织在第三个维度上会增加。
127127
- **时序数据**同样可以认为是在时间轴上有规律地采样而形成的一维网格
128-
<div align="center"><img src="../_assets/TIM截图20180808105242.png" height="" /></div>
128+
<div align="center"><img src="../_assets/TIM截图20180808105242.png" height="" /></div>
129129

130-
> [CNN for Sentence Classification](https://arxiv.org/abs/1408.5882) (Kim, 2014)
130+
> [CNN for Sentence Classification](https://arxiv.org/abs/1408.5882) (Kim, 2014)
131131
132132
### 一维卷积
133133
- 适用于序列建模的卷积网络一般就是采用的是一维卷积
134-
<div align="center"><img src="../_assets/TIM截图20180808135512.png" height="200" /></div>
134+
<div align="center"><img src="../_assets/TIM截图20180808135512.png" height="200" /></div>
135135

136-
- 最下层的 `x_i` 可视为句子的输入序列
137-
- 最上层的 `g_j` 即输出序列
138-
- 流行的网络中一般使用 **embedding** 作为输入,也就说每个 `x_i` 其实是一个多维向量 `v(x_i)`
139-
> [NLP-词向量](./NLP-词向量.md)
136+
- 最下层的 `x_i` 可视为句子的输入序列
137+
- 最上层的 `g_j` 即输出序列
138+
- 流行的网络中一般使用 **embedding** 作为输入,也就说每个 `x_i` 其实是一个多维向量 `v(x_i)`
139+
> ../自然语言处理/[词向量](../B-自然语言处理/B-专题-词向量.md)
140140
141141

142142
## 时间卷积网络(TCN)

0 commit comments

Comments
 (0)