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{:}