1.2.2 模型变形
其实还可以对模型做更多的变形,不一定要把 hard sigmoid 函数换成 soft sigmoid函数. hard sigmoid 函数可以看作两个ReLU(Rectified Linear Unit,修正线性单元)的叠加,ReLU先是一条水平的线,到了某个地方经过一个转折点,变成一个斜坡,对应的公式为
(1.29)
旨在看 0 和 哪个比较大,比较大的值会被当作输出:如果 ,输出是0;如果 ,输出是 . 如图1.18 所示,通过 、、可以挪动ReLU的位置和斜率. 把两个 ReLU 叠起来,就可以变成 hard sigmoid函数. 想要用 ReLU,就把前文用到 sigmoid 函数的地方换成.
图1.18 ReLU
如图1.19 所示,两个 ReLU才能够合成一个 hard sigmoid函数.要合成 个 hard sigmoid函数,需要 个 sigmoid函数. 如果要用 ReLU 做到一样的事情,则需要 个 ReLU,因为两个 ReLU 合起来才是一个 hard sigmoid函数.表示一个 hard sigmoid 函数不是只有一种做法. 在机器学习里面,sigmoid 函数或 ReLU 称为激活函数(activation function).
图1.19 激活函数
当然还有其他常见的激活函数,但 sigmoid 函数和 ReLU 是最为常见的激活函数. 接下来的实验都选择用了 ReLU,显然 ReLU 比较好. 对于使用前56天数据的情况,实验结果如图1.20 所示.
图1.20 激活函数实验结果
连续使用 10个ReLU作为模型,跟使用线性模型的结果差不多.但连续使用 100 个 ReLU作为模型,结果就有显著差别了. 100 个 ReLU 在训练数据上的损失就可以从 320 降到 280,在测试数据上的损失也低了一些.接下来使用 1000 个 ReLU 作为模型,在训练数据上 损失 更低了一些,但是在模型没看过的数据上,损失没有变化.
接下来可以继续改进模型,如图1.21 所示,从 变成 ,就是把 乘上 再加 ,最后通过 sigmoid函数(不一定要通过 sigmoid函数,通过 ReLU 也可以得到 ). 可以增加网络的层数,将同样的事情再反复多做几次:把 做这一连串的运算产生 ,接下来把 做这一连串的运算产生 ,等等.反复的次数是另一个超参数.注意,、和 、不是同一组参数,这里增加了更多的未知参数.
图1.21 改进模型
每多做一次上述的事情,我们就添加了 100 个 ReLU. 依然考虑前 56 天的数据,实验结果如图1.22 所示,对于2017年~ 2020年的数据,如果做两次(2层),损失降低很多,从280 降到 180.如果做3次(3层),损失从 180 降到 140. 而在2021年的数据上,通过3次ReLU,损失从 430 降到了 380.
图1.22 使用 ReLU 的实验结果
通过3次 ReLU 的实验结果如图1.23 所示,其中红色线是真实数据,蓝色线是预测出来的数据. 看红色线,每隔一段时间,就会有低点,在低点的地方,机器的预测还是很准确的.机器高估了真实的观看次数,尤其是红圈标注的这一天. 这一天有一个很明显的低谷,但是机器没有预测到这一天有明显的低谷,它晚一天才预测出低谷.
图1.23 使用3次 ReLU 的实验结果
如图1.24 所示,sigmoid 函数或 ReLU 称为神经元(neuron),神经网络(neural network)就是由神经元组成的.这些术语来自真实的人脑,人脑中有很多真实的神经元,很多神经元组成神经网络.图1.24 中的每一列神经元称为神经网络的一层,又称为隐藏层(hidden layer),隐藏层多的神经网络就“深”,称为深度神经网络.
图1.24 神经网络的结构
神经网络正向越来越深的方向发展,2012 年的 AlexNet有 8 层,在图像识别上的错误率为 16.4%. 两年之后的 VGG 有19层,错误率降至 7.3 %.后来的 GoogleNet 有 22 层,错误率降至 6.7%. 残差网络(Residual Network,ResNet)有 152 层,错误率降至3.57%.
刚才只做到 3 层,我们应该做得更深,现在的神经网络都是几百层的,深度神经网络还要更深.但 4 层的网络在训练数据上的损失 是 100,在2021年的数据上的损失是440. 在训练数据上,3 层的网络表现比较差;但是在2021年的数据上,则是4 层的网络表现比较差,如图1.25 所示.模型在训练数据和测试数据上的结果不一致,这种情况称为过拟合(overfitting).
图1.25 模型有过拟合问题
到目前为止,我们还没有真正发挥这个模型的力量,2021年 2 月 14日之前的数据是已知的.要预测未知的数据,选 3 层的 网络还是 4 层的 网络 呢?假设今天是 2 月 26 日,今天的观看次数是未知的. 如果用已经训练出来的神经网络预测今天的观看次数,就要选 3 层的网络,虽然 4 层的网络在训练数据上的结果比较好,但模型对于它没看过的数据的预测结果更重要.
深度神经网络的训练会用到残差网络(Residual Network,ResNet),这是一种比较有效率的梯度计算方法.