这个问题非常广泛(甚至可能被关闭为“太宽泛”)。它可以被认为是一个初学者的问题,因为它主要是关于朝着一个“有希望”的方向开始。在这方面,我希望有人能给出一般性的提示和建议,即使肯定不会有一个单一的、完美的答案。
我目前被分配了一个相当模糊的研究任务,大致是“这里有一些数据,把它扔到一些神经网络上,看看你能弄清楚什么”。而我目前面临的主要问题是参数空间。
作为一个特定(但有些随意)的示例,请考虑 Python/Keras 环境,特别是keras 文档中的堆叠 LSTM 示例。
这里的自由度,广义地说,
- 层数
- 层的类型,可能是
- 核心层,......
- 卷积层,...
- 池化层,...
- 本地连接层,...
- 嵌入层,...
- 合并图层, ...
- 高级激活层,...
- 归一化层,...
- 噪声层,...
- 层包装,...
- 自定义图层,...
- 循环层,可能是
- 循环神经网络,...
- 简单RNN,...
- 格鲁,...
- 卷积LSTM2D,...
- 卷积LSTM2DCell,...
- 简单RNN细胞,...
- 卷积LSTM2DCell,...
- 格鲁塞尔,...
- LSTM细胞,...
- 库登鲁,...
- CuDNNLSTM, ...
- LSTM,它有参数
- 单位, ...
- 循环激活,...
- 使用_bias,...
- kernel_initializer, ...
- 循环初始化器,...
- 偏置初始化器,...
- unit_forget_bias, ...
- kernel_regularizer, ...
- 经常性正则化器,...
- 偏置正则化器,...
- 活动正则化器,...
- 内核约束,...
- 经常性约束,...
- 偏差约束,...
- 辍学, ...
- 经常性辍学,...
- 执行, ...
- 返回序列,...
- 返回状态,...
- 向后退,...
- 有状态的,...
- 展开,...
- 激活,可以是其中之一
- 软最大,...
- 埃卢,...
- 瑟鲁,...
- 软加,...
- 软签,...
- 谭...
- 乙状结肠,...
- hard_sigmoid, ...
- 指数,...
- 线性,...
- 乙状结肠,...
- relu,有参数
- α
- 最大值
- 临界点
- 编译步骤,有参数
- 指标:...
- 损失权重:...
- 样品重量模式:...
- 加权指标:...
- 目标张量:...
- loss,可能是 14 个函数之一,每个函数都有几个参数
- 优化器,它可能是其中之一
- 新元, ...
- RMSprop,...
- 阿达格拉德...
- 阿达德尔塔,...
- 阿达玛斯,...
- 那达慕...
- Adam,其参数为
- lr,默认值为 0.002
- beta_1,默认值为 0.9
- beta_2,默认值为 0.999
- epsilon,默认值为 None
- schedule_decay,默认值为 0.004
- 拟合/训练步骤,有参数
- 训练/目标数据:...
- 验证拆分/验证数据:...
- 洗牌:...
- 类重量:...
- 样品重量:...
- 初始时代:...
- step_per_epoch: ...
- 验证步骤:...
- 验证频率:...
- 时代:...
- 批量大小,...
或者这么说:文档中的示例基于无限参数空间内的一个点,而该点的选择似乎令人不安。
我知道以某种方式 开始是“简单”的,因为只需复制+粘贴示例,更改输入 dat 和 google 错误消息,直到它“运行”,然后希望默认参数值是明智的,开始调整其余参数以查看结果如何变化。但这不是研究,也不是科学,也绝不是富有成效的。
当然,人们可以争论每一点。可以在一篇20 页、大量数学的研究论文中查找训练过程优化器beta_2参数的含义。adam更一般地说,有一些关于超参数调整的资源,当然还有一些stackexchange 网络 Q/As,它们要么试图解释参数,要么链接到解释它们的论文。
但是没有办法真正理解这些参数的影响。即使是单个看似简单的参数(如上面链接中的批量大小)的影响也涉及无法理解的数学模型,而只能“检查”,即使这样,也只能针对改变一个(或几个)参数得出结论并保留数百个其他参数。
最近,可解释人工智能的想法引起了一些关注——可能也是因为将此类系统的复杂性确定为一个严重问题。但到目前为止,我们有 Keras 和其他高级 API,它们提出了以下一些核心问题:
如何决定(几乎无限)参数空间中的哪些参数值得调整?
在最高级别,可能有经验法则。一方面,输入数据有特点。例如,数据的维度或结构(例如是点数据还是时间序列)。另一方面,有一定的分析目标(例如预测或异常检测)。这些将在“可能有意义”或“通常应用于此类问题”的层数或层类型方面缩小参数空间。但这对我来说仍然像是猜测。
一个人怎么能深刻地争论某个参数不需要调整呢?
如果有人发现对于某个数据集和挖掘任务“运行良好”的网络布局或参数组合,那么一切都很好。但是假设结果不如预期,人们如何反驳“如果你调整这个和那个参数可能会起作用”的论点?同样,反驳这种论点的唯一方法可能是凭经验检查这个单一参数(同时保持所有其他参数不变),然后从观察到的效果中得出一些挥手的结论(考虑到潜在的复杂性,这几乎必须是不合理的)系统)。
(用更简短、更具挑衅性的方式来表达这个问题可能是:使用神经网络的数据科学只是反复试验对吗?但恐怕我已经知道答案了……)