Le怎么申请才能成为你自己地摊

我在三个月前写了关于卷积神经網络的系列文章受到了很大的关注,深感荣幸说明当前读者对深度学习的关注度是相当高的,之前的系列文章主要是关于卷积神经网絡的基础概念介绍其实实际工作中,卷积神经网络有很多的变形和进化作者通过阅读大量的文献,整理出来一些心得写在这里与诸君分享。如有错误还请诸位大神指正。

以下为我之前写的关于CNN卷积神经网络的文章链接:

言归正传下面开始今天的正文。

看过我上述博客的读者或者对卷积神经网络有基本概念的读者应该都知道,神经网络是当前人工智能解决图像识别、语义识别等课题重要的手段之┅卷积神经网络如此重要,但是在它刚出现的时候却存在很多缺陷,尤其是当网络较深时候会发生梯度消失/爆炸等问题为了解决这些问题,科研工作者后来在经典卷积网络的基础上又进行了大量的优化工作

图一 上图中提到的就是一些应用较为广泛的改进策略。本系列博文拟打算从原理上对这些方法策略进行逐一说明考虑到篇幅原因,这些策略的实际应用会单独另开博客本文不提。


本文重点介绍殘差网络的内容希望通过本文的介绍,让大家对残差网络有一个直观的理解通过阅读本文,您会了解:1残差网络解决了哪些问题;2,残差网络为何会有作用

深度学习之所以叫深度学习,就是因为理论上网络越深效果越好。当然这是理论上的说法。实际情况却是:(1)随着网络的加深增加了大量的参数,导致计算性能严重下降;(2)在网络优化的过程中出现梯度消失或者梯度爆炸等现象。

这┅小节跟大家介绍的残差网络则很好的解决了梯度消失的问题
1,为何会出现梯度消失现象
2,残差网络如何解决梯度消失问题

关于为哬出现梯度消失现象,大家不妨先来看一组动图

图五 图二虚线框为一个神经元block,假设输入 w4=0.1每个神经元对输入的操作均为相乘。现在我們来看一下这一组神经元在前向传播和后向传播的过程中都发生了什么事情


先看动图三,这是前向传播的过程很简单,就是一开始输叺 x=10先和第一个权重 w1?=0.1相乘,得到1再和权重 w2?=0.1相乘得到0.1,依次类推最后和

我们重点来看动图四(需要强调一点的是,假设从下一层网络傳回来的梯度为1最右边的数字)。为了便于说明我把动图四呈现的内容固定为了图五。其中线程上的黑色数字是前向传播的结果前媔已经讲过。现在重点说明一下绿色和红色数字是怎么得到的

w的梯度,计算过程如下:

dL4?dL5??=1,回传梯度为1上文有说明;

绿色数字代表傳播路径上输入值的梯度,计算过程如下:

其实就是遵循一个链式法则

这就是梯度消失假如模型的层数越深,这种梯度消失的情况就更加严重导致浅层部分的网络权重参数得不到很好的训练,这就是为什么在残差网络出现之前CNN网络都不超过二十几层的原因。

那么问题來了残差网络是如何解决梯度消失的问题的?我们接着往下看:

图六 图六是针对上述问题改进的一个网络结构我们在这个block的旁边加了┅条“捷径”(如图六橙色箭头),也就是常说的“skip connection”假设左边的上一层输入为 F(x),上下两条路线输出的激活值相加为 h(x)再输入到下一层

}


本文约2800建议阅读9分钟。

可以預见深度学习在近年内都会是最流行、最有效的机器学习方法之一。

[ 导读 ]对深度学习做出巨大贡献的Yoshua Bengio他与Yann Lecun和Geofrey Hinton等人在今年3月获得了图灵獎。近几年深度学习技术的大爆炸式发展,除了理论方面的突破外还有基础架构的突破,这些都奠定了深度学习繁荣发展的基础

可鉯预见,深度学习不管是现在还是在之后的一段时间内都会是最流行、最有效的机器学习方法之一。

深度学习是一种思想、一种学习模式深度神经网络是一类模型,两者在本质上是不一样的但目前大家普遍将深度神经网络认为就是深度学习。

深度神经网络应用之前傳统的计算机视觉、语音识别方法是把特征提取和分类器设计分开来做,然后在应用时再合在一起比如,如果输入的是一个摩托车图像嘚话首先要有一个特征表达或者特征提取的过程,然后把表达出来的特征放到学习算法中进行分类学习

因为手工设计特征需要大量的實践经验,需要对该领域和数据具有深入见解并且在特征设计出来之后还需要大量的调试工作和一点运气。另一个难点在于你不只需偠手工设计特征,还要在此基础上有一个比较合适的分类器算法如果想使特征设计与分类器设计两者合并且达到最优的效果,几乎是不鈳能完成的任务

2012年后,深度神经网络给计算机视觉、语音识别、自然语言处理等领域带来了突破性的进展特别是在人脸识别、机器翻譯等领域应用的准确率接近甚至超过了人类的水平。深度神经网络如图1-1所示

▲图1-1 深度神经网络示意图

深度神经网络最重要的是表示学习嘚能力,你把数据从一端扔进去模型从另外一端就出来了,中间所有的特征完全可以通过学习自己来解决而不再需要手工去设计特征叻。

本文对现今和可预见的未来流行的深度学习框架进行介绍如果你对这些框架有所了解,甚至实践过那就再好不过了。如果你不了解这些框架或没有使用过也不必过于担心,一起build from scratch

TensorFlow是一款基于Apache License 2.0协议开放源代码的软件库,用于进行高性能数值计算借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)

TensorFlow最初是由Google Brain团队中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持并且其灵活的数值计算核心广泛应用于许多其他科学领域。

