首页 > 其他分享 >神经网络入门篇之深层神经网络:详解前向传播和反向传播(Forward and backward propagation)

神经网络入门篇之深层神经网络:详解前向传播和反向传播(Forward and backward propagation)

时间:2023-11-29 10:23:21浏览次数:40  
标签:cdot 传播 propagation 神经网络 反向 前向 输入

深层神经网络(Deep L-layer neural network)

复习下前面的内容:

1.逻辑回归,结构如下图左边。一个隐藏层的神经网络,结构下图右边:

注意,神经网络的层数是这么定义的:从左到右,由0开始定义,比如上边右图,\({x}_{1}\)、\({x}_{2}\)、\({x}_{3}\),这层是第0层,这层左边的隐藏层是第1层,由此类推。如下图左边是两个隐藏层的神经网络,右边是5个隐藏层的神经网络。

严格上来说逻辑回归也是一个一层的神经网络,而上边右图一个深得多的模型,浅与深仅仅是指一种程度。记住以下要点:

有一个隐藏层的神经网络,就是一个两层神经网络。记住当算神经网络的层数时,不算输入层,只算隐藏层和输出层。

但是在过去的几年中,DLI(深度学习学院 deep learning institute)已经意识到有一些函数,只有非常深的神经网络能学会,而更浅的模型则办不到。尽管对于任何给定的问题很难去提前预测到底需要多深的神经网络,所以先去尝试逻辑回归,尝试一层然后两层隐含层,然后把隐含层的数量看做是另一个可以自由选择大小的超参数,然后再保留交叉验证数据上评估,或者用开发集来评估。

再看下深度学习的符号定义:

上图是一个四层的神经网络,有三个隐藏层。可以看到,第一层(即左边数过去第二层,因为输入层是第0层)有5个神经元数目,第二层5个,第三层3个。

用L表示层数,上图:\(L=4\),输入层的索引为“0”,第一个隐藏层\({n}^{[1]}=5\),表示有5个隐藏神经元,同理\({n}^{[2]}=5\),\({n}^{[3]}=3\),\({{n}^{[4]}}\)=\({{n}^{[L]}}=1\)(输出单元为1)。而输入层,\({n}^{[0]}={n}_{x}=3\)。

在不同层所拥有的神经元的数目,对于每层l都用\({a}^{[l]}\)来记作l层激活后结果,会在后面看到在正向传播时,最终能会计算出\({{a}^{[l]}}\)。

通过用激活函数 \(g\) 计算\({z}^{[l]}\),激活函数也被索引为层数\(l\),然后用\({w}^{[l]}\)来记作在l层计算\({z}^{[l]}\)值的权重。类似的,\({{z}^{[l]}}\)里的方程\({b}^{[l]}\)也一样。

最后总结下符号约定:

输入的特征记作\(x\),但是\(x\)同样也是0层的激活函数,所以\(x={a}^{[0]}\)。

最后一层的激活函数,所以\({a}^{[L]}\)是等于这个神经网络所预测的输出结果。

前向传播和反向传播

  • 之前的神经网络入门篇都是基于浅层神经网络进行的,此篇开始基于深层神经网络进行

之前学习了构成深度神经网络的基本模块,比如每一层都有前向传播步骤以及一个相反的反向传播步骤,这次讲讲如何实现这些步骤。

先讲前向传播,输入\({a}^{[l-1]}\),输出是\({a}^{[l]}\),缓存为\({z}^{[l]}\);从实现的角度来说可以缓存下\({w}^{[l]}\)和\({b}^{[l]}\),这样更容易在不同的环节中调用函数。

所以前向传播的步骤可以写成: \({z}^{[l]}={W}^{[l]}\cdot{a}^{[l-1]}+{b}^{[l]}\)

​ \({{a}^{[l]}}={{g}^{[l]}}\left( {{z}^{[l]}}\right)\)

向量化实现过程可以写成: \({z}^{[l]}={W}^{[l]}\cdot {A}^{[l-1]}+{b}^{[l]}\)

​ \({A}^{[l]}={g}^{[l]}({Z}^{[l]})\)

前向传播需要喂入\({A}^{[0]}\)也就是\(X\),来初始化;初始化的是第一层的输入值。\({a}^{[0]}\)对应于一个训练样本的输入特征,而\({{A}^{[0]}}\)对应于一整个训练样本的输入特征,所以这就是这条链的第一个前向函数的输入,重复这个步骤就可以从左到右计算前向传播。

下面讲反向传播的步骤:

输入为\({{da}^{[l]}}\),输出为\({{da}^{[l-1]}}\),\({{dw}^{[l]}}\), \({{db}^{[l]}}\)

所以反向传播的步骤可以写成:

