我想深入学习一下人工智能。第一步就是需要从总体上了解一下这个领域的相关知识,为后面的自学做个计划。
基本概念
人工智能
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
- 循环神经网络 RNN (Recurrent neural network),有时也写作 recurrent net
- 长短期记忆 LSTM (Long short-term memory)
解决长序列训练过程中的梯度消失和梯度爆炸问题。 - GRU (Gated Recurrent Unit)
一种 LSTM 变体
深度学习
强化学习
增量学习
迁移学习 Transfer Learning
还有其他概念:
元学习 Meta Learning,
领域自适应 Domain Adaptation
其他术语
- 模型
- 训练 很多软件或者库带有预训练模型。
- 梯度 Gradient
- 梯度下降 SGD
- 计算图 Computation Graph
- 导数
- 矢量,或者向量: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)
- 并行计算
- Seq2Seq / Attention
实际应用
机器视觉 CV
图像分类
图像语义分析
OCR
人脸识别
Facial Recognition
音频
语音识别
语音合成 Text2Speech
自然语言处理 NLP
情感分类
机器翻译
阅读理解
聊天机器人
决策
- 自动驾驶
- 游戏里面的 NPC 或者人机应该可以算吧!
其他
自动驾驶
换脸 / 图片风格转换
- Face generation
- Style Transfer
相关能力
数学知识
- 线性代数
- 微积分
- 概率论与数理统计
阅读论文
- 英文
常用框架
基础
- NumPy
- SciPy
- OpenCV
机器学习框架
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 移动端深度学习框架
- 一搜索发现还有好多...
TensorFlow
PyTorch
其他框架
- Tesseract
有人说这是唯一可用的开源 OCR
那,PaddleOCR 和 EasyOCR 呢?
参考资料与拓展阅读
- 知乎, 神经网络、深度学习、机器学习是什么?有什么区别和联系?
- 维基百科(en),Comparison of deep-learning software
- 知乎专栏,Scikit-learn