误差反向传播 - 神经网络

     2023-03-13     168

关键词:

【中文标题】误差反向传播 - 神经网络【英文标题】:Error Backpropagation - Neural network 【发布时间】:2013-12-23 18:01:33 【问题描述】:

我正在尝试为神经网络的错误反向传播编写代码,但我的代码需要很长时间才能执行。我知道神经网络的训练需要很长时间,但单次迭代也需要很长时间。

多类分类问题!

Total number of training set = 19978
Number of inputs = 513
Number of hidden units = 345
Number of classes = 10

下面是我的完整代码:

X=horzcat(ones(19978,1),inputMatrix);         %Adding bias
M=floor(0.66*(513+10));         %Taking two-third of imput+output

Wji=rand(513,M);
aj=X*Wji;

zj=tanh(aj);                      %Hidden Layer output

Wkj=rand(M,10);
ak=zj*Wkj; 

akTranspose = ak';
ykTranspose=softmax(akTranspose);      %For multi-class classification
yk=ykTranspose';                       %Final output

error=0;

%Initializing target variables
t = zeros(19978,10);
t(1:2000,1)=1;
t(2001:4000,2)=1;
t(4001:6000,3)=1;
t(6001:8000,4)=1;
t(8001:10000,5)=1;
t(10001:12000,6)=1;
t(12001:14000,7)=1;
t(14001:16000,8)=1;
t(16001:18000,9)=1;
t(18001:19778,10)=1;

errorArray=zeros(100000,1); %Stroing error values to keep track of error iteration 
errorDiff=zeros(100000,1);
for nIterations=1:5
    errorOld=error;

    aj=X*Wji;                %Forward propagating in each iteration
    zj=tanh(aj);

    ak=zj*Wkj;

    akTranspose = ak';
    ykTranspose=softmax(akTranspose);
    yk=ykTranspose';
    error=0;
    %Calculating error
    for n=1:19978                                      %for 19978 training samples
        for k=1:10                                      %for 10 classes
            error = error + t(n,k)*log(yk(n,k));         %using cross entropy function  
        end
    end
    error=-error;

    Ediff = error-errorOld;

    errorArray(nIterations,1)=error;     
    errorDiff(nIterations,1)=Ediff;

    %Calculating dervative of error wrt weights wji
    derEWji=zeros(513,345);
    derEWkj=zeros(345,10);

    for i=1:513
        for j=1:M;
            derErrorTemp=0;
            for k=1:10
                for n=1:19978
                    derErrorTemp=derErrorTemp+Wkj(j,k)*(yk(n,k)-t(n,k));
                    Calculating derivative of E wrt Wkj%
                    derEWkj(j,k) = derEWkj(j,k)+(yk(n,k)-t(n,k))*zj(n,j);
                end
            end
            for n=1:19978
                Calculating derivative of E wrt Wji
                derEWji(i,j) = derEWji(i,j)+(1-(zj(n,j)*zj(n,j)))*derErrorTemp;
            end
        end
    end


    eta = 0.0001;                    %learning rate

    Wji = Wji - eta.*derEWji;          %updating weights
    Wkj = Wkj - eta.*derEWkj;
end

【问题讨论】:

您是否尝试使用调试分析器查看哪个命令占用了大部分时间? --> ***.com/questions/14381978/… 【参考方案1】:

即使在JIT 的帮助下,Matlab 中的 for-loop 也非常耗时。尝试通过矢量化它们来修改您的代码,而不是将它们组织成 3 循环甚至 4 循环。例如,

for n=1:19978                                      %for 19978 training samples
        for k=1:10                                      %for 10 classes
            error = error + t(n,k)*log(yk(n,k));         %using cross entropy function  
        end
end

可以改为:

error = sum(sum(t.*yk)); % t and yk are both n*k arrays that you construct

您可以尝试对其余代码执行类似的工作。针对不同情况对数组使用点积或乘法运算。

【讨论】:

反向传播 - 误差导数

...间】:2016-05-0902:21:10【问题描述】:我正在学习用于训练神经网络的反向传播算法。这有点道理,但还有一部分我不明白。据我了解,误差导数是针对网络中的所有权重计算的。这会导致误差梯度,其维数是网络中的权重数。然... 查看详情

cs231n误差反向传播

...向传播过程及其精妙之处,对于理解、实现、设计和调试神经网络非常关键。反向求导的核心问题是:给定函数$f(x)$ ,其中$x$是输入数据的向量,需要计算函数$f$关于$x$的梯度,也就是$ ablaf(x)$。之所以关注上述问题,是因... 查看详情

