打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
彻底改变世界的,只是一个简单的函数,一个思考世界的全新方式——人工神经网络,几乎可以学习任何东西

人工神经网络(Artificial Neural Network,简称ANN),已逐渐成为现代科技和计算领域的重要部分,为众多创新应用提供了动力。灵感来源于生物神经网络,ANN模拟了大脑神经元之间的互动,尽管它们并未完全模拟大脑的复杂性。这些网络的魅力在于它们能够自我学习和适应,处理从图像识别到语言处理等各种任务。让我们深入了解ANN的数学原理。

你现在看到的上面的这个动图是一个人工神经网络的学习过程。它在学习一个被称为曼德布洛特集(mandelbrot set)的无限复杂的分形(fractal)

为了理解神经网络如何学习曼德布洛特集,我们需要从一个基本的数学概念开始——什么是函数?非正式地说,函数只是一个输入和输出的系统,数字进数字出。

输入一个x,函数就会输出一个y。可以在图中绘制所有函数的x和y值,

比如f(x)=x是一条线。如果知道明确的函数,总可以根据任何输入x,计算出正确的输出y。但是,假设我们不知道函数,而是只知道它的一些x和y值(不知道用来生成它们的函数)。

有没有办法逆向工程出产生这些数据的函数?如果能构造这样一个函数,就可以用它来计算任何x对应的y值。即使数据中有一点噪声和一点随机性,我们仍然可以捕捉到数据的总体模式,并继续产生不是完美的,但足够接近以至于有用的y值。

我们需要的是一个函数近似,更一般地说,是一个函数近似器(function approximator)。这就是神经网络(neutral network)。

下面是一个用于可视化神经网络的在线工具,

这个特定的网络接受两个输入x1和x2,并产生一个输出。技术上,这个函数会创建一个三维表面,但在二维中更容易可视化。这个图像是通过将每个像素的x、y坐标传递到网络中渲染,然后产生一个介于-1和1之间的值,作为像素值。

这些点就是数据集,用于训练网络。当开始训练时,它迅速地构建出一个形状,准确地区分蓝色和橙色的点,即构建一个边界,将它们分开。

它正在近似描述数据的函数,它正在学习,并且能够学习我们投给它的不同数据集。

那么,这个中间部分是什么呢?

顾名思义,这就是神经网络。每一个节点都是一个神经元,它接受来自上一层神经元的所有输入,并产生一个输出,然后传递给下一层。

输入和输出,听起来我们在处理一个函数。确实,神经元本身就是一个函数

它可以接受任意数量的输入,并有一个输出。每个输入都乘以一个权重,然后所有的输入都加在一起,加上一个偏差

权重和偏差组成了这个神经元的参数,这些值可以随着网络的学习而变化。为了便于可视化,我们将它简化为一个二维函数,只有一个输入和一个输出。

神经元是更大网络的构建块,可以被拉伸、压缩、移动,并最终与其他块一起工作,构建比它们自己更大的东西。

我们在这里定义的神经元就像一个构建块,它实际上是一个极其简单的线性函数

这条线随着ω和b的变化而变化。当有一个以上的输入时,它形成一个平面“线”。有了这两个参数,权重和偏差,

可以通过ω和b来拉伸、压缩、上下移动和左右移动函数图。因此,它应该能够与其他神经元结合,形成一个更复杂的函数,一个由许多线性函数构成的函数。

所以,从一个目标函数开始,一个我们想要近似的函数。

这里编码了一堆神经元,它们的参数是手工找到的,

如果我们加权每一个神经元,并把它们加在一起,就像在网络的最后一个神经元中那样,应该得到一个看起来像目标函数的函数。

但这完全不像。为什么会这样?因为把所有这些神经元加起来得到的是一个单一的线性函数。

线性函数只能组合成一个线性函数。这是一个大问题,因为我们需要构造比线性函数更复杂的东西,一个非线性函数。

在这个例子中,我们将使用ReLU,一个修正的线性单元,作为我们的激活函数。

ReLU 是"Rectified Linear Unit"的缩写,它是深度学习和神经网络中最常用的激活函数之一。激活函数的目的是在网络中引入非线性特性,从而使得网络可以学习并表示更复杂的函数。

ReLU 函数的定义非常简单:

  • 当x>0时,返回x。

  • x≤0时,返回0。

然而,你可能会注意到我们实际上不能把函数从x轴上“提起”,这似乎是一个很大的限制。

