[关闭]
@nrailgun 2016-08-25T15:00:41.000000Z 字数 1124 阅读 1826

BBFCN 实现笔记

机器学习


实现网络

基于 Caffe 0.99 实现。开始大部分时间用于实现 数据集清洗网络数据层,实现还算顺利。首先设计第一级网络,平铺直叙,经过 50000 轮迭代,损失最开始稳步下降(最后的损失忘记记录了)。但是提取特征时候,发现 5 个预测特征图没有任何响应。

检查输入数据

经过两天的检查,没有发现 convert_lfw_data.cppface_point_layer.cpp 有太大问题,期间写了非常多的检查代码,甚至超过了本身的逻辑。

检查网络设计

既然实现不大可能有问题,也许是我把网络设置错了。现在加入以下三个限定:

结果:似乎在 1000 迭代左右,cost 合理下降,可以得出直观上比较合理的响应。

增加样本

但是增加了训练样本之后,急剧恶化,cost 不再梯度下降(J=1.2 不再下降)。于是降低 lr 再次测试,cost 再次合乎估计地下降。在 2000 轮左右,提取的响应保持了大致的方位(左上角),但是并不是在一个位置高亮,而是在一大片范围高亮。在 3000 轮左右,响应的范围似乎收缩了(忘记留根对比,只是印象),这可能是个好信号。4000 轮和 3000 轮进行了对比,视觉上,响应更强烈(灰度大)。在 6000 轮,cost 更加低(J=0.463113),但是响应范围并没有什么改善。

Ground Truth to 1

最开始 J=64.16 比较大,随后很快下降。在 1000 轮进行测试,J=21.37,位置靠谱,轮廓也靠谱。

每层使用不同 lr

修改 conv 层的 lr_mult,虽然情况没有好转,但是收敛速度大大提升,这也算是一个好消息。

感知域不匹配

没有 mismatch,这个问题似乎并没有特别重要。

局部最优

因为 ground truth response 是稀疏的,所以一个输出接近全零的网络也可能是局部最优。神经网络总是很 Lazy,很容易逼近一个零函数。问题很可能是这个。

调整 Ground truth

原先 Ground truth:

FP=exp(β×r)

按照论文,取 β=0.1,改动为 β=0.5 之后情况大大改善。应该还是因为降低了监督信号的稀疏性。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注