本篇文章6235字,读完约16分钟
艾不是一个简单的主题。ai算法的开发和调试没有统一的平台和语言,它集成了大量的API来方便调用。目前的人工智能开发平台仍处于半野生状态。许多功能需要自己构建和实现。
幸运的是,这个领域已经得到了足够的重视,所以许多巨头已经为它开发了自己的平台,包括谷歌的张量流。Google deepmind在人工智能领域的造诣是众所周知的,它的开发语言平台不禁唤起人们的想象力。那么,张量流如何适合发展?你能为你的研究或产品带来更好的机会吗?
在这次公开课上,我们邀请了尼尔森公司机器学习实验室的负责人李嘉波博士。他领导的团队成功地将基于张量流的改进算法应用到公司的精确广告推送业务中。在十余年的行业中,李博士始终坚持学术研究与工业应用相结合,长期与学术界保持密切合作,并将学术成果引入软件创新。
嘉宾介绍:李加波,目前在美国技术公司尼尔森的机器学习实验室工作,负责领导基于深度学习的智能产品的研发,主要利用tensorflow框架构建新的深度神经网络,利用gpu训练各种用户分类模型,并将这些模型应用到精准广告推送中。在去年加入尼尔森之前,他为生物、制药和金融等科技软件公司工作,包括accelrys和schrodinger?Dinger)和td ameritrade。
十多年来,李博士始终坚持行业学术研究与行业应用相结合,长期与学术界保持密切合作,将学术成果直接引入软件创新。目前,他是中山大学药学院的客座教授,指导博士生的研究项目,并提供关于算法和高性能计算的高级讲座。此外,他在国际期刊上发表了60多篇科学论文。李博士研究了各种复杂的科学计算算法,并在不同学科领域发明了一系列优秀的算法。
▎:你为什么选择张量流动作为第一个平台?
起初,还不确定该选择哪一个深度学习平台,张量积还没有出来。当时主要考虑的是平台的成熟度、支持的编程语言、gpu的支持和效率、构建神经网络的便利性、启动的难度、平台的后续开发、开发的生态环境以及平台的效率。虽然我们已经收集了一些比较数据,但在许多因素中进行选择是不容易的,逐个尝试也是不现实的。不久之后,tensorflow从谷歌上打开了它的来源,我们毫不犹豫地选择了它。
首先,tf拥有我们需要的所有功能(c++/python语言支持、gpu等)。)。更重要的是,我们相信谷歌推出的平台将很快被大家所接受,并很快形成相应的开发生态系统和积极的后续更新开发。后来的事实也证实了我们的期望。下表比较了几种流行的平台,数据来自今年2月在arxiv上发表的论文。
当时,caffe和an ano是最活跃的开源开发社区,但至今tensorflow拥有最多的开发人员。请参见下表:
总的来说,tf给了我很好的感觉,我相信谷歌产品有后来者的优势。
▎tensorflow的优点和缺点是什么?一般来说,张量流提供的api有足够的自由度来构建神经网络。损失函数的构造也非常直接,tf框架可以自动计算任何损失函数的导数。模型参数的训练还提供了一些可供选择的最新算法。Tf用户论坛也非常活跃,如果你有任何困难,你可以从它那里得到帮助。
当然,也有一些缺点。例如,如果我们想要构建一个具有任意连接的神经网络,tf没有直接的工具来改进它,但是有一种灵活的方法通过向量换位来实现它,但是代价是训练和评分非常慢。
另一个缺点是实时应用的效率非常低(单个输入需要单独评分)。例如,将一千条输入记录作为一个批次交给tf进行评分比每次计算一条记录一千次要快100倍。这意味着后者(实时应用)的效率比前者低两个数量级。
▎:它和resnet有什么区别?这两个版本有什么不同?何去年年底提出的152层超深残差网络获得了2015年imagenet大赛的冠军,论文发表在、何、、邵、的《图像识别的深残差学习》arxiv上。(2015年12月10日)http://arxiv/abs/1512.03385).
今年7月,开明河、、邵和拍摄了续集《深度剩余网络中的身份映射》。(2016年7月)也在arxiv上发布。让我们称前者为resnet i,后者为resnet ii。剩余网络的起点很简单,简单是它流行的原因。
其核心思想包括三个要素:信息渠道的捷径、剩余单元、剩余单元的输出与信息渠道的结合。数学表达式是:
其中f是剩余单元的运算,h(x)= x。resnet I和resnet ii的区别在于f函数。如果f是一个非线性变换,它是resnet i,如果f是一个相同的变换,它是resnet ii,如下图所示:
图2a。resnet i的张量流图。
图2b。resnet 2的张量流程图。
摘要:resnet i在信息合并后进行非线性变换,resnet ii在非线性变换后进行合并。
▎为什么要在tensorflow上建立一个基于resnet的网络?首先,没有现成的网络架构可以完全满足我们解决问题的实际需要。同时,为了获得最好的结果,必须广泛吸收和创新最新的研究成果。对于为什么resnet应该在应用中被采用,我们应该从理解为什么resnet是有效的开始。虽然明凯有一点解释,但在这里我从不同的角度给出一个理解。神经网络模型的准确性受到两个竞争因素的影响:网络的复杂性越高,模型的表达能力越强,接近最佳结果的可能性越高。
另一方面,复杂度越高,用sgd方法从高维参数空中寻找最优解就越困难。Sgd优化可以与从山路下山到谷底的过程相比较,如图所示(图片来自互联网):
图3 .随机梯度下降法
这可以理解为:优化问题可以理解为从布满陷阱的崎岖山路上找到一条到达山谷的路。与神经网络模型相比,它是在一座超高次元山上(百万次元对三维),而崎岖的山路和陷阱的数量远远超过三维空.要想成功地下山(或接近山谷),要尽量避免在下山的路上误入歧途或掉入陷阱。如果你落入陷阱,你将有机会逃脱。resnet的结构是在原有网络的基础上增加一条信息路径捷径,使其能够向前跨越几层网络,并在某一特定层与原有输出收敛,作为下一个剩余单元的输入。从数学直觉来看,势能面应该变得更平坦,即使你掉进了陷阱,你也有更好的机会逃离它。
一旦resnet的思想被理解,它就可以被用在其他的网络结构中,这很容易在tensorflow上实现。
tensorflow提供的python api可以直接用于构建网络。APIs非常直观,可以直接将网络结构的数学表达式转化为相应tf函数的调用(如l2正则化的tf.nn.matmul、tf.nn.relu、TN.nn.l2 _ loss和L1正则化的TF.reduce _ sum)。因为tf可以自动计算任何损失函数的导数,所以它可以设计任何形式的损失函数和任何网络结构,这是非常灵活的。
通过引入resnet,我们可以构建一个超深的神经网络,而不用太担心训练模型的收敛性。即使对于不太深的网络,resnet也可以提高收敛性和准确性。
使用▎tensorflow需要注意的▎问题?
将张量流用于其他框架没有什么特别的。然而,一些问题对于神经网络训练来说是普遍的。
首先,训练神经网络往往具有许多宏观控制参数,包括网络结构的深度和宽度、学习速率的选择和动态调整、正则化的类型和强度、迭代次数等。如何选择选区没有简单的标准,通常只有通过不断的尝试和错误才能找到最佳答案。模型中参数的初始化也很关键。如果选择不当,迭代将停滞不前。例如,如果优化停滞不前,一个简单的解决方案是调整所有初始参数。
图4 .收敛对学习速率和模型初始化都非常敏感。
前一图的学习率为0.002,模型训练收敛正常。第二个图以0.02的学习率开始,它根本不收敛。
▎如何建立一个新的基于张量流的神经网络架构?在张量流上建立神经网络相对直接,因为张量流提供了丰富的api (python和c++),以及神经网络的各种组件,包括卷积网络组件、各种优化方法、各种损失函数的组合、正则化控制等。因此,许多软件开发可以基于tensorflow提供的python应用程序接口来执行,因此在开发中可以快速地试验不同的体系结构。
然而,正是因为使用了python接口,这可能成为特定应用程序效率的瓶颈。我还没有修改c++底部的张量流。然而,从长远来看,有必要扩展到底层,尤其是为了优化特定应用程序的效率。例如,对于实时应用程序,需要快速响应每个单独的输入并返回结果。我们发现,虽然tensorflow gpu版本可以高速执行批量评分,但如果单独处理相同的数字,效率可能会慢两个数量级,这对于实时应用来说是一个问题。解决方案是独立编写一个有效的评分函数,而不依赖于张量流。
▎,你之前提到你建立的网络结构不同于卷积神经网络,所以你采用了resnet的思想。芮妮以为指的是什么?这个问题应该这样理解:剩余网络(resnet)和convnet是平行的概念,它们并不互相排斥。
resnet的基本思想可以与卷积神经网络相结合,或者与任何其他类型的神经网络相结合。resnet的核心思想是在不改变网络的表达能力和复杂度的情况下,改变损失函数势能面的状态,使优化到最佳点的路径变得更加平滑。
▎如何根据自己的需要开发深度学习产品?这个问题很大,而且有些普遍性。一般来说,并不是所有的应用都需要深入学习。可以用简单模型解决的问题永远不应该用复杂的深度模型来解决。例如,如果线性模型能得到好的结果,就不必使用深层神经网络,因为简单模型的效率要高得多。然而,如果问题是高度非线性的,并且变量之间存在强耦合,那么使用神经网络可能是一个好的选择。但即便如此,我们也应该从一个简单的网络开始,比如3-6层网络,然后逐渐增加层数,并仔细观察空.是否有任何改进由于sgd优化结果有一定的误差和不确定性,张量流优化的结果会有一定的差异。因此,在观察增加层数是否会提高模型的准确性时,我们应该小心。我们应该重复操作几次,取平均值,然后进行比较。当样本数量较少时,这一点尤其重要。
▎如何根据自己的需要在深度学习中进行算法创新?这是一个大问题,所以你应该问杰夫辛顿或颜乐坤。但是一些常见的创新思维方式值得学习。我认为,首先,我们应该对这个问题有一个彻底的了解。例如,我们希望对卷积神经网络如何工作以及近年来改进的算法如何提高模型精度有深入的了解。此外,我们还需要了解相反方向的研究结果。例如,szegedy等人的研究表明,通过添加人眼难以感知的噪声,然后让计算机识别,可以将dnn模型完全识别的图片(如狮子)视为完全不同的类别。
吉辛斯基最近的一项研究表明,通过使用一个训练有素的dnn模型,从电视机的完全随机的雪花噪声图像中获得的图像(这些图像完全没有意义)仍然可以像某种动物(如熊猫或啄木鸟等)一样有噪声。)通过优化图像而具有高置信度(99.99%)。
如果我们能从数学上理解这些现象,那么我们就会有新的想法,引导我们尝试新的网络结构,从而找到更有效、更准确、更稳健的算法。然而,我们仍然没有完全理解这些问题,正因为如此,仍然有许多创新空等待我们去发现。另外,大多数图像识别算法几乎都是基于卷积神经网络的。有没有其他方法可以让我们用更少的样本来训练好的模型,就像人类的认知能力一样?这值得深思!
▎如何根据自己的需要改进神经网络?如何根据自己的需要改进网络架构是一个普遍的问题。一般来说,应根据自身应用问题的特殊性进行调整。例如,卷积神经网络主要用于图像识别,因为图像中的每一个像素都与其相邻的像素相关,所有这些关联,即空,决定了图像的表示。卷积神经网络被设计用来提取这些特征并通过大量的例子训练模型。
然而,对于某些问题,变量之间的相互作用并不清楚,因此卷积神经网络不能应用。此时,可以采用完全连接的网络,或者可以根据已知或猜测的交互关系建立网络连接(这可以大大减少参数的数量)。模型的效率(速度)也涉及到实际应用。如果一个神经网络太大,它在训练和评分方面都会很慢。如果你需要加速,你必须缩小模型的尺寸。
▎如何使用gpu加速?请举例说明。
对于张量流,gpu加速已经在其核心架构的底部实现。所有的神经网络操作都有相应的gpu版本,所以从开发者的角度来看,张量流实际上把开发者从gpu编程的痛苦中拯救了出来。因此,使用gpu加速就成了一个安装问题。
如果你有一个图形处理器机器,只需加载支持图形处理器的张量流版本。从api的角度来看,cpu/gpu版本是透明的,相同的python代码可以在两个cpu/gpu版本上运行。
然而,在安装gpu版本时有一点需要注意:tensorflow要求gpu卡的计算能力默认为3.5或更高。如果你的图形处理器的计算能力是3.0(相当普遍),默认安装会有问题。此时,从源代码编译并安装,编译时将计算能力选项参数设置为3.0。目前,亚马逊云计算提供的gpu仍然是3.0,所以张量流应该从源代码编译安装。张量流支持多个图形处理器,但是相应的代码需要修改,因为任务的分配需要编程。我们比较了32核cpu和单芯片gpu之间张量流的运行速度。Gpu机器的速度大约是32核cpu机器的四倍。
▎:你是如何坚持多年的科学研究并将研究成果引入软件创新的?
多年来坚持将学术成果引入软件创新需要极大的热情。
我一直对学术研究感兴趣,特别是与实际应用相关的问题,目的是将突破性的研究成果融入新产品的开发中。例如,2006年,我获得了公司授予的学术假,这给了我几个月的免费研究机会。凯撒算法就是在这一时期发明的,它将三维分子结构模拟的效率提高了十倍以上。作为药物分子设计的核心模块,它被广泛应用于各大制药公司的药物研发中。自2008年以来,他一直在中山大学工作,不仅给国内研究生做远程讲座,还每年回中国一两次,给研究生做讲座和指导项目。
另一个成功的例子:wega(三维几何比较的高斯权重)算法。
工业应用:药物分子的计算机辅助设计
问题的痛点:超大规模分子库中数十亿个三维分子形状的比较计算是巨大而耗时的。
合作研究:与中山大学药学院合作成立了一个研究小组,成员包括博士生导师及其学生。
解决方案分为三个步骤:1)新算法,2)gpu加速,3)GPU集群的大规模并行化。
研究结果:
1)在算法方面,提出了比较分子三维形状的wega(高斯权重)算法,在保持计算简单高效的同时,大大提高了计算精度。
2)指导CUHK博士生开发带gpu加速的gwega,使单片机gpu加速提高近100倍。
3)利用广州超级计算中心的gpu集群,实现了大规模gpu并行,并将tb级超大规模分子库的三维结构检索移植到gpu集群中,实现了每秒1亿次高通量药物分子的虚拟筛选,比国际竞争对手快近两个数量级。我们为此成果申请了中国和国际专利。
难点:这个项目的难点是gpu编程。gpu编程的门槛很高,特别是要实现高效率,尤其是要实现近100倍的加速,这就需要严格的编程技巧。为此,专门为中东研究生开设了一门gpu编程课程,以便学生能够快速入门并对gpu架构有深刻的理解。与学生讨论关键位置,并对每一行代码逐一进行分析和优化,从而将效率推向极致。这个过程不仅训练学生,而且解决难题。
▎小组的朋友问:除了图像,卷积网络是否可以借鉴其他具有一定相关性的信号,比如对一些具有一定时间相关性的信号进行机器学习?是的,但这很麻烦,因为你不知道如何分类。对于音频,时间和频率构成一个二维图像。