>图片来自Unsplash的AlinaGrubnyak神经网络是将数据映射到信息的通用逼近器。这是什么意思?神经网络可以解决任何问题吗?神经网络是逐个场景/逐帧分析、股票价格预测、零售和许多其他用途的成熟解决方案。我们中的许多人在企业层面使用它,但我们中有多少人真正了解它?为了回答“神经网络可以解决任何问题吗?”这个问题,让我们来探索一下基础知识。NeuralNet由称为层的垂直堆叠组件组成:输入层、隐藏层和输出层。每层由一定数量的神经元组成。输入层具有数据集的属性(特征)。根据问题陈述,隐藏层可以有多个神经元,输出层也可以有多个神经元。了解感知器和激活函数感知器(或神经元)是神经网络的基本粒子。它的工作原理是阈值化。令f(x)为阈值为40的求和函数。>图1.神经元的激发(作者图片)在这两种情况下,定义的函数返回两个输入x1和x2的加法。在情况1中,函数返回小于阈值的30。在情况2中,函数返回大于阈值的50,神经元将放电。现在,这个函数变得比那更复杂了。一个典型的神经网络的神经元接收输入值乘以它们的权重和一个附加偏差的总和,一个有助于做出决定的函数(也称为激活函数或阶跃函数)。>图2.感知器(作者图片)激活函数将节点的输出转换为二进制输出。如果加权输入超过阈值则为1,否则为0(取决于激活函数)。最常用的激活函数有以下三种:SigmoidSigmoid是一种广泛使用的激活函数,有助于捕获非线性关系。>图3.S形曲线(来源)函数Φ(z)将始终返回任何z值的二进制(0/1)输出。因此,它被广泛用于基于概率的问题。tanh(Tangenthyperbolic)它或多或少类似于Sigmoid函数,但tanh的取值范围为-1到1,这使其适用于分类问题。它是非线性的。>Fig4.tanhcurve(ImagebyAuthor)ReLu(RectifiedLinearUnit)它是深度学习中最常用的激活函数,因为它不像其他激活函数那么复杂。f(x)返回0或x。>图5.ReLu曲线(作者图片)由于ReLu函数的导数返回0或1,这使得计算变得容易。神经网络为了理解神经网络的黑匣子,让我们考虑一个三层的基本结构。输入层、密集/隐藏层(连接在神经元的两侧)和输出层。>图6.随机初始化一个简单的神经网络(作者图片)权重和偏差。神经网络输出的准确性在于通过不断更新权重和偏差来找到最优值。让我们考虑一个等式,y=wx,其中“w”是权重参数,“x”是输入特征。简而言之,权重定义了赋予特定输入属性(特征)的权重。现在,方程y=wx的解将始终通过原点。因此,添加了一个截距来为称为偏差的完美拟合提供自由度,方程变为我们都熟悉的熟悉的?=wx+b。所以偏置可以使激活函数的曲线向上或向下调整轴。现在让我们看看神经网络可以变得多复杂。对于我们的网络,输入层有两个神经元,密集层有四个神经元,输出层有一个。每个输入值都与其权重和偏差相关联。输入特征与权重和偏差的组合通过密集层,网络在激活函数的帮助下学习特征,网络有自己的权重和偏差,最后做出预测(输出)。这就是前向传播。那么,我们的网络总共有多少个参数?>图7.神经网络的总参数计算(作者图片)对于这样一个简单的网络,总共需要优化17个参数以获得最佳解决方案。随着隐藏层数量和其中神经元数量的增加,网络获得更多功率(达到某个点),但随后我们需要呈指数级增长的更多参数来优化,这最终可能会导致计算密集型。因此,需要权衡取舍。更新网络通过计算一次前向传播迭代后实际输出与预测输出之间的(平方)差来计算误差。在网络中,输入和激活函数是固定的。因此,我们可以改变权重和偏差来最小化误差。可以通过注意两件事来最小化误差:通过少量改变权重来改变误差,以及改变的方向。CostFunction一个简单的神经网络根据线性关系预测值value=wx+b,其中?(预测)是y(实际)的近似值。现在,可以有几条直线拟合线性。为了选择最佳拟合线,我们定义了一个成本函数。令?=θ?+xθ?。我们需要找到θ?和θ?的值,使得?尽可能接近y。为此,我们需要找到θ?和θ?的值,以使下面定义的误差最小化。>(ImagebyAuthor)误差,E=实际值与预测值的平方差=(=-y)2因此,Cost=(1/2n)(θ?+xθ?-y)2,其中n用于计算均方误差的总点数并将其除以2以减少数学量。因此,我们需要最小化这个代价函数。梯度下降该算法通过最小化成本函数来帮助找到θ?和θ?的最优值。我知道C=(1/2n)(θ?+xθ?—y)2。对于解析解,我们针对称为梯度的变量(θ)对C进行部分微分。这些梯度表示斜率。现在,原始成本函数是一个二次函数。因此图形将如下所示:>图8.梯度下降曲线(作者图片)更新θ的公式为:如果我们在P1点,斜率为负,这使得梯度为负,整个方程为正。因此,该点向正方向向下移动,直到达到最小值。同样,如果我们在点P2,斜率为正,这使得梯度为正,整个方程为负,使得P2向负方向移动,直到达到最小值。这里,η是点趋向于最小值的速率,称为学习率。所有θ都同时更新(对于某些时期),并计算误差。作为旁注,这样做我们可能会遇到两个潜在问题:1.更新theta值时,您可能会陷入局部最小值。一种可能的解决方案是使用具有动量的随机梯度下降(SGD),这有助于超越局部最小值。2、如果η太小,收敛时间会很长。或者,如果η太大(或什至中等偏高),它将继续围绕最小值振荡并且永远不会收敛。因此,我们不能对所有参数使用相同的学习率。为了解决这个问题,我们可以安排一个程序,随着梯度向最小值移动(例如余弦衰减)调整η的值。反向传播是使用梯度下降算法优化和更新NeuralNet中的权重和偏差的一系列操作。让我们考虑一个简单的神经网络,它有一个输入、一个隐藏层和一个输出(图2)。令x为输入,h为隐藏层,σ为sigmoid激活,w权重,b为偏差,w?为输入权重,w?为输出权重,b?为输入偏差,b?为输出偏差,O为输出,E为误差μ是线性变换((∑w?x?)+b)。我们现在通过堆叠从输入到输出所需的操作序列来创建图2的计算图。>图9.计算图(作者图片)这里,E取决于O,O取决于μ2,μ2取决于b1、w3和h,h取决于μ1,μ1取决于x、w1和b5.我们需要计算权重和偏差的中间变化(相关性)。由于只有一个隐藏层,因此存在输入和输出权重和偏差。因此,我们可以将其分为两种情况。案例1:w.r.t.outputweightandbias>Fig10.ComputationGraphforcase1(ImagebyAuthor)因此,通过将导数的值放入上述两个误差变化方程中,我们可以得到以下梯度,我们可以通过以下公式更新权重和偏差:此计算用于隐藏层和输出。同样,对于输入层和隐藏层如下。案例2:w.r.t.输入权重和偏差>图11。案例2的计算图。(作者图片)我们可以使用以下方法更新这些梯度:两种情况同时发生,计算误差直到重复次数称为an时代。监督神经网络。运行一定时间后,我们为数据集的选定特征设置一组优化的权重和偏差。当在这个优化的网络中引入新的输入时,它们会使用权重和偏差的优化值进行计算,以达到最大的准确性。神经网络可以解决任何问题吗?如上所述,神经网络是通用逼近器。理论上,它们能够表示任何函数,从而解决任何问题。随着网络的增长(更多的隐藏层),它获得了更多的特征,但要优化的参数数量呈指数增长,这是资源密集型的。实现可以在这里找到。本文由文舒琪伍翻译自ShubhamDhingra的文章《Simplified Mathematics behind Neural Networks》,转载请注明出处,原文链接:https://towardsdatascience.com/simplified-mathematics-behind-neural-networks-f2b7298f86a4)
