今天跑了个incremental的程序, 因为一次实验结果很让人满意,就认为自己的程序是正确的了。其实相信很多人都是这样,自己写好的程序,随机样本跑一遍,结果不错,然后就认为此程序正确了。之后我用此程序的改进版做了很多实验,结果有好的,也有不好的,这就不应该了,一个正确的程序的结果应该是稳定的,即使是随机取值,也不应该有低的离谱的结果出现。于是我将自己的方法的batch版本与标准的LDA程序进行了结果的比较,发现accuracy的差别时大时小,经过仔细分析后,终于发现我的实验中,对样本的随机抽样的方法与标准LDA程序的方法有一点差别,虽然在程序上只是一行代码的位置写错地方了,但是结果却千差万别。
其实看过很多recognition方面的paper,他们的实验部分有的严谨,有的牵强,有的需要调参数,有的是一些算法公式上的小trick,从而,可想而知,很多paper的方法也许是理论上就不能很好work的,也许是包含一些小的不易觉察的错误,而却自以为是的认为自己的结果是对的。。。
实验部分的严谨性是不能被忽略的,在理想的实验条件下都不能很好work的方法,在实际中就更加难以应用。实验的设计,并不是别人都用什么方法,自己就要用什么方法,也许很多人云亦云的实验方法根本就不合理。针对自己的方法,适宜的设计实验,才能更明确地体现出自己所提出的方法的优越性。对待实验的严谨程度,甚至是别人重复你的实验的时候,可以得到与你相同的结果,而不是其中还隐藏着种种让人猜不到的trick。
经过看一些严谨的paper的实验,深深感到,用statistical 的方法,样本的选取就要random到底,对于database中的所有样本,用最最随机的方法,多次求平均,或是用leave-one-out这种能求出期望结果的方法,得到的结论才是经得起考验的。并不是精心挑选可行样本后,随便run一次,或随机run几十次,求个平均,取个最好结果了事。