【问题标题】:Creating a neural network [closed]创建神经网络 [关闭]
【发布时间】:2017-09-18 15:50:03
【问题描述】:

我正在用 python 创建一个非常简单的神经网络。我要求的不是任何特定的代码,而是它如何工作的一般概念。 我了解输入、权重等,以及前向传播中的所有内容。 我不明白的是反向传播。它将输出与所需输出进行比较并计算误差(差异),但它如何将所有权重更改为正确的?尤其是如何将权重更改为不同的(并非全部相同)?

其次,当您更改权重时,如何使其适用于多个输入,而不仅仅是一个输入或另一个?

最后,偏见有什么作用,你如何决定它是什么?我听说它被添加到它所连接的节点,但在 1 个输入、1 个输出和 1 个偏置连接到输出的情况下:

输入为 0 输入和输出之间的权重为 -17.2 偏差为 -1.79 输出为 0.9999999692839459

但是怎么做呢? 0 x -17.2 - 1.79 = -1.79???那不是1?

感谢大家的帮助:)

编辑:请不要给我指向其他来源的链接(例如,不是堆栈溢出),因为一个好的答案会帮助我和任何阅读此内容的人。谢谢!

【问题讨论】:

  • 第一个问题的简短答案是渐变。第二个是“你没有;每一步的优化都是针对特定样本的”。两者的长答案是youtube.com/watch?v=vq2nnJ4g6N0,强烈推荐
  • 问题要求我们推荐或查找书籍工具软件库教程 或其他场外资源对于 Stack Overflow 来说是离题,因为它们往往会吸引固执己见的答案和垃圾邮件。取而代之的是describe the problem 以及迄今为止为解决该问题所做的工作。
  • 感谢您的帮助。您能否通过示例将其发布为答案?例如。如果输入是 1 和 2,那么它将执行此操作,然后给出此输出。错误是 4 所以它会改变这个......@Ev.Kounis
  • @pedrolobito 我不是在要求场外资源,而是要回答我的问题。 Ev.kounis 游戏我一个资源,我已要求将其更改为答案
  • @RulerOfTheWorld 在这里写数学比观看视频需要的更多。

标签: python python-3.x neural-network backpropagation


【解决方案1】:

看看通过梯度下降训练的线性回归。线性回归的目标是找到一条线(对于 R^1 的情况),一个线性函数,它最小化给定样本 A{(xi,yi),...,(xn,yn)} 和线性函数 @987654324 之间的最小二乘差@。

根据定义,直线的函数由f(x) = m*x + b 给出,其中m 是斜率,b 是与y 轴的交点。成本函数,表示函数与样本之间的平方差为c(X,Y)=1/2n*Sum_i_to_n(f(x_i) - y_i)^2,其中XY 是来自样本A 的向量。

那么我们如何做到这一点呢?

嗯,这是一个无约束的优化问题,因为我们希望在样本 A 中的所有条目上最小化 c(X,Y)。哦,这实际上与神经网络相同,但函数 f(x) 在神经网络中更复杂。

我们用来解决这个优化问题的算法是梯度下降,定义为

x_t+1= x_t - alpha*f'(x_t)

所以参数x在时间t+1的值是这个参数在时间t的值加上alpha > 0的一些值,通常称为步长,乘以偏导数c(X,Y) 相对于 x

在线性回归的情况下,我们的参数是mb。在神经网络的情况下,参数是权重。那是因为我们想学习一个函数来满足我们的目标,即最小化函数输出和训练输入之间的平方差。

直觉:梯度,函数的偏导数向量,总是指向函数表面最陡峭上升的方向。但是因为我们想要最小化我们想要在梯度的负方向上的函数。这样,我们逐步降低alpha 的值,同时每一步更新我们的参数值,直到达到最小值。这在梯度c'(X,Y) 等于或几乎等于零时达到。

因此,在我们的示例中,我们构建了 c(X,Y) 相对于 mb 的偏导数,并编写了几行代码以使其运行。

正如我之前所说,它与神经网络的训练/学习相同。但是对于神经网络,我们有一系列依赖的参数。因此,例如,隐藏层的权重取决于梯度下降期间输出层的权重。所以你总是会有级联的偏导数。这就是链式法则非常有用的地方。

线性回归和神经网络之间的另一个区别是函数c(X,Y) 在神经网络中是非凸的,而在线性回归中它是凸的。这是因为底层函数f(x) 的属性。因此,当函数是凸函数时,局部最小值始终是全局最小值。这就是为什么你永远无法判断你是否有一个神经网络的最佳解决方案。

【讨论】:

  • 感谢您的回答。不过,我的数学不是最好的,而且我很难弄清楚每个字母代表什么。你能解释一下每个字母代表什么吗?如果是这样那就太好了!谢谢!
  • 另外我对我的问题做了一些修改,所以如果你知道答案,也请添加:-)
  • 嗯,神经网络和机器学习主题是简单的数学:) 神经网络的偏差与直线的偏差 (b) 相同。看看我的例子。在每一层,神经元计算前一层的输出乘以相关权重加上一些跨层共享的偏差的线性组合。该处理类似于高维空间中一条线的功能。因此,它是一个超平面。该处理的结果随后被放入激活函数中,以将神经元输出压缩到特定间隔,例如(0,1)。这有帮助吗?
  • 顺便说一句:偏差就像跨层共享的另一个权重。它最初设置为 1,然后像其他权重一样通过反向传播进行训练。想象一条在空间内旋转但不能上下移动的线,因为它的 y 交点固定为 1 ......如果你想逼近所有可能的函数,那将没有多大意义通过一组这样的行,对吧?
  • 谢谢,这确实有帮助。有两件事我仍然没有得到。 [1] 我仍然不明白它如何单独更改每个重量以使其正确。 [2] 0*-17.2-1.79如何等于0.9999999692839459?
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 2014-02-17
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
相关资源
最近更新 更多