无激活函数线性神经网络训练梯度下降发散问题咨询
结论
线性无激活函数的神经网络本身可以实现恒等映射,架构没有问题,权重和误差爆炸完全由代码实现错误导致。
核心错误点
- 梯度更新的矩阵顺序错误
你使用的更新规则w=w+n*error'*X不符合MSE损失的梯度下降逻辑。对于输入矩阵X维度为m*3、误差矩阵error维度为m*3的场景,正确的梯度相关矩阵应为X' * error(3行m列 × m行3列 = 3行3列,和权重维度匹配),你写的error' * X得到的是完全无关的更新量,直接导致权重更新方向错误,数值快速爆炸。 - 未定义目标矩阵
D
你的任务是输入输出恒等映射,目标矩阵D应等于输入X,你提供的代码中没有对D的赋值逻辑,若D是未初始化的随机值或其他错误数值,也会加剧训练偏离。 - 可选优化:学习率和迭代次数调整
你设置的初始学习率0.01偏大,迭代次数100偏少,可适当调小学习率到0.001级别,增加迭代次数到1000次提升收敛效果。
数据集的额外说明
你生成的数据集X中z是x和y的线性组合,因此X的秩只有2,不存在唯一的3×3满秩权重矩阵实现完美恒等映射,最终收敛后会存在固定的拟合误差,但该问题不会导致权重爆炸。
修复后代码示例
数据生成
m=50; x=rand(m,1); y=rand(m,1); z=2.*x + 3.*y + 1; X=[x,y,z]; D = X; % 显式定义恒等映射的目标输出
训练代码
w=0.001*rand(3,3); lr = 0.001; % 调小学习率避免震荡 for i=1:1000 Y = X * w; error = D - Y; w = w + lr * X' * error; % 修正更新规则 end
内容的提问来源于stack exchange,提问作者amir1122
相关产品推荐
相关产品推荐

