有时候在学习神经网络教程时,我们通常会看到有的实验似乎理所当然地就选定了某种神经网络架构以及特定的网络层数、激活函数、损失函数等等,却没有解释原因。因为解释起来有点难。是的,深度学习社区选择 ReLU(或更现代的选择 ELU 或 SELU)作为激活函数是「常态」,而且我们基本上也欣然接受,但我们通常并没有思考这是否是正确的。比如在网络的层数和优化器的学习率选择上,我们通常都遵循标准。近日,机器学习开发者兼饶舌歌手 Alex Honchar 在 Medium 上发文分享了自动化这些选择过程的方式。另外,本文涉及的相关代码也已在 GitHub 上公开。
超参数搜索
卷积神经网络训练的典型超参数的列表
在开始训练一个模型之前,每个机器学习案例都要选择大量参数;而在使用深度学习时,参数的数量还会指数式增长。在上面的图中,你可以看到在训练计算机视觉卷积神经网络时你要选择的典型参数。
但有一个可以自动化这个选择过程的方法!非常简单,当你要选择一些参数和它们的值时,你可以:启动网格搜索,尝试检查每种可能的参数组合,当有一种组合优化了你的标准时(比如损失函数达到最小值),就停止搜索。
当然,在大多数情况下,你可等不了那么久,所以随机搜索是个好选择。这种方法可以随机检查超参数空间,但速度更快而且大多时候也更好。
贝叶斯优化——我们为超参数分布设置一个先决条件,然后在观察不同实验的同时逐步更新它,这让我们可以更好地拟合超参数空间,从而更好地找到最小值。
在这篇文章中,我们将把最后一个选项看作是一个黑箱,并且重点关注实际实现和结果分析。
HFT 比特币预测
比特币价格的样本图
我们将取出其中最近 10000 分钟的一个子集,并尝试构建一个能够基于我们选择的一段历史数据预测未来 10 分钟价格变化的最好模型。
对于输入,我想使用 OHLCV 元组外加波动,并将这个数组展开以将其输入多层感知器(MLP)模型。o = openp[i:i+window]
h = highp[i:i+window]
l = lowp[i:i+window]
c = closep[i:i+window]
v = volumep[i:i+window]
volat = volatility[i:i+window]
x_i = np.column_stac