本文主要是介绍从函数逼近角度理解神经网络、残差连接与激活函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
概述
最近思考激活函数的时候,突然想到神经网络中残差连接是不是和函数的泰勒展开很像,尤其是在激活函数 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)余项
函数逼近(多项式逼近)
在统计计算和其它科学计算中, 经常需要计算各种函数的值, 对函数进行逼近, 用数值方法计算积分、微分。(这里摘录部分多项式逼近的内容)
数学中的超越函数如 e x , l n ( x ) , s i n ( x ) e^x,ln(x),sin(x) ex,ln(x),sin(x)在计算机中经常用泰勒级数展开来计算, 这就是用多项式来逼近函数。 数学分析中的Weirstrass定理表明, 闭区间上的连续函数可以用多项式一致逼近。 泰勒展开要求函数有多阶导数, 我们需要找到对更一般函数做多项式逼近的方法[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的情形,其他激活函数的级数公式会更加复杂,总体是一个低阶到高阶的加和函数。
利用激活实现函数多项式逼近
先发后改,后面再修改补充。。。
参考文章
- 泰勒公式、麦克劳林公式、欧拉公式
- 函数逼近 | 统计计算
- ReLU 2 ^2 2 Wins: Discovering Efficient Activation Functions for Sparse LLMs
这篇关于从函数逼近角度理解神经网络、残差连接与激活函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!