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

MATLAB实现反向传播算法的MLP网络XOR分类时损失曲线异常排查

MATLAB实现多层感知器(MLP)训练XOR数据集损失震荡问题

实现目标

我尝试在MATLAB中编写多层感知器(Multi-Layer Perceptron, MLP)网络,以便深入理解反向传播所需的微积分原理。本次实现的目标是向网络输入XOR数据集(右上、左下象限数据为类别1,其余象限为类别0),完成模型训练后在新数据上测试。

问题描述

目前遇到的问题是训练过程得到的损失曲线表现十分异常:
损失曲线
损失值在极低误差和极高误差区间来回震荡,最终收敛到一个效果较差的中间误差值。
希望各位帮忙检查我在MATLAB语法下实现的链式求导部分是否存在错误。本次实现的MLP结构为:输入层2个神经元、单隐藏层2个神经元、输出层1个神经元。

对应实现代码

% 生成XOR数据集
x1pos = rand(500,1);
x1neg = -rand(500,1);
x1 = [x1pos; x1neg];
p = randperm(length(x1));
x1 = x1(p);
x2pos = rand(500,1);
x2neg = -rand(500,1);
x2 = [x1pos; x1neg];
p = randperm(length(x2));
x2 = x2(p);

Data = [x1 x2];
TrainingData = Data(1:800,:);
TestData = Data(801:length(Data),:);

T = gt((Data(:,1).*Data(:,2)),0); % 生成数据类别标签存入矩阵T

% 神经网络训练逻辑
W1 = rand(2,2); % 初始化随机权重
W2 = rand(1,2); % 初始化随机权重

B1 = rand(2,1); % 初始化随机偏置
B2 = rand(1,1); % 初始化随机偏置

n = 0.05; % 设置学习率

for i = 1:800
    % 前向传播
    x1 = Data(i,1);
    x2 = Data(i,2);
    X = [x1; x2];
    A1 = W1*X + B1;
    H1 = sigmoid(A1);
    A2 = W2*H1 + B2;
    Y = sigmoid(A2);
    
    % 计算损失
    Loss = (Y-T(i))*(Y-T(i));
    scatter(i, Loss)
    hold on;
    
    % 反向传播
    dEdY = 2*(Y-T(i)); % 损失对输出的偏导
    dYdA2 = Y*(1-Y); % 输出对输出层激活值的偏导
    dA2dH1 = W2.'; % 输出层激活值对隐藏层输出的偏导
    dH1dA1 = H1.*(1-H1); % 隐藏层输出对隐藏层激活值的偏导
    
    % 链式求导
    dEdW2 = dEdY.*dYdA2.*W2.';
    dEdW1 = dEdY.*dYdA2.*dA2dH1.*dH1dA1.*W1.';
    dEdB2 = dEdY.*dYdA2;
    dEdB1 = dEdY.*dYdA2.*dA2dH1.*dH1dA1;
    
    % 更新权重
    W2 = (W2.' - n.*dEdW2).';
    W1 = (W1.' - n.*dEdW1).';
    
    % 更新偏置
    B2 = B2 - n.*dEdB2;
    B1 = B1 - n.*dEdB1;
end

% 测试逻辑
for i = 801:1000
    x1 = Data(i,1);
    x2 = Data(i,2);
    X = [x1; x2];
    A1 = W1*X + B1;
    H1 = sigmoid(A1);
    A2 = W2*H1 + B2;
    Y = sigmoid(A2);
end

function o = sigmoid(input)
    o = [];
    for i = 1:length(input)
        o = [o; 1/(1+exp(-input(i)))];
    end
end

内容的提问来源于stack exchange,提问作者Harry Stout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:07