创建神经网络
Creating a neural network
我正在 python 中创建一个非常简单的神经网络。不过,我要求的不是任何特定代码,而是它如何工作的一般概念。
我了解输入、权重等等,前向传播中的一切。
我不明白的是反向传播。它将输出与所需输出进行比较并计算误差(差异),但它如何更改所有权重以使其正确?特别是如何改变权重以使其不同(并非全部相同)?
其次,当您更改权重时,如何使其适用于多个输入而不是仅一个输入或另一个?
最后,偏差有什么作用,您如何确定它是什么?我听说它被添加到它所连接的节点,但在 1 个输入、1 个输出和 1 个偏置连接到输出的情况下:
输入为0
输入和输出之间的权重为 -17.2
偏差为 -1.79
输出为 0.9999999692839459
但是怎么办? 0 x -17.2 - 1.79 = -1.79???那不是1吗?
感谢大家的帮助:)
编辑:请不要给我其他来源的链接(例如,不在堆栈溢出上),因为好的答案会帮助我和任何阅读更多内容的人。谢谢!
看看通过梯度下降训练的线性回归。线性回归的目标是找到一条线(对于 R^1
的情况),一个线性函数,它最小化给定样本 A
对 {(xi,yi),...,(xn,yn)}
之间的最小二乘差和线性函数 f(x)
.
根据定义,直线的函数由 f(x) = m*x + b
给出,其中 m
是斜率,b
是与 y 轴的交点。表示函数与样本之间的平方差的成本函数是 c(X,Y)=1/2n*Sum_i_to_n(f(x_i) - y_i)^2
,其中 X
和 Y
是来自样本 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
.
的偏导数
在线性回归的情况下,我们的参数是 m
和 b
。在神经网络的情况下,参数是权重。那是因为我们想要学习一个函数来满足我们的目标,即最小化函数输出和训练输入之间的平方差。
对于直觉:梯度,函数的偏导数向量,总是指向函数表面最陡上升的方向。但是因为我们想要最小化我们想要在梯度的负方向上的函数。这样,我们按 alpha
的值逐步向下,同时每一步更新参数值,直到达到最小值。这在梯度 c'(X,Y)
等于或几乎等于零时达到。
所以在我们的例子中,我们构建了 c(X,Y)
关于 m
和 b
的偏导数,并写了几行代码来得到它 运行 .
正如我之前所说,它与神经网络的 training/learing 相同。但是对于神经网络,我们有一系列依赖参数。因此,例如,隐藏层的权重取决于梯度下降期间输出层的权重。所以你总是会有一系列的偏导数。这就是链式法则非常有用的地方。
线性回归和神经网络之间的另一个区别是函数 c(X,Y)
对于神经网络是非凸函数,而对于线性回归函数是凸函数。那是因为底层函数的属性f(x)
。因此,当函数是凸函数时,局部最小值始终是全局最小值。这就是为什么您永远无法判断您是否拥有神经网络的最佳解决方案。
我正在 python 中创建一个非常简单的神经网络。不过,我要求的不是任何特定代码,而是它如何工作的一般概念。 我了解输入、权重等等,前向传播中的一切。 我不明白的是反向传播。它将输出与所需输出进行比较并计算误差(差异),但它如何更改所有权重以使其正确?特别是如何改变权重以使其不同(并非全部相同)?
其次,当您更改权重时,如何使其适用于多个输入而不是仅一个输入或另一个?
最后,偏差有什么作用,您如何确定它是什么?我听说它被添加到它所连接的节点,但在 1 个输入、1 个输出和 1 个偏置连接到输出的情况下:
输入为0 输入和输出之间的权重为 -17.2 偏差为 -1.79 输出为 0.9999999692839459
但是怎么办? 0 x -17.2 - 1.79 = -1.79???那不是1吗?
感谢大家的帮助:)
编辑:请不要给我其他来源的链接(例如,不在堆栈溢出上),因为好的答案会帮助我和任何阅读更多内容的人。谢谢!
看看通过梯度下降训练的线性回归。线性回归的目标是找到一条线(对于 R^1
的情况),一个线性函数,它最小化给定样本 A
对 {(xi,yi),...,(xn,yn)}
之间的最小二乘差和线性函数 f(x)
.
根据定义,直线的函数由 f(x) = m*x + b
给出,其中 m
是斜率,b
是与 y 轴的交点。表示函数与样本之间的平方差的成本函数是 c(X,Y)=1/2n*Sum_i_to_n(f(x_i) - y_i)^2
,其中 X
和 Y
是来自样本 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
.
在线性回归的情况下,我们的参数是 m
和 b
。在神经网络的情况下,参数是权重。那是因为我们想要学习一个函数来满足我们的目标,即最小化函数输出和训练输入之间的平方差。
对于直觉:梯度,函数的偏导数向量,总是指向函数表面最陡上升的方向。但是因为我们想要最小化我们想要在梯度的负方向上的函数。这样,我们按 alpha
的值逐步向下,同时每一步更新参数值,直到达到最小值。这在梯度 c'(X,Y)
等于或几乎等于零时达到。
所以在我们的例子中,我们构建了 c(X,Y)
关于 m
和 b
的偏导数,并写了几行代码来得到它 运行 .
正如我之前所说,它与神经网络的 training/learing 相同。但是对于神经网络,我们有一系列依赖参数。因此,例如,隐藏层的权重取决于梯度下降期间输出层的权重。所以你总是会有一系列的偏导数。这就是链式法则非常有用的地方。
线性回归和神经网络之间的另一个区别是函数 c(X,Y)
对于神经网络是非凸函数,而对于线性回归函数是凸函数。那是因为底层函数的属性f(x)
。因此,当函数是凸函数时,局部最小值始终是全局最小值。这就是为什么您永远无法判断您是否拥有神经网络的最佳解决方案。