实现异或(XOR)门近似的神经网络全输入输出0.5、损失饱和问题求助
问题代码排查结果
存在的核心问题
- 权重初始化错误:你在初始化权重时将随机生成的权重乘以了
0.001,导致初始权重极小。对于ReLU激活层来说,极小的输入会让大量神经元输出为0,反向传播时梯度直接被截断,网络无法有效更新参数,一直处于随机猜测状态(输出0.5对应交叉熵损失约0.69,正好是二分类随机猜测的损失值)。 - 超参数设置不合理:当前0.01的学习率过小,1000轮的训练轮次也不足以让小权重网络收敛。
修复方案
你只需要修改以下两处即可正常收敛:
- 调整权重初始化逻辑,去掉
*0.001,可以直接使用标准正态分布初始化,也可以用适配ReLU的He初始化:
# 原代码 paramters['W' + str(i)] = np.random.randn(layer_dims[i], layer_dims[i-1]) * 0.001 # 修改为(标准正态初始化即可满足XOR训练需求) paramters['W' + str(i)] = np.random.randn(layer_dims[i], layer_dims[i-1]) # 也可以用He初始化效果更好 # paramters['W' + str(i)] = np.random.randn(layer_dims[i], layer_dims[i-1]) * np.sqrt(2 / layer_dims[i-1])
- 调大学习率、增加训练轮次:
# 原参数 epochs = 1000 learning_rate = 0.01 # 修改为 epochs = 10000 learning_rate = 0.1
修改后运行网络,损失会逐步下降到接近0,最终输出会接近[0, 1, 1, 0],符合XOR门的预期结果。
内容的提问来源于stack exchange,提问作者SHAN002
相关产品推荐
相关产品推荐

