【MATLAB深度学习】单层神经网络

单层神经网络

  在神经网络中,当隐藏节点具有线性激活函数时,隐含层将无效化。监督学习的训练,正是一个修正模型以减少模型输出与标准输出之间的误差的过程。神经网络以权重形式存储信息。

  根据给定信息修改权重的系统方法被称为学习规则。

1.delta规则

  也被称为Adaline规则或者Widrow-Hoff规则,是一种梯度下降的数值方法。

  这一规则的基本思想是,权重依据输出节点误差和输入节点值成比例地调整。

2.更新权重的策略

  SGD(Stochastic Gradient Descent 随机梯度下降):依据每个训练数据计算误差,并立即调整权重。

  Batch:使用训练数据的所有误差计算各个权重更新值,然后使用权重更新的平均值调整权重。

  Mini Batch:SGD方法和Batch方法的混合。它选择训练数据集的一部分,并将它们用于Batch方法训练,即用平均权重更新来训练网络。若数据点的数量选择得当,Mini Batch可以兼顾SGD的速度和Batch方法的稳定性。

3.delta规则的SGD方法实现(MATLAB)

  示例如下图所示,激活函数为Sigmoid函数,训练数据集为{([0,0,1],0),([0,1,1],0),([1,0,1],1),([1,1,1],1)}。

  先定义Sigmoid函数:

function y = Sigmoid(x)
  y = 1 / (1 + exp(-x));
end

  定义SGD方法:

function W = DeltaSGD(W, X, D)
% 以神经网络的权重和训练数据作为输入,返回训练后的权重
% W是传递权重的参数,X和D分别为传递训练数据的输入和标准输出的参数
  alpha = 0.9;

  N = 4;
  for k = 1:N
    x = X(k, :)‘;
    d = D(k);

    v = W*x;
    y = Sigmoid(v);

    e     = d - y;
    delta = y*(1-y)*e;

    dW = alpha*delta*x;     % delta rule    

    W(1) = W(1) + dW(1);
    W(2) = W(2) + dW(2);
    W(3) = W(3) + dW(3);
  end
end

  测试一下效果:

clear all

X = [ 0 0 1;
      0 1 1;
      1 0 1;
      1 1 1;
    ];

D = [ 0
      0
      1
      1
    ];

W = 2*rand(1, 3) - 1;

for epoch = 1:10000           % train
  W = DeltaSGD(W, X, D);
end

N = 4;                        % inference
for k = 1:N
  x = X(k, :)‘;
  v = W*x;
  y = Sigmoid(v)
end

  得到结果为 0.0102 ,0.0083 ,0.9932 ,0.9917 。

4.delta规则的Batch实现(MATLAB)

  定义Batch函数:

function W = DeltaBatch(W, X, D)
  alpha = 0.9;

  dWsum = zeros(3, 1);

  N = 4;
  for k = 1:N
    x = X(k, :)‘;
    d = D(k);

    v = W*x;
    y = Sigmoid(v);

    e     = d - y;
    delta = y*(1-y)*e;

    dW = alpha*delta*x;

    dWsum = dWsum + dW;
  end
  dWavg = dWsum / N;

  W(1) = W(1) + dWavg(1);
  W(2) = W(2) + dWavg(2);
  W(3) = W(3) + dWavg(3);
end

  Batch方法的平均性特性使得训练数据的敏感性降低。速度比SGD慢。

  测试该函数:

clear all

X = [ 0 0 1;
      0 1 1;
      1 0 1;
      1 1 1;
    ];

D = [ 0
      0
      1
      1
    ];

W = 2*rand(1, 3) - 1;

for epoch = 1:40000
  W = DeltaBatch(W, X, D);
end

N = 4;
for k = 1:N
  x = X(k, :)‘;
  v = W*x;
  y = Sigmoid(v)
end

  输出的结果为 0.0102,0.0083,0.9932,0.9917。

5.SGD和Batch的比较

  比较两种方法的平均误差。将训练数据输入到神经网络中,并计算出均方差(E1,E2)

clear all

X = [ 0 0 1;
      0 1 1;
      1 0 1;
      1 1 1;
    ];

D = [ 0
      0
      1
      1
    ];

E1 = zeros(1000, 1);
E2 = zeros(1000, 1);

W1 = 2*rand(1, 3) - 1;
W2 = W1;

for epoch = 1:1000           % train
  W1 = DeltaSGD(W1, X, D);
  W2 = DeltaBatch(W2, X, D);

  es1 = 0;
  es2 = 0;
  N   = 4;
  for k = 1:N
    x = X(k, :)‘;
    d = D(k);

    v1  = W1*x;
    y1  = Sigmoid(v1);
    es1 = es1 + (d - y1)^2;

    v2  = W2*x;
    y2  = Sigmoid(v2);
    es2 = es2 + (d - y2)^2;
  end
  E1(epoch) = es1 / N;
  E2(epoch) = es2 / N;
