更新:更好地解决问题.
我试图以XOR神经网络为例来理解反向传播算法.对于这种情况,有2个输入神经元+ 1个偏置,隐藏层中的2个神经元+ 1个偏置,以及1个输出神经元.
A B A XOR B
1 1 -1
1 -1 1
-1 1 1
-1 -1 -1
Run Code Online (Sandbox Code Playgroud)

我正在使用随机反向传播.
在阅读了一点之后我发现输出单元的错误传播到隐藏层...最初这是令人困惑的,因为当你到达神经网络的输入层时,每个神经元都会得到一个错误调整来自隐藏层中的两个神经元.特别是,首先很难掌握错误的分配方式.
步骤1计算每个输入实例的输出.
步骤2计算输出神经元(在我们的例子中只有一个)和目标值(s)之间的误差:
步骤2 http://pandamatak.com/people/anand/771/html/img342.gif
步骤3我们使用步骤2中的错误计算每个隐藏单元的错误h:
步骤3 http://pandamatak.com/people/anand/771/html/img343.gif
"权重kh"是隐藏单元h和输出单元k之间的权重,这是令人困惑的,因为输入单元没有与输出单元相关联的直接权重.在盯着公式几个小时后,我开始思考求和意味着什么,并且我开始得出结论,连接到隐藏层神经元的每个输入神经元的权重乘以输出误差并总结.这是一个合乎逻辑的结论,但公式似乎有点令人困惑,因为它清楚地说明了'权重kh'(在输出层k和隐藏层h之间).
我在这里正确理解了一切吗?任何人都可以证实吗?
什么是输入层的O(h)?我的理解是每个输入节点有两个输出:一个进入隐藏层的第一个节点,另一个进入第二个节点隐藏层.应该将两个输出中的哪一个插入O(h)*(1 - O(h))公式的一部分?
第3步http://pandamatak.com/people/anand/771/html/img343.gif
computer-science machine-learning backpropagation neural-network
尽管上述两种方法都提供了更好的分数以更好地接近预测,但仍然优选交叉熵.是在每种情况下还是有一些特殊情况我们更喜欢交叉熵而不是MSE?
machine-learning backpropagation neural-network mean-square-error cross-entropy
反向传播和前馈神经网络有什么区别?
通过谷歌搜索和阅读,我发现在前馈中只有前向方向,但在反向传播中,一旦我们需要进行前向传播然后反向传播.我提到了这个链接
classification machine-learning backpropagation neural-network
我们正在编写一个小型ANN,它应该根据10个输入变量将7000个产品分类为7个类.
为了做到这一点,我们必须使用k折交叉验证,但我们有点困惑.
我们从演示幻灯片中摘录了这些内容:
什么是验证和测试集?
根据我们的理解,我们通过3个训练集并调整权重(单个纪元).然后我们如何处理验证?因为根据我的理解,测试集用于获取网络的错误.
接下来发生的事情也让我感到困惑.交叉是什么时候发生的?
如果要问的话不是太多,那么我们将不胜感激
你能告诉我随机梯度下降(SGD)和反向传播之间的区别吗?
artificial-intelligence machine-learning backpropagation gradient-descent difference
所以我的问题是,如果我有类似的东西:
model = Model(inputs = input, outputs = [y1,y2])
l1 = 0.5
l2 = 0.3
model.compile(loss = [loss1,loss2], loss_weights = [l1,l2], ...)
Run Code Online (Sandbox Code Playgroud)
为了获得最终损失,keras做了什么损失?是这样的:
final_loss = l1*loss1 + l2*loss2
Run Code Online (Sandbox Code Playgroud)
此外,在培训期间意味着什么?loss2仅用于更新y2来自的层的权重吗?或者它是否用于所有模型的图层?
我很困惑
我正在尝试用RELU实现神经网络.
输入层 - > 1隐藏层 - > relu - >输出层 - > softmax层
以上是我的神经网络的架构.我很担心这个relu的反向传播.对于RELU的导数,如果x <= 0,则输出为0.如果x> 0,则输出为1.因此,当您计算梯度时,这是否意味着如果x <= 0,我会消除梯度.
有人可以一步一步地解释我的神经网络架构的反向传播吗?
我正在阅读神经转移pytorch教程,并对使用retain_variable(弃用,现在称为retain_graph)感到困惑.代码示例显示:
class ContentLoss(nn.Module):
def __init__(self, target, weight):
super(ContentLoss, self).__init__()
self.target = target.detach() * weight
self.weight = weight
self.criterion = nn.MSELoss()
def forward(self, input):
self.loss = self.criterion(input * self.weight, self.target)
self.output = input
return self.output
def backward(self, retain_variables=True):
#Why is retain_variables True??
self.loss.backward(retain_variables=retain_variables)
return self.loss
Run Code Online (Sandbox Code Playgroud)
从文档中
retain_graph(bool,optional) - 如果为False,将释放用于计算grad的图形.请注意,几乎在所有情况下都不需要将此选项设置为True,并且通常可以以更有效的方式解决此问题.默认为create_graph的值.
因此,通过设置retain_graph= True,我们不会释放在向后传递上为图形分配的内存.保持这种记忆的优势是什么,我们为什么需要它?
automatic-differentiation backpropagation neural-network conv-neural-network pytorch
通过将底部和顶部blob设置为相同,我们可以告诉Caffe进行"就地"计算以保持内存消耗.
目前,我知道我可以就地安全地使用"BatchNorm","Scale"并且"ReLU"层(请让我知道,如果我错了).虽然它似乎对其他层有一些问题(这个问题似乎是一个例子).
何时在Caffe中使用就地层?
它如何与反向传播一起工作?
machine-learning backpropagation neural-network deep-learning caffe
在深入研究神经网络的主题以及如何有效地训练神经网络时,我遇到了使用非常简单的激活函数的方法,例如重新设计的线性单元(ReLU),而不是经典的平滑sigmoids.ReLU函数在原点是不可微分的,因此根据我的理解,反向传播算法(BPA)不适合用ReLU训练神经网络,因为多变量微积分的链规则仅指平滑函数.但是,没有关于使用我读过的ReLU的论文解决了这个问题.ReLUs似乎非常有效,似乎几乎无处不在,但不会引起任何意外行为.有人可以向我解释为什么ReLUs可以通过反向传播算法进行训练吗?
machine-learning backpropagation neural-network deep-learning