我试图通过自己编程卷积神经网络来更好地理解神经网络。
到目前为止,我将通过不使用max-pooling和使用简单的ReLu激活来使其变得非常简单。我知道这种设置的缺点,但重点是不是世界上最好的图像检测器。
现在,我无法理解错误计算的细节,将其传播回来以及它如何与用于计算新权重的激活函数相互作用。
我阅读了这份文件(A Beginner's Guide To Understand CNN),但这并没有让我理解太多。计算错误的公式已经让我感到困惑。
此sum-function没有定义的起点和终点,所以我基本上无法读取它。也许你可以简单地给我一个正确的?
之后,作者假设变量L只是“那个值”(我假设他的意思是E_total?)并给出了如何定义新权重的例子:
其中W是特定图层的权重。
这让我很困惑,因为我总是站在印象中激活功能(在我的情况下是ReLu)在如何计算新的重量方面发挥了作用。此外,这似乎意味着我只是将错误用于所有图层。我错误传播回下一层的错误值是否取决于我在前一个中计算的内容?
也许所有这些都是不完整的,你可以指出我的方向,这对我的情况最有帮助。
提前致谢。
答案 0 :(得分:0)
您不会反向传播错误,而是渐变。激活功能在计算新的重量中起作用,这取决于所述重量是否在所述激活之前或之后,以及它是否连接。如果权重entity["ownerid@odata.bind"] = "/teams(956B410F-0F6E-E711-810E-00155D6FD705)";
位于非线性层w
之后,则渐变f
将不依赖于dL/dw
。但如果f
在w
之前,那么,如果它们已连接,那么f
将取决于dL/dw
。例如,假设f
是完全连接层的权重向量,并假设w
直接跟随此层。然后,
f
至于你的成本函数,它是正确的。很多人用这种非正式的风格来编写这些公式,这样你就能得到这个想法,但是你可以根据自己的张量形状进行调整。顺便说一下,这种MSE功能更适合连续标签空间。您可能希望使用softmax或svm损失进行图像分类(我将回过头来看)。无论如何,正如您为此函数请求了正确的表单,这是一个示例。想象一下,你有一个神经网络可以预测某种矢量场(如表面法线)。假设它需要2d像素dL/dw=(dL/df)*df/dw //notations might change according to the shape
//of the tensors/matrices/vectors you chose, but
//this is just the chain rule
并预测该像素的3d矢量x_i
。现在,在您的训练数据中,v_i
已经有一个真实的3d矢量(即标签),我们称之为x_i
。然后,您的成本函数将是(我在所有数据样本上运行的索引):
y_i
但正如我所说,如果标签形成一个连续的空间(此处为sum_i{(y_i-v_i)^t (y_i-vi)}=sum_i{||y_i-v_i||^2}
),则此成本函数有效。这也称为回归问题。
如果您对(图像)分类感兴趣,这是一个例子。我将用softmax损失解释它,对其他损失的直觉或多或少相似。假设我们有R^3
个类,并想象在您的训练集中,对于每个数据点n
,您有一个标签x_i
,表示正确的类。现在,您的神经网络应该为每个可能的标签生成分数,我们会注意到c_i
。我们将训练样本s_1,..,s_n
的正确类别的分数记为x_i
。现在,如果我们使用softmax函数,直觉就是将分数转换为概率分布,并最大化正确类的概率。也就是说,我们最大化功能
s_{c_i}
其中sum_i { exp(s_{c_i}) / sum_j(exp(s_j))}
在所有培训样本上运行,i
在所有类标签上运行。
最后,我不认为你正在阅读的指南是一个很好的起点。我建议使用this优秀课程(至少是Andrew Karpathy部分)。