到目前为止,深度学习在计算机视觉或自然语言处理中有许多有趣的应用。
在其他更传统的领域如何?例如,我有传统的社会人口统计变量,可能还有很多实验室测量结果,并且想要预测某种疾病。如果我有很多观察结果,这会是一个深度学习应用程序吗?我将如何在这里构建一个网络,我认为所有花哨的层(卷积等)都不是必需的?!只是让它深吗?
在我的特定数据集上,我尝试了一些常见的机器学习算法,如随机森林、gbm 等,但在准确性方面结果参差不齐。我在图像识别方面的深度学习经验有限。
到目前为止,深度学习在计算机视觉或自然语言处理中有许多有趣的应用。
在其他更传统的领域如何?例如,我有传统的社会人口统计变量,可能还有很多实验室测量结果,并且想要预测某种疾病。如果我有很多观察结果,这会是一个深度学习应用程序吗?我将如何在这里构建一个网络,我认为所有花哨的层(卷积等)都不是必需的?!只是让它深吗?
在我的特定数据集上,我尝试了一些常见的机器学习算法,如随机森林、gbm 等,但在准确性方面结果参差不齐。我在图像识别方面的深度学习经验有限。
是的,您可以使用深度学习技术来处理非图像数据。然而,在信号处理和相关任务之外,其他模型类别仍然与神经网络非常有竞争力。
要对非信号/非序列数据使用深度学习方法,通常使用简单的前馈多层网络。不需要卷积层或池化层。除此之外的最佳架构需要通过交叉验证进行探索,并且由于深度神经网络需要大量计算来训练,因此发现可能很耗时。
根据我在 Kaggle 比赛中尝试使用深度(-ish,通常是 5 层)神经网络的经验:
Dropout 对于正则化和提高准确性仍然非常有效
输入标准化 - 通常意味着 0,标准差 1,很重要
隐藏层激活函数可以有所作为。尽管 ReLU 减少了梯度消失的一些问题,但根据我的经验,它对非信号数据的鲁棒性较差,您将需要其他形式。如果您只有几层,那么 sigmoid 或 tanh 仍然可以正常工作。否则,请查看泄漏的 ReLU、PReLU、ELU 和其他 ReLU 变体,它们试图用“死”神经元修补其问题。
使用专为深度学习设计的优化器,例如 Adam、Adagrad 或 RMSProp
使用适用于深度学习的权重初始化方法,例如 Glorot。
考虑使用批量标准化层。我没有太多经验,但我看到其他人用这种方法做得很好。
尽管如此,相比之下,XGBoost 可以通过最少的调整和训练工作轻松地击败深度神经网络(当然取决于问题和您拥有的数据)。如果准确性对您来说就是一切,那么有可能——尽管不能保证——深度神经网络和其他模型(如 XGBoost)的集合将比单独使用任何一个模型表现得更好。
网络可以适用于分类目的。为此,您需要能够定义数据的训练集和测试集,以表示网络将被要求在生产中进行分类的数据。这决定了您是否可以获得糟糕、合理或良好的工作网络。
我认为“深度学习”的术语具有误导性:网络不会学习,你只能训练它。
假设你可以创建一个训练和测试集,在高层次上你可以使用
多层:如果您的数据没有顺序并且结构具有固定位置。
递归网络:如果数据的顺序对分类很重要
卷积:如果您的数据具有图像中的结构但没有固定位置。
获得良好的设置,例如层数,需要反复试验;这是一种黑魔法。