Jack的「算法能力」是从什么时候开始突飞猛进的?
共 1825字,需浏览 4分钟
·
2021-04-12 19:14
大家好,我是 Jack。
最近逛知乎,看到个提问:
在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?
正好工作满两年,回答了一波,也在公众号也分享一下,这篇文章纯属工作上的一些感悟,有其他见解的,也欢迎留言讨论~
以下是正文:
没有一蹴而就的成功,只有日复一日的坚持。
从事视觉算法工作两年,谈一谈我的感受。
主要从以下六个方面进行说明:
基础扎实
算法基本功很重要,需要很清晰地知道比较经典的算法,能说明这些算法的优缺点,适合的应用场景,以及算法的实现细节。
这些如果没有掌握好,谈何针对业务场景优化算法?
身边同事发展快的,很多都是这些算法基本功就掌握牢固的。
算法的学习资料、方法和视频,可以参考我之前发过的文章:
数据处理能力
学校里学各种算法的时候,用的数据集都是开源的,干净的,网上下载下来直接用。
而在工作中,用到的数据都是脏乱的业务数据。这些数据不仅乱七八糟,什么都有,而且还没有标签。
针对项目需求,要考虑如何解决这个问题,使用有监督学习,还是无监督学习,脏数据怎么过滤?
举个非常简单的例子,想做一个动物垂类的项目,但是能拿到的业务数据,人、车、房子什么都有,这时候可以用一些检测+分类的算法,挑出置信度比较高的数据。
当然,这个例子非常简单,实际业务场景可能要比这个复杂的多。
我们需要做的就是,针对项目需求,清洗数据,并制定算法 or 人工的清洗标准。
什么样的数据要,什么样的数据不要,什么样的数据先解决,什么样的数据后解决,等等一系列问题。
问题细化能力
算法工程师,其实最头疼的一件事是:无论怎么优化,效果就是没有显著提升。
要不断地想 idea ,然后测试效果,至于好坏,只有试了才能知道。
PM 如果催着问:算法的效果多久能优化好?说实话,做算法的人心里可能也没谱。
算法效果不好,怎么优化?这就需要一项很重要的能力:拆解问题的能力。
针对项目需求,算法效果还没有达到要求,需要分三个步骤进行优化:明确和理解问题、拆分和定位问题、提出解决方案。
明确和理解问题
需要先沟通对齐问题的本质,举个简单的例子,对一个分类任务,需要优化效果,准召不能都有效提高的时候,需要明确是保召回率,还是保准确率?
或者说对于业务,召回率更重要还是准确率更重要?哪个对用户影响小?然后,明确解决问题的目标,准召要达到多少,才能上线?
拆分和定位问题
一个问题,我们可以将其分为,复杂问题和元问题。复杂问题就是参杂了多个维度跟变量的问题,不可直接解决。
而一个需要优化的项目,往往是这种复杂问题。元问题就是最本质、最小的待解决的问题。
我们需要将复杂问题进行拆分和细化,通过解决多个元问题,进而解决复杂问题。是不是很像 dp 算法?都是这种思想。
提出解决方案
最后就是根据拆解的各种元问题,提出具体的解决方案。
一个复杂的问题可能不好解决,但是逐一击破,每一个环节效果提高一些,最终算法效果可能会提升一大截。
这个道理很多人都懂,但是在实际项目中,真正能做好的人,并不多。这项能力需要经验,慢慢的培养。
工程能力
算法工程师,首先得是一名合格的工程师。做项目,最终是要看落地产出的。
这不仅涉及算法本身,还涉及前端、后端等多方的合作。同时,需要将自己优化好的算法,进行工程化。
比如,为了算法的效率,落地一个后端算法,需要将Python代码改写成C++代码。等等诸如此类的工程化问题。
持续学习能力
算法更新很快,新的paper层出不穷,跟踪最新的研究成果,寻找业务场景落地的可能,要保持一个持续学习的态度。
这个也挺难做到,毕竟业务压力大的话,真的没时间看论文。还能怎样,做一名时间管理大师呗。
检索能力
找到合适的搜索关键词,百度 or Google。
别笑,面向搜索引擎编程,看其他人分享的经验,吸取精华,那编程能力,还不得突飞猛进啊。
推荐阅读
• 你说,我画,AI工具人石锤• 万字长文,60分钟闪电战• 保姆级人工智能学习路线