LiteralliJeff 发表于 2022-1-4 16:51

算法研究中的进度与时间管理

研究生课程的大作业,趁机梳理一下自己的研究策略,日后有时间给同学们录成视频扔B站。
前言

进度与时间管理决策在学习生活中无处不在。本人在科研生活中对此深有体会,无论是科研项目的进度规划,还是项目中算法的优化加速,涉及进度与时间管理的决策对整个任务都是至关重要的,直接关系任务最终的效果。本文将结合自身经历,对算法实现中的进度与时间管理决策的制定策略进行讨论,力图从过往的经验教训中总结出普遍可行的客观规律,并为之后的算法研究项目提供有效的指导。
本次的课程报告将分为三个部分:

[*]第一部分主要讨论算法任务本身的流程优化与时间管理,着眼于具体的算法优化的通用逻辑。
[*]第二部分主要讨论算法研究项目的进度管理与时间规划,着眼于如何降本增效、加速实验。
[*]第三部分主要讨论进度与时间管理的方法论,致力于管理决策抽象为最为本质的行为准则。
一、算法任务本身的流程优化与时间管理

本人的研究方向为底层视觉,算法任务均与数字图像处理相关。
数字图像处理算法的流程本身并不晦涩难懂,但往往十分繁琐,我们可以称之为复杂的信息处理系统。计算机上的图像处理系统实际上是我们对人类知觉信息处理系统的一种模仿与抽象,然而我们对人类视觉本身的研究仍远远不够。把解释拆分成若干个不同的层次,就可能明确地回答什么是正在被计算的东西,为什么要计算这些东西,进而可能从理论上阐明所计算的这些东西还在某种意义上来说是最佳的选择,或阐明保证这种选择可以正常地发挥作用的原因所在。因此,传统(经典)数字图像处理系统的设计往往是模块化的,模块之间往往是相互解耦的。这一特性为数字图像处理算法的流程优化与时间管理奠定了坚实的基础。
数字图像处理系统本身和其中的各个算法模块都可以作为研究方向,但是两者的优化思路略有不同,所以需要分别讨论。
对于只研究单一模块(或模组)的研究者而言,算法流程大体上可以抽象为“预处理”、“计算处理”、“后处理”三步,数字图像处理系统中的其他必要的模块对于该任务都只是“预处理”或“后处理”。
对于研究整个(或部分)数字图像处理系统的研究者而言,算法流程本身就是他们的研究对象。这些研究者往往会通过改变算法流程的顺序、重新组合各个模块的功能、添加或删减一些新的模块等方式,让整体系统获得更优的表现。
优化单一模块的主流思路在于减少冗余操作,在更适配的硬件上使用更高效的算法来实现设计的算法,必要时甚至可以对算法的计算精度做一些取舍。以这些年大火的深度学习为例,为了将实验效果惊人的神经网络部署到边缘设备,我们必须想方设法对其进行量化压缩,在尽量保证算法表现一致的情况之下,寻找等效的其他结构来取代过于庞大的原始结构。
上述策略在RepVGG等结构重参数方案中被表现得淋漓尽致。结构重参数化思想,也即训练时尽量用表征能力更强的多分支结构来提升网络性能,而推理(应用)时采用利用结构重参数化思想,将其完全等效地变换为硬件更适配的单路结构,这样内存占用又少推理速度又快。
优化整个系统的主流思路在于增强系统的并行程度,将串行的模块根据彼此的依赖性进行拆解,再分别将这些模块放到不同的硬件设备上运行,进而充分发挥设备的计算能力。如果将单一模块研究中的“预处理”、“计算处理”、“后处理”视为一个小系统,那么串行转并行的策略在这里也是适用的。尽管很多计算框架已经贴心地为用户提前内置了足够多的多线程的优化,足以解决大部分的日常任务,但是这也使得研究者们往往会忽视这其中更大的优化空间,在数据阻塞中浪费了大量的实验时间。
以本人对本人所用数据集的预处理方法的实验结果为例,直接读写图片的耗时是解码成二进制文件再读取的三倍,是直接从内存读取的十倍到百倍。后两者的本质是空间换时间,用冗余的存储资源(硬盘或内存)去置换时间,所以这个问题的核心仍是合理分配资源,避免数据阻塞,增加计算效率。
总而言之,算法任务本身的流程优化与时间管理与宏观意义上的统筹并无二致。顺带一提,我个人将这一现象引申为“人们在复杂系统上的研究往往是为了证明微观的描述和宏观的描述在原则上是一致的”(D.Marr, 计算视觉理论)。
二、算法研究项目的进度管理与时间规划

