当前位置: 首页 > 科技观察

神经网络详解,前向传播与反向传播

时间:2023-03-17 15:56:39 科技观察

主要讲Logistic回归的内容,涉及到很多基本概念,是学习神经网络的基础。接下来,我们将从逻辑回归升级到神经网络。首先来看《浅层神经网络》1.什么是神经网络?我们这里讲解的神经网络就是加了一层或几层隐藏层(hiddenlayer),下图是最简单的神经网络,只有两层:two-layerneuralnetwork:需要注意的是上图是“twolayers”,不是三四层Layer,输入输出不算层!这里,我们首先指定记法(Notation):z是x和w线性运算的结果,b,z=wx+b;a是z的激活值;下标1,2,3,4代表该层的第i个神经元(单元);上标[1]、[2]等表示当前层。y^代表模型的输出,y是真实值,即标签。另外,还有一点经常混淆:-上图中的x1、x2、x3、x4并不代表4个样本!但是一个样本的四个特征(4个维度的值)!如果你有m个样本,意味着你需要重复上图的过程m次:神经网络的“二次传播”:正向传播(ForwardPropagation)正向传播就是从输入开始,通过一层层的层层不断的计算每一层的z和a,最后得到输出y^的过程,计算y^后,可以根据它与真实值y的差值来计算loss。BackwardPropagation(反向传播)反向传播是根据损失函数L(y^,y)反向计算每一层的z,a,w,b的偏导数(梯度),从而更新参数.正向传播和反向传播:每次正向传播和反向传播后,更新一次参数,然后用新的参数再次循环上述过程。这就是神经网络训练的全过程。2、对于前向传播,如果用for循环一个样本一个样本计算,显然太慢了。看过我之前笔记的朋友应该知道,我们使用Vectorization将m个样本压缩成一个向量X进行计算。同理,将z和a都向量化得到Z和A,这样就可以同时表示和计算m的样本。这样,我们用公式来表达我们的两层神经网络的前向传播过程:第一层:Z[1]=W[1]X+b[1]A[1]=σ(Z[1])Layer2:Z[2]=W[2]·A[1]+b[2]A[2]=σ(Z[2])我们知道X实际上是A[0],所以它不丑输出:每一层的计算都是一样的:第i层:Z[i]=W[i]·A[i-1]+b[i]A[i]=σ(Z[i])(注:σ是sigmoid函数)所以,其实不管我们的神经网络有多少层,上面的过程都是重复的。对于损失函数,就像在Logistic回归中一样,使用“交叉熵(cross-entropy)”,公式是二分类问题:L(y^,y)=-[y·log(y^)+(1-y)·log(1-y^)]-多分类问题:L=-Σy(j)·y^(j)这是每个样本的loss,我们一般还需要计算loss整个样本集,也叫成本,用J表示,J是L的平均值:J(W,b)=1/m·ΣL(y^(i),y(i))的过程上面计算Z,A,L,J就是Forwardpropagation。3.反向传播。说白了,反向传播就是根据J的公式对W和b求偏导数,也就是计算梯度。因为我们需要用到梯度下降法来更新参数,而更新需要梯度。但是,根据偏导数的链式法则,我们知道第l层参数的梯度需要通过l+1层的梯度求得,所以我们的推导过程是“逆向”的,即为什么它被称为“反向传播”。具体的推导过程这里就不描述了,有兴趣的可以自行推导,虽然我想大多数人看到这种东西都不想去推导。..(主要是我懒得打公式T_T)而且像各种深度学习框架TensorFlow和Keras,他们只需要我们自己搭建正向传播过程,反向传播过程是自动完成的,所以大家也真的不用担心,反向传播后,我们可以根据每一层参数的梯度来更新参数,更新后,重复前向和反向传播的过程,就可以继续训练学习了更好的参数。4.深度神经网络(DeepNeuralNetwork)前面的讲解都是以两层很浅的神经网络为例。深度神经网络没有什么神秘的,就几个/几十个/几百个隐藏层。可以用一个简单的示意图来表示:深度神经网络:注意在深度神经网络中,我们在中间层使用“ReLU”激活函数而不是sigmoid函数,在最后的输出层函数中只使用sigmoid,这是因为ReLU函数在计算梯度的时候比较快,也能在一定程度上防止梯度的消失,所以在深度网络中经常使用。关于激活函数可以参考:【DLFragment3】神经网络中的激活函数及其比较关于深度神经网络,我们有必要详细观察它的结构,尤其是每一层的各个变量的维度,之后总而言之,当我们建立模型时,维度非常重要。我们假设:一共有m个样本,问题是二分类问题(即y为0,1);网络共有L层,当前层为l层(l=1,2,...,L);一层中的单元数为n[l];那么下面参数或变量的维度为:W[l]:(n[l],n[l-1])(本层单元数,上层单元数)b[l]:(n[l],1)z[l]:(n[l],1)Z[l]:(n[l],m)a[l]:(n[l],1)A[l]:(n[l],m)X:(n[0],m)Y:(1,m)有人会问为什么w和b的维度没有m?因为每个样本的W和b都相同,所以所有样本都使用相同的一组参数(W,b),但Z和A不同。虽然计算参数相同,但如果样本不同,计算结果也会不同。不一样,所以维度上有m。深度神经网络的正向传播和反向传播类似于上面写的2层神经网络,就是多了几层,然后把中间的激活函数从sigmoid改为ReLU。