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的特性?
解答:
核心原因:实际训练场景不满足“权重对称更新”的极端前提
你看到的“相同初始化导致相同权重”的结论,只在输入完全对称、损失函数完全对称、无任何随机训练因素的理想情况下成立。而你的时序任务完全不满足这些条件:- 输入与标签的不对称性:每个输出特征(对应
num_features的不同维度)的标签分布、与输入特征的关联都不一样,反向传播时每个神经元对应的损失梯度存在差异,权重更新的方向和幅度自然不同。 - 批量训练的随机性:训练时用批量数据(batch),每个batch的样本分布有差异,计算出的梯度也会波动,导致权重更新出现分化。
- 优化器的自适应特性:如果用的是Adam这类常用优化器,它会为每个权重维护自适应学习率和动量参数,即使初始梯度有微小差异,也会被放大,进一步拉开权重的差距。
- 输入与标签的不对称性:每个输出特征(对应
这是正常现象,和TensorFlow无关
这种权重分化是神经网络训练的普遍行为,换其他框架也会出现相同情况。全零初始化本身只是初始状态,训练过程中梯度的不对称性会快速打破这种对称,让每个神经元学到对应任务的专属权重——这正是模型能学习到有效特征的前提,如果权重一直保持相同,模型的表达能力会被严重限制。
内容的提问来源于stack exchange,提问作者hamza mohiuddin
相关产品推荐
相关产品推荐

