我们已经知道神经网络其实是多个逻辑回归的叠加。一个复杂的神经网络包括很多层,对于这样庞大的系统我们可能无从下手,其实只要把握一下两个关键点即可:
第一个是隐藏层,隐藏层主要控制神经网络的计算复杂度以及计算的精度,我们可以通过调节隐藏层来控制算法的速度和准确度;第二个是输出层,输出层决定了神经网络的功能类型,例如某个神经网络是要做回归还是分类?如果做分类的话,是做二分类还是多分类?这些都是输出层决定的。
一般我们将隐藏层和输出层计入神经网络的总层数,但是输入层不计入总层数。所以图 1 所示的神经网络是3层神经网络,包括 2 个隐藏层和 1 个输出层。
构建神经网络时,需要指定以下超参数:
学习速率。神经网络中的学习速率对应多个节点的多个参数。
层数。如果层数比较多,那么这个神经网络就是所谓的深度学习神经网络了。不过,并不是越深的神经网络效果就越好,因为过多的层数可能会导致梯度消失。而现在学者也在深入研究如何加速深度神经网络的学习速度。
每层节点的个数。设置每层神经节点的个数。
设置节点的激活函数。一般在隐藏层设置为 ReLU 激活函数,因为该函数比 Sigmoid 函数和 tanh 函数的学习效果更好。而在输出层则需要根据最后需要的结果来选择函数,这些函数会在后续进行详细讲解。
在进行回归预测的神经网络中,最后的输出层需要设置为线性(line)的,即不需要设置任何激活函数,如图 2 所示。
在进行二分类预测的神经网络中,最后的输出层可以设置为 Sigmoid(sig)函数,如图 1 所示。
在机器学习的项目中,我们经常遇到的是多分类问题。对于多分类问题,可以将最后的输出层设置为 Softmax(sm)函数,如图 2 所示。