我是机器学习和神经网络实验的新手。我想要建立一个网络,以一系列的5个图像作为输入,并预测下一个图像。我的数据集完全是人为的,只是为了我的实验。作为一个例子,这里有几个输入和预期输出的例子:

数据点和目标的图像来自同一个来源:数据点的目标图像出现在其他数据点,反之亦然。
现在,我已经构建了一个感知器,它只有一个隐藏层,输出层给出了预测的像素。这两层是致密的,由乙状结肠神经元组成,我以均方误差为目标。由于图像相当简单,而且变化不大,这做得很好:通过200-300个例子和50个隐藏单元,我得到了一个很好的误差值(0.06)和对测试数据的良好预测。该网络采用梯度下降(通过学习速率缩放)进行训练。下面是我得到的学习曲线的种类,以及错误随时代数的演变:


这一切都很好,但是现在我想减少数据集的维数,这样它就可以缩放到更大的图像和更多的例子。所以我申请了PCA。但是,我没有将它应用于数据点列表,而是应用于图像列表,原因有两个:
由于图像看起来都很相似,我设法将它们的大小从4800 (40x40x3)减小到了36,而只丢失了1e-6的方差。
不起作用的
当我将减少的数据集及其减少的目标提供给网络时,梯度下降会非常快地收敛到一个高误差(大约50 !)。您可以看到与上面相同的情节:


我没想到一条学习曲线能从一个高值开始,然后向下再向上.坡度下降这么快停止的通常原因是什么?它是否链接到参数初始化(我使用GlorotUniform,千层面库的默认设置)。
然后,我注意到,如果我提供减少的数据,但原始的(未压缩的)目标,我得到了最初的性能。因此,将PCA应用于目标图像似乎不是一个好主意。为什么会这样呢?毕竟,我只是把输入和目标乘以相同的矩阵,所以训练输入和目标仍然以神经网络应该能够计算出的方式联系在一起,不是吗?我遗漏了什么?
即使我引入了4800个单位的额外层,使得乙状结肠神经元的总数相同,我也得到了同样的结果。总括而言,我尝试过:
(1)和(3)工作良好,但不是(2),(4)和(5),我不明白为什么。特别是,由于(3)工作,(5)应该能够找到相同的参数(3)和本征向量在最后的线性层。这对神经网络来说不可能吗?
发布于 2015-10-16 17:10:38
首先,感谢您对原始问题所做的编辑,因为我们现在知道您正在对所有数据应用相同的转换。
问:为什么perceptrons在某些问题上比generalized linear models表现要好得多?答:因为它们本身就是非线性模型,具有很大的灵活性。缺点是额外的旋钮需要更多的数据才能正确调整。
较少的数据会导致high-bias。更多的数据可以克服High-bias。您已经将数据从4800功能数据集减少到了38个功能数据集,因此应该会看到更大的偏差。Neural networks比没有隐藏层的模型需要更多的数据。
您的artificial neural network (perceptron)是一个固有的非线性模型,但是您决定使用线性模型(PCA)从数据集中删除特性。单个隐藏层的存在显式地在数据中创建了二阶项,并且有两个附加的非线性转换(input==>hidden和hidden==>prediction),它们在每一步都会增加σ型非线性。
训练数据和目标数据都乘以同一个矩阵来实现降维,这实际上意味着如果perceptron想要重建原始数据的非线性方面,它就需要学习该矩阵。这需要更多的数据,或者减少维度。
我建议尝试在整个数据集上执行二阶polynomial feature extraction,然后在增强的数据集上执行PCA。查看在保留增强型数据集的99%差异时,您最终获得了多少功能。如果该数据集大于初始数据集的维度,则坚持使用未增强和未还原的数据集。如果它介于原始数据的维数和38维之间,那么尝试使用该数据来训练perceptron。
与其使用(线性)方差来确定PCA投影的特征约简,不如尝试使用不同数量的PCA降维来训练和交叉验证模型。您可能会发现,对于给定的一组图像,有一个甜蜜的地方。例如,当使用PCA将784像素特征降至50个线性无关特征时,MNIST数字数据上的支持向量机性能最好。尽管从主成分的方差分析来看,这并不明显。
有一些非线性降维技术,如isomap。您可以研究使用非线性特征约简,因为您显然是松散的线性PCA,您已经应用了信息。
在降低维数之前,您还可以查看图像特异性feature extraction技法以添加一些非线性。
希望这能有所帮助!
发布于 2015-11-16 22:12:09
数据集中的大多数差异可能存在于输入图像(或输入图像和输出图像之间)之间。在这种情况下,信息最丰富的主组件用于分离输入示例或将输入与输出分离。
如果只有信息量较低的PC描述b/w输出的差异,就很难区分输出,而不是原始特征空间中的输出。
也就是说,图像中的PCA很少有那么大的帮助。在这个例子中,我可以看到它很有吸引力,但是学习一个不同的低维特征表示可能会更有意义和更便于记忆。您可以尝试一个简单的自动编码器、SIFT/SURF功能或类似haar的功能。
发布于 2015-09-14 23:16:13
我看过你的邮报几遍了。但我不确定我是否完全理解你的实验。但我猜到可能会发生什么。
我认为错误隐藏在你达到这个惊人的0.06 %的地方。你不仅在推广新的数据,而且还在某种程度上预测未来。这不应该有效,但我认为这是因为你的网是可怕的超装。所以说你的网络还是很蠢的。它刚刚学会了,如果你给它看图片a,b它会回答c。第二个实验包含一个扭曲,如果我正确地理解你。我假设您仍然向网络显示完整的图像,但是它们是由它们的特征图像的系数构建的。现在,它必须吐出系数,才能从特征图像中得到答案。但这需要对这个过程有一定的了解,而这个过程并不是电视网想要的。
因此,我认为有一些改进你的实验的建议:
完整输入的学习是一个非常高维的问题,需要大量的训练数据。考虑从图像中计算特征。
我不确定你的学习问题是不是个好问题。请考虑将您的培训数据与您的预测数据分开,并采取更多的传统数据,如手写数字。
https://datascience.stackexchange.com/questions/8087
复制相似问题