daily
what
针对一个具体问题,看paper—>想一个和牛逼的模型—>做实验—>auc提升一点点(或者压根没效果,采用各种办法把实验结果弄好看点)—>发paper,或者打各种比赛。
产品需求—>battle—>写工程代码;或者是(花大量时间)理解业务—>(大量时间)分析数据—>(经过推理验证)提出可以做点—>改数据预处理代码(很费功夫)—>模型(一般很快搞定)—>等待资源(可能很久)—>调参(不太调)—>开ab实验—>观察实验结果(详尽分析)——》继续循环
对业务算法工程师而言,关注的焦点永远不是模型本身,而是业务。
how
(1)多看实验报告,多听分享会,看看别人是怎么思考问题,怎么解决问题的。
(2)好好理解业务,不只是算法层面,还要从产品、心理等角度思考,好好分析数据。比如做中长视频推荐,中长视频和短视频、电商、直播的产品/算法区别是什么;我们竟对的产品、算法是什么形态;如何用更精准的数学分析建模哪些品类需要引进更多的作者等。入职之后我看的前几篇文章是字节的101,感受非常深刻,能够体会到非常多业务前线的思考,也对整个视频行业有了新的认识。
(3)学会方法论。这里指的不是模型,而是怎么发现问题,怎么构造数据,实验怎么看结果,结果不好了怎么debug,结果好了怎么分析收益来源,收益的方法可否复用等,这些都是必须去工业界一个个实验和报告堆出来。
(4)学习工程思维。
(5)培养良好的代码规范,学习一切能提高工作效率的东西。
自我修养
一位合格的AI算法工程师,首先要是一位合格的职场人,其次要是一位合格的工程师,最后才到AI算法工程师
合格的职场人
合作能力
在复杂的系统中,工程师负责工作内部是有诸多的上下游合作。能够站在上下游的立场和需求上思考问题,能理解不同角色的苦衷,这合作就已经成功了一大半了。
沟通能力
有效的沟通是可以通过后天的刻意训练来习得。沟通的本质是在正确的时间点以正确的方式传达正确的信息。
展示能力
工程师需要良好的展示能力来讲清你的想法和工作。小到组内的工作汇报,大到参加大型公开会议做报告其实本质都是一样的。展示能力并不是堆砌复杂的辞藻,华丽的图表,而是清晰的逻辑与准确的措辞。
合格的工程师
工程师在一个团队中的角色是problem solver,也就是为了达到产品或者系统设定的目标,去把设想变成现实的人。
项目中的全局观
以项目目标为指挥棒,而不是自顾自地考虑所谓高大上的技术方案。用最简洁的技术解决问题这恰恰是内功的体现。
定义问题的能力
在工作中,由于产品和项目需求多样,我们要解决的是一个特定场景中的细分问题或者是一个可能不复杂但是全新的应用。虽有各种公开的论文或者代码可以参考,但生搬硬套往往都不会是最优方案。在解决问题之前,我们要先考虑清楚这个问题的输入输出是什么?和已有的通用问题区别是什么?有什么样的先验知识可以利用优化问题或者简化问题?来自产品的问题是怎样抽象成一个严谨的描述?
独立解决问题的能力
工作中,要解决的问题可大可小,但切记做一个让同事和领导放心的靠谱的人。我们经常会谈到一个词,管理成本。这并不是指一位同学具体解决问题的技术能力如何,而是在解决问题的过程中,你的leader和同事需要花费多少精力。管理成本越低的同学,在解决问题过程中需要的指导精力越少。理想状况下只需要leader交代清楚要解决的问题,便可在解决问题的过程中独立规划,自主沟通。如有困难,也可以整理好并及时主动提出需求。
合格的算法工程师
优秀的实现能力
根据团队分工和项目不同,有的需求是只需要证明想法可行,有的是需要一个prototype,有的也可能需要直接推到产品或者上线系统中去。
对前沿进展保持追踪
算法工程师不同于其他职位的工程师,最起码在现在这个阶段技术迭代的速度是以月为单位的。所以保持前沿的追踪是非常有必要的。但不同于做科研,算法工程师了解前沿的目的不一定是要在此基础上继续开拓创新,而是能对已有的技术深入理解,去伪存真,以便更好地在业务中为我所用。
扎实的计算机原理基础
不了解算法部署的平台谈研发高效的算法就像是空中楼阁。相比于应试教育式的学习,更重要的是理解系统为什么被设计成了现在这个样子,在这样的过程中做了什么样的取舍,以及作为上层用户这样的取舍对算法设计意味着什么。
模拟面试(机器学习)
简历中描述一个人工智能项目:
基于Python语言开发完成了电力负荷分类系统,检测设备电流电压负荷功率等电气参数。在该项目中通过对负荷数据进行归一化和标准化完成了预处理,随后基于TensorFlow/Keras实现了卷积、池化和激活等CNN结构。随后通过添加BatchNormalization和Dropout等结构进一步提高精度并防止过拟合。在项目后期使用数据增强进一步优化了性能,最终达到了95%的识别率。
Q1:我看到这里你使用了BN和Dropout的方式防止了过拟合,那么请你说一下什么是过拟合以及过拟合的表现形式。
过拟合就是由于过于追求完美拟合现有数据集,以至于会将单个数据点的特征认为是一般特征。结果就是预测新数据的能力极差,表现特征就是在训练集上准确度很高,但是在验证集上准确度很低。
Q2:我看到你这里写的最终达到了95%的识别率,那么这个95%是在什么条件下获得的?对于这个值有做其他的处理么?
我这里是用的Keras默认的评判指标,应该是叫做accuracy。我看到这个指标结果很不错所以没有调整。
错误原因:
其实在这个问题中我想要考察的是:对Keras库进行深入的研究。同时对于模型效果评价体系没有一个全面的认知,对于为什么要使用accuracy说不出利弊。
所以重点要答出识别率有什么弊端,再简单介绍一下交叉验证就可以了。
时间序列预测
竞赛
-
Makridakis竞赛(M5)
-
https://mofc.unic.ac.cy/m5-competition/
-
https://www.kaggle.com/c/m5-forecasting-accuracy/overview
M5预测-准确性
估计沃尔玛零售商品的单位销售额
-
https://www.kaggle.com/c/m5-forecasting-uncertainty
M5预测-不确定性
估计沃尔玛单位销售的不确定性分布。
-
-
https://zhuanlan.zhihu.com/p/287470354
-
时间序列包括年、季、月、日和其他时间序列。为了确保有足够的数据来开发准确的预测模型,对观测值的数量设置了最低阈值。
用来评价不同预报准确度的5个措施是:对称平均绝对百分比误差(又称对称MAPE)、平均排名、对称绝对百分比误差中位数(又称对称APE中位数)、较好百分比和RAE中位数。