概述
最近思考激活函数的时候,突然想到神经网络中残差连接是不是和函数的泰勒展开很像,尤其是在激活函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2时(这个激活函数想法来源于 f ( x ) = R e L U 2 ( x ) [ 3 ] f(x)=ReLU^2(x)[3] f(x)=ReLU2(x)[3]),所以验证了一下就顺便写下来了,本文抛砖引玉,如果有建议或更好的想法可以写到评论区。
常见函数的泰勒展开
这里仅简单写几个函数的泰勒公式,其他可查看参考文章[1]
s
i
n
(
x
)
=
x
−
x
3
3
!
+
x
5
5
!
−
x
7
7
!
+
o
(
x
7
)
sin(x) =x−\frac{x^3}{3!}+\frac{x^5}{5!} −\frac{x^7}{7!} +o(x^7)
sin(x)=x−3!x3+5!x5−7!x7+o(x7)
c
o
s
(
x
)
=
1
−
x
2
2
!
+
x
4
4
!
−
x
6
6
!
+
o
(
x
6
)
cos(x)=1−\frac{x^2}{2!} +\frac{x^4}{4!} −\frac{x^6}{6!}+o(x^6)
cos(x)=1−2!x2+4!x4−6!x6+o(x6)
e
x
=
1
+
x
+
x
2
2
!
+
x
3
3
!
+
x
4
4
!
+
x
5
5
!
+
o
(
x
5
)
e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+\frac{x^5}{5!}+o(x^5)
ex=1+x+2!x2+3!x3+4!x4+5!x5+o(x5)
其中
o
(
x
n
)
o(x^n)
o(xn)表示皮亚诺(Peano)余项
函数逼近(多项式逼近)
定理 (Weierstrass 逼近定理) 设
f
∈
C
[
a
,
b
]
f \in C[a, b]
f∈C[a,b], 则对任意的
ε
>
0
\varepsilon > 0
ε>0 存在一个多项式
p
(
x
)
p(x)
p(x),使得
m
a
x
x
∈
[
a
,
b
]
∣
f
(
x
)
−
p
(
x
)
∣
<
ε
max_{x\in[a,b]} \left | f(x)-p(x) \right | < \varepsilon
maxx∈[a,b]∣f(x)−p(x)∣<ε 在 [a, b] 上一致成立。该定理也称为 Weierstrass 第一定理。 该定理表明, 任意一个闭区间上的连续函数都可以用多项式来一致逼近,即实系数多项式构成的集合在
C
[
a
,
b
]
C[a, b]
C[a,b] 内是处处稠密的。
(这里摘录部分多项式逼近的内容) 在统计计算和其它科学计算中, 经常需要计算各种函数的值, 对函数进行逼近, 用数值方法计算积分、微分。
数学中的超越函数如 e x , l n ( x ) , s i n ( x ) e^x,ln(x),sin(x) ex,ln(x),sin(x)在计算机中经常用泰勒级数展开来计算, 这就是用多项式来逼近函数。 数学分析中的Weierstrass 定理表明, 闭区间上的连续函数可以用多项式一致逼近。
泰勒展开要求函数有多阶导数, 我们需要找到对更一般函数做多项式逼近的方法[2]。考虑如下的函数空间
L
2
[
a
,
b
]
=
{
g
(
⋅
)
:
g
(
x
)
∈
[
a
,
b
]
,
∫
a
b
g
2
(
x
)
w
(
x
)
d
x
<
∞
}
(
2.1
)
L^2[a,b]=\left \{ g(\cdot ): g(x)\in [a,b],\int_{a}^{b} g^2(x)w(x)dx<\infty \right \} \quad (2.1)
L2[a,b]={g(⋅):g(x)∈[a,b],∫abg2(x)w(x)dx<∞}(2.1)则是
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]线性空间,在
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]中定义内积
<
f
,
g
>
=
∫
a
b
f
(
x
)
g
(
x
)
w
(
x
)
d
x
(
2.2
)
<f,g>=\int_{a}^{b} f(x)g(x)w(x)dx \quad (2.2)
<f,g>=∫abf(x)g(x)w(x)dx(2.2) 其中
w
(
x
)
w(x)
w(x)是适当的权重函数,
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]则为希尔伯特(Hilbert)空间。 对
g
(
x
)
∈
L
2
[
a
,
b
]
g(x)\in L^2[a,b]
g(x)∈L2[a,b], 假设希望用
n
n
n阶多项式
f
n
(
x
)
f_n(x)
fn(x)逼近,使得
∥
f
n
−
g
∥
2
=
∫
a
b
∣
f
n
(
x
)
−
g
(
x
)
∣
2
w
(
x
)
d
x
(
2.3
)
\left \| f_n-g \right \|^2=\int_{a}^{b} \left | f_n(x)-g(x) \right |^2 w(x)dx \quad (2.3)
∥fn−g∥2=∫ab∣fn(x)−g(x)∣2w(x)dx(2.3)最小。 如何求这样的多项式?
用Gram-Schmidt正交化方法可以在
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]中把多项式序列
{
1
,
x
,
x
2
,
…
}
\left \{ 1,x,x^2,\dots \right \}
{1,x,x2,…} 正交化为正交序列
{
P
0
,
P
1
,
P
2
,
…
}
\left \{ P_0,P_1,P_2,\dots \right \}
{P0,P1,P2,…}, 序列中函数彼此正交,且
P
k
P_k
Pk是
k
k
k阶多项式, 称
{
P
0
,
P
1
,
P
2
,
…
}
\left \{ P_0,P_1,P_2,\dots \right \}
{P0,P1,P2,…}为正交多项式。 设
H
n
[
a
,
b
]
H_n[a,b]
Hn[a,b]为函数
{
1
,
x
,
x
2
,
…
,
x
n
}
\left \{ 1,x,x^2,\dots,x^n \right \}
{1,x,x2,…,xn}的线性组合构成的线性空间, 则
{
P
0
,
P
1
,
…
,
P
n
}
\left \{ P_0,P_1,\dots,P_n \right \}
{P0,P1,…,Pn}构成
H
n
[
a
,
b
]
H_n[a,b]
Hn[a,b]的正交基且
P
n
[
a
,
b
]
P_n[a,b]
Pn[a,b] 是
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]的子希尔伯特空间, 使得加权平方距离
(
2.3
)
(2.3)
(2.3)最小的
f
n
(
x
)
f_n(x)
fn(x)是
g
(
⋅
)
g(\cdot)
g(⋅)在子空间
H
n
[
a
,
b
]
H_n[a,b]
Hn[a,b]的投影, 记为
P
~
H
n
[
a
,
b
]
(
g
)
\tilde{P}_{H_n[a,b]}(g)
P~Hn[a,b](g), 投影可以表示为
{
P
0
,
P
1
,
…
,
P
n
}
\left \{ P_0,P_1,\dots,P_n \right \}
{P0,P1,…,Pn}的线性组合
P
~
H
n
[
a
,
b
]
(
g
)
=
∑
j
=
0
n
<
g
,
P
j
>
∥
P
j
∥
2
P
j
⋅
\tilde{P}_{H_n[a,b]}(g) = \sum_{j=0}^{n} \frac{<g,P_j>}{\left \| P_j \right \|^2 } P_j\cdot
P~Hn[a,b](g)=j=0∑n∥Pj∥2<g,Pj>Pj⋅ 这样,只要预先找到
[
a
,
b
]
[a,b]
[a,b]上的多项式的正交基, 通过计算内积就可以很容易地找到使得
(
2.3
)
(2.3)
(2.3)公式最小的
f
n
(
x
)
f_n(x)
fn(x)。 对于
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]中的任意函数
g
(
x
)
g(x)
g(x)有
lim
n
→
∞
∥
P
~
H
n
[
a
,
b
]
(
g
)
−
g
∥
2
=
0
\lim_{n \to \infty}\left \| \tilde{P}_{H_n[a,b]}(g)-g \right \|^2=0
n→∞lim
P~Hn[a,b](g)−g
2=0 于是有
g
=
lim
n
→
∞
P
~
H
n
[
a
,
b
]
(
g
)
=
∑
j
=
0
∞
<
g
,
P
j
>
∥
P
j
∥
2
P
j
⋅
g=\lim_{n \to \infty} \tilde{P}_{H_n[a,b]}(g) = \sum_{j = 0}^{\infty} \frac{<g,P_j>}{\left \| P_j \right \|^2 } P_j\cdot
g=n→∞limP~Hn[a,b](g)=j=0∑∞∥Pj∥2<g,Pj>Pj⋅ 因为
L
2
[
a
,
b
]
L^2[a,b]
L2[a,b]依赖于定义域
[
a
,
b
]
[a,b]
[a,b]和权重函数
w
(
⋅
)
w(\cdot)
w(⋅), 所以正交多项式也依赖于
[
a
,
b
]
[a,b]
[a,b]和
w
(
⋅
)
w(\cdot)
w(⋅)。 针对定义域
[
−
1
,
1
]
[-1,1]
[−1,1],
[
0
,
∞
]
[0,\infty]
[0,∞]和
[
−
∞
,
∞
]
[-\infty,\infty]
[−∞,∞] 和几种不同的权重函数可以得到不同的正交多项式序列,详细参考[2]
神经网络、残差连接与多项式逼近
神经网络一般由层的参数、激活函数、及层间连接构成,对于神经网络(无跨层连接),可以定义其函数
F
:
R
m
⟶
R
n
F:R^{m}\longrightarrow R^{n}
F:Rm⟶Rn 的带参数的形式为:
F
n
(
x
;
θ
)
=
f
1
∘
g
1
∘
f
2
∘
g
2
∘
⋯
∘
f
n
∘
g
n
F_n(x; \theta) = f_{1} \circ g_1\circ f_{2} \circ g_2 \circ \dots \circ f_{n} \circ g_n
Fn(x;θ)=f1∘g1∘f2∘g2∘⋯∘fn∘gn其中
g
g
g为激活函数,
f
f
f为全连接函数。一般在神经网络中
f
i
=
w
i
x
+
b
i
f_i=w_ix+b_i
fi=wix+bi,这里为了方便我们去掉bias项,即
f
i
=
w
i
x
f_i=w_i x
fi=wix,首先假设
g
=
x
g=x
g=x 即线性的激活函数,且为了简单
w
,
x
w,x
w,x都假设为标量,我们可以得到:
F
1
=
w
1
x
F_1=w_1x
F1=w1x
F
2
=
w
2
F
1
=
w
2
w
1
x
F_2=w_2 F_1=w_2w_1x
F2=w2F1=w2w1x
…
\dots
…
F
n
=
(
∏
i
=
1
n
w
i
)
x
F_n=(\prod_{i=1}^{n}w_i)x
Fn=(∏i=1nwi)x
所以我们会发现,由线性的激活函数构成的网络仍然为线性的,即 ∏ i = 1 n w i \prod_{i=1}^{n}w_i ∏i=1nwi是一个常数,所以无论有多少层,网络都是线性的,同理加残差连接也是线性的。
为了获得非线性,我们可以假设 g = x 2 g=x^2 g=x2,这时我们也可以得到递推公式
F
1
=
(
w
1
)
2
x
2
F_1=(w_1)^2x^2
F1=(w1)2x2
F
2
=
(
w
2
F
1
)
2
=
(
w
2
)
2
(
w
1
)
4
x
4
F_2=(w_2 F_1)^2=(w_2)^2(w_1)^4x^4
F2=(w2F1)2=(w2)2(w1)4x4
…
\dots
…
F
n
=
(
∏
i
=
1
n
(
w
i
)
2
n
−
i
+
1
)
x
2
n
F_n=(\prod_{i=1}^{n}(w_i)^{2^{n-i+1}})x^{2^n}
Fn=(∏i=1n(wi)2n−i+1)x2n
我们也会发现,由非线性的激活函数构成的网络为非线性的,这里可以根据残差网络加入跨层连接。
F
1
=
(
w
1
)
2
x
2
+
x
F_1=(w_1)^2x^2 + x
F1=(w1)2x2+x
F
2
=
(
w
2
F
1
)
2
+
F
1
=
(
w
2
)
2
(
w
1
)
4
x
4
+
2
(
w
1
w
2
)
2
x
3
+
(
(
w
2
)
2
+
(
w
1
)
2
)
x
2
+
x
F_2=(w_2 F_1)^2+F_1=(w_2)^2(w_1)^4x^4+2(w_1w_2)^2x^3+((w_2)^2+(w_1)^2)x^2+x
F2=(w2F1)2+F1=(w2)2(w1)4x4+2(w1w2)2x3+((w2)2+(w1)2)x2+x
…
\dots
…
F
n
=
c
0
x
+
c
1
x
2
+
c
2
x
3
+
c
3
x
4
+
.
.
.
+
c
2
n
−
1
x
2
n
F_n=c_0x+c_1x^{2}+c_2x^{3}+c_3x^{4}+...+c_{2n-1}x^{2^n}
Fn=c0x+c1x2+c2x3+c3x4+...+c2n−1x2n
递推公式太复杂了,为了方便这里 F n F_n Fn不再在里面写 w w w参数了,而是合并作为参数 c c c。从这里我们就可以看到残差网络的作用,是作为函数的n次多项式逼近,和泰勒展开是基本一致的。所以相比于直接使用高阶项,残差网络带来的多项式逼近有更好的函数拟合效果。
这里只是讨论了 g = x 2 g=x^2 g=x2的情形,其他激活函数的级数公式会更加复杂,总体是一个低阶到高阶的加和函数。
利用激活实现函数多项式逼近
需要说明的是, g = x 2 , g = R e L U 2 ( x ) g=x^2,g=ReLU^2(x) g=x2,g=ReLU2(x)激活函数在深度神经网络中容易引发梯度爆炸,且越深越容易梯度爆炸。
最近的在LLM中流行的激活函数Gated Linear Unit(GLU)就是利用了多项式的逼近的特性
G
L
U
(
x
,
w
,
v
,
b
,
c
)
=
σ
(
x
w
+
b
)
⊗
(
x
v
+
c
)
GLU(x,w,v,b,c)=\sigma(xw+b)\otimes (xv+c)
GLU(x,w,v,b,c)=σ(xw+b)⊗(xv+c) 如:
B
i
l
i
n
e
a
r
(
x
,
w
,
v
,
b
,
c
)
=
(
x
w
+
b
)
⊗
(
x
v
+
c
)
Bilinear(x,w,v,b,c)=(xw+b)\otimes (xv+c)
Bilinear(x,w,v,b,c)=(xw+b)⊗(xv+c)
R
e
G
L
U
(
x
,
w
,
v
,
b
,
c
)
=
R
e
L
U
(
x
w
+
b
)
⊗
(
x
v
+
c
)
ReGLU(x,w,v,b,c)=ReLU(xw+b)\otimes (xv+c)
ReGLU(x,w,v,b,c)=ReLU(xw+b)⊗(xv+c) 我们很容易得到这两者(在激活时,后者)的展开
x
2
w
v
+
x
(
w
c
+
v
b
)
+
b
c
x^2wv+x(wc+vb)+bc
x2wv+x(wc+vb)+bc。
值得说的是 g = x 2 , g = R e L U 2 ( x ) g=x^2,g=ReLU^2(x) g=x2,g=ReLU2(x)的输入有偏置项时即( x = w x ~ + b x=w \tilde{x}+b x=wx~+b)也可以展开为多项式形式,但是 g = x 2 g=x^2 g=x2为恒正的,对相同的正负输入无区分能力,相对的GLU不是恒正的。