TOC

人工智能相关概念整理

我想深入学习一下人工智能。第一步就是需要从总体上了解一下这个领域的相关知识,为后面的自学做个计划。

基本概念

人工智能

Artificial Intelligence

AI 是一个很广泛的概念,没有一个统一的定义。总之,就是使人造机械具有一定的智慧,能独立做出判断,完成一些任务。

可能在一般大众的概念中,所谓的 AI 应该接近,甚至远超,人的智慧,无论其思考推断过程是否和人相似。但实际上这个目标远远没能达到,或许是方法错误,或许是计算力不能达到。
所以我们一般将上面说的那种非常强劲的 AI 称之为强人工智能,现阶段所有的研究与实现都是弱人工智能。

一度,很多人都持悲观态度,认为真正的智能不可能创造出来,直到近些年神经网络方面的研究取得了一些突破,加之计算能力的大幅提升。使得 AI 的研究看似有了不少进步,但最后能走到哪一步,没人清楚。

其他的,比如机器伦理,超智能等讨论,在现阶段来说,还太过科幻,完全不必费心费神。

机器学习

机器学习是人工智能目前的一个主要研究方向,涉及很多数学理论、计算理论。

其手段就是输入一堆样本数据(数据集,DataSet),通过分析、统计得到一定的规律,用于处理新的输入数据。
这就要求规律是客观存在的,程序设计者已知的,容易通过统计得到的。

具体的机器学习算法有:

  • 构造间隔理论分布:聚类分析和模式识别
  • 人工神经网络
  • 决策树
  • 感知器
  • 支持向量机
  • 集成学习AdaBoost
  • 降维与度量学习
  • 聚类
  • 贝叶斯分类器
  • 构造条件概率:回归分析和统计分类
  • 高斯过程回归
  • 线性判别分析
  • 最近邻居法
  • 径向基函数核
  • 通过再生模型构造概率密度函数:
  • 最大期望算法
  • 概率图模型:包括贝叶斯网和Markov随机场
  • Generative Topographic Mapping
  • 近似推断技术:
  • 马尔可夫链
  • 蒙特卡罗方法
  • 变分法
  • 最优化:大多数以上方法,直接或者间接使用最优化算法。

监督学习

Supervised learning, SL

数据集上有人为标注,相当于将人的经验输入计算机。

无监督学习

Unsupervised learning, UL

数据集上不需要标准,常见的实现方法就聚类分析 Cluster Analysis 和生成对抗网络 GAN。

半监督学习

Semi-supervised learning

少量数据标记,大量数据不标记。

强化学习

Reinforcement learning, RL

因它和其他机器学习实现方法存在的较大差异,导致一般都是将其拎出来和机器学习并列。

神经网络

人工神经网络,Artificial Neural Network,ANN
简称神经网络,Neural Network,NN

神经网络是机器学习领域的一个研究方向,试图通过模拟生物神经网络建立一个数学模型,用于实现类似人的简单判断能力。

  • 卷积神经网络 CNN (Convolutional neural network),有时也写作 convolutional net
  • 循环神经网络 CNN (Recurrent neural network),有时也写作 recurrent net

深度学习

强化学习

增量学习

其他术语

  • 模型
  • 训练 很多软件或者库带有预训练模型。
  • 梯度下降 SGD
  • 导数
  • 矢量,或者向量:vector
  • 张量:tensor
  • 算子
  • 卷积
  • Softmax
  • 动态计算图、静态计算图
  • 自动微分 Automatic differentiation
  • TPU (Tensor Processing Unit) / VPU (Vision Processing Unit)
  • 平台
  • OpenMP 多 CPU 并行编程的技术标准
  • CUDA Compute Unified Device Architecture, Nvidia 开发的一种在 GPU 上执行计算任务的技术。
    相关名词:GPGPU,被 AMD 收购的 ATi 率先提出,后来 AMD 倒向了 OpenCL。注意:Nvidia 也支持 OpenCL。
  • OpenCL 和 CUDA 类似,也是压榨 GPU,不过目标是作为一种通用技术,而并非 CUDA 那样只用于 N 卡。不过由于 Nvidia 的强大话语权,CUDA 应该是比较牛。
  • RBM / DBN
  • RBM (受限玻尔兹曼机 Restricted Boltzmann machine) 一种生成随机神经网络
  • DBN (深度可信网络 Deep belief network)
  • 并行计算

