【机器学习】多层感知机如何调超参数

参考国外高赞经验贴文章:multi-layer perceptron (MLP) architecture: criteria for choosing number of hidden layers and size of the hidden layer? [closed] (选择隐藏层尺寸和隐藏层数量的标准)

我们知道,感知机(没有隐藏层)可以处理线性可分的数据(4.1有解释,不用管记住就行),因此除非你已经知道你的数据不是线性可分的,就用感知机就行。所以,验证数据的线性可分性这一点并没有坏处,因为我们没有必要使用比任务要求更加复杂的模型(多层感知机)来解决简单技术(感知机)就能够解决的线性可分问题。

  1. 那如何判断数据是否线性可分呢?如何判断数据是否线性可分
  2. 怎样区分线性和非线性_线性与非线性的区别(线性分析、线性模型)

假设你的数据的确需要非线性技术才能够分离,则始终从一个隐藏层开始。毫无疑问,这是你必须做的。如果你的数据可以通过MLP分离,那么MLP大概率只需要一层。这有理论上的理由,但是我们通常纯粹从经验上来解释:许多困难的分类和回归问题,通常使用单隐藏层的多层感知机就能够解决。尽管在一些地方确实存在多层的应用,但是能够证明其合理性的非常少。
**隐藏层中有多少节点? **
来自MLP的学术文献和个人的经验等,我们收集并经常依赖于一些经验法则(RoT:rules of thumb),也发现它们是可靠的指南(这些指导往往是准确的,即使不准确也能够告诉我们每一步应该干什么)

  • 根据输入层和输出层大小的经验法则:
  1. 隐藏层的大小介于输入层和输出层之间
  2. 计算方式:(输入数量+输出数量) × \times × 2/3
  • 基于主成分
  1. 将尽可能多的隐藏层节点数指定为能够捕获输入数据集70%-90%数据差异的主成分的维度。

然而,NN FAQ作者将这些规则称为“胡说八道”(从字面上看),因为它们:忽略训练实例的数量,目标中的噪声(响应变量值)以及特征空间的复杂性。

在他看来,根据您的MLP是否包括某种形式的正则化或早期停止,选择隐藏层中神经元的数量。

在实践中,我这样做:

  1. 输入层:我的数据量的大小(我的模型中特征的大小)
  2. 输出层:由我的模型确定:回归(一个节点)与分类(假设SoftMax,则节点数量等于分类类数)
  3. 隐藏层:开始,一个隐藏层的节点等于输入层的大小。 “理想”的大小可能更小(即,输入层中的数字与输出层中的数字之间的一些节点)而不是较大,是一个经验。如果项目需要额外的时间,那么我就从一个由少量节点组成的单一隐藏层开始,然后(就像我上面解释的那样)我在计算泛化误差、训练误差、偏差和方差的同时,一次一次地向隐藏层添加节点。当泛化误差已经下降,并在它开始再次增加之前,这时的节点数量是我的选择。见下图。
    在这里插入图片描述

排除上面的内容,只有当数据的初始特征很大的时候,我们才考虑增加MLP的隐藏层数。

你可能感兴趣的:(机器学习,算法)