从函数逼近角度理解神经网络、残差连接与激活函数

2024-06-23 21:12

本文主要是介绍从函数逼近角度理解神经网络、残差连接与激活函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

最近思考激活函数的时候,突然想到神经网络中残差连接是不是和函数的泰勒展开很像,尤其是在激活函数 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)=x3!x3+5!x57!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)=12!x2+4!x46!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) fng2=abfn(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=0nPj2<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 nlim 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=nlimP~Hn[a,b](g)=j=0Pj2<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:RmRn 的带参数的形式为:
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;θ)=f1g1f2g2fngn其中 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)2ni+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+...+c2n1x2n

递推公式太复杂了,为了方便这里 F n F_n Fn不再在里面写 w w w参数了,而是合并作为参数 c c c。从这里我们就可以看到残差网络的作用,是作为函数的n次多项式逼近,和泰勒展开是基本一致的。所以相比于直接使用高阶项,残差网络带来的多项式逼近有更好的函数拟合效果。

这里只是讨论了 g = x 2 g=x^2 g=x2的情形,其他激活函数的级数公式会更加复杂,总体是一个低阶到高阶的加和函数。

利用激活实现函数多项式逼近

先发后改,后面再修改补充。。。

参考文章

  1. 泰勒公式、麦克劳林公式、欧拉公式
  2. 函数逼近 | 统计计算
  3. ReLU 2 ^2 2 Wins: Discovering Efficient Activation Functions for Sparse LLMs

这篇关于从函数逼近角度理解神经网络、残差连接与激活函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088289

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分