(1)\(d{{z}^{[l]}}=d{{a}^{[l]}}*{{g}^{[l]}}'( {{z}^{[l]}})\)

(2)\(d{{w}^{[l]}}=d{{z}^{[l]}}\cdot{{a}^{[l-1]}}~\)

(3)\(d{{b}^{[l]}}=d{{z}^{[l]}}~~\)

(4)\(d{{a}^{[l-1]}}={{w}^{\left[ l \right]T}}\cdot {{dz}^{[l]}}\)

(5)\(d{{z}^{[l]}}={{w}^{[l+1]T}}d{{z}^{[l+1]}}\cdot \text{ }{{g}^{[l]}}'( {{z}^{[l]}})~\)

式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向函数。

向量化实现过程可以写成:

(6)\(d{{Z}^{[l]}}=d{{A}^{[l]}}*{{g}^{\left[ l \right]}}'\left({{Z}^{[l]}} \right)~~\)

(7)\(d{{W}^{[l]}}=\frac{1}{m}\text{}d{{Z}^{[l]}}\cdot {{A}^{\left[ l-1 \right]T}}\)

(8)\(d{{b}^{[l]}}=\frac{1}{m}\text{ }np.sum(d{{z}^{[l]}},axis=1,keepdims=True)\)

(9)\(d{{A}^{[l-1]}}={{W}^{\left[ l \right]T}}.d{{Z}^{[l]}}\)

总结一下:

第一层可能有一个ReLU激活函数,第二层为另一个ReLU激活函数,第三层可能是sigmoid函数(如果做二分类的话),输出值为,用来计算损失;这样就可以向后迭代进行反向传播求导来求\({{dw}^{[3]}}\),\({{db}^{[3]}}\) ,\({{dw}^{[2]}}\) ,\({{db}^{[2]}}\) ,\({{dw}^{[1]}}\) ,\({{db}^{[1]}}\)。在计算的时候,缓存会把\({{z}^{[1]}}\) \({{z}^{[2]}}\)\({{z}^{[3]}}\)传递过来,然后回传\({{da}^{[2]}}\),\({{da}^{[1]}}\) ,可以用来计算\({{da}^{[0]}}\),但不会使用它,这里讲述了一个三层网络的前向和反向传播,还有一个细节没讲就是前向递归——用输入数据来初始化,那么反向递归(使用Logistic回归做二分类)——对\({{A}^{[l]}}\) 求导。

忠告:补补微积分和线性代数,多推导,多实践。

标签:cdot,传播,propagation,神经网络,反向,前向,输入
From: https://www.cnblogs.com/oten/p/17863931.html

相关文章

  • 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)
     相关参考:训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置?  Keras中对RNN网络的statefull和stateless设置:链接:https://keras.io/zh/getting-started/faq/#how-can-i-use-stateful-rnns   ===============================================  必须要承认,由......
  • 神经网络入门篇:详解随机初始化(Random+Initialization)
    当训练神经网络时,权重随机初始化是很重要的。对于逻辑回归,把权重初始化为0当然也是可以的。但是对于一个神经网络,如果把权重或者参数都初始化为0,那么梯度下降将不会起作用。来看看这是为什么。有两个输入特征,\(n^{[0]}=2\),2个隐藏层单元\(n^{[1]}\)就等于2。因此与一个隐藏层......
  • 基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述        该算法主要由两个部分组成:HOG特征提取和GRNN神经网络。下面将详细介绍这两个部分的原理和数学公式。 1.HOG特征提取      HOG(HistogramofOrientedGradients)是......
  • PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子|附代码数据
    全文下载链接:http://tecdat.cn?p=26519最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。一个简单的编码器-解码器LSTM神经网络应用于时间序列预测问题:预测天然气价格,预测范围为10天。“进入”时间步长也设置为10天。)只需要10天来推断接下来的10天。......
  • 大规模神经网络优化:神经网络损失空间“长”什么样?
    前言 如何刻画网络的优化性质呢?在优化相关的论文中,通常通过分析Hessian矩阵及其特征值,或者将损失函数进行一维或二维的可视化来分析网络的优化性质。我们希望这些指标能够帮助我们更好的理解网络损失的landscape,优化器优化轨迹的性质等等。我们希望将这些指标刻画的性质与优化......
  • 神经网络中间层特征图可视化(输入为音频)(二)
    相比方法(一)个人感觉这种方法更好importlibrosaimportnumpyasnpimportutilsimporttorchimportmatplotlib.pyplotaspltclassHook:def__init__(self):self.features=Nonedefhook_fn(self,module,input,output):self.features=......
  • 神经网络梯度爆炸和消失
    神经网络梯度爆炸和消失目录神经网络梯度爆炸和消失现象说明产生原因解决方法优化激活函数权重初始化和正则化BN归一化操作使用残差结构梯度裁剪预训练+微调参考资料层数比较多的神经网络模型在训练的时候会出现梯度消失(gradientvanishingproblem)和梯度爆炸(gradientexplod......
  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • 神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)
    神经网络的梯度下降在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组单隐层神经网络会有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)这些参数,还有个\(n_x\)表示输入特征的个数,\(n^{[1]}\)表示隐藏单元个数,\(n^{[2]}\)表示输出单元个数。在这个例子中,只介绍过的......
  • 简单神经网络(py)
    1importnumpy2#激活函数库3importscipy.special45importmatplotlib.pyplot67#neutralnetworkclassdefinition8classneutralNetwork:9def__init__(self,inputnodes,hiddennodes,outputnodes,learningrate):10#定义各个......