01-从函数到神经网络

1753277368953

1753277439412

以上就是人工智能早期的思路——符号主义,通过符号来表示和推理,该方法认为世间万物都能找到一个明确的规律来表明它的作用原理。后续,该方法被证明在处理复杂问题上有一定的局限性,比如,对于一些复杂的函数,我们无法找到一个明确的规律来表示它。因此,人工智能需要一种新的方法来处理复杂的问题。

举个例子,数据拟合:

1753278460850

在上述例子中,我们可以先猜测一个函数,然后调整函数的参数来使得结果逼近真实值:

1753278604436

最后发现完全吻合:

1753278714809

有时候无法找到一个合适的函数来吻合数据,这时候只需要保证“大差不差”就行:

1753278771487

这就是现代人工智能的思路:猜和简化问题——先找一个从结果上看“大差不差”的函数,然后通过调整参数来使得结果更接近真实值——联结主义。我们不再追求找到那个精确的函数关系,而是简化函数,并试图寻找一个足够接近真实答案的近似解。


上述例子都是一些比较简单的线性函数的例子,但对于一些问题,线性函数无法很好地拟合数据,这时候就需要使用非线性函数。那么,如何将原先的线性函数变换到非线性函数呢?答案是:在原本的线性函数外面再套一层非线性运算,比如:平方、指数等。

1753279274612

1753279314325

1753279327824

而这,就是激活函数,他的目的就是将原本的线性关系变换为灵活的非线性关系。记为:

f(x)=g(wx+b)f(x)=g(wx+b)

常用的激活函数:

σ(z)=11+ezReLU(z)=max(0,z)\sigma(z)=\frac{1}{1+e^{-z}}\quad \quad \text{ReLU}(z)=\max(0,z)

同时可能存在多个输入,每一个输入对应一个ww,记为:

f(x1,x2,)=g(w1x1+w2x2+...+wnxn+b)f(x_1,x_2,\dots)=g(w_1x_1+w_2x_2+...+w_nx_n+b)

而有时,单独一层激活函数无法很好地拟合数据,这时候就需要多层激活函数,记为:

f(x1,x2,)=g(wn+1 g(w1x1+w2x2+...+wnxn+b1)+b2)f(x_1,x_2,\dots)=g(w_{n+1}\ g(w_1x_1+w_2x_2+...+w_nx_n+b_1)+b_2)

这就是神经网络的基本思想,通过多个激活函数的嵌套,使得原本的线性关系能够逼近复杂的非线性关系。

为了方便理解,将单层的激活函数记为以下形式:

1753279971215

其中每个圆圈被称为神经网络的神经元,多个输入的激活函数记为:

1753280024610

多个激活函数的表示如下:

1753280199390

其中每嵌套一层激活函数,就相当于神经元水平方向扩展了一层,而嵌套之前的输出层就不再是最终的输出,而是包裹在了一个复杂的函数变换之中,称为隐藏层。

由输入层、隐藏层和输出层构成的复杂函数变换就被称为神经网络,而从神经网络的图来看,似乎就像是输入层的信号一层一层传输到输出层一样,这个过程就叫做神经网络的前向传播

神经网络中的每一层都可以有多个,而且中间的隐藏层也可以有多个,但我们的目的是十分明确且简单的:通过输入的x和输出的y来调整调整参数w和b,使后续通过神经网络计算出来的值(预测值)尽可能接近真实值。