您当前的位置:首页 > 电脑百科 > 人工智能

为什么说神经网络可以逼近任意函数?

时间:2020-07-22 09:59:34  来源:  作者:

本文主要介绍神经网络万能逼近理论,并且通过PyTorch展示了两个案例来说明神经网络的函数逼近功能。

大多数人理解"函数"为高等代数中形如"f(x)=2x"的表达式,但是实际上,函数只是输入到输出的映射关系,其形式是多样的。

为什么说神经网络可以逼近任意函数?

 

拿个人衣服尺寸预测来说,我们用机器学习来实现这个功能,就是将个人身高、体重、年龄作为输入,将衣服尺寸作为输出,实现输入-输出映射。

具体来说,需要以下几个步骤:

· 收集关键数据(大量人口的身高/体重/年龄,已经对应的实际服装尺寸)。

· 训练模型来实现输入-输出的映射逼近。

· 对未知数据进行预测来验证模型。

如果输出是输入特征的线性映射,那么模型的训练往往相对简单,只需要一个线性回归就可以实现;size = a*height + b*weight + c*age + d。

但是,通常假设输出是输入特征的线性映射是不够合理和不完全准确的。现实情况往往很复杂,存在一定的特例和例外。常见的问题(字体识别、图像分类等)显然涉及到复杂的模式,需要从高维输入特征中学习映射关系。

但是根据万能逼近理论,带有单隐藏的人工神经网络就能够逼近任意函数,因此可以被用于解决复杂问题。

人工神经网络

本文将只研究具有输入层、单个隐藏层和输出层的完全连接的神经网络。在服装尺寸预测器的例子中,输入层将有三个神经元(身高、体重和年龄),而输出层只有一个(预测尺寸)。在这两者之间,有一个隐藏层,上面有一些神经元(下图中有5个,但实际上可能更大一些,比如1024个)。

为什么说神经网络可以逼近任意函数?

 

网络中的每个连接都有一些可调整的权重。训练意味着找到好的权重,使给定输入集的预测大小与实际大小之间存在微小差异。

每个神经元与下一层的每个神经元相连。这些连接都有一定的权重。每个神经元的值沿着每个连接传递,在那里它乘以权重。然后所有的神经元都会向前反馈到输出层,然后输出一个结果。训练模型需要为所有连接找到合适的权重。万能逼近定理的核心主张是,在有足够多的隐藏神经元的情况下,存在着一组可以近似任何函数的连接权值,即使该函数不是像f(x)=x²那样可以简洁地写下来的函数。即使是一个疯狂的,复杂的函数,比如把一个100x100像素的图像作为输入,输出"狗"或"猫"的函数也被这个定理所覆盖。

非线性关系

神经网络之所以能够逼近任意函数,关键在于将非线性关系函数整合到了网络中。每层都可以设置激活函数实现非线性映射,换言之,人工神经网络不只是进行线性映射计算。常见的非线性激活函数有 ReLU, Tanh, Sigmoid等。

为什么说神经网络可以逼近任意函数?

 

ReLU是一个简单的分段线性函数-计算消耗小。另外两个都涉及到指数运算,因此计算成本更高

为了展示人工神经网络的万能逼近的能力,接下来通过PyTorch实现两个案例。

案例一:任意散点曲线拟合

神经网络可能面临的最基本的情况之一就是学习两个变量之间的映射关系。例如,假设x值表示时间,y坐标表示某条街道上的交通量。在一天中的不同时间点都会出现高峰和低谷,因此这不是一种线性关系。

下面的代码首先生成符合正态分布的随机点,然后训练一个网络,该网络将x坐标作为输入,y坐标作为输出。有关每个步骤的详细信息,请参见代码注释:

import torch
import plotly.graph_objects as go
import numpy as np

# Batch Size, Input Neurons, Hidden Neurons, Output Neurons
N, D_in, H, D_out = 16, 1, 1024, 1

# Create random Tensors to hold inputs and outputs
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)

# Use the nn package to define our model
# Linear (Input -> Hidden), ReLU (Non-linearity), Linear (Hidden-> Output)
model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H),
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out),
)

