深度学习-深度神经网络

神经网络是由一个个神经元相互链接并按层次排列构成的,深度神经网络是有任意层的神经网络,这里的深度是指层次的多,而不是神经元数量的多。有任意层,那么就要有一个循环来负责遍历每一层进行计算。因此深度神经网络的计算形式,就必需要适应这个循环结构。
咱们先来讲说神经元吧
在这里插入图片描述这个神经元经过对x,w,b进行运算,得出z,而后再由z得出a。
对于多神经元神经网络,其实也是同样的。简单来讲就是重复单神经元的流程,把上一层神经元的输出做为下一层神经元的输入。
下面是一个多神经元神经网络。
在这里插入图片描述
咱们能够把它拆分红一个一个单独的神经元来看,就能够清楚地看出复杂的神经网络其实就是由咱们学习过的最简单的单神经元网络组成的。例如咱们先只看第一个神经元。
在这里插入图片描述
最前面的负责输入特征的层叫作输入层,当咱们在统计层数的时候一般不会把这一层计算在内,因此这是一个两层的神经网络(虽然上面看起来有3层);最后一层咱们叫作输出层;在中间的全部层统称为隐藏层。html

下面咱们来看一下深度神经网络前向传播的计算形式,和单神经元是同样的,只是多了层次的标识符。利用下面两个经典的计算公式。
z l = w l a l 1 + b l z^{l} = w^la^{l-1} + b^l
a l = g l ( z l ) a^l = g^l(z^l)
好比说在计算第一层时, a l 1 a^{l-1} 就是输入特征x, g l g^l 是第一层的激活函数(每一层的激活函数均可以是不一样的),获得第一层的a后,将其传入到第二层,依然套用上面的公式计算第二层的z,而后计算第二层的a,这样一层一层地传下去,最后得出最后一层的a( y ^ \hat{y} 预测结果)web

而后说一下反向传播的计算。
反向传播利用的是下面四个计算公式。
d z l = d a l g l ( z l ) dz^l = da^l * g'^l(z^l)
d w l = d z l a l 1 dw^l = dz^l * a^{l-1}
d b l = d z l db^l= dz^l
d a l 1 = w l . T d z l da^{l-1} = w^l.T * dz^l
须要强调的一点是,最后一层的da的计算公式有所不一样,由于最后一个a直接传入到了损失函数,因此能够直接计算它的偏导数,在逻辑回归中最后一层的 d a = y a + 1 y 1 a da=-\frac{y}{a}+\frac{1-y}{1-a} 网络

最后总结一下整个神经网络的训练过程,a[0]也就是特征输入x,它与w[1],b[1]一块儿通过前向传播的第一步后,得出了z[1]以及a[1],a[1]又传递到下一步,得出z[2]和a[2],而后又继续往下传播,最后得出预测结果a[l]就也是 y ^ \hat{y} 。预测结果a[l]与真实标签y能够构成损失函数,得出预测精准度。有了损失函数,那么咱们就能够计算出损失函数关于a[l]的偏导数da[l]。有了da[l],咱们就能够经过偏导数的链式法则进行反向传播,反向传播的第一步使用da[l]以及前向传播中获得的z[l],w[l]等等数据得出了dz[l],dw[l],db[l]以及da[l-1],da[l-1]继续向前传播,一步步得出每一层的w和b的偏导数。而后使用这些偏导数进行梯度降低,来更新每一层的w和b,而后使用新的w和b进行第二轮前向传播反向传播,这样不停地更新w和b,不停地优化w和b。app