zoukankan      html  css  js  c++  java
  • 论工程能力对AI系统落地的重要性(转)

    看了一篇文章关于讨论工程能力,深有感触,AI算法已经比较透明,如何做出易用,稳定且能实际解决问题的系统才是重点。

    https://www.infoq.cn/article/AI-front-201802/

    经常有人问我学好人工智能的秘诀。我会先问下对方对数据结构、代码设计、调试工具、代码版本维护的入门问题。如果这些都不过关,我的回答就是“工程”。

    做好 AI 应用,不仅是要懂 AI“算法”,更重要的是软件工程能力和系统能力。在实践中,Linux 命令用得熟不熟,写程序是不是有良好的风格,版本控制是不是成为习惯,是不是掌握基本的网络服务构架,这些基本功比会用 Keras/TensorFlow 重要多了。有想法的人很多,具体工程去做的人就少了,应先从最底层的工程练起。没有具体的工程经验,就是清谈,是浪费时间。先过了系统运维关、数据库关、代码习惯关、基本软件工程关,才能谈得上落地一个 AI 的系统。

    现实系统里行之有效的人工智能算法,都是很简单的。能不能发挥好的根本,都在于如何把这些简单的东西因地制宜综合运用。为 1% 的核心算法代码跑好,要 99% 的“工程”代码的支持。

    比如对机器学习,无免费午餐定理告诉我们,一个算法如果在一类问题上特别有效,那一定有一些问题它比随机算法还差。一个现实中可用的机器学习系统,几乎一定是多种问题的混合问题。不会存在一种算法是一个现实问题的灵丹妙药。现实的问题的解决,一定是用一个良好的工程架构,让多种算法混合在一起解决问题。能拿捏这个架构设计的“度”,就是人工智能工程师最核心的能力。

    又比如逻辑这个分支。概念上其实没有比逻辑更简单的语言了:与、非、存在量词。但是为了工程化这个简单的东西,就衍生出巨大的一门学科:知识工程、语义网、知识图谱。知识工程之所以难不在“知识”,而在“工程”。当关注“知识”的时候,总是可以映射最优秀的人的智能。但工程化的时候,必须适应群体无限的奇葩,和不可避免的各种成本的折衷。

    AI 应用落地,核心是工程问题,不是算法问题,更不是“哲学”问题。一定要特别特别“土”,踏踏实实从朴素的运维、数据库、数据清洗做起,从实际的工程中逐步演化。如何按天迭代? 如何构造联调系统? 如何无标注数据启动? 如何分离准确度和召回率要求? 如何统一运用规则和统计? 如何适应无明确衡量标准的开发? 如何设计可演进的数据模式? 如何提升数据可理解性? 如何逐步提升规则系统的表达力? 如何平衡黑箱和白箱模型的优缺点? 如何在优雅架构和工期间取舍? 等等,这些都是教科书上没有的答案。只有扎扎实实从工程出发,才能实事求是地发展出低成本的、有生命力的 AI 系统。

    如果仅仅是因为某个东西时髦就去学,比如因为这两年 AI 火就去学 AI,满口 CNN、RNN、LSTM,却没有兴趣去理解这些东西背后的基本原理和应用范围,对工程也是无益的。比如只知道“卷积”这个词,却不理解不同的卷积核对于图像到底起什么作用;只知道深度网络,却连其他的神经网络一概不知;只知道 word2vec 分布式表示,却连 TFIDF 和 LDA 都没用过。这种赶时髦,对工程实践害处大于用处。

    掌握分很多层次。会用包是一个层次,会改进是一个层次,发优秀论文再进一个层次。至于懂得方法的边界、工程上和其他方法融汇使用,就只有凤毛麟角的人了。到 AI 架构师的层次,又需要通透理解多种方法的前沿。这样的人,学校、研究院都培养不出来,都是通过工程逼出来、练出来、打出来的。光是懂算法不行,还必须通透理解实践的前沿;光是理解一个分支也不行,还必须通透理解几个分支。

    没有银弹,没有奇迹。都是扎扎实实的工程,多年的细节的打磨才能解决一点小事。也从来没有一个所谓的伟大的想法,能跳过工程的考验而就成功的。工程才是做好 AI 的钥匙。

  • 相关阅读:
    装载:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
    装载: Matlab 提取矩阵 某一行 或者 某一列 的方法
    编码规范的作用
    转载:奇异值分解(SVD) --- 线性变换几何意义(下)
    转载:奇异值分解(SVD) --- 线性变换几何意义(上)
    转载:LBP代码详细注释
    转载:纹理分类(一)全局特征
    转载:LBP的初步理解
    转载:双线性插值
    Matlab位运算操作
  • 原文地址:https://www.cnblogs.com/marszhw/p/12587430.html
Copyright © 2011-2022 走看看