数据分析行业需要具备哪些技术 如何快速进入

训练速率

这可能是最重要的超参数之一,决定了整个学习过程。如果设置的学习速率太小,你的模型可能需要几年才能收敛;如果学习速率太大,在开始训练几个样本之后,你的损失值(loss)可能会迅速增加。一般来说,0.01 的学习速率是安全的,但这不应被视为一个严格的规则;因为最佳学习速率应该根据具体任务来调整。

相比之下,在每个 epoch 之后选择固定的学习率(learning rate)或者逐渐降低学习率(learning rate)是另一个选择。虽然这可能有助于训练得更快,但需要人工确定新的学习率。一般来说,学习率可以在每个 epoch 后减半——这几类策略在几年前相当普遍。

幸运的是,现在我们有更好的基于动量(momentum based methods)方法来改变学习率,就是基于误差函数的曲率。这种方法也可以帮助我们为模型中的各个参数设置不同的学习率;使得一些参数可能以相对较慢或较快的速率学习。

近期大量针对优化方法的研究也产生了自适应学习率(adaptive learning rate)方法。现在,我们有很多可选择的方法,从老牌的动量方法(Momentum Method)到 Adagrad、Adam(我最喜欢的方法)、RMSProp 等。像 Adagrad 或 Adam 这样的方法有效地避免了手动选择初始学习速率,并且模型能在一定的时间内顺利地收敛(当然,如果选择好的初始速率会进一步帮助模型收敛)。

超参数微调:旋转的网格搜索——拥抱随机搜索

网格搜索(Grid Search)是经典的机器学习方法。但是,在寻找 DNN 的最佳超参数时,网格搜索并不高效。主要是因为尝试不同的 DNN 超参数组合所花费的时间太长。随着超参数的数量不断增加,网格搜索所需的计算也呈指数增长。

这里有两种方法:

1. 根据经验手动调整一些常用的超参数,如学习率、层数(number of layer)等。

2. 使用随机搜索/随机抽样(Random Search/Random Sampling)来选择最优超参数。超参数的组合通常从可行域的均匀分布中选择。还可以加入先验知识以进一步减少搜索空间(例如学习速率不应该太大或太小)。经证明,随机搜索比网格搜索更有效率。

学习方法

老牌的随机梯度下降(Stochastic Gradient Descent)可能不像 DNN 一样有效(这不是一个严格的规则),因此最近很多人正研究开发更灵活的优化算法。例如:Adagrad、Adam、AdaDelta、RMSProp 等。这些复杂的方法除了提供自适应学习率之外,还对不同的模型参数应用不同的速率,使得收敛曲线更加平滑。将学习率、层数等作为超参数是很好的,建议在训练数据的子集上进行尝试。

使权重的维度以 2 的指数幂级增加

即使用最新的硬件资源处理最新的深度学习模型时,内存管理仍然是以字节衡量的;所以,尽量将参数的大小设置为 2 的幂指数,如 64、128、512、1024。这可能有助于分割矩阵、权重等,从而略微提高学习效率。这个现象在使用 GPU 时变得更加显著。

无监督预训练

无论你是否用 NLP、机器视觉(Computer Vision)、语音识别等技术,无监督预训练总能帮助有监督模型和无监督模型的训练。词向量(Word Vector)在 NLP 中无处不在;对于有监督二分类问题,你可以使用 ImageNet 的数据集以无监督的方式预训练模型;或者对于说话者消歧模型(speaker disambiguation model),可以进一步利用语音样本的信息训练模型。

Mini-Batch vs. 随机学习

训练模型的主要目的是学习得到适当的参数,从而产生从输入到输出的最佳映射(mapping)。不管是否使用批处理(batch)、Mini-Batch 或随机学习(stochastic learning),这些参数都会因训练样本的不同而有所调整。在使用随机学习方法时,在每个训练样本之后调整权重梯度,因此将噪声引入梯度。这具有非常理想的效果;即在训练期间引入噪声,模型变得不太容易过度拟合。

然而,现在计算机的计算能力大大提高,使得随机学习方法的效率可能相对较低。随机学习可能浪费了很大一部分资源。如果我们能够计算矩阵与矩阵的乘法(Matrix-Matrix multiplication),那么为什么要局限于使用迭代相加的向量与向量的乘法?因此,为了实现更大的吞吐量(throughput)/更快的学习,建议使用 Mini-Batch 而不是随机学习。

但是,选择适当的批处理大小也具有相同的重要性;因此我们也可以保留一些噪音(通过减少批的数据量实现),并有效利用计算机的计算能力。同样的,一个批的样本量控制在 16 到 128 之间也是一个不错的选择(2 的指数幂)。通常,一旦你找到更重要的超参数(或手动或随机搜索),批处理的大小是选定的。然而,有些情况下(如在线学习/online learning),模型的训练数据是数据流(stream),这时求助于随机学习是一个很好的选择。