我一直在阅读关于神经网络的基本理论,试图理解其背后的基本原理。我有些困惑,希望有人能帮我解答。
我对神经网络的理解如下:
输入层 + 隐藏层 + 输出层,每一层都有节点或神经元。每个神经元从前一层的所有神经元获取输入,并向下一层的所有神经元发送输出。据说神经元会计算权重的总和,然后使用激活函数决定是否激活(或发送一个介于0到1之间的数值)。
让我困惑的是,它是如何计算权重的总和的?
在上图中,我创建了一个简单的具有一个隐藏层的神经网络,并按照Andrew Ng在其讲座(Youtube)中所称的方式命名了输入。
因此,以第一层中的神经元a1为例:它将从第0层获取a1和a2的值,以及相应的权重和偏置,这些将在第一层的向量b1和w1中收集。
那么,总和是否通过以下公式计算?z = w1*x + b?这是否适用于所有类型的神经网络,还是仅适用于某一种类型的神经网络?第一层的z1是否也是一个向量?是激活函数使其成为标量吗?
我知道有不同的激活函数来计算最终发送到下一层神经元的标量值,这些值与权重和偏置一起发送。但我对权重和偏置的来源和计算方式感到非常困惑。
我希望我的解释没有太过混乱,因为我自己也感到很困惑。
回答:
操作z1 = w1*x + b仅适用于全连接层。例如,卷积神经网络使用不同的操作。
我认为在符号上有些混淆。第一层中a1的值是一个标量,要得到这个值,你需要对另一个标量z1应用激活函数,z1可以通过z1 = w1*x + b计算。这里,w1不是一个矩阵,而是一个指向神经元a1的权重向量。
然而,这不是通常的计算方式,因为这样做无法利用向量化。一般来说,你希望进行z = W*x + b的计算,其中W是所有权重的矩阵,z是一个向量,然后逐元素应用激活函数,得到该层的激活向量a。