论及算法实现研究的进度管理与时间规划,最核心的问题其实在于“算法研究”相对于其他项目有什么特殊的地方,这一问题直接关系到了算法项目本身是否能如期地进行到项目结束。明白算法研究的特殊之处后我们才能有针对性地进行更细致的进度管理与时间规划。
算法研究最大的特点就在于其不确定性。在充分竞争的环境下,预期价值越大的算法研究就越具有不确定性,这是因为创新性才是算法研究的核心价值。度量“创新”这一行为本身的指标是“偏离固有认知的程度”,可是“固有认知”本身往往就来自经历积淀的业界共识,所以,创新的第一步就是批判性地看待约定俗成的共识体系。但仅仅是这样还不够,创新还需要建设性地提出有效的解决方案,而这个解决方案需要是在群体中前所未有的,最差也需要是不为人知的(常见于因保密原因而不公开的算法)。
从上述分析中我们可以自然地归纳出创新的捷径——即突破所在群体的范畴(涉足交叉领域),实现未公开的保密方案(锁定可行性高的目标)和就事论事地在特定条件下解决特定问题(选择固有认知薄弱的课题)。然而,尽管创新性和有效性并不是单调增长的一一映射关系,但是在直觉上他们往往是正相关的,上述捷径固然限制了创新的不确定性,也同样约束了创新的有效性,这一点也是显而易见的。
由于“限制不确定性”这一行为在项目确立后就很难再拥有足够的可操作性,所以考虑将不确定性本身纳入算法研究项目的进度管理与时间规划的考量范围是至关重要的。
具体的,依我个人的经验,算法研究项目最好基于任务目标的预期创新程度,为不确定性留出一定的冗余,分段地多样地设计基于不同创新水平的实验目标,同时尽可能地让基于不同创新水平的实验目标拥有可复用的实验路径,灵活地利用动态的实验结果去选择最优的实验路径。上述策略可以让我们的算法研究拥有极强的鲁棒性,不至于因为不确定性的影响而完全失控,甚至因此毁于一旦。
本人目前正准备写论文投稿的项目就完整的经历了上述流程,这里可以分享给大家作为参考。
我的这个项目在立项时预期以某种电子设备为核心,绕过数据采集的难点解决数据采集的问题,进而通过解决数据问题提升任务的性能。这个方案引入了新的模块来解决旧的问题,属于对图像处理系统的优化而不是对模块本身的优化。这个方案最大的不确定性机在于引入的电子设备本身并不完全可控,它们或多或少存在某些误差与缺陷,在绕过固有认知的缺陷的过程中引入了新的缺陷。在这一过程中,我为了弥补这些缺陷而开发了一种新的灵活的数据增强算法,同时在对比中发现了一个被前人忽视了的问题并解决了它。在发现预期方案的缺陷在常规情况下总是大于优势后,我选择在特定条件下解决特定问题,终于得到了可堪一用的实验结论。
然而,特化后的方案无法与公开的数据集进行比较,说服力有限容易被拒,所以我需要先做一个符合我需求的数据集工作,被证明可行后再尝试发表这个工作。这时,我的实验规划的作用就体现了出来。在预期方案的一开始我就设计了当时看似用处有限的数据集采集实验,而研究过程中开发出来的数据增强算法和针对前人忽视问题的补偿方案都可以作为数据集工作的内容被复用,我无需再为数据集工作中数据集外的创新点而绞尽脑汁,这极快地加速了我的实验进度,让我终于有了充分的时间去润色我尚未面世的第一篇文章。
总而言之,算法研究项目虽然也是项目,但我们必须充分考虑如何包容不确定性才能最大程度地让项目拥有确定性,让我们的规划真正可行。
三、进度与时间管理的方法论

我个人的进度与时间管理的方法论就是“拆分任务,补充信息”与“关注反馈,留出冗余”,其中前者也我在大三的时候结合自身经验总结了本领域研究的创新方法论。
“拆分任务,补充信息”说的是两件事。
拆分任务即解耦。无论是研究还是做事,性能和效率的提升往往是需要基于对固有结构的解耦的。极致的拆分就像《算法原理》中分冶法一样,将一个难以直接解决的大问题分割成一些规模更小的问题,以便各个击破、分而治之。分冶法是很多高效算法的基础,也是很多并行策略的基础,对研究的问题没有深刻的理解是很难知道如何拆分的。
补充信息即开源。这里的开源是“开源节流”的开源,需要我们能跳出固有认知的范畴,从更广阔的源头寻找思路和方法,引入更多的活水。交叉学科之所以容易出成果,正是这个原因。化用到项目的进度与时间管理上,就是要适当地引入助力,让自动化的工具来辅助你,让更专业的人来指导你,与更多的同行去交流,不要闭门造车。
“关注反馈,留出冗余”是我得到的教训。
没有反馈就无法得到改进的方向,关注反馈才能持续地成长,更准确更有迹可循的反馈才能让人快速成长。具体到项目时间管理上,我们需要寻找合适的监督对象、恰当地设置反馈节点,才能在不浪费过多时间的同时不走歪路,不至于做无用功。
留出冗余是为了应对真实信道中各种各样的不确定的噪声。怎样留冗余也是门学问,毕竟冗余有其意义但必然影响效率,所以如何合理地设置多级缓冲才是重中之重。我想我上一节中算法研究项目的实际经历已经充分地体现了这一设计的重要性。
四、总结

本文从算法本身的时间管理出发,由浅入深地讨论了算法研究中的时间管理策略及其方法论,是本人对自身算法研究经验的一次深刻的总结。
这套方法论有效的前提条件是研究者在保有基本科学素养的基础上拥有一定的自由度,对研究环境有一定的需求。没有导师的理解与宽恕我是很难进行那些看似主线无关的冗余研究的。
该方法还有很多不完善的地方。主要矛盾在于过于依赖人治,对自我管理和自我规划的要求较高,如果本人水平不足或心态不稳很容易适得其反。所以本质上这套方案上限高但下限也低,只适合对研究目标有足够热情或明确认识的人。
本人将秉持终身学习的态度继续完善这份理论,也希望这份经验能够帮助到尚有迷茫的后进之人。
页: [1]
查看完整版本: 算法研究中的进度与时间管理