实际应用

机器视觉 CV

OCR

人脸识别

Facial Recognition

音频

  • 语音识别
  • 语音合成

自然语言处理 NLP

决策

  • 自动驾驶
  • 游戏里面的 NPC 或者人机应该可以算吧!

相关能力

数学知识

阅读论文

常用框架

基础

  • NumPy
  • SciPy

机器学习框架

TF 和 Torch 主要用于处理深度学习(神经网络),在传统机器学习方面可能着力不多 (存疑)。

  • scikit-learn, 有时简称 sklearn
    依赖 numpy 和 scipy
    包含各种分类、回归和聚类算法:
  • 回归:线性、决策树、SVM、KNN
    • 集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 分类:线性、决策树、SVM、KNN,朴素贝叶斯;
    • 集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
  • 降维:LinearDiscriminantAnalysis、PCA

机器学习的存在还是十分有意义的。深度学习框架只适用与大数据场景,一般来说,很多场景下,可能还是得靠机器学习。

深度学习框架

当然都是开源的,闭源的就不好说了。

看了一遍,基本上用到语言是 C/C++ 和 Python。

最重要的两个框架:

  • PyTorch: 来自 Facebook,老一点的资料说学术界用 torch,工业界用 tf,但现在时代变了,PyTorch 风头无两。
  • 我注意到了 GitHub 上一个叫做 fastai/fastai 的仓库,日后可以关注关注。
  • TensorFlow: 来自 Google,曾经的王者,现已日薄西山,但存量还是不少。

还有这三个:

  • Keras: 之前基于 Theano,后面见 TF 火,就立马改投,甚至曾经一度合并到 TF 中,目前又分离出来了。玩得 6 啊。
  • Apache MXNet: 有很多资料提到这个框架,不过,最新的消息是最大的用户 AWS 已经宣布放弃 MXNet。
  • Deeplearning4j: 算是我在文档中看到的少数 Java 项目之一

之前比较热门,但早已不再积极维护的项目:

  • Theano 加拿大蒙特利尔大学开发。
  • Lasagne/Lasagne Lightweight library to build and train neural networks in Theano
  • Caffe 贾扬清,于清华完成本科硕士学业之后,去加州大学伯克利分校读博,在校期间开发了 Caffe。后来加入 Facebook 开发了 Caffe2。再后来,Caffe2 并入 PyTorch。
  • CNTK 微软开发,全称:Microsoft Cognitive Toolkit
  • Torch 用 Lua 和 C 写的。
    维基百科说 PyTorch 基于 Torch,但实际上不是,PyTorch 是全面重写。
    话说,Facebook 弄的 Python 版这么火,老的 Lua 版却被抛弃了,哪里说理去...

国内的动态:

  • 百度 PaddlePaddle: 中文名:飞桨,2016 年发布,号称国内首个深度学习框架(TF 开源于 2015)。
  • 华为 MindSpore 2019
  • 阿里妈妈 XDL (X-DeepLearning) 2018
    据说是以一种桥接的方式使用 TF 或 MXNet 做计算后端。
  • 阿里 MNN: 移动端场景下的神经网络 2019
  • 腾讯 TNN: 可能和阿里 MNN 相同的定位 2020,不过发文时特意强调自己 2017 年开源过业界首个移动端推理框架 NCNN。
  • 一流 OneFlow
  • 开放智能 Tengine
  • 清华大学 Jittor (计图)
  • 小米 MACE: Mobile AI Compute Engine 移动端深度学习框架
  • 一搜索发现还有好多...

其他框架

  • Tesseract
    有人说这是唯一可用的开源 OCR
    那,PaddleOCR 和 EasyOCR 呢?

参考资料与拓展阅读