神经网络听起来很奇特。 神经让你想到大脑。 哪些很复杂。 但如果您熟悉线性回归,您就拥有理解神经网络功能所需的构建块。
神经网络(NN)通常分为以下几类:监督机器学习(尽管有些类型的神经网络在没有标记数据的情况下也可以做出惊人的事情#AutoEncoders)。 它们采用一组输入(一组要用来预测某些内容的变量)并预测结果。
这...听起来很像线性回归。
在线性回归中,我们采用一个或多个输入,并使用以下公式预测连续输出
其中 Y 是您想要预测的内容,而
是你的输入。 例如,我们可能希望根据您的年龄、性别、薪水和租金来预测您每年在视频游戏上花费的金额。

然后我们让回归学习系数的值(这似乎是一种愚蠢的说法,但请坚持我的观点)。
我们不告诉回归系数是什么,而是我们告诉它如何学习他们。 在简单的情况下,我们经常要求回归使用最小二乘法来学习最佳系数是多少。
本质上,我们给回归一个结构对于模型,以及方法用于学习模型中的值。 然后,我们就让它走上学习的道路。
当我们构建神经网络时,我们也会选择一个结构和一个方法用于学习,但它们通常看起来与我们用于回归的结构和方法略有不同。
回归示例
结构
节点。 神经网络的使用节点作为保存值的容器。 这些节点有连接它们之间。 当它们以图形方式绘制时,它们看起来有点像一堆并排放置的棒棒糖。
连接表示数学计算,当一个节点使用连接移动到下一个节点时,这些计算将应用于一个节点的值。
如果我们想将视频游戏回归构建为神经网络,我们完全可以! 它的结构如下所示:
层数。 我们的视频游戏神经网络有两层:输入我们向神经网络提供预测变量年龄、性别、工资和租金的层,以及输出我们从神经网络中得到预测的层。
两层之间的连接包含权重,我们可以称它们为米, n、p和k ,我们将其应用于从输入层到输出层的每个变量。 所以年龄将乘以米, 性别n ,依此类推,所有这些乘积将在输出节点中相加。
神经网络还添加了一个偏见(二)到输出节点中的值。 偏差只是一个标量(常规数字,如 1、-7 或 42)。
根据我们构建的神经网络结构,输出节点将根据以下公式给出结果:
这与我们上面看到的回归公式相同。
学习方法
当我们进行线性回归时,我们必须找到/计算系数的值(b,m,n,p,和k )在我们指定模型结构之后。 我们经常使用最小二乘法来查找系数。
简而言之,最小二乘法找到使模型预测与实际数据之间的误差平方和最小化的系数。
用数学术语来说,我们最小化这个函数:
在哪里
是数据点的实际值,并且
是模型对该数据点的预测。
损失。 如果我们愿意,我们可以将此函数称为我们的函数损失函数。 这正是使用神经网络时所说的。 损失函数为我们提供了如何进行数值测量出色地我们的模型正在做。 如果损失很小,则预测相当准确。 如果它很大,它就不会那么热。 我们构建良好模型的目标始终是最小化损失函数(从而最大化模型性能)。
而均方误差(前任)来自最小二乘)对于许多模型来说是一个不错的选择,还有许多其他选择。 神经网络可以具有各种结构,不同的数据/结构可能受益于其他类型的损失函数。
“学习。”我们知道我们想要最小化我们的损失函数,并且我们拥有用于构建神经网络的数据和结构,但我们实际上需要“执行”最小化。 这是我们的神经网络开始偏离回归模型的地方。
在更简单的回归中,有一种非常简单快速的数学方法可以使用线性代数、几何和正则代数来求解我们的精确系数。 但神经网络采取了略有不同的方法。 神经网络经常使用迭代方法来寻找最小化损失函数的值(并优化我们的模型)。 本质上,我们尝试在迭代的每一步中更接近“最佳”答案。
许多工具和教程都使用某种形式梯度下降。 我不会花大量时间讨论传统梯度下降的技术细节,因为它不是 JMP 使用的,但总体思路是有一个坡度损失函数(想象一张有山脉和山谷的地图),其中较高的点代表较差的模型性能,较低的点代表良好的甚至最佳的模型性能。
您可以将梯度下降想象为在这张地图上尝试到达最低点的徒步旅行者。 他们每迈出一步,都会环顾四周,找出下降最陡的方向,然后朝该方向迈出一步。 最终,他们陷入了低谷。 从我们的远足类比中回来,低点代表一组参数(例如我们的系数和偏差),其中损失函数最小化,因此我们的模型表现得非常好!
在联合管理计划,使用稍微不同的技术来优化神经网络。 而不是使用典型的梯度下降方法,JMP 使用称为BFGS算法(不代表乙IG F友好地G伊安特S ,对罗尔德·达尔的粉丝们表示歉意)。 BFGS 算法有助于迭代地采取步骤来优化模型,类似于梯度下降,但使用不同的数学来实现。
JMP 不会等到算法找到最终低点(梯度中的山谷之一),而是通过查看验证集来决定模型的优化(这就是为什么 JMP 需要一个验证集,或者会保留验证集的一部分)在构建神经网络时自动验证您的数据)。 验证集包含不用于优化模型的数据。
JMP 将在验证集上测试当前模型。 一旦朝着低点采取更多“步骤”并不能显着提高模型在验证集上的性能,JMP 就会认为模型已优化。 在未用于创建模型的新数据上测试模型有助于我们了解我们正在创建的模型在未来数据上的表现。 这种方法被称为“提前停止”,因为它可以让我们提前停止迈向低点的步骤。 这通常可以让我们快速优化我们的模型。
无论使用哪种方法,一旦模型被认为是充分优化的,我们现在就拥有了神经网络中参数的所有估计值! 我们终于有了一个可以用来预测某些事情的工作模型。
更复杂的结构
现在您了解了神经网络的基础知识结构化的,以及他们如何学习。 但并非所有神经网络都必须看起来像我们上面所做的回归网络。 神经网络使我们在构建其结构时更加灵活。
多层。 我们可以用神经网络做的一件事就是添加更多层。 在我们的回归示例中,我们有一个直接连接到输出层的输入层。 但我们可以在它们之间插入一个额外的层,并将每一层连接到下一层。
这意味着输入数据在到达输出层之前将经过更多连接(因此也有更多计算)。 层数和连接越多,可以近似的函数就越复杂。
当我们构建模型时,我们这样做本质上是因为我们相信我们的输入和输出之间存在某种关系。 有一些数学函数,这可以解释如何将所有输入值转化为输出值。 就像根据年龄、性别、薪水和租金来猜测在视频游戏上花费的金额一样。
我们希望我们构建的模型(我们称之为f*(x) )非常接近(或近似) f(x) 。 但f(x)可能是一个相当复杂的模型。 它甚至可能不是线性的*喘息*! 额外的层(以及我们稍后将讨论的一些其他技巧)使我们创建的模型更加复杂。 如果f*(x)也很复杂,那么我们就有更好的机会创建一个接近于f(x) 。
输入层和输出层中的节点数量是预先确定的。 输入层为每个变量(或特征,我们在机器学习中经常这么称呼它们)都有一个节点,而输出层为您想要预测的每个数字都有一个节点。 但是,当您开始添加更多层(称为隐藏层)时,您可以选择任意数量的节点。 在神经网络历史的这一点上,它更像是一门艺术而不是一门科学。 对于为每个隐藏层选择多少个节点(例如慢慢减少每层中的节点数量)有很好的经验规则,但没有确切的答案。
激活函数。 好的,回到我关于某些模型如何非线性的评论(*再次喘气*)。 神经网络还采用激活函数在每个节点中,以便我们创建的模型是非线性的。
JMP专业版提供三种激活函数选项:TanH、线性和高斯。 在我们的回归模型中,我们“秘密”使用线性激活函数。 激活函数将输入输入到节点中,并在将其传递到下一层之前对其执行某种转换。 A线性激活(红色)接受一个值并返回不变,这正是我们在上面的简单回归神经网络中所做的。
但我们不必保持它不变。 这正切值激活(蓝色)是 Sigmoid 激活的一种(意味着它的函数看起来像一个拉伸的 S)。 它很有用,因为它接受任何输入并将其映射到 -1 和 1 之间的值。 大的负值将转换为接近 -1 的值,大的正值将转换为接近 1。 当您的模型预测类别(例如某人是否会拖欠贷款)而不是连续输出时,它通常非常有用。
A高斯激活函数(绿色)采用极值(高或低)并返回接近 0 的值。 对于不太极端的值,它将返回接近于 1 的值。
如果我们只使用线性激活,我们创建的模型只能是线性的。 但是,如果我们使用任何非线性激活函数,我们现在就可以创建非线性模型!
JMP Pro 允许您创建最多 2 层的神经网络,并允许您为每层选择不同的激活函数。 使用不同数量的层、节点和不同的激活函数,我们可以为神经网络创建大量结构。 您甚至可以使用神经网络来预测类别而不是一个连续值。
联合管理计划
要在 JMP 中构建神经网络,请转至分析>预测建模>神经。 神经平台打开后,您可以通过分别将输入和输出拖动到 X 和 Y 框来选择输入和输出。
这将打开模型启动窗口,您可以在其中指定两个隐藏层中想要的节点数量,以及您想要使用的激活函数类型。
一旦你点击去,JMP 将构建您的神经网络并创建模型性能度量表(例如连续输出的 R^2 或 RMSE)。 您还可以通过单击红色三角形并选择预测值来绘制实际值按预测绘制实际情况。 同样,我们可以通过单击红色三角形并选择来绘制残差值按预测绘制残差图。 您还可以转到红色小三角菜单并选择分析器获取预测刻画器,它将向您展示有关神经网络中实际发生的情况的更多信息。 黑匣子不再存在!

结论
神经网络很有趣,告诉人们你正在使用神经网络听起来很酷。 但当你观察他们的真实本性时,你会发现他们并不是所以与简单线性回归不同。 在这两种情况下,我们都必须指定一个结构和一个学习方法为了获得一个有效的、优化的模型。 神经网络做允许我们对比简单线性回归更复杂的结构进行建模,因此当我们认为输入和输出之间的关系很复杂时,它们通常很有用。
额外的层和激活函数使我们能够尝试网络的结构,而它们仅仅是开始! 我们可以预测分类结果、多个连续结果,我们可以有五层,或者十层! 我们还可以将更多很酷的功能应用于神经网络(例如,Dropout 或我们此处未介绍的其他激活函数),但现在您已经了解了基础知识,您可以更加自信地探索所有这些东西。