【发布时间】:2017-11-08 14:12:08
【问题描述】:
网上有很多“神经网络介绍”文章,但大多数都是对人工神经网络的数学的介绍,而不是对实际基础概念的介绍(尽管它们应该是一个和相同的)。一个简单的人工神经元网络实际上是如何工作的?
【问题讨论】:
标签: neural-network artificial-intelligence
网上有很多“神经网络介绍”文章,但大多数都是对人工神经网络的数学的介绍,而不是对实际基础概念的介绍(尽管它们应该是一个和相同的)。一个简单的人工神经元网络实际上是如何工作的?
【问题讨论】:
标签: neural-network artificial-intelligence
这个答案大致基于 M. A. Nielsen 的“Neural Networks and Deep Learning”的开头,绝对值得一读 - 它是在线免费的。
所有神经网络背后的基本思想是:神经网络中的每个神经元都做出一个决策。一旦你了解了他们如何做到这一点,其他一切都会变得有意义。让我们通过一个简单的情况来帮助我们达成这种理解。
假设您正在决定今天是否要戴帽子。有许多因素会影响您的决定,其中最重要的可能是:
为简单起见,我们假设这些是您在做出此决定时要权衡的仅有的三个因素。暂时忘记神经网络,让我们尝试构建一个“决策者”来帮助我们回答这个问题。
首先,我们可以看到每个问题都有一定程度的重要性,因此我们需要使用每个问题的相对重要性以及每个问题的相应答案来做出决定。
其次,我们需要一些组件来解释每个(是或否)答案及其重要性,以产生最终答案。这听起来很简单,可以放入方程式中,对吧?我们开始做吧。我们只需确定每个因素的重要性,然后将该重要性(或“权重”)乘以问题的答案(可以是 0 或 1):
3a + 5b + 2c > 6
数字 3、5 和 2 分别是问题 a、b 和 c 的“权重”。 a、b 和 c 本身可以是零(问题的答案是“否”),也可以是一(问题的答案是“是”)。如果上述等式为真,则决定戴帽子,如果为假,则决定不戴帽子。该等式表明,只有当我们的 权重 乘以我们的 因子 的总和大于某个 阈值 时,我们才会戴上帽子。上面,我选择了一个阈值6。如果你考虑一下,这意味着如果我没有帽子可以戴(b = 0),无论其他答案是什么,我都不会戴帽子今天的帽子。也就是说,
3a + 2c > 6
从不为真,因为 a 和 c 只能是 0 或 1。这是有道理的——我们的简单决策模型告诉我们如果没有帽子就不要戴帽子!因此,对于我们简单的“我应该戴帽子”决策者来说,3、5 和 2 的权重以及 6 的阈值似乎是一个不错的选择。这也意味着,只要我有一顶帽子可以戴,阳光明媚(a=1)或适合我的衣服的帽子(c=1)就足以让我今天戴上帽子。也就是说,
5 + 3 > 6 and 5 + 2 > 6
都是真的。好的!您可以看到,通过调整每个因素的权重和阈值,并通过添加更多因素,我们可以调整我们的“决策者”来近似地模拟任何决策过程。我们刚刚展示的是一个简单神经元(决策者!)的功能。让我们把上面的方程变成“神经元形式”:
一个处理 3 个因素的神经元:a、b、c,相应的重要性权重为 3、5、2,决策阈值为 6。
神经元有 3 个输入连接(因子)和 1 个输出连接(决策)。每个输入连接都有一个权重,用于编码该连接的重要性。如果该连接的权重较低(相对于其他权重),那么它不会对决策产生太大影响。如果它很高,那么决定将在很大程度上取决于它。
这太棒了,我们有一个完全正常工作的神经元,可以对输入进行加权并做出决策。所以这是下一个问题:如果输出(我们的决定)被输入另一个神经元的输入会怎样?该神经元将使用我们关于帽子的决定来做出更抽象的决定。如果输入 a、b 和 c 本身是其他计算低级决策的神经元的输出呢?我们可以看到,神经网络可以被解释为计算关于决策的决策的网络,从简单的输入数据到越来越复杂的“元决策”。对我来说,这是一个不可思议的概念。甚至人类大脑的所有复杂性都可以使用这些原理进行建模。从与我们的视锥细胞相互作用的光子水平到我们对生命意义的思考,这只是简单的决策神经元。
下面是一个简单的神经网络图,它本质上具有 3 层抽象:
例如,上述输入可以是 2 个红外距离传感器,输出可以控制 2 个驱动机器人车轮的电机的开/关开关。
在我们简单的帽子示例中,我们可以很容易地选择权重和阈值,但是在这个示例中我们如何选择权重和阈值,以便机器人可以跟随移动的物体?我们怎么知道解决这个问题需要多少神经元?我们可以只用 1 个神经元解决它吗?也许是 2 个?或者我们需要20个?我们如何组织它们?分层?模块?这些问题是神经网络领域的个问题。诸如“反向传播”和(最近)“神经进化”之类的技术被有效地用来回答其中一些令人不安的问题,但这些超出了本介绍的范围——维基百科和谷歌学术以及免费的在线教科书,如“Neural Networks and Deep Learning” MA Nielsen 是开始学习这些概念的好地方。
希望您现在对神经网络的工作原理有所了解,但如果您对实际实现神经网络感兴趣,可以对我们的神经元概念进行一些优化和扩展,这将使我们的神经网络更加高效和有效。
首先,请注意,如果我们将神经元的阈值设置为零,我们总是可以调整输入的权重来解决这个问题——只是,我们还需要允许权重为负值。这很棒,因为它从我们的神经元中删除了一个变量。因此,我们将允许负权重,从现在开始,我们无需担心设置阈值——它始终为零。
接下来,我们会注意到输入连接的权重都是相互关联的,因此我们实际上可以将它们归一化为 -1 到 1 之间的值。太酷了。这稍微简化了一些事情。
我们可以通过意识到输入本身(上例中的 a、b 和 c)不必只是 0 或 1 来对我们的决策者做出进一步、更实质性的改进。例如,如果今天是 真的晴天?或者可能有散落的云,是间歇性的晴天吗?我们可以看到,通过允许 0 和 1 之间的值,我们的神经元可以获得更多信息,因此可以做出更好的决定——好消息是,我们不需要更改神经元模型中的任何内容!
到目前为止,我们已经允许神经元接受介于 0 和 1 之间的输入,并且为了方便起见,我们将权重归一化在 -1 和 1 之间。
下一个问题是:为什么我们在最终决策(即神经元的输出)中需要这样的确定性?为什么它不能像输入一样也是介于 0 和 1 之间的值?如果我们确实允许这样做,是否戴帽子的决定将成为一定程度的确定,戴帽子是正确的选择。但如果这是一个好主意,我为什么要引入一个阈值呢?为什么不直接将加权输入的总和传递给输出连接?好吧,因为,由于超出了对神经网络的简单介绍范围之外的原因,事实证明,如果允许神经元做出类似“有根据的猜测”之类的事情,而不是仅仅呈现原始概率,那么神经网络会更好地工作。阈值使神经元对确定性有轻微的偏见,并使它们更加“自信”,这样做会使神经网络更有效。所以从这个意义上说,阈值是好的。但是阈值的问题在于它不会让我们知道神经元何时不确定它的决定——也就是说,如果加权输入的总和非常接近阈值,神经元会做出明确的是/否回答明确的是/否答案并不理想。
那么我们该如何克服这个问题呢?事实证明,如果我们用连续的函数(称为“激活函数”)替换我们的“大于零”条件,那么我们可以选择非二进制和非线性 对神经元加权输入的反应。让我们首先将我们最初的“大于零”条件看成一个函数:
代表原始神经元“激活函数”的“Step”函数。
在上面的激活函数中,x轴代表加权输入的总和,y轴代表神经元的输出。请注意,即使输入总和为 0.01,输出也是非常确定的 1。正如我们之前解释的那样,这并不理想。所以我们需要另一个只偏向确定性的激活函数。这是我们欢迎“sigmoid”函数的地方:
‘sigmoid’函数;为我们的人工神经网络提供更有效的激活函数。
请注意,它看起来像是阶跃函数(我们也确定为 确定)和我们期望从只输出原始的神经元的线性 x=y 线之间的中间点某些决定是正确的概率。这个 sigmoid 函数的方程是:
其中 x 是加权输入的总和。
就是这样!我们新的和改进的神经元执行以下操作:
看似简单,但通过将这些简单的决策者组合在一起并找到理想的连接权重,我们可以做出任意复杂的决策和计算,这些决策和计算远远超出了我们的生物大脑所允许的范围。
【讨论】: