Skip to content

Commit 5cd18e2

Browse files
authored
Merge pull request #111 from tngt/develop
Create a new folder
2 parents 351d595 + 63d9c0a commit 5cd18e2

File tree

2 files changed

+69
-70
lines changed

2 files changed

+69
-70
lines changed

docs/tutorials/computer_vision/image_augmentation/ImageAugment.md

-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
<center><img src="https://raw.githubusercontent.com/lvjian0706/Deep-Learning-Img/master/CNN/Image_Aug/img/image_aug_samples_s.jpg" width = "800"></center>
3232
<center><br>图2 数据增广后可视化</br></center>
3333

34-
35-
3634
下文将介绍这些策略的原理与使用方法,其中,每种数据增广策略的参考论文与参考开源代码均在下面的介绍中列出。
3735

3836
**图3** 为测试图像,第三节将基于测试图像进行变换,并将变换后的效果进行可视化。

docs/tutorials/deep_learning/activation_functions/Activation_Function.md

+69-68
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22

33
## 什么是激活函数
44

5-
* 激活函数是人工神经网络的一个极其重要的特征
6-
* 激活函数决定一个神经元是否应该被激活,激活代表神经元接收的信息与给定的信息有关。
5+
* 激活函数是人工神经网络的一个极其重要的特征
6+
* 激活函数决定一个神经元是否应该被激活,**激活**代表神经元接收的信息与给定的信息有关;
77
* 激活函数对输入信息进行非线性变换,然后将变换后的输出信息作为输入信息传给下一层神经元。
88

99
## 激活函数的作用
10-
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
10+
11+
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。
1112
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
1213

1314
## 激活函数的种类
1415
### identity
16+
1517
函数定义:
1618

1719
$$f(x)=x$$
@@ -20,17 +22,14 @@ $$f(x)=x$$
2022

2123
$${ f }^{ ' }(x)=1$$
2224

23-
函数图形如图 1 所示:
25+
函数图形如 **图1** 所示:
2426

2527
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/identity.jpg?raw=true" width="400" hegiht="" ></center>
26-
<center><br>图1:identity</br></center>
27-
28-
优点:
29-
1. 适合于潜在行为是线性(与线性回归相似)的任务。
28+
<center><br>图1 identity</br></center>
3029

31-
缺点:
32-
1. 无法提供非线性映射,当多层网络使用identity激活函数时,整个网络就相当于一个单层模型。
30+
优点:适合于潜在行为是线性(与线性回归相似)的任务。
3331

32+
缺点:无法提供非线性映射,当多层网络使用identity激活函数时,整个网络就相当于一个单层模型。
3433
### step
3534
函数定义:
3635

@@ -40,17 +39,14 @@ $$ { f }(x)=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix}
4039

