竹杖芒鞋轻胜马,一蓑烟雨任平生

我所理解的深度学习技术栈

深度学习,自2012年以来,一年比一年火。相比80年代的人工智能热,这一次,基于深度学习的各种智能服务确实带来了可见的惊喜。
深度学习在图像领域的各层面都取得了骄人的成绩,包括分割、识别等高级任务,以及去噪、二值化、超分辨率等低级任务。
在语音以及自然语言处理等方面也在快速发展。

介绍一下我所认为的深度学习技术栈。

数据收集与扩充

数据是深度学习成功的重要因素,并且随着各种深度学习框架的普及,数据越来越成为最重要的门槛。
数据一般有2种来源,其一是来自于业务场景的真实数据(包括人工标注的数据),其二是模拟真实场景仿造的数据。
真实数据昂贵不易获得,很多时候就需要产生大量的模拟数据以满足深度学习的要求。模拟数据因尽可能的接近真实数据的分布情况。
在图像领域,产生模拟数据的手段包括但不限于如下技术:

  • 旋转
  • 剪切
  • 翻转
  • 缩放
  • 加噪声
  • 有损压缩(JPEG、Mpeg等)
  • 水印

基础深度学习模型

应该理解并能编程实现基础的深度学习模型(可参考:EasyCNN,EasyTF),包括如下基础模型:

  • MLP
  • CNN
  • LSTM

高级深度学习模型

需要理解高级深度学习模型,并能够通过通用框架(如TensorFlow、Keras等)实现之。

  • AlexNet
  • VGG
  • GoogleNet (Inception v1-v4, Xception)
  • ResNet
  • Network-in-network
  • SqueezeNet
  • E-Net
  • R-CNN、SSD、YOLO
  • Stack RNN/LSTM/GRU
  • Seq2Seq
  • CRNN

各种trick

在训练深度学习模型的时候,有时候各种trick能起到很好的效果。应该了解其大致作用和原理。

  • Dropout
  • Batch Normalization
  • Local Response Normalization
  • L1/L2正则化

各种Operator

在现代深度学习框架中,普遍都有Operator这样的抽象概念,需要了解一些重要的OP的原理和推导。

  • Conv
  • Pool
  • RNN/LSTM
  • Element-wise op
  • Softmax
  • CTC

参数初始化

参数初始化,了解其作用即可。

  • xavier
  • constant
  • gaussian
  • uniform
  • bilinear

激活函数

激活函数,了解其作用即可。

  • Sigmoid
  • Tanh
  • RELU
  • Leaky ReLU
  • ELU
  • Maxout

损失函数

不同的任务选用不同的损失函数。

  • Absolute loss
  • Square loss
  • Log loss
  • Cross-Entroy loss
  • Zeor-one loss
  • Hinge loss
  • Perceptron loss
  • Exponential loss
  • CTC loss

优化方法

优化方法影响模型精度和模型收敛速度,一般选择SGD+Momentum。

  • SGD
  • Momentum
  • Nesterov
  • Adagrad
  • Adadelta
  • RMSprop
  • Adam
  • Adamax
  • Nadam

框架实现

框架用多了,自然就了解框架的大概模块和原理了。也可以尝试自己实现一遍框架,这时候不只是考量深度学习基本知识,还考验工程架构能力。

  • 框架设计
  • 计算图与其优化
  • 数据并行与模型并行
  • 分布式

理论与实际

深度学习发展非常快,隔不了几个月就有新概念,一般关注一下相关的新闻和最新的论文即可。一些实际问题在踩坑和交流的过程中会有答案。

  • Zero-center
  • 梯度消失
  • 梯度爆炸
  • 如何调参
  • Finetune
  • 增强学习
  • 模型压缩
  • 速度优化(low bit)

应用

各种深度学习的应用,“没有做不到,只有想不到”。

  • OCR
  • 语音识别
  • 自然语言处理
  • 风格转移
  • 人脸定位 & 人脸识别
  • 手势识别
  • 物体追踪
  • 图像检索
  • 超分辨率重建
  • 去噪&去马赛克

个人推崇带着问题去学习,在实际项目中学习。因此这里大部分只是关键字,并不尝试去解释每个词的意思。