我一直在阅读有关神经网络的内容,并试图理解它背后的基本理论。我有点困惑,想知道是否有人可以帮助我。
我理解神经网络的方式如下:
输入图层+隐藏图层+输出图层,其中每个图层都有节点或神经元。每个神经元从前一层中的所有神经元获得输入,并且还发送到下一层中的每个神经元。然后据说神经元计算权重之和,然后利用激活函数来激发与否(或发送0到1之间的数字)。
让我困惑的是它如何计算权重之和?
在上图中,我创建了一个简单的神经网络,并在他的讲座(Youtube)中称为Andrew Ng所做的输入。
所以,在第1层采取神经元a1: 这将得到第0层的值a1和a2,以及相应的权重和偏差,它们将在第1层的向量b1和w1中收集。
总和是否按照以下公式计算? z = w1 * x + b?这通常适用于所有神经网络,还是只有一种类型的NN?第1层中的z1也是矢量吗?是激活函数使它成为标量吗?
我知道有不同的激活函数可以计算最终的标量值,这些标量值与权重和偏差一起发送到下一层神经元。但我想我对重量和偏差非常困惑,它们来自/计算等等。
我希望我的解释不会太混乱,因为我很困惑。
答案 0 :(得分:2)
操作z1 = w1 * x + b仅适用于完全连接的层。例如,Convolutional Neural Networks使用不同的操作。
我认为这种符号有点混乱。第1层中a1的值是标量,为此,您需要将激活函数应用于另一个标量z1,可以计算z1 = w1 * x + b。这里,w1不是矩阵,而是去神经元a1的权重向量。
然而,这不是通常的计算方法,因为这不利用矢量化。一般来说,你想做z = W * x + b,其中W是所有权重的矩阵,z是一个向量,然后按元素方式应用激活函数,获得该层激活的向量,
答案 1 :(得分:0)
查看此播放列表。您将学习如何实现您的nn。
Shiffmann Coding Train Neurol Network, Feedforward Algorithm Part 1
答案 2 :(得分:0)
您可以将权重视为连接神经元的箭头。对于图层中的每个神经元,您对下一层中的每个神经元都有一个权重。这意味着您可以在两个图层之间使用一个矩阵来存储权重。
要计算下一层神经元的值,请执行以下操作:
对于第二层中的每个节点,您计算z1[0] = w1*a1[0] + w2*a2[0] + w3*a3[0]
。这将是一个标量值。现在你可以应用sigmoid函数来压缩标量(但它仍然是一个标量)。
我们可以使用矢量化实现并一次计算整个图层的所有值,而不是为每个神经元执行此操作:
z[1] = a[0] * layer1_weights
a[1] = sigmoid(z[1])
答案 3 :(得分:0)
让我们考虑所有此处的数字作为矩阵。您的输入a [0]是1x3矩阵,即列向量。现在,正如您已经提到的,如果没有层的激活函数,则该层的输出将为a [1] = a [0] .w [01] + b [1],其中w [01]的权重介于第0层和第一层。类似地,b [1]是添加到第一层的偏置。
因此,对于矩阵乘法,您的w [01]将是3x4矩阵,而偏差将是1x4矩阵。 如果假设您稍后对此进行了S型激活,那么在这种情况下,S型函数将应用于a [1]以从该层获得最终输出。 使用矩阵了解NN的操作总是更容易! 希望有帮助!