TensorFlow深度学习-第一章
人工智能
人工智能、机器学习和神经网络之间的关系如下图:
机器学习分类
-
监督学习
样本和样本的标签,代表:线性回归、逻辑回归、支持向量机、随机森林
-
非监督学习
只有样本数据集,自行发现数据的模态,代表:自编码器、生成对抗网络
-
强化学习
通过与环境来交互学习解决问题的策略,代表:
DQN、PPO
神经网络
特征
发展史
- 1943年:神经元数学模型,MP模型
$$
f(x) = h(g(x))
$$
其中
$$
g(x)=\sum_ix_i,x_i\in{0,1}
$$
通过$g(x)$的值来完成输出值的预测:若大大于等于0,输出1;繁殖输出0
- 感知机模型
自动学习权重的神经元模型-感知机。输出值o和真实值y之间的误差用于调整神经元的权重系数${w_1,w_2,…,w_n}$
- 反向传播法BP
现代深度学习的基础:反向传播法BackPropagation
- Hopfild连接、
LSTM
1982年John Hopfildde
的循环连接的Hopfild网络提出
1997年LSTM
被提出
- 浅层神经网络发展史
- 第三次浪潮
多层神经网络在MNIST
数据集上的取得了优于SVM
的效果
提出将线性整流单元Rectfied Linear Unit,ReLU
作为激活函数
2012 年,Alex Krizhevsky 提出了 8 层的深层神经网络 AlexNet,它采用了 ReLU 激活函数Dropout 技术防止过拟合,同时抛弃了逐层预训练的方式,直接在 2 块 GTX580 GPU 上训 练网络。
- 深度学习发展史
2014 年,Ian Goodfellow
提出了生成对抗网络
2016 年,DeepMind
公司应用深度神经 网络到强化学习领域,提出了 DQN
算法,
深度学习特点
- 数据量大,数据级需求较高
- 计算力
非常依赖并行加速计算设备,目前的大部分神经网络均使用 NVIDIA GPU 和 Google TPU 或其他神经网络并行加速芯片训练模型参数
- 网络规模
随着深度学习的兴起和计算能力的提升,AlexNet(8 层),VGG16(16 层), GoogLeNet(22 层),ResNet50(50 层),DenseNet121(121 层)等模型相继被提出,同时输入图 片的大小也从 28x28 逐渐增大,变成 224x224,299x299 等,这些使得网络的总参数量可达 到千万级别,
- 通用智能
深度学习应用领域
- 计算机视觉CV
- 图片识别image classification; VGG 系列、Inception 系 列、ResNet 系列等。
- 目标检测 object detection;RCNN,Fast RCNN,Faster RCNN,Mask RCNN,SSD,YOLO 系列
- 语义分割 semantic segmentation;FCN,U-net,SegNet,DeepLab 系列等
- 视频理解video understanding;C3D,TSN,DOVF,TS_LSTM
- 图片生成 image generation;VAE 系列,GAN 系列
- 自然语言处理NLP
- 机器翻译; Seq2Seq,BERT,GPT, GPT-2 等
- 聊天机器人:常用在咨询系统、娱乐游戏、智能家居等
- 强化学习
- 虚拟游戏:QN,A3C,A2C,PPO
- 机器人
- 自动驾驶Autonomous Driving
深度学习框架
- Theano 是最早的深度学习框架之一 ,已经停止
- Scikit-learn 是一个完整的面向机器学习算法的计算库,传统的统计学习领域,不支持神经网络和GPU加速
- Caffe:面向使用神经网络、提供Python结口、支持GPU和CPU,融入到PyTorch中
- Torch 是一个非常优秀的科学计算库,基于较冷门的编程语言 Lua 开发
- MXNET :陈天奇和李沐等人开发,采用命令式和符号式混合编程
- PyTorch :2017年发布
- Keras 是一个基于 Theano 和 TensorFlow 等框架提供的底层运算而实现的高层框架
- TensorFlow 是 Google 于 2015 年发布的深度学习框架
TF 和PyTorch
都是采用动态图(优先)模式开发,动态图模型开发效率高,但是运行效率可能不如静态图模式
TensorFlow 在工业界拥有完备的解决方案和用户基础;
PyTorch 得益于其精简灵活的接口 设计,可以快速设计调试网络模型,在学术界获得好评如潮
TF2-demo
1 | import tensorflow as tf |
TF3大核心功能
- 加速计算
神经网络本质上由大量的矩阵相乘,矩阵相加等基本数学运算构成;TensorFlow 的重 要功能就是利用 GPU 方便地实现并行计算加速功能。
1 | # 创建在cpu上运算的2个矩阵 |
并通过 timeit.timeit()
函数来测量 2 个矩阵的运算时间:
1 | def cpu_run(): |
2 . 自动梯度网络
在使用 TensorFlow 构建前向计算过程的时候,除了能够获得数值结果,TensorFlow 还 会自动构建计算图 ,看个demo:
$$
y=aw^2+bw+c
$$
$$
\frac {\partial y}{\partial w}=2aw+b
$$
考虑在点$(a,b,c,w)= (1,2,3,4)$的导数为10
1 | import tensorflow as tf |
3 . 常用神经接口
TensorFlow
除了提供底层的矩阵相乘,相加等运算函数,还内建了常用
- 网络运算函数
- 常用网络层
- 网络训练
- 网络保存与加载
- 网络部署
- ……