但我们还是试一试,看看它是否比之前的尝试表现得更好。这里仍然在试图近似相同的函数,使用的是与之前相同的权重和偏差,但这次使用一个值作为激活函数。

近似看起来好多了。与之前不同,现在的这些神经元函数不能简化为一个线性函数。如果一个接一个地添加神经元,就可以看到简单的值函数在彼此之上建立,

一个神经元不能把自己从x轴上提起似乎不是问题。许多神经元一起工作,克服了单个神经元的局限性。

现在,我们手动找到了这些权重和偏差,但如何自动找到它们呢?为此最常见的算法叫做反向传播(back propagation),当我们运行这个程序时,我们看到的就是这个,

它基本上逐步调整网络的参数,以改进近似。

现在,我们可以看到这个形状是如何形成的,以及为什么它看起来像是由某种尖锐的线性边缘组成。这是我们正在使用的激活函数的性质。

可以看到,如果我们完全不使用激活函数,网络完全无法学习,我们需要那些非线性函数。所以,如果尝试学习一个更复杂的数据集,比如这个螺旋呢?

让我们试试看。

似乎在捕捉模式上有些困难。可能需要一个更复杂的函数,我们可以添加更多的构建块,更多的神经元和神经元层,这样网络应该能够拼凑出一个更好的近似,真正捕捉到螺旋模式。

已经好很多了。

事实上,无论数据集是什么,我们都可以学习它。这是因为神经网络可以被严格地证明为通用函数逼近器(Universal Function Approximator),它们可以逼近你想要的任何函数,精度达到你想要的程度。因为你总是可以添加更多的神经元。

这本质上就是深度学习的全部意义因为这意味着神经网络可以逼近任何可以表示为函数的东西,一个输入和输出的系统。

这是一种非常普遍的关于世界的思考方式。例如,曼德布洛特集可以被写成一个函数并同样被学习。这只是我们刚才看到的实验的复杂版本,使用了一个无限复杂的数据集。

我们甚至不需要知道曼德布洛特集是什么,网络为我们学习它,这就是重点如果你可以将任何智能行为、任何过程、任何任务表示为一个函数,那么一个网络就可以学习它。例如,你的输入可以是一个图像,输出可以是关于它是猫还是狗的标签;或者你的输入可以是英文文本,输出可以是对其进行西班牙语翻译。

你只需要能够将你的输入和输出编码为数字,计算机总是这样做的。图像、视频、文本、音频,都可以被表示为数字,只要你可以将它写为一个函数,你想要用这些数据做的任何处理都可以用神经网络来模拟。

这还不止这些。在一些其他的假设下,神经网络被证明是图灵完备的(Turing Complete),意味着它们可以解决任何计算机能解决的问题类型。

这意味着任何在任何编程语言中编写的算法都可以在神经网络上进行模拟,但与人工编写不同,它可以通过函数逼近器自动学习。

神经网络可以学习任何东西?

实际上,这并不是真的。首先,我们不能有无限数量的神经元。在网络大小和实际世界中能够模拟的内容上存在实际的限制。

本文也忽略了学习过程,并假设我们总是可以神奇地找到最优参数。

此外,为了让神经网络逼近一个函数,需要实际描述该函数的数据。如果没有足够的数据,你的逼近将会完全错误。无论有多少神经元,或者网络有多复杂,你都不知道实际函数应该是什么样子。

但当你已经知道函数时,使用函数逼近器也没有太大意义。当你可以用三行代码生成它时,你不会构建一个巨大的神经网络来学习曼德布洛特集。

还有无数其他问题需要考虑。但尽管有这些复杂性,神经网络已经证明它们对于计算机上一些非常著名的困难问题是不可或缺的。通常,这些问题需要一定程度的直觉和模糊逻辑,这是计算机通常所缺乏的,我们很难手工编写程序来解决。

计算机视觉、自然语言处理和机器学习的其他领域已经被神经网络彻底改变。

这一切都是因为那个简单的函数,一种简单而强大的思考世界的方式。通过组合简单的计算,我们可以让计算机构建我们想要的任何函数。

神经网络几乎可以学习任何东西。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
神经网络原理
神经网络编程入门
深度学习的几何理解(2) - 学习能力的上限
入门 | 从感知机到深度神经网络,带你入坑深度学习
机器学习教程之深度学习前馈神经网络
激活函数小结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服