You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow中相同权重初始化后神经元训练权重不同的原因咨询

问题:全零初始化Dense层后,训练权重为何出现差异?

我之前从技术资料里了解到,如果神经网络用相同常量初始化权重,每个神经元会学到相同的权重。但在TensorFlow中实现时序任务时,把Dense层的权重和偏置都设为全零初始化,训练后却发现每个神经元的权重并不相同。

关键代码片段:

multi_linear_model = tf.keras.Sequential([
    tf.keras.layers.Lambda(lambda x: x[:,-1:,:]),
    tf.keras.layers.Dense(OUT_STEPS*num_features,kernel_initializer=tf.initializers.zeros(),bias_initializer=tf.initializers.zeros()),
    tf.keras.layers.Reshape([OUT_STEPS, num_features])
])

场景说明:处理时序数据,Lambda层提取最后一个时间步,Dense层基于该时间步的特征计算输出。设置全零初始化后,训练后Dense层的权重出现明显差异。

完整测试代码(依赖教程中的WindowGenerator、compile_and_fit等组件):

OUT_STEPS = 24
multi_window = WindowGenerator(input_width=24,
                               label_width=OUT_STEPS,
                               shift=OUT_STEPS)
multi_linear_model = tf.keras.Sequential([
    # 提取最后一个时间步,形状从[batch, time, features]转为[batch,1,features]
    tf.keras.layers.Lambda(lambda x: x[:,-1:,:]),
    # 输出形状转为[batch, out_steps, features]
    tf.keras.layers.Dense(OUT_STEPS*num_features,kernel_initializer=tf.initializers.zeros(),bias_initializer=tf.initializers.zeros()),
    tf.keras.layers.Reshape([OUT_STEPS, num_features])
])

# 初始化权重
multi_linear_model(tf.random.normal((1,24,19)))

# 提取并打印训练前的权重
weights = multi_linear_model.layers[1].weights[0]
print(weights[0,:10])
print(weights[1,:10])
print(tf.reduce_sum(weights[0])) # 求和为0,确认初始全零
print(tf.reduce_sum(weights[1]))

# 训练模型
history = compile_and_fit(multi_linear_model, multi_window)

# 打印训练后的权重
print(weights[0,:10])
print(weights[1,:10])
print(tf.reduce_sum(weights[0]))
print(tf.reduce_sum(weights[1]))

疑问:该现象的原因是什么?是否属于正常情况?是否是TensorFlow的特性?


解答:

  • 核心原因:实际训练场景不满足“权重对称更新”的极端前提
    你看到的“相同初始化导致相同权重”的结论,只在输入完全对称、损失函数完全对称、无任何随机训练因素的理想情况下成立。而你的时序任务完全不满足这些条件:

    1. 输入与标签的不对称性:每个输出特征(对应num_features的不同维度)的标签分布、与输入特征的关联都不一样,反向传播时每个神经元对应的损失梯度存在差异,权重更新的方向和幅度自然不同。
    2. 批量训练的随机性:训练时用批量数据(batch),每个batch的样本分布有差异,计算出的梯度也会波动,导致权重更新出现分化。
    3. 优化器的自适应特性:如果用的是Adam这类常用优化器,它会为每个权重维护自适应学习率和动量参数,即使初始梯度有微小差异,也会被放大,进一步拉开权重的差距。
  • 这是正常现象,和TensorFlow无关
    这种权重分化是神经网络训练的普遍行为,换其他框架也会出现相同情况。全零初始化本身只是初始状态,训练过程中梯度的不对称性会快速打破这种对称,让每个神经元学到对应任务的专属权重——这正是模型能学习到有效特征的前提,如果权重一直保持相同,模型的表达能力会被严重限制。

内容的提问来源于stack exchange,提问作者hamza mohiuddin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:49:54