神经网络的异或问题,成本函数

数据挖掘 神经网络 深度学习
2022-02-28 07:11:02

我在理解神经网络中的成本函数时遇到问题。我读过很多书和博客文章,但它们都描述了神经网络中的一点是最小化成本函数(如平方和误差):

在此处输入图像描述

我试图查看用于解决多层神经网络和反向传播问题的代码。我的问题是:在代码中哪里可以找到成本函数?如何绘制误差面?

import numpy as np
X_XOR = np.array([[0,0,1], [0,1,1], [1,0,1],[1,1,1]])
y_truth = np.array([[0],[1],[1],[0]])

def sigmoid(x):
    return 1 / (1 + np.exp(-x))
def sigmoid_der(output):
    return output * (1 - output)

np.random.seed(1)
syn_0 = 2*np.random.random((3,4)) - 1
syn_1 = 2*np.random.random((4,1)) - 1

for i in range(60000):
    layer_1 = sigmoid(X_XOR.dot(syn_0))
    layer_2 = sigmoid(layer_1.dot(syn_1))
    error = 0.5 * ((layer_2 - y_truth) ** 2)
    layer_2_delta = error * sigmoid_der(layer_2)
    layer_1_error = layer_2_delta.dot(syn_1.T)
    layer_1_delta = layer_1_error * sigmoid_der(layer_1)
    syn_1 -= layer_1.T.dot(layer_2_delta)
    syn_0 -= X_XOR.T.dot(layer_1_delta)
    if i % 10000 == 1:
        print(layer_2)

print(layer_2)
1个回答

成本函数可以在delta rule中找到,这意味着您计算 delta 的方式。这个增量只不过是你的误差函数在权重之后的导数Ewij. 因此,如果您只是对成本的编码位置感兴趣,这就是您正在寻找的答案。

另一方面,如果您想知道为什么这个公式有效,我建议您阅读wikipedia 上的推导它背后的数学非常简单,您只需计算每一层的导数并将该导数传播到各个层。顺便说一句,这就是反向传播得名的方式。