机器学习/深度学习测试题(二)—— 单层线性神经网络求解异或问题

1. 输入样本的处理

听起来似乎是一个比较奇怪的说法,不对输入做任何处理的话,是无法求解异或问题的。这里提供一种对输入进行处理的可行方式:对输入样本做必要的升维处理,其实质是引入非线性分量。

如下图所示:


这里写图片描述

X = [0, 0, 0; 0, 1, 1; 1, 0, 1; 1, 1, 0];
                                        % 行表示样本,包含输入值和目标值
P = [X(:, 1), X(:, 1).^2, X(:, 1).*X(:, 2), X(:, 2).^2, X(:, 2)]';
                                        % 为了保证 matlab 接口的一致性,使其每一列为一个样本;
d = X(:, 3)';

2. 定义单层线性神经网络

lr = maxlinlr(P, 'bias');
                    % 根据 1996 年 Hayjin 证明的 LMS 算法的收敛性,最大学习率与输入样本矩阵的自相关矩阵的最大特征值有关;
net = linearlayer(0, lr);

% 开始训练
net = train(net, P, d);

% 测试
sim(net, P)

% 查看学习到的权值
net.iw{:}
net.b{:}
原文地址:https://www.cnblogs.com/mtcnn/p/9422123.html