# Define the loss function: Mean Squared Error
# The sum of the squares of the differences between prediction and ground truth
loss_fn = torch.nn.MSELoss(reduction='sum')

# The optimizer does a lot of the work of actually calculating gradients and
# Applying backpropagation through the network to update weights
learning_rate = 1e-4
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# Perform 30000 training steps
for t in range(30000):
    # Forward pass: compute predicted y by passing x to the model.
    y_pred = model(x)

    # Compute loss and print it periodically
    loss = loss_fn(y_pred, y)
    if t % 100 == 0:
        print(t, loss.item())

    # Update the network weights using gradient of the loss
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# Draw the original random points as a scatter plot
fig = go.Figure()
fig.add_trace(go.Scatter(x=x.flatten().numpy(), y=y.flatten().numpy(), mode="markers"))

# Generate predictions for evenly spaced x-values between minx and maxx
minx = min(list(x.numpy()))
maxx = max(list(x.numpy()))
c = torch.from_numpy(np.linspace(minx, maxx, num=640)).reshape(-1, 1).float()
d = model(c)

# Draw the predicted functions as a line graph
fig.add_trace(go.Scatter(x=c.flatten().numpy(), y=d.flatten().detach().numpy(), mode="lines"))
fig.show()
为什么说神经网络可以逼近任意函数?

 

请注意右边的两点,即模型没有完全拟合。我们可以通过运行更多的训练步骤或增加隐藏神经元的数量来解决这个问题。

案例二:二值分类

函数不一定是在代数中看到的那种"一个数进去,另一个数出来"的函数。现在让我们尝试一个二进制分类任务。数据点有两个特征,可以分为两个标签中的一个。也许这两个特征是经纬度坐标,而标签是环境污染物的存在。或者,这些特征可能是学生的数学和阅读测试成绩,并且标签对应于他们是右撇子还是左撇子。重要的是模型必须实现两个输入到一个输出(0或1)的映射。

下面的代码与前面的代码非常相似。唯一的差异是输入层现在有两个神经元,输出层之后是一个Sigmoid激活,它将所有输出压缩到范围(0,1)。

import torch
import plotly.express as px
import pandas as pd

# Batch Size, Input Neurons, Hidden Neurons, Output Neurons
N, D_in, H, D_out = 128, 2, 1024, 1

# Create random Tensors to hold inputs and outputs
x = torch.rand(N, D_in)
y = torch.randint(0, 2, (N, D_out))

# Plot randomly generated points and color by label
df = pd.DataFrame({"x": x[:, 0].flatten(), "y": x[:, 1].flatten(), "class": y.flatten()})
fig = px.scatter(df, x="x", y="y", color="class", color_continuous_scale="tealrose")
fig.show()

# define model: Linear (Input->Hidden), ReLU, Linear (Hidden->Output), Sigmoid
model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H),
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out),
    torch.nn.Sigmoid()
)

# define loss function: Binary Cross Entropy Loss (good for binary classification tasks)
loss_fn = torch.nn.BCELoss()

learning_rate = 0.002
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# Store losses over time
ts, losses = ([], [])

# run training steps
for t in range(60000):
    y_pred = model(x)

    loss = loss_fn(y_pred.float(), y.float())
    if t % 100 == 0:
        ts.append(t)
        losses.append(loss.data.numpy())

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# generate a bunch of random points to cover the sample space, then call model
c = torch.rand(32000, D_in)
d = model(c)

# store random data and predicted classifications in a DataFrame and plot with Plotly Express
df2 = pd.DataFrame({"x": c[:, 0].flatten(),
                    "y": c[:, 1].flatten(),
                    "class": d.flatten().detach().numpy()})
fig2 = px.scatter(df2, x="x", y="y", color="class", color_continuous_scale="tealrose")
fig2.show()

# plot the loss as a function of training step
fig3 = px.scatter(x=ts, y=losses)
fig3.show()
为什么说神经网络可以逼近任意函数?

 

