@nrailgun
2016-09-24T15:53:17.000000Z
字数 1616
阅读 2258
机器学习
这可能会有两个意思。形式上,CNN 存在无数多的核,每个滤波器对应输入中一个感知域。然而实际上,CNN 使用了同一个核,依次扫描每一个区域。因为这些核成为了一个核,只有一个核的权重,相当于共享(Weight-sharing)。但是不幸的是,Weight-sharing 在 Caffe 中有另外的意思,是指两个层具有相同的参数。
并不是等于感知域的大小,而是感知域
理论上,CNN 可以逼近非常复杂的函数,而局部最优听起来像是还能接受(起码是最优了)。实践中,CNN 的逼近和目标函数、训练方法存在很大关系,逼近能力受到很大限制,并非无限。
假定存在一个输出(非常)稀疏矩阵的目标函数,使用 CNN 逼近。我在实验中发现,FCNN 和 CNN 存在一种“懒惰”特性,非常容易逼近 0。因为监督信号非常稀疏,所以当网络输出为 0 的时候,损失其实非常小,达到局部最优,然而这个局部最优一点都不好。
训练 CNN 还是非常依赖技巧与经验的。如何解决稀疏监督信号的问题,我还要再思考。据说:逼近简单函数效果也不好,待验证。
神经网络有时候很容易学习到训练集中一些不相关的特征,并将其作为网络分类依据,导致神经网络得到莫名其妙的结果,或者在测试集表现极差。但是另一方面,神经网络的行为也比较难以预知,输入和训练输入的稍微不一致,是否会导致失败,是个未知数。
有时候为了保证 test 和 training 的一致性,花费了大量时间设计复杂的算法预处理输入,不如先让网络跑跑看。代码的事情,跑了再说。
在用神经网络去完成子任务之前,一定要用人手去进行少量数据的标记,然后用这些数据测试在大框架下的性能,因为很可能该子任务未必目标正确(未必能帮助完成总体目标任务),避免浪费人力和时间。
有些子任务看起来很直观,理所当然觉得会帮助完成任务,有时候这只是人的盲目乐观。
Andrew NG 说(大意):更深的网络,就能更好的拟合数据;更少的数据,更加容易拟合。这个说法有些更加深入的地方。
首先,是不是更少的数据更加容易拟合?Caffe 的作者之一 seanbell 在 Topic 中表示
2000-6000 images isn't enough to train a deep net from scratch. You can probably fine-tune a net with that many images (from ImageNet), if you freeze the initial layers, and only fine-tune the last few layers.
我的实验表明,100 个图片的 cifar-10 数据,用 Caffe 的 Cifar-full,出现了收敛之后突然陷于局部最优的情况。
另一方面,“更深的网络,就能更好的拟合数据;更少的数据,更加容易拟合。”,并没有说明网络更深,数据更少同时发生的情况。很容易用 3 层卷积神经网络拟合,而 5 层卷积神经网络却比较难拟合。
什么才是合适的学习率?不是损失可以下降的学习率,是损失非常缓慢下降的学习率。避免 stuck in not bad local optima。
许多 paper 号称 takes days / weeks to train the network,因为他们采用了尽量大的学习率。Kaiming He 的 ResNet 在 0.001 学习率下只需要 2 个小时就可以在 cifar10 到达 88% 准确率,但是不再提升,0.01 学习率在 12+ 小时训练之后用 0.001 学习率调优到达 91.5+% 的 SOA。