网上有很多“神经网络入门”文章,但大多数都是对人工神经网络的数学的介绍,而不是对实际基础概念的介绍(即使它们应该是一个一样)。人工神经元的简单网络如何实际起作用?
答案 0 :(得分:1)
这个答案大致基于" Neural Networks and Deep Learning"的开头。由M. A. Nielsen完成绝对值得一读 - 它在网上和免费。
所有神经网络背后的基本思想是:神经网络中的每个神经元都做出决定。一旦你理解了他们如何做到这一点,其他一切都会有意义。让我们来看一个简单的情况,这将有助于我们达成这种理解。
假设您正在尝试决定今天是否戴帽子。有许多因素会影响您的决定,也许最重要的因素是:
为简单起见,我们假设这些是您在此决策中权衡的唯一三个因素。暂时忘记神经网络,让我们试着建立一个“决策者”来帮助我们回答这个问题。
首先,我们可以看到每个问题都具有一定的重要性,因此我们需要使用每个问题的相对重要性以及每个问题的相应答案来做出决定。
其次,我们需要有一些组件来解释每个(是或否)答案及其产生最终答案的重要性。这听起来足够简单,对吧?我们开始做吧。我们只是决定每个因素的重要程度,并将该重要性(或“权重”)乘以问题的答案(可以是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之间的值?如果我们确实允许这样做,那么戴帽子的决定将成为一个确定的水平戴帽子是正确的选择。但如果这是一个好主意,为什么我会引入一个门槛呢?为什么不直接将加权输入的总和传递给输出连接?好吧,因为超出这个简单的神经网络介绍范围的原因,事实证明,如果神经元被允许做出类似“有根据的猜测”的东西,而不是仅仅呈现原始概率,神经网络的效果会更好。阈值使神经元略微偏向确定性并允许它们更“自信”,这样做可以使神经网络更有效。所以从这个意义上说,门槛是好的。但是阈值的问题在于它不会让我们知道神经元何时不确定其决定 - 也就是说,如果加权输入的总和非常接近阈值,神经元会做出明确的是/否答案确定是/否的答案不理想。
那么我们如何克服这个问题呢?事实证明,如果我们用连续的函数(称为'激活函数')替换我们的“大于零”条件,那么我们可以选择非二元和非线性< / em>对神经元加权输入的反应。让我们首先看看我们原来的“大于零”条件作为一个函数:
'Step'函数代表原始神经元的'激活函数'。
在上述激活函数中,x轴表示加权输入的总和,y轴表示神经元的输出。请注意,即使输入总和为0.01,输出也是非常确定的1.这不是理想的,正如我们之前解释的那样。因此,我们需要另一种激活功能,只有偏向于确定性。这是我们欢迎'sigmoid'功能的地方:
'sigmoid'功能;我们的人工神经网络更有效的激活功能。
注意它看起来像一个阶梯函数(我们建立为某些)和一个线性x = y线之间的中间点,我们期望从一个只输出原始的神经元某些决定是正确的概率。这个sigmoid函数的等式是:
其中x是加权输入的总和。
就是这样!我们新的和改进的神经元做了以下事情:
它看似简单,但通过将这些简单的决策者组合在一起并找到理想的连接权重,我们可以做出任意复杂的决策和计算,这些决策和计算远远超出我们的生物大脑所允许的范围。