编写c语言版本的卷积神经网络cnn之三:cnn的误差反向传播过程

...sp;       上一节我们介绍了卷积神经网络的前向传播过程,这一节我们重点介绍反向传播过程,反向传播过程反映神经网络的学习训练过程。误差反向传播方法是神经网络学习的基础,网络上已经有许多... 查看详情

神经网络入门——15反向传播(代码片段)

反向传播如何让多层神经网络学习呢?我们已了解了使用梯度下降来更新权重,反向传播算法则是它的一个延伸。以一个两层神经网络为例,可以使用链式法则计算输入层-隐藏层间权重的误差。要使用梯度下降法更新隐藏层的... 查看详情

具有交叉熵误差的整流线性单元激活的反向传播

...4-08-1214:59:18【问题描述】:我正在尝试使用反向传播实现神经网络的梯度计算。我无法使用交叉熵误差和校正线性单元(ReLU)作为激活。我设法让我的实现使用sigmoid、tanh和ReLU激活函数处理平方误差。正确 查看详情

一文搞懂反向传播算法

...gation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去。前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵。这两句话很好的形容了信息的流动方向,权重得以在信息... 查看详情

LSTM RNN 反向传播

...反向传播,我理解它是一种逆序方法,用于计算用于调整神经网络权重的假设和输出的误差。我的问题是LSTM反向传播与常规神经网络有何不同。我不确定如何找到每个门的初始误差。您是否对每个门使用第一个错误(由假 查看详情

反向传播

...最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。基本的神经网络结构:前向传播也... 查看详情

反向传播梯度求解推导

...)为主导的反向传播(BackPropagation)运动,目的在于优化神经网络中的参数(权重,偏置)。是第层的第个神经元连接第层的第个神经元的权重表示第层的第个节点的偏置,所有连接到该节点的链接都公用该偏置表示第层第个节... 查看详情

链式法则玩转反向传播

神经网络的反向传播到底是个什么样的过程?今天就用链式求导揭开这个黑盒子。这对于理解和设计神经网络很有帮助。 我们使用一个简单的逻辑回归的例子这里绿色是前向计算,褐红色是反向传播。0.73是最终输出,1是误... 查看详情

从nn到rnn再到lstm:神经网络nn前馈和误差反向传播

本文将简要介绍神经网络(NeuralNetwork,NN)的相关公式及推导。转载请注明出处:http://blog.csdn.net/u011414416/article/details/46694877以下内容主要引自AlexGraves写的SupervisedSequenceLabellingwithRecurrentNeuralNetw 查看详情

反向传播算法的算法简介

反向传播算法(backpropagation)是目前用来训练人工神经网络(artificialneuralnetwork,ann)的最常用且最有效的算法。其主要思想是:(1)将训练集数据输入到ann的输入层,经过隐藏层,最后达到输出层并输出结果,这是ann的前向传... 查看详情

bp神经网络的神经网络

参考技术A在人工神经网络发展历史中,很长一段时间里没有找到隐层的连接权值调整问题的有效算法。直到误差反向传播算法(BP算法)的提出,成功地解决了求解非线性连续函数的多层前馈神经网络权重调整问题。BP(BackPropagat... 查看详情

matlab中bp神经网络的训练算法具体是怎么样的

BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反... 查看详情

反向传播和梯度下降的简短定义

...元网络的权重,使用了反向传播算法。这是一个减少模型误差的优化过程。该技术基于梯度下降法。相反,每个权重对总误差的贡献是从输 查看详情

卷积神经网络(cnn)反向传播算法推导

...导,主要是用数学公式来进行表示的,在全连接神经网络中,它们并不复杂,即使是纯数学公式也比较好理解。而卷积神经网络相对比较复杂,在本篇文章中我们将从直观感受和数学公式两方面来介绍CNN反向... 查看详情

神经网络反向传播和偏差

】神经网络反向传播和偏差【英文标题】:Neuralnetworkbackpropagationandbias【发布时间】:2018-03-1406:48:40【问题描述】:我很难构建好的神经网络教学算法,因为有一些手动操作。首先要做的事情:我的目标是教授nnxor函数,我使用si... 查看详情

脱离公式谈谈对反向传播算法的理解

...偏导数。再根据导数的链式法则,两个偏导数都变成误差项和另一个导数的乘积。这里的误差项,写法上是损失函数对所在层线性组合函数(判别函数)求导。误差项是反向传播的核心概念。从意义上,误差项反映了最... 查看详情