我看到的所有神经网络示例都是针对一组固定的输入,它适用于图像和固定长度的数据。您如何处理可变长度数据,例如句子、查询或源代码?有没有办法将可变长度的数据编码为固定长度的输入,并且仍然获得神经网络的泛化特性?
6 回答
我去过那里,我遇到了这个问题。人工神经网络是为固定特征向量长度而设计的,许多其他分类器如KNN、SVM、贝叶斯等也是如此。即输入层应该被很好地定义而不是变化,这是一个设计问题。然而,一些研究人员选择添加零来填补缺失的空白,我个人认为这不是一个好的解决方案,因为那些零(虚值)会影响网络收敛到的权重。此外,可能还有一个以零结尾的真实信号。
ANN 不是唯一的分类器,还有更多甚至更好的分类器,例如随机森林。这个分类器被认为是研究人员中最好的,它使用少量随机特征,使用 bootstrapping 和 bagging 创建数百个决策树,这可能效果很好,所选特征的数量通常是特征向量大小的 sqrt。这些特征是随机的。每个决策树都使用多数规则收敛到一个解决方案,然后最有可能选择的类。
另一种解决方案是使用动态时间扭曲 DTW,甚至更好地使用隐马尔可夫模型 HMM。
另一种解决方案是插值,插值(补偿沿小信号的缺失值)所有小信号与最大信号大小相同,插值方法包括但不限于平均,B样条,三次...... .
另一种解决方案是使用特征提取的方法来使用最好的特征(最有特色的),这次将它们固定大小,这些方法包括 PCA、LDA 等。
另一种解决方案是使用特征选择(通常在特征提取之后)一种简单的方法来选择能够提供最佳精度的最佳特征。
暂时就这些了,如果这些都不适合你,请联系我。
您通常会从数据中提取特征并将其提供给网络。不建议只获取一些数据并将其提供给网络。在实践中,预处理和选择正确的特征将决定你的成功和神经网络的性能。不幸的是,恕我直言,这需要经验才能培养出这种感觉,而且任何人都无法从书中学到任何东西。
总结:“垃圾进,垃圾出”
我想一种方法是向输入(循环神经网络)添加一个时间分量,并将输入一次流式传输到网络(基本上创建相当于词法分析器和解析器的神经网络),这将允许输入非常大,但缺点是不一定有停止符号来分隔不同的输入序列(相当于句子中的句号)
为了在不同大小的图像上使用神经网络,图像本身通常会被裁剪并放大或缩小以更好地适应网络的输入。我知道这并不能真正回答您的问题,但在输入上使用某种转换函数,其他类型的输入可能会出现类似的情况?
我不完全确定,但我会说,使用最大数量的输入(例如,对于单词,假设没有单词会超过 45 个字符(根据维基百科在字典中找到的最长单词),如果更短遇到单词,将其他输入设置为空白字符。
或者对于二进制数据,将其设置为 0。这种方法的唯一问题是,如果一个填充有空白字符/零/任何内容的输入与一个有效的全长输入相冲突(与数字相比,单词问题不大)。