在单位正方形中随机均匀生成的点,随机指定给标签0(青色)和标签1(粉红色)。

首先,在单位正方形内随机均匀生成数据点,并且随机指点每个数据点的标签为0/1。从图中可以看出,显然不存在线性关系。本案例的目的在于训练模型使其通过坐标判断标签。

为什么说神经网络可以逼近任意函数?

 

模型分类结果

过拟合

以上两个案例似乎都给出了很可观的结果,但是这是不是我们真正想要的呢?值得注意的是,这两个案例都存在过拟合的现象。过拟合表现为模型在训练数据集表现优秀,但是在未知数据集表现不足。

在案例一中,假设其中一个点是由于错误的数据收集而导致的异常值。考虑到要学习的训练数据量如此之少,模型对这些数据的拟合度过高,只看到了一个信号,而实际上只是噪声。一方面,令人印象深刻的是,模型能够学习一个考虑到这个异常值的函数。另一方面,当将此模型应用于真实世界的数据时,这可能会导致不良结果,在该点附近产生错误的预测。

在案例二中,模型学习了一个漂亮的分类预测。但是,请注意最靠近右下角的蓝绿色点。尽管这是唯一的一点,它导致模型将整个右下角标记为青色。仅仅是一些错误的数据点就可能严重扭曲模型。当我们尝试将模型应用于测试数据时,它的工作效果可能比预期的差得多。

为了避免过度拟合,重要的是要有大量的训练数据来代表模型预期面对的样本。如果你正在建立一个工具来预测普通人群的衣服尺寸,不要只从你大学朋友那里收集训练数据。此外,还有一些先进的技术可以别用于帮助减少过拟合的发生(例如:权重下降 weight decay)。

结语

总之,神经网络是强大的机器学习工具,因为它们(理论上)能够学习任何函数。然而,这并不能保证你很容易找到一个给定问题的最优权重!实际上,在合理的时间内训练一个精确的模型取决于许多因素,例如优化器、模型体系结构、数据质量等等。特别是,深度学习涉及具有多个隐藏层的神经网络,它们非常擅长学习某些困难的任务。

作者:Thomas Hikaru Clark

deephub翻译组 Oliver Lee



