机器学习、深度学习相关配置须知及其适用算法的总结
常识
传统机器学习框架和深度学习框架之间有区别。本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测和数据准备的各种学习方法,并且其可以或可以不包括神经网络方法。深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的各种神经网络拓扑。这些层包括模式识别的多步骤过程。网络中的层越多,可以提取用于聚类和分类的特征越复杂。
按照各类框架主要实现的算法的性质,我们可将这些框架(库)分为几大阵营:
- Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow等是深度学习框架(库)。
- Scikit-learn和Spark MLlib是机器学习框架(库)。
- Theano跨越了这两个类别。
配置的常识
- 一般来说,深层神经网络计算在GPU(特别是Nvidia CUDA通用GPU,大多数框架)上运行的速度要比CPU快一个数量级。
- 一般来说,更简单的机器学习方法不需要GPU的加速。
虽然可以在一个或多个CPU上训练DNN,训练往往是缓慢的,慢不是说秒或分钟。需要训练的神经元和层数越多,可用于训练的数据越多,需要的时间就越长。
举个例子:
当Google Brain小组在2016年针对新版Google翻译训练语言翻译模型时,他们在多个GPU上同时运行了一周的训练时间。没有GPU,每个模型训练实验将需要几个月。
这些框架中每一个框架具有至少一个显著特征。 Caffe的强项是用于图像识别的卷积DNN。 MXNet具有良好的可扩展性,可用于多GPU和多机器配置的训练。 Scikit-learn具有广泛的强大的机器学习方法,易学易用。 Spark MLlib与Hadoop集成,具有良好的机器学习可伸缩性。 TensorFlow为其网络图TensorBoard提供了一个独特的诊断工具。
另一方面,所有深度学习框架在GPU上的训练速度几乎相同。这是因为训练内循环在Nvidia CuDNN包中花费大部分时间。然而,每个框架采用一种不同的方法来描述神经网络,具有两个主要的阵营:
- 使用图形描述文件的阵营
- 通过执行代码来创建它们的描述的阵营。
考虑到这一点,让我们来看看各个算法和机器学习/深度学习框架的总结。
30个机器学习/深度学习算法总结
序号 | 算法名称 | 简称 | 所属类别 | 用途 |
---|---|---|---|---|
1 | 卷积神经网络(Convolutional Neural Network) | CNN | 深度学习 | 常运用在图像和语音识别 |
2 | 递归神经网络(Recurrent Neural Network) | RNN | 机器学习 | 常用于NLP(自然语言识别) |
3 | 长短期记忆神经网络(long-short term memory) | LSTM | RNN的其中一种形式 | 机器翻译、图像分析、文档摘要、语音识别、图像识别、预测疾病等 |
4 | 门控循环单元(Gated Recurrent Unit) | GRU | LSTM的改进 | 机器翻译、语音识别等 |
5 | 多层感知器(Multilayer Perceptron) | MLP | MLP是感知器的推广 | 常用于语音识别、图像识别、机器翻译等 |
6 | 生成对抗网络(Generative Adversarial Networks) | GAN | BP的推广 | 最常使用的地方就是图像生成,如超分辨率任务,语义分割等 |
7 | 受限波尔兹曼机(Restricted Boltzmann Machine) | BM | 机器学习 | 用于协同过滤,降维,分类,特征学习,主题建模以及搭建深度置信网络。 |
8 | 深度置信网络(Deep Belief Network) | DBN | 多层RBM | 使用DBN识别特征,分类数据,还可以用来生成数据。 |
9 | 自编码器(AutoEncoder) | AE | 机器学习 | 主要用于数据可视化的数据降噪和降维 |
10 | 堆叠神经网络(Stacked Auto-Encoder) | SAE | 多层自编码器 | 降维,将复杂的输入数据转化成简单的高维特征 |
11 | 稀疏自编码器(Sparse AutoEncoder) | SAE | 自编码器的基础上加上L1的Regularity限制 | 一般用来学习特征,以便用于分类 |
12 | 降噪自编码器(Denoising AutoEncoder) | DAE | 自编码器的扩展 | 可用于图像识别、图像复原 |
13 | Hopfield网络(Hopfield Neural Network) | HNN | 反馈型神经网络 | 求解最优化问题、文本处理 |
14 | 自组织映射(Self-Organizing Map) | SOM | 神经网络 | 用于数据降维、可视化以及聚类 |
15 | 径向基函数网络(Radial Basis Function Network) | RBF network | 前馈型神经网络 | 时间序列预测、模式分类、系统控制和非线性回归 |
16 | 脉冲神经网络(Spiking Neural Network) | SNN | 神经网络 | 用来学习生物神经系统的工作 |
17 | 极限学习机(Extreme learning Machine) | ELM | 前馈神经网络 | 可用于完成分类任务 |
18 | 反卷积网络(Deconvolutional Network) | DN | CNN的扩展 | 主要用于特征可视化 |
19 | 深度卷积逆向图网络(Deep Convolutional Inverse Graphics Network) | DCIGN | 变分自编码器(VAE) | 可成功学习在3D渲染图像中表示姿态和光线的图形代码 |
20 | 回声状态网络(Echo State Network) | ESN | 属于RNN的范畴 | 动态模式分类,机器人控制,对象跟踪和运动目标检测,事件检测等 |
21 | 深度残差网络(Deep Residual Network) | DRN | 深度神经网络 | 图像分类,目标检测 |
22 | 支持向量机(Support Vector Machine) | SVM | 一种线性分类器 | 模式分类和非线性回归 |
23 | 神经图灵机Neural Turing Machine | NTM | 神经网络+记忆库 | 可用于自然语言处理 |
24 | AlexNet | AlexNet | 其本质仍旧是CNN | 目标检测 |
25 | GoogLeNet | GoogLeNet | 深度神经网络 | 目标检测、图像识别 |
机器学习/深度学习常用框架(库)总结
序号 | 库名称 | 支持语言 | 硬件要求 | 基础依赖包 | 显著特征(强项) | 适用算法 | 配置参考 |
---|---|---|---|---|---|---|---|
1 | scikit-learn | python | 不支持GPU加速 | NumPy和SciPy | 机器学习 | 支持向量机(SVM),最近邻,逻辑回归,随机森林,决策树 | 配置 |
2 | Theano | python | 支持GPU计算 | NumPy、SciPy、BLAS | 速度与C媲美 | 机器学习和深度学习 | 配置 |
3 | TensorFlow | 主要python/c++,也支持Go/Java/Lua/Javascript/R | 支持GPU加速 | NumPy、SciPy等,CUDA和cuDNN | 图像识别等 | CNN、GAN、RNN、LSTM、AE等 | 配置 |
4 | Keras | python | 支持GPU加速 | 基于Theano和TensorFlow | 支持快速实验而生 | CNN和RNN,或二者的结合 | 配置 |
5 | Caffe | C++、matlab、python | 完美支持GPU | 独立框架 | 图像处理 | 更支持CNN | 配置 调用 |
6 | Pytorch | python | 有一套很好的GPU运算体系 | python基础包 | 计算机视觉,NLP | CNN、RNN等 | 配置 |
7 | Sonnet | python | 支持GPU加速 | TensorFlow | 搭建AI高级结构 | LSTM、RNN、CNN等 | 配置 |
8 | MXNet | C++, Python, R, Scala, Julia, Matlab、JavaScript等语言 | 支持CPU加速 | CUDA和cuDNN | 图像识别、NLP情感分析 | CNN、RNN | 配置 |
9 | CNTK | C ++和Python | 实现了跨多个gpu和服务器的自动分异和并行化 | python基础包或Keras | 语音识别领域 | 支持各种前馈网络,包括MLP、CNN、RNN、LSTM等 | 配置 |
10 | Dlib | C ++、python | 支持GPU加速 | cuda、cudnn | 图像处理 | SVM、聚类算法、数值算法等 | 配置 |
更多详细的库和算法的使用情况可以查看我们的思维导图
服务器配置建议
CPU
根据在所有的机器学习和深度学习的框架以及库中,大部分都只是支持GPU运算的,即使是可以CPU与GPU混用的,CPU的运行速度比GPU运行速度不只低一个数量级。GPU可以短时间运行结束的,CPU需要大量的时间来运行。
CPU在深度学习任务中,CPU并不负责主要任务,单显卡计算时只有一个核心达到100%负荷,所以CPU的核心数量和显卡数量一致即可,太多没有必要,但是处理PICE的带宽要到40.
建议CPU配置
- Intel i7-7800X(内核数:6核;线程数:12;处理器基频:3.5GHz;最大睿频频率:4.00GHz;缓存:8.25MB L3)
- Intel E5-2620 v3(内核数:6核;线程数:12;处理器基频:2.6GHz;最大睿频频率:3.2GHz;缓存:15MB SmartCache)
- Intel i7-6850K(核心数:6核;线程数:12核;处理器基频:2.6GHz;最大睿频率频率:4.0GHz;缓存:15MB)
GPU
现在机器学习与深度学习最主要都是基于CUDA计算(CUDA是NVIDIA开发GPU并行计算环境),所以建议使用的GPU为NVIDIA公司的GPU
由于现在机器学习和深度学习的框架都只是支持单精度,所以双精度浮点计算时不必要的。并且,太高精度对于深度学习的错误率时没有提升的。
建议GPU配置:(建议GPU配置至少要有两个)
- GeForce GTX1060(显存:6GB;内存带宽:216GB/s;处理器:1280个CUDA核心@1708核心MHz)(最低配置)
- GeForce GTX1070(显存:8GB;内存带宽:256GB/s;处理器:1920个CUDA核心@1683核心MHz)
- GeForce GTX1070Ti(显存:8GB;内存带宽:256GB/s;处理器:2432个CUDA核心@1683核心MHz)
- GeForce Gtx1080(显存:8GB;内存带宽:320GB/s;处理器:2560个CUDA核心@1733核心MHz)
- GeForce GTX1080Ti(显存:11GB;内存带宽:484GB/s;处理器:3585个CUDA核心@1582核心MHz)
DDR
- 海盗船32G-DDR4
- 金士顿骇客神条Fury系列DDR4 2400 32G(16GB*2)
硬盘
最主要是使用来存储数据,所以存储空间越大越好,至少是1T
SSD
- Intel 600P系列 512G M.2
- Intel 600P系列 1T M.2
- 三星 960EVO 1TB M.2 NVMe
常用库的配置详情
scikit-learn
安装conda包
为什么要安装conda?
- 1、用conda我们可以非常方便地安装python的各种package(e.g. numpy, scipy, ma