4140
$$ { f }^{ ' }(x)=\begin{cases} \begin{matrix} 0 & x\neq 0 \end{matrix} \\ \begin{matrix} ? & x=0 \end{matrix} \end{cases}$$
4241

43-
函数图形如图 2 所示:
42+
函数图形如 **图2** 所示:
4443

4544
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/step.jpg?raw=true" width="400" hegiht="" ></center>
46-
<center><br>图2:step</br></center>
47-
48-
优点:
49-
1. 激活函数 $Step$ 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。
45+
<center><br>图2 step</br></center>
5046

51-
缺点:
52-
1. 它无法应用于神经网络因为其导数是 $0$(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。
47+
优点:激活函数 $Step$ 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。
5348

49+
缺点:它无法应用于神经网络因为其导数是 $0$(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。
5450
### sigmoid
5551
函数定义:
5652

@@ -60,10 +56,10 @@ $${ f }(x)=\sigma (x)=\frac { 1 }{ 1+{ e }^{ -x } } $$
6056

6157
$${ f }^{ ' }(x)=f(x)(1-f(x))$$
6258

63-
函数图形如图 3 所示:
59+
函数图形如 **图3** 所示:
6460

6561
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/sigmoid.jpg?raw=true" width="400" hegiht="" ></center>
66-
<center><br>图3sigmoid</br></center>
62+
<center><br>图3 sigmoid</br></center>
6763

6864
优点:
6965
1. $sigmoid$ 函数的输出映射在 $(0,1)$ 之间,单调连续,输出范围有限,优化稳定,可以用作输出层;
@@ -83,10 +79,10 @@ $${ f }(x)=tanh(x)=\frac { { e }^{ x }-{ e }^{ -x } }{ { e }^{ x }+{ e }^{ -x }
8379

8480
$${ f }^{ ' }(x)=1-f(x)^{ 2 }$$
8581

86-
函数图形如图 4 所示:
82+
函数图形如 **图4** 所示:
8783

8884
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/tanh.jpg?raw=true" width="400" hegiht="" ></center>
89-
<center><br>图4tanh</br></center>
85+
<center><br>图4 tanh</br></center>
9086

9187
优点:
9288
1. $tanh$ 比 $sigmoid$ 函数收敛速度更快;
@@ -96,7 +92,8 @@ $${ f }^{ ' }(x)=1-f(x)^{ 2 }$$
9692
1. 与 $sigmoid$ 函数相同,由于饱和性容易产生的梯度消失;
9793
2. 与 $sigmoid$ 函数相同,由于具有幂运算,计算复杂度较高,运算速度较慢。
9894

99-
### relu
95+
### ReLU
96+
10097
函数定义:
10198

10299
$$f(x)=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -105,22 +102,23 @@ $$f(x)=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} x & x
105102

106103
$${ { f }(x) }^{ ' }=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
107104

108-
函数图形如图 5 所示:
105+
函数图如 **图5** 所示:
109106
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/relu.jpg?raw=true" width="400" hegiht="" ></center>
110-
<center><br>图5:relu</br></center>
107+
<center><br>图5 ReLU</br></center>
111108

112109
优点:
113110
1. 收敛速度快;
114-
2. 相较于 $sigmoid$ 和 $tanh$ 中涉及了幂运算,导致计算复杂度高, $relu$ 可以更加简单的实现;
115-
3. 当输入 $x>=0$ 时,$relu$ 的导数为常数,这样可有效缓解梯度消失问题;
116-
4. 当 $x<0$ 时,$relu$ 的梯度总是 $0$,提供了神经网络的稀疏表达能力;
111+
2. 相较于 $sigmoid$ 和 $tanh$ 中涉及了幂运算,导致计算复杂度高, ReLU​可以更加简单的实现;
112+
3. 当输入 $x>=0$ 时,ReLU​ 的导数为常数,这样可有效缓解梯度消失问题;
113+
4. 当 $x<0$ 时,ReLU​ 的梯度总是 $0$,提供了神经网络的稀疏表达能力;
117114

118115
缺点:
119-
1. $relu$ 的输出不是以 $0$ 为中心的;
116+
1. ReLU​ 的输出不是以 $0$ 为中心的;
120117
2. 神经元坏死现象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;
121118
3. 不能避免梯度爆炸问题;
122119

123-
### lrelu
120+
### ReLU
121+
124122
函数定义:
125123

126124
$$ f(x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -129,19 +127,20 @@ $$ f(x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matri
129127

130128
$${ { f }(x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
131129

132-
其中,$\alpha$ 常设置为0.01。函数图形如图 6 所示:
130+
其中,$\alpha$ 常设置为0.01。函数图如 **图6** 所示:
133131
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/lrelu.jpg?raw=true" width="400" hegiht="" ></center>
134-
<center><br>图6:lrelu</br></center>
132+
<center><br>图6 LReLU</br></center>
135133

136134
优点:
137135
1. 避免梯度消失;
138136
2. 由于导数总是不为零,因此可减少死神经元的出现;
139137

140138
缺点:
141-
1. $lrelu$ 表现并不一定比 $relu$ 好;
139+
1. LReLU​ 表现并不一定比 ReLU​ 好;
142140
2. 无法避免梯度爆炸问题;
143141

144-
### prelu
142+
### PReLU
143+
145144
函数定义:
146145

147146
$$f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -150,16 +149,17 @@ $$f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \beg
150149

151150
$${ { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
152151

153-
函数图形如图 7 所示:
152+
函数图如 **图7** 所示:
154153
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/prelu.jpg?raw=true" width="400" hegiht="" ></center>
155-
<center><br>图7:prelu</br></center>
154+
<center><br>图7 PReLU</br></center>
156155

157156
优点:
158-
1. $prelu$$lrelu$ 的改进,可以自适应地从数据中学习参数;
157+
1. PReLU​LReLU 的改进,可以自适应地从数据中学习参数;
159158
2. 收敛速度快、错误率低;
160-
3. $prelu$ 可以用于反向传播的训练,可以与其他层同时优化;
159+
3. PReLU 可以用于反向传播的训练,可以与其他层同时优化;
160+
161+
### RReLU
161162

162-
### rrelu
163163
函数定义:
164164

165165
$$f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -168,14 +168,13 @@ $$f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin
168168

169169
$${ { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
170170

171-
函数图形如图 8 所示:
171+
函数图形如 **图8** 所示:
172172
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/rrelu.jpg?raw=true" width="400" hegiht="" ></center>
173-
<center><br>图8:rrelu</br></center>
173+
<center><br>图8 RReLU</br></center>
174174

175-
优点:
176-
1. 为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)
175+
优点:为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。
176+
### ELU
177177

178-
### elu
179178
函数定义:
180179

181180
$$ f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1 \right) & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -184,20 +183,21 @@ $$ f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1 \right)
184183

185184
$${ { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} f(\alpha ,x)+\alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
186185

187-
函数图形如图 9 所示:
186+
函数图形如 **图9** 所示:
188187
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/elu.jpg?raw=true" width="400" hegiht="" ></center>
189-
<center><br>图9:elu</br></center>
188+
<center><br>图9 ELU</br></center>
190189

191190
优点:
192191
1. 导数收敛为零,从而提高学习效率;
193192
2. 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化;
194-
3. 防止死神经元出现
193+
3. 防止死神经元出现
195194

196195
缺点:
197-
1. 计算量大,其表现并不一定比 $relu$ 好;
196+
1. 计算量大,其表现并不一定比 ReLU 好;
198197
2. 无法避免梯度爆炸问题;
199198

200-
### selu
199+
### SELU
200+
201201
函数定义:
202202

203203
$$f(\alpha ,x)=\lambda \begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1 \right) & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}$$
@@ -206,12 +206,12 @@ $$f(\alpha ,x)=\lambda \begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1
206206

207207
$${ { f }(\alpha ,x) }^{ ' }=\lambda \begin{cases} \begin{matrix} \alpha \left( { e }^{ x } \right) & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}$$
208208

209-
函数图形如图 10 所示:
209+
函数图形 **如图10** 所示:
210210
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/selu.jpg?raw=true" width="400" hegiht="" ></center>
211-
<center><br>图10:selu</br></center>
211+
<center><br>图10 SELU</br></center>
212212

213213
优点:
214-
1. $selu $是 $elu$ 的一个变种。其中 λ 和 α 是固定数值(分别为 $1.0507$ 和 $1.6726$);
214+
1. SELU 是 ELU 的一个变种。其中 λ 和 α 是固定数值(分别为 $1.0507$ 和 $1.6726$);
215215
2. 经过该激活函数后使得样本分布自动归一化到 $0$ 均值和单位方差;
216216
3. 不会出现梯度消失或爆炸问题;
217217

@@ -224,19 +224,20 @@ $$f(x)=\frac { x }{ \left| x \right| +1 }$$
224224

225225
$${ f }^{ ' }(x)=\frac { 1 }{ { (1+\left| x \right| ) }^{ 2 } } $$
226226

227-
函数图形如图 11 所示:
227+
函数图形如 **图 11** 所示:
228228
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/softsign.jpg?raw=true" width="400" hegiht="" ></center>
229-
<center><br>图11softsign</br></center>
229+
<center><br>图11 softsign</br></center>
230230

231231
优点:
232232
1. $softsign$ 是 $tanh$ 激活函数的另一个替代选择;
233233
2. $softsign$ 是反对称、去中心、可微分,并返回 $-1$ 和 $1$ 之间的值;
234234
3. $softsign$ 更平坦的曲线与更慢的下降导数表明它可以更高效地学习;
235235

236236
缺点:
237-
1. 导数的计算比$Tanh$更麻烦;
237+
1. 导数的计算比$tanh$ 更麻烦;
238238

239239
### softplus
240+
240241
函数定义:
241242

242243
$$f(x)=\ln { (1+{ e }^{ x }) }$$
@@ -245,9 +246,9 @@ $$f(x)=\ln { (1+{ e }^{ x }) }$$
245246

246247
$${ f }^{ ' }(x)=\frac { 1 }{ 1+{ e }^{ -x } }$$
247248

248-
函数图形如图 12 所示:
249+
函数图形如 **图12** 所示:
249250
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/softplus.jpg?raw=true" width="400" hegiht="" ></center>
250-
<center><br>图12softplus</br></center>
251+
<center><br>图12 softplus</br></center>
251252

252253
优点:
253254
1. 作为 $relu$ 的一个不错的替代选择,$softplus$ 能够返回任何大于 $0$ 的值。
@@ -264,10 +265,10 @@ $$
264265
y_i=soft\max \left( x_i \right) =\frac{e^{x_i}}{\sum_{j=1}^k{e^{x_j}}}
265266
$$
266267

267-
显然,$0<y_i<1$。图 13 给出了三类分类问题的 softmax 输出示意图。在图中,对于取值为 4、1和-4 的 $x_1$、$x_2$ 和 $x_3$,通过 softmax 变换后,将其映射到 (0,1) 之间的概率值。
268+
显然,$0<y_i<1$。**图13** 给出了三类分类问题的 softmax 输出示意图。在图中,对于取值为 4、1和-4 的 $x_1$、$x_2$ 和 $x_3$,通过 softmax 变换后,将其映射到 (0,1) 之间的概率值。
268269

269270
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/softmax.png?raw=true" width="400" hegiht="" ></center>
270-
<center><br>图13三类分类问题的softmax输出示意图</br></center>
271+
<center><br>图13 三类分类问题的softmax输出示意图</br></center>
271272

272273
由于 softmax 输出结果的值累加起来为 1,因此可将输出概率最大的作为分类目标(图 1 中被分类为第一类)。
273274

@@ -280,9 +281,9 @@ $$f\left( x \right) =x\cdot \sigma \left( x \right) $$
280281

281282
其中,$\sigma$ 是 $sigmoid$ 函数。
282283

283-
$swish$ 激活函数的图形如图 14 所示:
284+
$swish$ 激活函数的图形如 **图14** 所示:
284285
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/swish.jpg?raw=true" width="400" hegiht="" ></center>
285-
<center><br>图14swish 激活函数</br></center>
286+
<center><br>图14 swish 激活函数</br></center>
286287

287288
$swish$ 激活函数的一阶导数如下:
288289

@@ -293,20 +294,20 @@ $$\begin{array}{c}
293294
=f\left( x \right) +\sigma \left( x \right) \left( 1-f\left( x \right) \right)\\
294295
\end{array}$$
295296

296-
$swish$ 激活函数的一阶和二阶导数的图形如图 15 所示:
297+
$swish$ 激活函数的一阶和二阶导数的图形如 **图15** 所示:
297298
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/swish_derivatives.jpg?raw=true" width="400" hegiht="" ></center>
298-
<center><br>图15swish 导数</br></center>
299+
<center><br>图15 swish 导数</br></center>
299300

300301
超参数版 $swish$ 激活函数:
301302

302303
$$f\left( x \right) =x\cdot \sigma \left( \beta x \right)$$
303304

304-
其中,$\beta$ 是超参数。超参数版 $swish$ 激活函数的图形如图 16 所示:
305+
其中,$\beta$ 是超参数。超参数版 $swish$ 激活函数的图形如 **图16** 所示:
305306
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/swish2.jpg?raw=true" width="400" hegiht="" ></center>
306-
<center><br>图16swish 超参数</br></center>
307+
<center><br>图16 swish 超参数</br></center>
307308

308309
优点:
309-
1. 当 $x>0$ 时,不存在梯度消失的情况;当 $x<0$ 时,神经元也不会像 $relu$ 一样出现死亡的情况;
310+
1. 当 $x>0$ 时,不存在梯度消失的情况;当 $x<0$ 时,神经元也不会像 ReLU 一样出现死亡的情况;
310311
2. $swish$ 处处可导,连续光滑;
311312
3. $swish$ 并非一个单调的函数;
312313
4. 提升了模型的性能;
@@ -319,10 +320,10 @@ $$f\left( x \right) =x\cdot \sigma \left( \beta x \right)$$
319320

320321
$$f\left( x \right) =x\frac{\text{Re}LU6\left( x+3 \right)}{6}$$
321322

322-
$hard \ swish$ 和 $swish$ 激活函数对比如图 17 所示:
323+
$hard \ swish$ 和 $swish$ 激活函数对比如 **图17** 所示:
323324

324325
<center><img src="https://github.com/lvjian0706/Deep-Learning-Img/blob/master/Base/Activation_Function/img/hard_swish.jpg?raw=true" width="400" hegiht="" ></center>
325-
<center><br>图17Hard Swish</br></center>
326+
<center><br>图17 Hard Swish</br></center>
326327

327328
优点:
328329
与 $swish$ 相比 $hard \ swish$ 减少了计算量,具有和 $swish$ 同样的性质。
@@ -351,7 +352,7 @@ $$s^{'}\left( x \right) =s\left( x \right) \left( 1-s\left( x \right) \right) \i
351352

352353
由上面两个公式可知 $tanh$ 引起的梯度消失问题没有 $sigmoid$ 严重,所以 $tanh$ 收敛速度比 $sigmoid$ 快。
353354

354-
> sigmoid 和 softmax 对比
355+
> sigmoid 和 softmax 有什么区别?
355356
356357
1. 二分类问题时 $sigmoid$ 和 $softmax$ 是一样的,都是求 $cross \ entropy \ loss$ ,而 $softmax$ 可以用于多分类问题。
357358
2. $softmax$ 是 $sigmoid$ 的扩展,因为,当类别数 $k=2$ 时,$softmax$ 回归退化为 $logistic$ 回归。

0 commit comments

Comments
 (0)