Tags:神经网络   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  Tags: 神经网络  点击:(47)  评论:(0)  加入收藏
MNIST 这里就不多展开了,我们上几期的文章都是使用此数据集进行的分享。手写字母识别EMNIST数据集Extended MNIST (EMNIST), 因为 MNIST 被大家熟知,所以这里就推出了 EMNIST...【详细内容】
2021-09-08  Tags: 神经网络  点击:(182)  评论:(0)  加入收藏
理解什么是人工智能,以及机器学习和深度学习如何影响它,是一种不同凡响的体验。在 Mate Labs 我们有一群自学有成的工程师,希望本文能够分享一些学习的经验和捷径,帮助机器学习...【详细内容】
2021-06-09  Tags: 神经网络  点击:(128)  评论:(0)  加入收藏
资料来源:getwallpapers.com 深度学习是机器学习中重要分支之一。它的目的是教会计算机做那些对于人类来说相当自然的事情。深度学习也是无人驾驶汽车背后的一项关键性技术,...【详细内容】
2021-04-13  Tags: 神经网络  点击:(168)  评论:(0)  加入收藏
私有虚拟网络(VPN)是在公用网络基础之上建立的私有加密通信隧道网络,企业对于自管辖网络中个人使用VPN软件行为具有监管责任,但技术上却很难识别VPN的加密与通信方式,因此利用人工智能(AI)领域的神经网络技术从网络流量中识...【详细内容】
2021-01-07  Tags: 神经网络  点击:(193)  评论:(0)  加入收藏
深层神经网络的模型概括,过度拟合和正则化方法的挑战> Source 在完成了与神经网络有关的多个AI项目之后,我意识到模型的概括能力对于AI项目的成功至关重要。 我想写这篇文章来...【详细内容】
2020-10-30  Tags: 神经网络  点击:(101)  评论:(0)  加入收藏
本文最初发表于 Towards Data Science 博客,经原作者 Andre Ye 授权,InfoQ 中文站翻译并分享。卷积神经网络(Convolutional Nerual Network,CNN)构成了图像识别的基础,这无疑是深...【详细内容】
2020-10-16  Tags: 神经网络  点击:(115)  评论:(0)  加入收藏
本报告讨论了非常厉害模型优化技术 —— 知识蒸馏,并给大家过了一遍相关的TensorFlow的代码。...【详细内容】
2020-09-25  Tags: 神经网络  点击:(92)  评论:(0)  加入收藏
算法算法从1950年代的早期研究开始,机器学习的所有工作似乎都随着神经网络的创建而积累起来。 从逻辑回归到支持向量机,相继提出了新算法之后的算法,但是从字面上看,神经网络是...【详细内容】
2020-09-17  Tags: 神经网络  点击:(90)  评论:(0)  加入收藏
卷积神经网络(CNN)广泛应用于深度学习和计算机视觉算法中。虽然很多基于CNN的算法符合行业标准,可以嵌入到商业产品中,但是标准的CNN算法仍然有局限性,在很多方面还可以改进。这篇文章讨论了语义分割和编码器-解码器架构...【详细内容】
2020-09-17  Tags: 神经网络  点击:(93)  评论:(0)  加入收藏
▌简易百科推荐
作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。在本文中,我将介绍两个...【详细内容】
2021-12-17  deephub    Tags:AI   点击:(15)  评论:(0)  加入收藏
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  数据学习DataLearner    Tags:机器学习   点击:(32)  评论:(0)  加入收藏
11月2日召开的世界顶尖科学家数字未来论坛上,2013年诺贝尔化学奖得主迈克尔·莱维特、2014年诺贝尔生理学或医学奖得主爱德华·莫索尔、2007年图灵奖得主约瑟夫·斯发斯基、1986年图灵奖得主约翰·霍普克罗夫特、2002...【详细内容】
2021-11-03  张淑贤  证券时报  Tags:人工智能   点击:(39)  评论:(0)  加入收藏
鉴于物联网设备广泛部署、5G快速无线技术闪亮登场,把计算、存储和分析放在靠近数据生成的地方来处理,让边缘计算有了用武之地。 边缘计算正在改变全球数百万个设备处理和传输...【详细内容】
2021-10-26    计算机世界  Tags:边缘计算   点击:(45)  评论:(0)  加入收藏
这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Samplin...【详细内容】
2021-10-21  Python部落    Tags:机器学习   点击:(43)  评论:(0)  加入收藏
要开始为开源项目做贡献,有一些先决条件:1. 学习一门编程语言:由于在开源贡献中你需要编写代码才能参与开发,你需要学习任意一门编程语言。根据项目的需要,在后期学习另一种语言...【详细内容】
2021-10-20  TSINGSEE青犀视频    Tags:机器学习   点击:(37)  评论:(0)  加入收藏
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  憨昊昊    Tags:神经网络   点击:(47)  评论:(0)  加入收藏
语言是人类思维的基础,当计算机具备了处理自然语言的能力,才具有真正智能的想象。自然语言处理(Natural Language Processing, NLP)作为人工智能(Artificial Intelligence, AI)的核心技术之一,是用计算机来处理、理解以及运...【详细内容】
2021-10-11    36氪  Tags:NLP   点击:(48)  评论:(0)  加入收藏
边缘计算是什么?近年来,物联网设备数量呈线性增长趋势。根据艾瑞测算, 2020年,中国物联网设备的数量达74亿,预计2025年突破150亿个。同时,设备本身也变得越来越智能化,AI与互联网在...【详细内容】
2021-09-22  汉智兴科技    Tags:   点击:(54)  评论:(0)  加入收藏
说起人工智能,大家总把它和科幻电影中的机器人联系起来,而实际上这些科幻场景与现如今的人工智能没什么太大关系。人工智能确实跟人类大脑很相似,但它们的显著差异在于人工智能...【详细内容】
2021-09-17  异步社区    Tags:人工智能   点击:(57)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条