让我们以一道选择题开始今天的话题。什么是神经网络?请选择以下一项或多项正确的描述。A.神经网络是一种接受输入并产生输出的数学函数。B.神经网络是多维数组流过的计算图。C.神经网络由层组成,每一层都有“神经元”。D.神经网络是一个通用的函数逼近器。你的答案是________。答案揭晓,正确答案是……ABCD。你有点困惑吗?神经网络不是有一个唯一的、统一的描述吗?SethWeidman是前Facebook数据科学家。他曾受邀周游世界,向不同行业的人们教授数据科学和机器学习。前Facebook数据科学家SethWeidman来源:sethweidman.comWeidman在他的书《Python深度学习入门:从零构建CNN和RNN》中写道:对于解释神经网络,我发现最具挑战性的是解释“什么是神经网络”传达正确的心智模型。这主要是因为理解神经网络需要的不是一个而是多个心智模型,每个心智模型都说明了神经网络如何工作的不同方面(每个都是必不可少的)。诚然,神经网络和深度学习是一个三维的领域,仅仅从数学或者代码层面学习,必然会泛化,无法融合。正因如此,魏德曼提出了一种全新的学习方式:同时从数学、原理图、Python代码三个维度立体理解每一个概念,从而领略深度学习领域的全貌.想象一下,您想建立自己的深度学习大厦。你可能对算法情有独钟,也可能习惯于视觉学习,但唯有“思之升华”,才能打造出多面精美的建筑。魏德曼提出了以下步骤来学习导数、嵌套函数和链式法则等概念。这些基本概念就像积木一样,有了它们,你终将搭建起属于自己的深度学习大厦。以一个或多个方程式的形式展示数学原理。给出一个原理图,类似于您在编码面试期间在白板上绘制的原理图。给出相应的Python代码。让我们看看如何用这种学习方法来理解导数的概念。导数是深度学习中一个非常重要的概念。一般来说,函数在某一点的导数可以简单地看作是函数输出相对于该点输入的“变化率”。维度1:数学首先在数学维度定义导数。一个数字可以用来描述当改变某个输入值时函数的输出改变多少的极限:这个极限可以通过为Δ设置一个非常小的值来近似数值,例如0.001。因此,如果Δ=0.001,导数可以计算为:虽然近似准确,但这只是完整导数心智模型的一部分。我们从原理图的维度来理解导数。维度2:示意图在函数曲线上画一条切线,那么函数f在a点的导数就是直线在a点的斜率。可以通过两种方式计算这条线的斜率。第一种方式是用微积分来实际计算极限,第二种方式是取a?0.001和a+0.001连线f的斜率,如下图所示。另一种可视化方法是将功能想象成一个小工厂,并想象它的输入通过电线连接到输出。求导相当于回答了一个问题:如果把函数的输入a提高一点,那么按照工厂内部的运作方式,输出会变化这个小值的多少倍?对于理解深度学习,第二种表示比第一种更重要。维度3:Python代码可以编码为近似前面看到的导数:当我们说P是E(随机选择的字母)的函数时,我们的意思是存在某个函数f使得f(E)=P。换句话说,有一个函数f接受一个对象E并产生一个对象P。也可以说P是函数f应用于E时产生的任意函数值:它可以编码如下。
