1.4 深层神经网络
概述
深层神经网络就是增加隐藏层的数量,我们发现有一些问题只有深层神经网络才能解决,但通常需要用到深度学习时先从简单的逻辑回归尝试训练集比较好,把隐藏层的层数作为一个参数来一点点调整,选择较优解。
我们通常使用L来表示神经网络的层数,例如L=4。用n[l]来表示第L层神经单元的个数,如n[1]=5,而通常输入层又可以表示为n[0]。
前向传播
深层神经网络和上一张在具体计算上几乎没有区别,就是外层多一个for循环,以实现从第一层到最后一层自动计算。
核对矩阵维数
核对矩阵维数,是检查神经网络代码是否有问题的一个关键步骤和方法。
每一层上的计算Z = WX + b(注意每个具体的神经元的计算已经体现在这个公式里每个元素的向量化上了),首先向量Z的维数就是这一层神经单元的个数,很容易理解有几个单元就算出几个z来,输入X的维数是上一层神经元的个数,矩阵W的维数是(本层神经单元个数,上层神经单元个数)。注意,上述维数是只有一组测试数据的时候,当有m组测试时Z和X同时将向量变为矩阵(本层神经元个数,m)。b比较简单,有几个神经单元,就是几维向量,并且不会变成矩阵,因为不管多少个特征和参数公式都是Z = W1X1 + W2X2 … + b
为什么要深层?
第一层先识别最简单的边缘,然后慢慢组合成一个区域。
参数和超参数
参数即我们通常提到的W和b
超参数虽然不是平时显性提到的参数,但对神经网络的控制更为重要。通常包括:学习率、梯度下降的循环次数、隐藏层层数、隐藏单元数、激活函数的选择等。这些超参数实际上影响了参数的的值。
一般我们很难预先知道什么才是合适的超参数值,通常只能先猜一个可能比较合适的值,然后不断尝试。在不同的时间、硬件条件下情况也许也是非常不同的,记得常常变换超参数看看是否能找到更优解。
编程
参数w和b的赋值实操中的区别
首先应再次强调W一般用随机数初始化参数,b用全零。
np.random.randn()函数的参数就是一个矩阵的shape
而np.zeros需要再加一个括号