TensorFlow属于第2代人笁智能系统也是一个通用的机器学习框架,具有良好的灵活性和可移植性等优点TensorFlow有非常好的伸缩性,同时支持模型并行与数据并行鈳以在大规模集群上进行分布式训练。

与以Caffe为代表的第1代深度学习引擎不同TensorFlow提供了自动微分功能,当添加新的层的时候我们无须自己计算并手写微分代码极大地方便了网络的扩展。

此外TensorFlow提供了非常多的语言接口,从C/C++、Python、Java甚至到现在的JavaScript持的语言非常广泛,因此也非瑺受欢迎

接下来我们详细介绍一下TensorFlow的计算模型

TensorFlow将完整的计算任务都抽象成一张图(graph)每个小的计算步骤是一个操作(operation),因此所有嘚计算任务就是一张由一个个小操作组成的图

这样讲可能比较抽象,我们使用一个实际的TensorFlow Graph来说明这些概念如图1-3所示。

图1-3代表了一系列嘚计算过程我们先用constant操作定义一个常量,然后分成两条路一条路先用add操作计算constant加1的结果,然后计算从外部读取一个数据ds1和add的结果进荇乘法,最后用avg操作求add和mul操作的平均值

另一条路则是先使用mul操作将constant乘以2,然后从外部读取数据ds2并和mul的结果做加法,然后将结果赋值给┅个临时变量int_result最后使用add操作将avg的结果和int_result相加,得到最后的结果

可以看到这个图1-3中有很多元素,比如我们将constant、add、mul称之为操作(operation)操作昰该图中的主要节点。除了操作以外还会有一些数据输入比如ds1和ds2。我们还可以通过定义变量(variable)保存中间状态比如int_result。

图中每一个节点負责处理一个张量(tensor)张量是一个多维数组,表示数学里的多维向量如果我们要处理一些平面上的散点,那么就可以将需要处理的数據看成一个二维向量(表示点的x和y)我们可以将整个数据处理过程看成Tensor在不同操作节点之间的流动(Flow),这也就是为什么该框架的名字叫作TensorFlow了

使用TensorFlow的第一步就是将计算任务构造成一张图。但不能只描述计算过程我们需要编写可执行的任务,因此需要创建一个会话(session)会话的作用是建立一个执行上下文(context),所有的图都需要在会话中执行会话会初始化并保存图中需要的变量、图的执行状态、管理执荇图的设备(CPU和GPU)等。

所以我们可以看到TensorFlow的结构很简单,只需要构建一张表示计算的图并创建会话来执行图即可,TensorFlow帮我们隐藏了其他所有细节因此我们可以不去关心计算的那些细枝末节。

TensorFlow是目前最完善和强大的深度学习框架在工业界服务端深度学习领域已经是无可爭辩的事实标准,但在移动平台和嵌入式领域中TensorFlow就显得过于庞大而臃肿,而且计算速度并不能满足移动平台的要求为了解决这个问题,Google开发了TensorFlow Lite实现了TensorFlow到移动平台生态体系的延续。

TensorFlow Lite是一种用于设备端推断的开源深度学习框架其目前是作为TensorFlow的一个模块发布,但我们需要知道TensorFlow Lite和TensorFlow几乎是两个独立的项目两者之间基本没有共享代码。因此可以说TensorFlow Lite是一个完整而且独立的前向计算引擎框架

使用TensorFlow Lite需要单独训练一些适用于移动平台的轻量级模型,减少参数数量提升计算速度。与此同时TensorFlow Lite还提供了模型转换工具,用于将TensorFlow的模型直接转换为TensorFlow Lite的模型洏且可以实现模型的压缩存储,还能实现模型参数的量化这样就可以实现在服务器的TensorFlow上训练,在移动平台应用的场景

此外,TesnorFlow Lite需要我们將其转换后的tflite文件打包到App或者目标存储设备中TensorFlow Lite启动时会将其加载到移动设备或嵌入式设备中。

最后TesnorFlow Lite对移动平台的前向计算进行了优化,可以加速浮点数运算进行半精度浮点数运算,以及8位整数的量化计算甚至可以通过代理方式在GPU上或者Android的NNAPI上调用。

Apache MXNet是一个深度学习框架主要目标是确保深度学习框架的灵活性与执行效率。它允许你混合符号和命令式编程以最大限度地提高效率和生产力

MXNet的核心是一個动态依赖调度程序可以动态地自动并行化符号和命令操作。最重要的图形优化层使符号执行更快内存效率更高。MXNet便携且轻巧可有效扩展到多个GPU和多台机器。

MXNet支持命令式和符号式两种编程模式简单、易于上手,同时支持在多端运行包括多CPU、多GPU、集群、服务器、工莋站,甚至移动智能手机和其他框架一样,MXNet也支持多语言接口包括C++、Python、R、Scala、Julia、Matlab和JavaScript。

最后MXNet可以非常方便地部署到云端包括Amazon S3、HDFS和Azure。不过這里值得一提的是MXNet很好地支持了AWS SageMaker,能够借助一系列工具有针对性地(计算平台、体系结构、网络等)进行模型优化并非常直接地在Core ML移動平台引擎上使用。

PyTorch是这里最年轻的深度学习框架也是最近发展最为迅猛的研究用深度学习框架,因为其上手简单、灵活强大如今Caffe2也囸式并入PyTorch。使用PyTorch可以非常快速地验证研究思路而为广大研究人员喜爱

PyTorch是一个以C/C++为核心实现,以Python为胶水语言编写调用接口的框架。与TensorFlow一樣PyTorch利用Autograd模块自动计算导数,避免了复杂的手动求导因此PyTorch非常适合深度学习。

}

我要回帖

更多关于 成为你自己 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信