Google的TensorFlow 亚马逊的MxNet 微软的 CNTK 百度的 PaddlePaddle Caffe2 在TensorFlow发布之前其一直是深度学习领域最为火热的项目。Caffe2拥有大量已经训练好了的模型,如AlexNet,VGG,Inception,收藏在Modle Zoo中。 Facebook 的Pytorch
深度学习的执行作业需要大量的矩阵和向量计算,基于GPU,CPU,FPGA,ASIC等,GPU适合模型训练,目前主流的是NVIDIA GPU。
学习框架有很多种,慢慢的就积累了很多基于不同框架的模型,所以模型和框架之间转换是急需解决的问题;所以就有了Microsoft和Facebook发布了一个全新的开源项目-ONNX,欲借此打造一个开放的深度学习工具生态系统。
CNN是深度学习技术中重要的网络结构之一。 CNN最初引用于图像数据,根据图像数据特点进行近似和优化,除了通用的网络结构,CNN还包含了几个特有的网络组件,如,卷积层,池化层,全连接层等,神经网络参数通过反向 传播算法进行训练。 通过深度学习CNN的处理方式,我们可以发现CNN相比于图像处理算法的优点在于,CNN可以直接输入原始图像,这就避免了对图像复杂的前期预处理和特征工程。
卷积层是CNN中的重要组件,它不仅能够通过各种卷积核提取图像特征,还能够通过卷积优化传统全连接层的计算量。
多滤波器 比如有的滤波器可进行边缘检测、锐化、边框模糊、高斯模糊,因此,使用多个不同的滤波器对同一张图片进行多次特征提取,可以获得不同的特征图。权值共享 采用卷积的方式,可以减少一定参数,但是参数依然很多,采用权值共享的方式可以进一步减少参数。池化(pooling)的目的:通过卷积获得特征后,希望利用这些特征进行分类。理论上可以利用所有的特征去训练分类器,但是这样做面临着计算量的挑战。同时容易出现过拟合。因此可以对不同位置的特征进行聚合统计进而表示一个更大的图像。聚合统计特征不仅具有低的多的维度(相比使用提取到的所有特质),同时还会改善结果(不容易过拟合)。这种聚合的操作称作为池化(pooling)。 常用的池化算法有最大池化(max pooling),平均池化。
inception目的:消除尺寸对识别结果的影响。
flatten 展平,使平坦。
跳层连接允许不同层级之间的因素进行信息交互、综合判断。
RNN应用于时序数据,例如文本和语音,RNN针对时序数据特点进行相应的网络结构设计,RNN由多个cell按照时序串联,每个Cell都可以通过LSTM,GRU等进行实现。 RNN的网络结构形式
一对一形式(One to One)多对一形式 (Many to One)一对多形式(One to Many)多对多形式 (Many to Many),这种结构又称作Encoder-Decoder,也可称作Seq2Seq模型。Inception的主要目标在于更有效地提取特征,减少参数量。
随着深度的增加,CNN所带有的特征也更加丰富,因此特征维度会变的更大,在这种情况下,单纯地增加CNN特征维度会带来训练上的问题,这种方式不适合神经网络在深度上进行扩展,因此产生了Inception子结构。这种子结构可以将不同大小的卷积核心进行组合,这样就可以使得神经网络的训练更加高效。
Inception解决了特征的问题,但其在网络深度上的进一步扩展,需要更加有效的网络结构,这就出现了再深度神经网络之上添加支路的过程。
跨层之路的加入使得深度神经网络更加接近于浅层神经网络,这使得训练更加有效解决了训练过程中的梯度消失问题。
在自然语言处理(NLP)中,比如翻译,常见的结构就是seq2seq结构,这种结构通常是由两个RNN结构组成。 这两个RNN分为encoder和decoder。两者之间的桥梁是encoder最终产生的状态向量,状态向量传入decoder中作为其的第一个状态,从而奖励前两个网络之间的联系。当然,encoderDecoder结构并不仅限于RNN,CNN同样也可以完成。
用于自然语言处理的神经网络通常分为encoder和decoder,它们通常是两个独立的RNN。但是语言长度的不确定性,我们有时需要将一个很长的语句通过encoder压缩成一个固定长度的向量。这显然是不合常理的,因此,Attention应运而生,其使得encoder每一步的输出都有可能参与decoder的输出
MMdnn是一套工具集,其包含模型转换,模型可视化等,支持Caffe,Tensorfllow,CNTK,MxNet,Pytorch,Keras,CoreML模型之间的转换。
Azure是Microsoft的公有云平台,其提供以下服务 GPU虚拟机 模型训练服务 模型管理和部署
参考:【深度学习核心技术、工具与案例解析】 高彦杰 于子叶 著