end

plot(E1, ‘r‘)
hold on
plot(E2, ‘b:‘)
xlabel(‘Epoch‘)
ylabel(‘Average of Training error‘)
legend(‘SGD‘, ‘Batch‘)

  结果如下:

6.单层神经网络的局限性

  我们知道,单层神经网络无法拟合异或。下面测试一下,输入改成异或数据,DeltaXOR与DeltaSGD代码一样。

clear all

X = [ 0 0 1;
      0 1 1;
      1 0 1;
      1 1 1;
    ];

D = [ 0
      1
      1
      0
    ];

W = 2*rand(1, 3) - 1;

for epoch = 1:40000           % train
  W = DeltaXOR(W, X, D);
end

N = 4;                        % inference
for k = 1:N
  x = X(k, :)‘;
  v = W*x;
  y = Sigmoid(v)
end

  结果为 0.5297,0.5000,0.4703,0.4409。这个结果明显存在问题。

  单层神经网络只能解决线性可分问题,这是因为单层神经网络是一种将输入数据空间线性划分的模型。为克服单层神经网络的这种局限,出现了多层神经网络。

原文地址:https://www.cnblogs.com/Negan-ZW/p/9610131.html

时间: 2024-10-10 13:20:16

【MATLAB深度学习】单层神经网络的相关文章

【MATLAB深度学习】神经网络与分类问题

神经网络与分类问题 1.多元分类 根据分类的数量确定输出节点的数量是最可能得到良好效果的方法.输出的类别表示可以使用one-hot编码.通常情况下,二分类使用Sigmoid函数,多元分类使用Softmax函数.Softmax函数不仅考虑输入的加权和,而且考虑其他输出节点的输出.正确地诠释神经网络多元分类的输出结果需要考虑所有节点输出的相对大小.Softmax函数保证输出值之和为1.其也适用于二分类. 多元分类程序示例,输入数据为5个5*5矩阵,分别表示1,2,3,4,5.网络结构为输入节点25个

深度学习——人工神经网络再掀研究热潮

深度学习——人工神经网络再掀研究热潮 胡晓林 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的“前世今生”,并简单展望一下它的未来. 第一个神经元模型是1943年McCulloch和Pitts提出的,称为threshold logic,它可以实现一些

(转)Matlab深度学习工具试玩手册一:基本操作与迁移学习

原贴博客:https://blog.csdn.net/zfrycw/article/details/80633979 目录 前言 一.利用现成网络进行分类 二.构建简单的分类网络 三.迁移学习 前言 Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG系列)进行迁移学习.作为一个初学者,我粗浅地认为,对于深度学习,我们实际的操作步骤可以分三大块:数据集(包括载入图片,制作训练集验证集,送入网络前

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章D

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度,基础方面的非常多,随便看看就可以,只是很多没有把细节说得清楚和明白: 能把细节说清

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.3 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 3实例 3.1 测试数据 按照上例数据,或者新建图片识别数据. 3.2 CNN实例 //2 测试数据 Logger.getRootLogger.setLevel(Level.WARN) valdata_path="/use

深度学习之神经网络与支持向量机

深度学习之神经网络与支持向量机 引言:神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法.可以认为神经网络与支持向量机都源自于感知机(Perceptron).感知机是1958年由Rosenblatt发明的线性分类模型.感知机对线性分类有效,但现实中的分类问题通常是非线性的. 神经网络与支持向量机(包含核方法)都是非线性分类模型.1986年,Rummelhart与McClelland发明了神经网络的学习算法Back P

《卷积神经网络的Python实现》PDF代码+《解析深度学习卷积神经网络原理与视觉实践》PDF分析

CNN正在革新几个应用领域,如视觉识别系统.自动驾驶汽车.医学发现.创新电子商务等.需要在专业项目或个人方案中利用复杂的图像和视频数据集来实现先进.有效和高效的CNN模型. 深度卷积网络DCNN是目前十分流行的深度神经网络架构,它的构造清晰直观,效果引人入胜,在图像.视频.语音.语言领域都有广泛应用. 深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的结果. <卷积神经网络的Python实现>作为深度学习领域

深度学习和神经网络的区别是什么

http://zhidao.baidu.com/link?url=_Y4TSDJGC66-Prh3sCKxmT6S3HbNBlMBpLfniFdBjEcK7eFBqbtNYNxy9e5hUY3u3MiDe8QEglEHcDb47brFuLGXWIXjF-v4BYWxvdiHjvS 这两个概念实际上是互相交叉的,例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称D