理论上 神经网络为什么可以拟合任何函数?

原文链接:用小学数学带你感受人工智能的魅力
在火爆出圈后,越来越多的人对人工智能、深度学习、神经网络等名词更加好奇,身边的朋友最近也频繁的问我,AI究竟为什么如此强大?今天我就用大家都看得懂的小学数学知识,来带大家感受人工智能的魅力,带大家认识神经网络 。
平面中的一条直线能分割平面
平面中的一条直线,可以用函数 y = k x + b y = kx+b y=kx+b来表示,比如 y = x ? 2 y = x - 2 y=x?2:
这条直线也可以表示为 y ? x + 2 = 0 y-x +2 = 0 y?x+2=0,以线为依据,它可以将平面分为直线上(阴影部分)和直线下两部分 。
如果随机给你一个点,你如何判断它在直线上方还是直线下方呢?
【理论上神经网络为什么可以拟合任何函数?】我们以(2,2)和(2,-2)两点为例:
将点(2,2)代入方程 y ? x + 2 = 0 y-x +2 = 0 y?x+2=0:
2 ? 2 + 2 = 2 2 - 2 + 2 = 2 2?2+2=2
将点(2,-2)代入方程 y ? x + 2 = 0 y-x +2 = 0 y?x+2=0:
? 2 ? 2 + 2 = ? 2 -2 - 2 + 2 = -2 ?2?2+2=?2
不难发现,将直线上方的点代入方程后,最终结果会大于0;将直线下方的点代入方程后,最终结果会小于0 。
我们用z来表示方程的结果 z = y ? x + 2 z = y - x +2 z=y?x+2,可以得出以下结论:
那么我们只要再构造一个函数来判断z的值是大于0还是小于0,即可判断该点在图中的位置 。
判断函数怎么构造
随机带入一个点:
判断函数的表达式是:
f ( z ) = { 0 , z ≤ 0 1 , z > 0 (1) f(z)= \begin{cases} 0,\quad z\leq 0\\ 1, \quad z>0 \end{cases} \tag{1} f(z)={0,z≤01,z>0?(1)
我们把任意一个点(x,y)带入 z = y ? x + 2 z = y - x +2 z=y?x+2后可以求得z的大小,再将z作为判断函数的输入,就可以输出0或1,来直接得出这个点位于直线的上方还是下方 。用流程图来表示:
比如将(2,2)代入:
所以任意给出平面一点,只要先代入函数 z = y ? x + 2 z = y - x +2 z=y?x+2算出z的值,再将z的结果代入判断函数,就可以知道它在直线的上方还是下方 。
在AI领域,这个判断函数叫做激活函数 。
从一条线到三角区域
如果你会判断一个点位于直线的上方还是下方,那么你会判断一个点位于三角形内(阴影部分)还是三角形外吗?
不难想到,可以根据这个点位于三条线的位置来判断!
由上图可知:
设L1的方程是 k 11 y + k 12 x + b 1 = 0 k_{11}y + k_{12}x + b_1 = 0 k11?y+k12?x+b1?=0,并规定当点在L1右方时(阴影部分)为真
设L2的方程是 k 21 y + k 22 x + b 2 = 0 k_{21}y + k_{22}x + b_2 = 0 k21?y+k22?x+b2?=0,并规定当点在L2下方时(阴影部分)为真
设L3的方程是 k 31 y + k 32 x + b 3 = 0 k_{31}y + k_{32}x + b_3 = 0 k31?y+k32?x+b3?=0,并规定当点在L3左方时(阴影部分)为真
根据上文一条直线的例子,我们不难理解,当三个判断函数的输出均为1时,这个点就在三角形内部 。
因此,我们需要对三个判断函数输出值是否均为1进行二次判断 。
我们可以把三个判断函数的输出看作新的输入,再经过一次线性变化和判断函数, z 4 = k 4 f ( z 1 ) + k 5 f ( z 2 ) + k 6 f ( z 3 ) ? 2.5 z_4 = k_{4}f(z_1) + k_{5}f(z_2) + k_{6}f(z_3) - 2.5 z4?=k4?f(z1?)+k5?f(z2?)+k6?f(z3?)?2.5 。
最后让它输出0或1,来判断一点是否在三角形内部 。因为判断函数的输出只能是0或1,所以将他们相加后,结果可能的最大值为3,然后减去一个(2,3)区间内的数,这里选的是2.5(截距b),最后通过判断函数,就可以判断一点是否在三角形内了 。
从三角形到圆
如果会判断一个点是否在三角区域内,那么你会判断一个点在矩形内吗?
无非就是再多加一条线: