学习一个新技术的最好方法就是用它来解决实际的问题。
[背景]
有一次等一辆班车,时间到点了,但是没看见班车的影子,不知道是班车还没到还是班车已经走了。
[解决方案]
给班车装上GPS设备,根据班车的实时位置预测班车到达某一站点的时间。
[设计]
1.是否要使用神经网络?
如果历史数据的分布是线性的,完全可以使用更简单的线性模型,如果历史数据的分布不是线性的,那就使用神经网络,班车的到达时间在雨天活晴天、工作日和休息日以及春夏还是秋冬的数据样本分布可能是完全不同的。今天读了一些论文,是关于如何用神经网络预测公交车的到站时间的,作者们都提到神经网络的效果比线性模型好。
2.使用何种神经网络?
神经网络有很多种,比如DNN, CNN和RNN,到底选哪一种NN呢?
1)DNN中的D是Deep的意思,应该是指包括至少一个隐藏层的神经网络。
2)CNN中的C是卷积的意思,属于DNN的变种,CNN特别适合图像识别。
3)RNN中的R是循环的意思,也是DNN的变种,RNN特别适合时间序列的预测。
RNN应该是最适合预测班车到达时间的场景,今天看的论文里面也推荐了RNN预测公交车到站时间。
3.如果使用DNN,应该有多少层隐藏层,每个隐藏层应该有多少个节点呢?
这是一直困扰我的一个问题,今天香港同事分享了一篇文章,里面有一段话:
In sum, for most problems, one could probably get decent performance (even without a second optimization step) by setting the hidden layer configuration using just two rules: (i) number of hidden layers equals one; and (ii) the number of neurons in that layer is the mean of the neurons in the input and output layers.
意思是说大部分情况下一个隐藏层就够了,隐藏层的节点个数是输入层节点个数和输出层节点个数的平均数。