2
2
3
3
## 什么是激活函数
4
4
5
- * 激活函数是人工神经网络的一个极其重要的特征。
6
- * 激活函数决定一个神经元是否应该被激活,激活代表神经元接收的信息与给定的信息有关。
5
+ * 激活函数是人工神经网络的一个极其重要的特征;
6
+ * 激活函数决定一个神经元是否应该被激活,** 激活 ** 代表神经元接收的信息与给定的信息有关;
7
7
* 激活函数对输入信息进行非线性变换,然后将变换后的输出信息作为输入信息传给下一层神经元。
8
8
9
9
## 激活函数的作用
10
- 如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
10
+
11
+ 如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。
11
12
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
12
13
13
14
## 激活函数的种类
14
15
### identity
16
+
15
17
函数定义:
16
18
17
19
$$ f(x)=x $$
@@ -20,17 +22,14 @@ $$f(x)=x$$
20
22
21
23
$$ { f }^{ ' }(x)=1 $$
22
24
23
- 函数图形如图 1 所示:
25
+ 函数图形如 ** 图1 ** 所示:
24
26
25
27
<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 >
30
29
31
- 缺点:
32
- 1 . 无法提供非线性映射,当多层网络使用identity激活函数时,整个网络就相当于一个单层模型。
30
+ 优点:适合于潜在行为是线性(与线性回归相似)的任务。
33
31
32
+ 缺点:无法提供非线性映射,当多层网络使用identity激活函数时,整个网络就相当于一个单层模型。
34
33
### step
35
34
函数定义:
36
35
@@ -40,17 +39,14 @@ $$ { f }(x)=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix}
40
39
41
40
$$ { f }^{ ' }(x)=\begin{cases} \begin{matrix} 0 & x\neq 0 \end{matrix} \\ \begin{matrix} ? & x=0 \end{matrix} \end{cases} $$
42
41
43
- 函数图形如图 2 所示:
42
+ 函数图形如 ** 图2 ** 所示:
44
43
45
44
<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 >
50
46
51
- 缺点:
52
- 1 . 它无法应用于神经网络因为其导数是 $0$(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。
47
+ 优点:激活函数 $Step$ 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。
53
48
49
+ 缺点:它无法应用于神经网络因为其导数是 $0$(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。
54
50
### sigmoid
55
51
函数定义:
56
52
@@ -60,10 +56,10 @@ $${ f }(x)=\sigma (x)=\frac { 1 }{ 1+{ e }^{ -x } } $$
60
56
61
57
$$ { f }^{ ' }(x)=f(x)(1-f(x)) $$
62
58
63
- 函数图形如图 3 所示:
59
+ 函数图形如 ** 图3 ** 所示:
64
60
65
61
<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 >图3: sigmoid</br ></center >
62
+ <center ><br >图3 sigmoid</br ></center >
67
63
68
64
优点:
69
65
1 . $sigmoid$ 函数的输出映射在 $(0,1)$ 之间,单调连续,输出范围有限,优化稳定,可以用作输出层;
@@ -83,10 +79,10 @@ $${ f }(x)=tanh(x)=\frac { { e }^{ x }-{ e }^{ -x } }{ { e }^{ x }+{ e }^{ -x }
83
79
84
80
$$ { f }^{ ' }(x)=1-f(x)^{ 2 } $$
85
81
86
- 函数图形如图 4 所示:
82
+ 函数图形如 ** 图4 ** 所示:
87
83
88
84
<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 >图4: tanh</br ></center >
85
+ <center ><br >图4 tanh</br ></center >
90
86
91
87
优点:
92
88
1 . $tanh$ 比 $sigmoid$ 函数收敛速度更快;
@@ -96,7 +92,8 @@ $${ f }^{ ' }(x)=1-f(x)^{ 2 }$$
96
92
1 . 与 $sigmoid$ 函数相同,由于饱和性容易产生的梯度消失;
97
93
2 . 与 $sigmoid$ 函数相同,由于具有幂运算,计算复杂度较高,运算速度较慢。
98
94
99
- ### relu
95
+ ### ReLU
96
+
100
97
函数定义:
101
98
102
99
$$ 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
105
102
106
103
$$ { { f }(x) }^{ ' }=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases} $$
107
104
108
- 函数图形如图 5 所示:
105
+ 函数图如 ** 图5 ** 所示:
109
106
<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 >
111
108
112
109
优点:
113
110
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$,提供了神经网络的稀疏表达能力;
117
114
118
115
缺点:
119
- 1 . $relu$ 的输出不是以 $0$ 为中心的;
116
+ 1 . ReLU 的输出不是以 $0$ 为中心的;
120
117
2 . 神经元坏死现象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;
121
118
3 . 不能避免梯度爆炸问题;
122
119
123
- ### lrelu
120
+ ### ReLU
121
+
124
122
函数定义:
125
123
126
124
$$ 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
129
127
130
128
$$ { { f }(x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases} $$
131
129
132
- 其中,$\alpha$ 常设置为0.01。函数图形如图 6 所示:
130
+ 其中,$\alpha$ 常设置为0.01。函数图如 ** 图6 ** 所示:
133
131
<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 >
135
133
136
134
优点:
137
135
1 . 避免梯度消失;
138
136
2 . 由于导数总是不为零,因此可减少死神经元的出现;
139
137
140
138
缺点:
141
- 1 . $lrelu$ 表现并不一定比 $relu$ 好;
139
+ 1 . LReLU 表现并不一定比 ReLU 好;
142
140
2 . 无法避免梯度爆炸问题;
143
141
144
- ### prelu
142
+ ### PReLU
143
+
145
144
函数定义:
146
145
147
146
$$ 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
150
149
151
150
$$ { { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases} $$
152
151
153
- 函数图形如图 7 所示:
152
+ 函数图如 ** 图7 ** 所示:
154
153
<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 >
156
155
157
156
优点:
158
- 1 . $prelu$ 是 $lrelu$ 的改进,可以自适应地从数据中学习参数;
157
+ 1 . PReLU 是 LReLU 的改进,可以自适应地从数据中学习参数;
159
158
2 . 收敛速度快、错误率低;
160
- 3 . $prelu$ 可以用于反向传播的训练,可以与其他层同时优化;
159
+ 3 . PReLU 可以用于反向传播的训练,可以与其他层同时优化;
160
+
161
+ ### RReLU
161
162
162
- ### rrelu
163
163
函数定义:
164
164
165
165
$$ 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
168
168
169
169
$$ { { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases} $$
170
170
171
- 函数图形如图 8 所示:
171
+ 函数图形如 ** 图8 ** 所示:
172
172
<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 >
174
174
175
- 优点:
176
- 1 . 为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)
175
+ 优点:为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。
176
+ ### ELU
177
177
178
- ### elu
179
178
函数定义:
180
179
181
180
$$ 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)
184
183
185
184
$$ { { 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} $$
186
185
187
- 函数图形如图 9 所示:
186
+ 函数图形如 ** 图9 ** 所示:
188
187
<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 >
190
189
191
190
优点:
192
191
1 . 导数收敛为零,从而提高学习效率;
193
192
2 . 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化;
194
- 3 . 防止死神经元出现;
193
+ 3 . 防止死神经元出现。
195
194
196
195
缺点:
197
- 1 . 计算量大,其表现并不一定比 $relu$ 好;
196
+ 1 . 计算量大,其表现并不一定比 ReLU 好;
198
197
2 . 无法避免梯度爆炸问题;
199
198
200
- ### selu
199
+ ### SELU
200
+
201
201
函数定义:
202
202
203
203
$$ 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
206
206
207
207
$$ { { 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} $$
208
208
209
- 函数图形如图 10 所示:
209
+ 函数图形 ** 如图10 ** 所示:
210
210
<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 >
212
212
213
213
优点:
214
- 1 . $selu $是 $elu$ 的一个变种。其中 λ 和 α 是固定数值(分别为 $1.0507$ 和 $1.6726$);
214
+ 1 . SELU 是 ELU 的一个变种。其中 λ 和 α 是固定数值(分别为 $1.0507$ 和 $1.6726$);
215
215
2 . 经过该激活函数后使得样本分布自动归一化到 $0$ 均值和单位方差;
216
216
3 . 不会出现梯度消失或爆炸问题;
217
217
@@ -224,19 +224,20 @@ $$f(x)=\frac { x }{ \left| x \right| +1 }$$
224
224
225
225
$$ { f }^{ ' }(x)=\frac { 1 }{ { (1+\left| x \right| ) }^{ 2 } } $$
226
226
227
- 函数图形如图 11 所示:
227
+ 函数图形如 ** 图 11 ** 所示:
228
228
<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 >图11: softsign</br ></center >
229
+ <center ><br >图11 softsign</br ></center >
230
230
231
231
优点:
232
232
1 . $softsign$ 是 $tanh$ 激活函数的另一个替代选择;
233
233
2 . $softsign$ 是反对称、去中心、可微分,并返回 $-1$ 和 $1$ 之间的值;
234
234
3 . $softsign$ 更平坦的曲线与更慢的下降导数表明它可以更高效地学习;
235
235
236
236
缺点:
237
- 1 . 导数的计算比$Tanh$ 更麻烦;
237
+ 1 . 导数的计算比$tanh$ 更麻烦;
238
238
239
239
### softplus
240
+
240
241
函数定义:
241
242
242
243
$$ f(x)=\ln { (1+{ e }^{ x }) } $$
@@ -245,9 +246,9 @@ $$f(x)=\ln { (1+{ e }^{ x }) }$$
245
246
246
247
$$ { f }^{ ' }(x)=\frac { 1 }{ 1+{ e }^{ -x } } $$
247
248
248
- 函数图形如图 12 所示:
249
+ 函数图形如 ** 图12 ** 所示:
249
250
<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 >图12: softplus</br ></center >
251
+ <center ><br >图12 softplus</br ></center >
251
252
252
253
优点:
253
254
1 . 作为 $relu$ 的一个不错的替代选择,$softplus$ 能够返回任何大于 $0$ 的值。
264
265
y_i=soft\max \left( x_i \right) =\frac{e^{x_i}}{\sum_{j=1}^k{e^{x_j}}}
265
266
$$
266
267
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) 之间的概率值。
268
269
269
270
<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 >
271
272
272
273
由于 softmax 输出结果的值累加起来为 1,因此可将输出概率最大的作为分类目标(图 1 中被分类为第一类)。
273
274
@@ -280,9 +281,9 @@ $$f\left( x \right) =x\cdot \sigma \left( x \right) $$
280
281
281
282
其中,$\sigma$ 是 $sigmoid$ 函数。
282
283
283
- $swish$ 激活函数的图形如图 14 所示:
284
+ $swish$ 激活函数的图形如 ** 图14 ** 所示:
284
285
<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 >图14: swish 激活函数</br ></center >
286
+ <center ><br >图14 swish 激活函数</br ></center >
286
287
287
288
$swish$ 激活函数的一阶导数如下:
288
289
@@ -293,20 +294,20 @@ $$\begin{array}{c}
293
294
=f\left( x \right) +\sigma \left( x \right) \left( 1-f\left( x \right) \right)\\
294
295
\end{array} $$
295
296
296
- $swish$ 激活函数的一阶和二阶导数的图形如图 15 所示:
297
+ $swish$ 激活函数的一阶和二阶导数的图形如 ** 图15 ** 所示:
297
298
<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 >图15: swish 导数</br ></center >
299
+ <center ><br >图15 swish 导数</br ></center >
299
300
300
301
超参数版 $swish$ 激活函数:
301
302
302
303
$$ f\left( x \right) =x\cdot \sigma \left( \beta x \right) $$
303
304
304
- 其中,$\beta$ 是超参数。超参数版 $swish$ 激活函数的图形如图 16 所示:
305
+ 其中,$\beta$ 是超参数。超参数版 $swish$ 激活函数的图形如 ** 图16 ** 所示:
305
306
<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 >图16: swish 超参数</br ></center >
307
+ <center ><br >图16 swish 超参数</br ></center >
307
308
308
309
优点:
309
- 1 . 当 $x>0$ 时,不存在梯度消失的情况;当 $x<0$ 时,神经元也不会像 $relu$ 一样出现死亡的情况;
310
+ 1 . 当 $x>0$ 时,不存在梯度消失的情况;当 $x<0$ 时,神经元也不会像 ReLU 一样出现死亡的情况;
310
311
2 . $swish$ 处处可导,连续光滑;
311
312
3 . $swish$ 并非一个单调的函数;
312
313
4 . 提升了模型的性能;
@@ -319,10 +320,10 @@ $$f\left( x \right) =x\cdot \sigma \left( \beta x \right)$$
319
320
320
321
$$ f\left( x \right) =x\frac{\text{Re}LU6\left( x+3 \right)}{6} $$
321
322
322
- $hard \ swish$ 和 $swish$ 激活函数对比如图 17 所示:
323
+ $hard \ swish$ 和 $swish$ 激活函数对比如 ** 图17 ** 所示:
323
324
324
325
<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 >图17: Hard Swish</br ></center >
326
+ <center ><br >图17 Hard Swish</br ></center >
326
327
327
328
优点:
328
329
与 $swish$ 相比 $hard \ swish$ 减少了计算量,具有和 $swish$ 同样的性质。
@@ -351,7 +352,7 @@ $$s^{'}\left( x \right) =s\left( x \right) \left( 1-s\left( x \right) \right) \i
351
352
352
353
由上面两个公式可知 $tanh$ 引起的梯度消失问题没有 $sigmoid$ 严重,所以 $tanh$ 收敛速度比 $sigmoid$ 快。
353
354
354
- > sigmoid 和 softmax 对比
355
+ > sigmoid 和 softmax 有什么区别?
355
356
356
357
1 . 二分类问题时 $sigmoid$ 和 $softmax$ 是一样的,都是求 $cross \ entropy \ loss$ ,而 $softmax$ 可以用于多分类问题。
357
358
2 . $softmax$ 是 $sigmoid$ 的扩展,因为,当类别数 $k=2$ 时,$softmax$ 回归退化为 $logistic$ 回归。
0 commit comments