machine-learning - 神经网络中的权重初始化

标签 machine-learning keras neural-network initialization

您好,我正在使用 keras 开发神经网络模型。

代码


def base_model():
    # Initialising the ANN
    regressor = Sequential()   
    # Adding the input layer and the first hidden layer
    regressor.add(Dense(units = 4, kernel_initializer = 'he_normal', activation = 'relu', input_dim = 7))   
    # Adding the second hidden layer
    regressor.add(Dense(units = 2, kernel_initializer = 'he_normal', activation = 'relu'))   
    # Adding the output layer
    regressor.add(Dense(units = 1, kernel_initializer = 'he_normal'))
    # Compiling the ANN
    regressor.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'])
    return regressor

我一直在阅读有关使用哪个 kernel_initializer 的信息,并发现了链接 - https://towardsdatascience.com/hyper-parameters-in-action-part-ii-weight-initializers-35aee1a28404

它讨论了 glorot 和 he 初始化。我尝试过使用不同的权重形式,但它们都给出相同的结果。我想了解正确的初始化有多重要?

谢谢

最佳答案

我将向您解释权重初始化的重要性。

假设我们的神经网络有一个包含 1000 个神经元的输入层,并假设我们开始初始化权重,因为它们呈均值 0 和方差 1 的正态分布 ( )。

在第二层,我们假设只有 500 个第一层神经元被激活,而其他 500 个神经元则没有。

第二层 z 的神经元输入将是:

所以,它甚至会服从正态分布但有差异 .

这意味着它的值将是 |z| >> 1 或|z| << 1,因此神经元将饱和。 网络学习速度会很慢。

解决方案是将权重初始化为 哪里是第一层输入的数量。这样z将是因此扩散器较少,因此神经元不太容易饱和。

这个技巧可以作为一个开始,但在深度神经网络中,由于隐藏多层的存在,权重初始化应该在每一层完成。一种方法可能正在使用 batch normalization

除此之外,从您的代码中我可以看到您选择了 MSE 作为成本函数,因此它是一个二次成本函数。我不知道你的问题是否是分类问题,但如果是这种情况,我建议你使用交叉熵函数作为成本函数来提高网络的学习率。

关于machine-learning - 神经网络中的权重初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58336299/

相关文章:

python - 图像中的不相关信息对CNN的学习过程有多大影响?

R神经网络在时间序列的stepmax内不收敛

python - 在 train_test_split 中使用 'stratify' 没有什么区别。它是干什么用的?

python - Tensorflow flatten vs numpy flatten 函数对机器学习训练的影响

python - comet (comet-ml) 无法与 Keras 一起运行

python - Keras 在第一个 epoch 结束时显示形状错误

python - Keras的多重输出中val_loss的计算

c++ - tensorflow C++ 批量推理

azure - 使用 Azure 机器学习的时间/预测系列

machine-learning - 智能代码完成?有没有AI可以通过学习写代码?