
商业新知网是首家运用知识图谱构建的,集商业创新知识(数字化创新、营销创新、管理创新为主)与商业创新选型服务于一体的互联网平台,致力于为商业创新与转型的管理者服务。
来源商业新知网,原标题:打破机器学习中的小数据集诅咒 最近深度学习技术实现方面取得的突破表明,顶级算法和复杂的结构可以将类人的能力传授给执行特定任务的机器。但我们也会发现,大量的训练数据对深度学习模型的成功起着至关重要的作用。就拿Resnet来说,这种图像分类结构在2015年的ILSVRC分类竞赛中获得了第一名,比先前的技术水平提高了约50%。 图1:近年来ILSVRC的顶级模型表现 Resnet不仅具有非常复杂艰深的结构,而且还有足够多的数据。不同的算法其性能可能是相同的,这个问题已经在工业界和学术界得到了很好的证实。 但需要注意的是,大数据应该是有意义的信息,而不是杂乱无章的,这样,模型才能从中学习。这也是谷歌、Facebook、亚马逊、Twitter、百度等公司在人工智能研究和产品开发领域占据主导地位的主要原因之一。 虽然与深度学习相比,传统的机器学习会需要更少的数据,但即使是大规模的数据量,也会以类似的方式影响模型性能。下图清楚地描述了传统机器学习和深度学习模型的性能如何随着数据规模的提高而提高。 图2:数据量与模型性能的函数关系 为什么我们需要机器学习? 图3:弹丸运动公式 让我们用一个例子来回答这个问题。假设我们有一个速度为v,按一定角度θ投掷出去的球,我们想要算出球能抛多远。根据高中物理知识,我们知道球做一个抛物线运动,我们可以使用图中所示的公式算出距离。 上述公式可被视为任务的模型或表示,公式中涉及的各种术语可被视为重要特征,即v、θ和g(重力加速度)。在上述模型下,我们的特征很少,我们可以很好地理解它们对我们任务的影响。因此,我们能够提出一个好的数学模型。让我们考虑一下另一种情况:我们希望在2018年12月30日预测苹果公司的股价。在这个任务中,我们无法完全了解各种因素是如何影响股票价格的。 在缺乏真实模型的情况下,我们利用历史股价和标普500指数、其他股票价格、市场情绪等多种特征,利用机器学习算法来找出它们潜在的关系。这就是一个例子,即在某些情况下,人类很难掌握大量特征之间的复杂关系,但是机器可以通过大规模的数据轻松地捕捉到它。 另一个同样复杂的任务是:将电子邮件标记为垃圾邮件。作为一个人,我们可能要想许多规则和启式的方法,但它们很难编写、维护。而另一方面,机器学习算法可以很容易地获得这些关系,还可以做得更好,并且更容易维护和扩展。既然我们不需要清晰地制定这些规则,而数据可以帮助我们获得这些关系,可以说机器学习已经彻底改变了不同的领域和行业。 大数据集是怎样帮助构建更好的机器学习模型的? 在我们开始讨论大规模数据是如何提高模型性能之前,我们需要了解偏差(Bias)和方差(Variance)。 偏差: 让我们来看这样一个数据集:它的因变量和自变量之间是二次方关系。然而,我们不知道他们真实的关系,只能称它们近似为线性关系。在这种情况下,我们将会发现我们的预测与实际数据之间的明显的差异。观测值和预测值之间的这种差异称为偏差。这种模型,我们会说它功能小,欠拟合。 方差: 在同一个例子中,如果我们将关系近似为三次方或任何更高阶,就会出现一个高方差的情况。方差能够反映训练集与测试集的性能差异。高方差的主要问题是:模型能很好地拟合训练数据,但在训练外数据集上表现得不好。这是验证确认测试集在模型构建过程中非常重要的一个主要原因。 图4:偏差 vs方差 我们通常希望将偏差和方差最小化。即建立一个模型,它不仅能很好地适用训练数据,而且能很好地概括测试/验证数据。实现这一点有很多方法,但使用更多数据进行训练是实现这一点的最佳途径之一。我们可以通过下图了解这一点: 图5:大数据产生了更好的泛化 假设我们有一个类似于正弦分布的数据。图(5a)描述了多个模型在拟合数据点方面同样良好。这些模型中有很多都过拟合,并且在整个数据集上产出不是很好。当我们增加数据时,从图(5b)可以看出可以容纳数据的模型数量减少。随着我们进一步增加数据点的数量,我们成功地捕获了数据的真实分布,如图(5C)所示。这个例子帮助我们清楚地了解数据数量是如何帮助模型揭示真实关系的。接下来,我们将尝试了解一些机器学习算法的这种现象,并找出模型参数是如何受到数据大小影响的。 线性回归:在线性回归中,我们假设预测变量(特征)和因变量(目标)之间存在线性关系,关系式如下: 其中y是因变量,x(i)是自变量。β(i)为真实系数,ϵ为模型未解释的误差。对于单变量情况,基于观测数据的预测系数如下: 上述公式给出了斜率和截距的估测点,但这些估值总是存在一些不确定性,这些不确定性可由方差方程量化: 因此,随着数据数量的增加,分母会变大,就是我们估测点的方差变小。因此,我们的模型对潜在关系会更加自信,并能给出稳定的系数估计。通过以下代码,我们可以看到上述现象的实际作用: 图6:在线性回归中增加数据量对估测点位置估测的提升 我们模拟了一个线性回归模型,其斜率(b)=5,截距(a)=10。从图6(a)(数据量小)到图6(b)(数据量大),我们建立了一个衰退模型,此时我们可以清楚地看到斜率和截距之间的区别。在图6(a)中,模型的斜率为4.65,截距为8.2,而图6(b)中模型的斜率为5.1,截距为10.2相比,可以明显看出,图6(b)更接近真实值。 k近邻(k-NN):k-NN是一种用于回归和分类里最简单但功能强大的算法。k-NN不需要任何特定的训练阶段,顾名思义,预测是基于k-最近邻到测试点。由于k-NN是非参数模型,模型性能取决于数据的分布。在下面的例子中,我们正在研究iris数据集,以了解数据点的数量如何影响k-NN表现。为了更好表现结果,我们只考虑了这组数据的四个特性中的两个:萼片长度和萼片宽度。 图7:KNN中预测类随数据大小的变化 后面的实验中我们随机从分类1中选取一个点作为试验数据(用红色星星表示),同时假设k=3并用多数投票方式来预测试验数据的分类。图7(a)是用了少量数据做的试验,我们发现这个模型把试验点错误分在分类2中。当数据点越来越多,模型会把数据点正确预测到分类1中。从上面图中我们可以知道,KNN与数据质量成正相关,数据越多可以让模型更一致、更精确。 决策树算法:与线性回归和KNN类似,也受数据数量的影响。 图8:根据数据的大小形成不同的树状结构 决策树也是一种非参数模型,它试图最好地拟合数据的底层分布。拆分是对特性值执行的,目的是在子级创建不同的类。由于模型试图最好地拟合可用的训练数据,因此数据的数量直接决定了分割级别和最终类。从上面的图中我们可以清楚的看到,数据集的大小对分割点和最终的类预测有很大的影响。更多的数据有助于找到最佳分割点,避免过度拟合。 如何解决数据量少的问题? 图9:数据量少的基本含义和解决它的可能方法和技术 上图试图捕捉处理小数据集时所面临的核心问题,以及解决这些问题的可能方法和技术。在本部分中,我们将只关注传统机器学习中使用的技术。 改变损失函数: 对于分类问题,我们经常使用交叉熵损失,很少使用平均绝对误差或平均平方误差来训练和优化我们的模型。在数据不平衡的情况下,由于模型对最终损失值的影响较大,使得模型更加偏向于多数类,使得我们的模型变得不那么有用。 在这种情况下,我们可以对不同类对应的损失增加权重,以平衡这种数据偏差。例如,如果我们有两个按比例4:1计算数据的类,我们可以将比例1:4的权重应用到损失函数计算中,使数据平衡。这种技术可以帮助我们轻松地缓解不平衡数据的问题,并改进跨不同类的模型泛化。我们可以很容易地找到R和Python中的库,它们可以帮助在损失计算和优化过程中为类分配权重。Scikit-learn有一个方便的实用函数来计算基于类频率的权重: 我们可以用class_weight=‘balanced’来代替上面的计算量,并且与class_weights计算结果一样。我们同样可以依据我们的需求来定义分类权重。 异常/变更检测: 在欺诈或机器故障等高度不平衡的数据集的情况下,是否可以将这些例子视为异常值得思考。如果给定的问题满足异常判据,我们可以使用OneClassSVM、聚类方法或高斯异常检测方法等模型。这些技术要求我们改变思维方式,将次要类视为异常类,这可能帮助我们找到分离和分类的新方法。变化检测类似于异常检测,只是我们寻找的是变化或差异,而不是异常。这些可能是根据使用模式或银行事务观察到的用户行为的变化。 图10:过采和欠采样的情况 上采样还是下采样: 由于不平衡的数据本质上是以不同的权重惩罚多数类,所以解决这个问题的一个方法是使数据平衡。这可以通过增加少数类的频率或通过随机或集群抽样技术减少多数类的频率来实现。过度抽样与欠抽样以及随机抽样与集群抽样的选择取决于业务上下文和数据大小。一般来说,当总体数据大小较小时,上采样是首选的,而当我们有大量数据时,下采样是有用的。类似地,随机抽样和聚集抽样是由数据分布的好坏决定的。 生成合成数据: 尽管上采样或下采样有助于使数据平衡,但是重复的数据增加了过度拟合的机会。解决此问题的另一种方法是在少数类数据的帮助下生成合成数据。合成少数过采样技术(SMOTE)和改进过采样技术是产生合成数据的两种技术。简单地说,合成少数过采样技术接受少数类数据点并创建新的数据点,这些数据点位于由直线连接的任意两个最近的数据点之间。为此,该算法计算特征空间中两个数据点之间的距离,将距离乘以0到1之间的一个随机数,并将新数据点放在距离计算所用数据点之一的新距离上。注意,用于数据生成的最近邻的数量也是一个超参数,可以根据需要进行更改。 图11:基于K=3,合成少数过采样技术过程 M-SMOTE是一个改进版的SMOTE,它考虑了数据中少数分类的底层分布。该算法将少数类的样本分为安全/安全样本、边界样本和潜在噪声样本三大类。这是通过计算少数类样本与训练数据样本之间的距离来实现的。与SMOTE不同的是,该算法从k个最近邻中随机选择一个数据点作为安全样本,从边界样本中选择最近邻,对潜在噪声不做任何处理。 集成技术:聚合多个弱学习者/不同模型在处理不平衡的数据集时显示出了很好的效果。装袋和增压技术在各种各样的问题上都显示出了很好的效果,应该与上面讨论的方法一起探索,以获得更好的效果。总结 在这段中,我们看到数据的大小可能会体现出泛化、数据不平衡以及难以达到全局最优等问题。我们已经介绍了一些最常用的技术来解决传统机器学习算法中的这些问题。根据手头的业务问题,上述一种或多种技术可以作为一个很好的起点。
来源商业新知网,原标题:深度学习之卷积神经网络经典模型 LeNet-5模型在CNN的应用中,文字识别系统所用的LeNet-5模型是非常经典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一个成功大规模应用在手写数字识别问题的卷积神经网络,在MNIST数据集中的正确率可以高达99.2%。 下面详细介绍一下LeNet-5模型工作的原理。 LeNet-5模型一共有7层,每层包含众多参数,也就是卷积神经网络中的参数。虽然层数只有7层,这在如今庞大的神经网络中可是说是非常少的了,但是包含了卷积层,池化层,全连接层,可谓麻雀虽小五脏俱全了。为了方便,我们把卷积层称为C层,下采样层叫做下采样层。 首先,输入层输入原始图像,原始图像被处理成32×32个像素点的值。然后,后面的隐层计在卷积和子抽样之间交替进行。C1层是卷积层,包含了六个特征图。每个映射也就是28x28个神经元。卷积核可以是5x5的十字形,这28×28个神经元共享卷积核权值参数,通过卷积运算,原始信号特征增强,同时也降低了噪声,当卷积核不同时,提取到图像中的特征不同;C2层是一个池化层,池化层的功能在上文已经介绍过了,它将局部像素值平均化来实现子抽样。 池化层包含了六个特征映射,每个映射的像素值为14x14,这样的池化层非常重要,可以在一定程度上保证网络的特征被提取,同时运算量也大大降低,减少了网络结构过拟合的风险。因为卷积层与池化层是交替出现的,所以隐藏层的第三层又是一个卷积层,第二个卷积层由16个特征映射构成,每个特征映射用于加权和计算的卷积核为10x10的。第四个隐藏层,也就是第二个池化层同样包含16个特征映射,每个特征映射中所用的卷积核是5x5的。第五个隐藏层是用5x5的卷积核进行运算,包含了120个神经元,也是这个网络中卷积运算的最后一层。 之后的第六层便是全连接层,包含了84个特征图。全连接层中对输入进行点积之后加入偏置,然后经过一个激活函数传输给输出层的神经元。最后一层,也就是第七层,为了得到输出向量,设置了十个神经元来进行分类,相当于输出一个包含十个元素的一维数组,向量中的十个元素即0到9。 AlexNet模型AlexNet简介 2012年Imagenet图像识别大赛中,Alext提出的alexnet网络模型一鸣惊人,引爆了神经网络的应用热潮,并且赢得了2012届图像识别大赛的冠军,这也使得卷积神经网络真正意义上成为图像处理上的核心算法。上文介绍的LeNet-5出现在上个世纪,虽然是经典,但是迫于种种复杂的现实场景限制,只能在一些领域应用。不过,随着SVM等手工设计的特征的飞速发展,LeNet-5并没有形成很大的应用状况。随着ReLU与dropout的提出,以及GPU带来算力突破和互联网时代大数据的爆发,卷积神经网络带来历史的突破,AlexNet的提出让深度学习走上人工智能的最前端。 图像预处理 AlexNet的训练数据采用ImageNet的子集中的ILSVRC2010数据集,包含了1000类,共1.2百万的训练图像,50000张验证集,150000张测试集。在进行网络训练之前我们要对数据集图片进行预处理。首先我们要将不同分辨率的图片全部变成256x256规格的图像,变换方法是将图片的短边缩放到 256像素值,然后截取长边的中间位置的256个像素值,得到256x256大小的图像。除了对图片大小进行预处理,还需要对图片减均值,一般图像均是由RGB三原色构成,均值按RGB三分量分别求得,由此可以更加突出图片的特征,更方便后面的计算。 此外,对了保证训练的效果,我们仍需对训练数据进行更为严苛的处理。在256x256大小的图像中,截取227x227大小的图像,在此之后对图片取镜像,这样就使得原始数据增加了(256-224)x(256-224)x2= 2048倍。最后对RGB空间做PCA,然后对主成分做(0,0.1)的高斯扰动,结果使错误率下降1%。对测试数据而言,抽取以图像4个角落的大小为224224的图像,中心的224224大小的图像以及它们的镜像翻转图像,这样便可以获得10张图像,我们便可以利用softmax进行预测,对所有预测取平均作为最终的分类结果。 ReLU激活函数之前我们提到常用的非线性的激活函数是sigmoid,它能够把输入的连续实值全部确定在0和1之间。但是这带来一个问题,当一个负数的绝对值很大时,那么输出就是0;如果是绝对值非常大的正数,输出就是1。这就会出现饱和的现象,饱和现象中神经元的梯度会变得特别小,这样必然会使得网络的学习更加困难。此外,sigmoid的output的值并不是0为均值,因为这会导致上一层输出的非0均值信号会直接输入到后一层的神经元上。所以AlexNet模型提出了ReLU函数,公式:f(x)=max(0,x)f(x)=max(0,x)。 用ReLU代替了Sigmoid,发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid快很多,这成了AlexNet模型的优势之一。 Dropout AlexNet模型提出了一个有效的模型组合方式,相比于单模型,只需要多花费一倍的时间,这种方式就做Dropout。在整个神经网络中,随机选取一半的神经元将它们的输出变成0。这种方式使得网络关闭了部分神经元,减少了过拟合现象。同时训练的迭代次数也得以增加。当时一个GTX580 GPU只有3GB内存,这使得大规模的运算成为不可能。但是,随着硬件水平的发展,当时的GPU已经可以实现并行计算了,并行计算之后两块GPU可以互相通信传输数据,这样的方式充分利用了GPU资源,所以模型设计利用两个GPU并行运算,大大提高了运算效率。 模型分析 AlexNet模型共有8层结构,其中前5层为卷积层,其中前两个卷积层和第五个卷积层有池化层,其他卷积层没有。后面3层为全连接层,神经元约有六十五万个,所需要训练的参数约六千万个。 图片预处理过后,进过第一个卷积层C1之后,原始的图像也就变成了55x55的像素大小,此时一共有96个通道。模型分为上下两块是为了方便GPU运算,48作为通道数目更加适合GPU的并行运算。上图的模型里把48层直接变成了一个面,这使得模型看上去更像一个立方体,大小为55x55x48。在后面的第二个卷积层C2中,卷积核的尺寸为5x5x48,由此再次进行卷积运算。在C1,C2卷积层的卷积运算之后,都会有一个池化层,使得提取特征之后的特征图像素值大大减小,方便了运算,也使得特征更加明显。而第三层的卷积层C3又是更加特殊了。第三层卷积层做了通道的合并,将之前两个通道的数据再次合并起来,这是一种串接操作。第三层后,由于串接,通道数变成256。全卷积的卷积核尺寸也就变成了13×13×25613×13×256。一个有4096个这样尺寸的卷积核分别对输入图像做4096次的全卷积操作,最后的结果就是一个列向量,一共有4096个数。这也就是最后的输出,但是AlexNet最终是要分1000个类,所以通过第八层,也就是全连接的第三层,由此得到1000个类输出。 Alexnet网络中各个层发挥了不同的作用,ReLU,多个CPU是为了提高训练速度,重叠pool池化是为了提高精度,且不容易产生过拟合,局部归一化响应是为了提高精度,而数据增益与dropout是为了减少过拟合。 VGG net在ILSVRC-2014中,牛津大学的视觉几何组提出的VGGNet模型在定位任务第一名和分类任务第一名[[i]]。如今在计算机视觉领域,卷积神经网络的良好效果深得广大开发者的喜欢,并且上文提到的AlexNet模型拥有更好的效果,所以广大从业者学习者试图将其改进以获得更好地效果。而后来很多人经过验证认为,AlexNet模型中所谓的局部归一化响应浪费了计算资源,但是对性能却没有很大的提升。VGG的实质是AlexNet结构的增强版,它侧重强调卷积神经网络设计中的深度。将卷积层的深度提升到了19层,并且在当年的ImageNet大赛中的定位问题中获得了第一名的好成绩。整个网络向人们证明了我们是可以用很小的卷积核取得很好地效果,前提是我们要把网络的层数加深,这也论证了我们要想提高整个神经网络的模型效果,一个较为有效的方法便是将它的深度加深,虽然计算量会大大提高,但是整个复杂度也上升了,更能解决复杂的问题。虽然VGG网络已经诞生好几年了,但是很多其他网络上效果并不是很好地情况下,VGG有时候还能够发挥它的优势,让人有意想不到的收获。 与AlexNet网络非常类似,VGG共有五个卷积层,并且每个卷积层之后都有一个池化层。当时在ImageNet大赛中,作者分别尝试了六种网络结构。这六种结构大致相同,只是层数不同,少则11层,多达19层。网络结构的输入是大小为224*224的RGB图像,最终将分类结果输出。当然,在输入网络时,图片要进行预处理。 VGG网络相比AlexNet网络,在网络的深度以及宽度上做了一定的拓展,具体的卷积运算还是与AlexNet网络类似。我们主要说明一下VGG网络所做的改进。第一点,由于很多研究者发现归一化层的效果并不是很好,而且占用了大量的计算资源,所以在VGG网络中作者取消了归一化层;第二点,VGG网络用了更小的3x3的卷积核,而两个连续的3x3的卷积核相当于5x5的感受野,由此类推,三个3x3的连续的卷积核也就相当于7x7的感受野。这样的变化使得参数量更小,节省了计算资源,将资源留给后面的更深层次的网络。第三点是VGG网络中的池化层特征池化核改为了2x2,而在AlexNet网络中池化核为3x3。这三点改进无疑是使得整个参数运算量下降,这样我们在有限的计算平台上能够获得更多的资源留给更深层的网络。由于层数较多,卷积核比较小,这样使得整个网络的特征提取效果很好。其实由于VGG的层数较多,所以计算量还是相当大的,卷积层比较多成了它最显著的特点。另外,VGG网络的拓展性能比较突出,结构比较简洁,所以它的迁移性能比较好,迁移到其他数据集的时候泛化性能好。到现在为止,VGG网络还经常被用来提出特征。所以当现在很多较新的模型效果不好时,使用VGG可能会解决这些问题。 GoogleNet谷歌于2014年Imagenet挑战赛(ILSVRC14)凭借GoogleNet再次斩获第一名。这个通过增加了神经网络的深度和宽度获得了更好地效果,在此过程中保证了计算资源的不变。这个网络论证了加大深度,宽度以及训练数据的增加是现有深度学习获得更好效果的主要方式。但是增加尺寸可能会带来过拟合的问题,因为深度与宽度的加深必然会带来过量的参数。此外,增加网络尺寸也带来了对计算资源侵占过多的缺点。为了保证计算资源充分利用的前提下去提高整个模型的性能,作者使用了Inception模型,这个模型在下图中有展示,可以看出这个有点像金字塔的模型在宽度上使用并联的不同大小的卷积核,增加了卷积核的输出宽度。因为使用了较大尺度的卷积核增加了参数。使用了1*1的卷积核就是为了使得参数的数量最少。 Inception模块 上图表格为网络分析图,第一行为卷积层,输入为224×224×3 ,卷积核为7x7,步长为2,padding为3,输出的维度为112×112×64,这里面的7x7卷积使用了 7×1 然后 1×7 的方式,这样便有(7+7)×64×3=2,688个参数。第二行为池化层,卷积核为3×33×3,滑动步长为2,padding为 1 ,输出维度:56×56×64,计算方式:1/2×(112+2×1−3+1)=56。第三行,第四行与第一行,第二行类似。第 5 行 Inception module中分为4条支线,输入均为上层产生的 28×28×192 结果:第 1 部分,1×1 卷积层,输出大小为28×28×64;第 2 部分,先1×1卷积层,输出大小为28×28×96,作为输入进行3×3卷积层,输出大小为28×28×128;第 3部分,先1×1卷积层,输出大小为28×28×32,作为输入进行3×3卷积层,输出大小为28×28×32;而第3 部分3×3的池化层,输出大小为输出大小为28×28×32。第5行的Inception module会对上面是个结果的输出结果并联,由此增加网络宽度。 ResNet2015年ImageNet大赛中,MSRA何凯明团队的ResidualNetworks力压群雄,在ImageNet的诸多领域的比赛中上均获得了第一名的好成绩,而且这篇关于ResNet的论文Deep Residual Learning for Image Recognition也获得了CVPR2016的最佳论文,实至而名归。 上文介绍了的VGG以及GoogleNet都是增加了卷积神经网络的深度来获得更好效果,也让人们明白了网络的深度与广度决定了训练的效果。但是,与此同时,宽度与深度加深的同时,效果实际会慢慢变差。也就是说模型的层次加深,错误率提高了。模型的深度加深,以一定的错误率来换取学习能力的增强。但是深层的神经网络模型牺牲了大量的计算资源,学习能力提高的同时不应当产生比浅层神经网络更高的错误率。这个现象的产生主要是因为随着神经网络的层数增加,梯度消失的现象就越来越明显。所以为了解决这个问题,作者提出了一个深度残差网络的结构Residual: 上图就是残差网络的基本结构,可以看出其实是增加了一个恒等映射,将原本的变换函数H(x)转换成了F(x)+x。示意图中可以很明显看出来整个网络的变化,这样网络不再是简单的堆叠结构,这样的话便很好地解决了由于网络层数增加而带来的梯度原来越不明显的问题。所以这时候网络可以做得很深,到目前为止,网络的层数都可以上千层,而能够保证很好地效果。并且,这样的简单叠加并没有给网络增加额外的参数跟计算量,同时也提高了网络训练的效果与效率。 在比赛中,为了证明自己观点是正确的,作者控制变量地设计几个实验。首先作者构建了两个plain网络,这两个网络分别为18层跟34层,随后作者又设计了两个残差网络,层数也是分别为18层和34层。然后对这四个模型进行控制变量的实验观察数据量的变化。下图便是实验结果。实验中,在plain网络上观测到明显的退化现象。实验结果也表明,在残差网络上,34层的效果明显要好于18层的效果,足以证明残差网络随着层数增加性能也是增加的。不仅如此,残差网络的在更深层的结构上收敛性能也有明显的提升,整个实验大为成功。 除此之外,作者还做了关于shortcut方式的实验,如果残差网络模块的输入输出维度不一致,我们如果要使维度统一,必须要对维数较少的进行増维。而增维的最好效果是用0来填充。不过实验数据显示三者差距很小,所以线性投影并不是特别需要。使用0来填充维度同时也保证了模型的复杂度控制在比较低的情况下。 随着实验的深入,作者又提出了更深的残差模块。这种模型减少了各个层的参数量,将资源留给更深层数的模型,在保证复杂度很低的情况下,模型也没有出现梯度消失很明显的情况,因此目前模型最高可达1202层,错误率仍然控制得很低。但是层数如此之多也带来了过拟合的现象,不过诸多研究者仍在改进之中,毕竟此时的ResNet已经相对于其他模型在性能上遥遥领先了。 残差网络的精髓便是shortcut。从一个角度来看,也可以解读为多种路径组合的一个网络。如下图: ResNet可以做到很深,但是从上图中可以体会到,当网络很深,也就是层数很多时,数据传输的路径其实相对比较固定。我们似乎也可以将其理解为一个多人投票系统,大多数梯度都分布在论文中所谓的effective path上。 DenseNet在Resnet模型之后,有人试图对ResNet模型进行改进,由此便诞生了ResNeXt模型。 这是对上面介绍的ResNet模型结合了GoogleNet中的inception模块思想,相比于Resnet来说更加有效。随后,诞生了DenseNet模型,它直接将所有的模块连接起来,整个模型更加简单粗暴。稠密相连成了它的主要特点。 我们将DenseNet与ResNet相比较: 从上图中可以看出,相比于ResNet,DenseNet参数量明显减少很多,效果也更加优越,只是DenseNet需要消耗更多的内存。 总结 上面介绍了卷积神经网络发展史上比较著名的一些模型,这些模型非常经典,也各有优势。在算力不断增强的现在,各种新的网络训练的效率以及效果也在逐渐提高。从收敛速度上看,VGG>Inception>DenseNet>ResNet,从泛化能力来看,Inception>DenseNet=ResNet>VGG,从运算量看来,Inception
来源商业新知网,原标题:代码详解:最全面的卷积神经网络介绍,都在这里了 神经网络由具有权重和偏差的神经元组成。通过在训练过程中调整这些权重和偏差,以提出良好的学习模型。每个神经元接收一组输入,以某种方式处理它,然后输出一个值。如果构建一个具有多层的神经网络,则将其称为深度神经网络。处理这些深度神经网络的人工智能学分支被称为深度学习。 普通神经网络的主要缺点是其忽略了输入数据的结构。在将数据馈送到神经网络之前,所有数据都将转换为一维数组。这适用于常规数据,但在处理图像时会遇到困难。 考虑到灰度图像是2D结构,像素的空间排列有很多隐藏信息。若忽略这些信息,则将失去许多潜在的模式。这就是卷积神经网络(CNN)被引入图像处理的原因。CNN在处理图像时会考虑图像的2D结构。 CNN也是由具有权重和偏差的神经元组成。这些神经元接收输入的数据并处理,然后输出信息。神经网络的目标是将输入层中的原始图像数据转到输出层中的正确类中。普通神经网络和CNN之间的区别在于使用的层类型以及处理输入数据的方式。假设CNN的输入是图像,这允许其提取特定于图像的属性。这使得CNN在处理图像方面更有效率。那么,CNN是如何构建的? CNN的体系结构 当使用普通神经网络时,需要将输入数据转换为单个向量。该向量作为神经网络的输入,然后向量穿过神经网络的各层。在这些层中,每个神经元都与前一层中的所有神经元相连接。值得注意的是,同层的神经元互不连接。它们仅与相邻层的神经元相连。网络中的最后一层是输出层,它代表最终输出。 若将这种结构用于图像处理,它将很快变得难以管理。例如,一个由256x256RGB图像组成的图像数据集。由于这是3维图像,因此将有256 256 3 = 196,608个权重。请意,这仅适用于单个神经元!每层都有多个神经元,因此权重的数量迅速增加。这意味着在训练过程中,该模型将需要大量参数来调整权重。这就是该结构复杂和耗时的原因。将每个神经元连接到前一层中的每个神经元,称为完全连接,这显然不适用于图像处理。 CNN在处理数据时明确考虑图像的结构。CNN中的神经元按三维排列——宽度、高度和深度。当前层中的每个神经元都连接到前一层输出的小块。这就像在输入图像上叠加NxN过滤器一样。这与完全连接的层相反,完全连接层的每个神经元均与前一层的所有神经元相连。 由于单个过滤器无法捕获图像的所有细微差别,因此需要花费数倍的时间(假设M倍)确保捕获所有细节。这M个过滤器充当特征提取器。如果查看这些过滤器的输出,可以查看层的提取特征,如边缘、角等。这适用于CNN中的初始层。随着在神经网络层中的图像处理的进展,可看到后面的层将提取更高级别的特征。 CNN中的层类型 了解了CNN的架构,继续看看用于构建CNN各层的类型。CNN通常使用以下类型的层: · 输入层:用于原始图像数据的输入。 · 卷积层:该层计算神经元与输入中各种切片之间的卷积。 卷积层基本上计算权重和前一层输出的切片之间的点积。 · 激励层:此图层将激活函数应用于前一图层的输出。该函数类似于max(0,x)。需要向该层神经网络增加非线性映射,以便它可以很好地概括为任何类型的功能。 · 池化层:此层对前一层的输出进行采样,从而生成具有较小维度的结构。在网络中处理图像时,池化有助于只保留突出的部分。最大池是池化层最常用的,可在给定的KxK窗口中选择最大值。 · 全连接层:此图层计算最后一层的输出分。输出结果的大小为1x1xL,其中L是训练数据集中的类数。 从神经网络中的输入层到输出层时,输入图像将从像素值转换为最终的类得分。现已提出了许多不同的CNN架构,它是一个活跃的研究领域。模型的准确性和鲁棒性取决于许多因素- 层的类型、网络的深度、网络中各种类型的层的排列、为每层选择的功能和训练数据等。 构建基于感知器的线性回归量 接下来是有关如何用感知器构建线性回归模型。 本文将会使用TensorFlow。它是一种流行的深度学习软件包,广泛用于构建各种真实世界的系统中。在本节,我们将熟悉它的工作原理。在使用软件包前先安装它。 安装说明传送门: https://www.tensorflow.org/get_started/os_setup。 确保它已安装后,创建一个新的python程序并导入以下包: import numpy as np import matplotlib.pyplot as plt import tensorflow as tf 使模型适应生成的数据点。定义要生成的数据点的数量: Define the number of points to generate num_points = 1200 定义将用于生成数据的参数。使用线性模型:y =mx + c: Generate the data based on equation y = mx + c data = [] m = 0.2 c = 0.5 for i in range(num_points): Generate 'x' x = np.random.normal(0.0, 0.8) 生成的噪音使数据发生变化: Generate some noise noise = np.random.normal(0.0, 0.04) 使用以下等式计算y的值: Compute 'y' y = m*x + c + noise data.append([x, y]) 完成迭代后,将数据分成输入和输出变量: Separate x and y x_data = [d[0] for d in data] y_data = [d[1] for d in data 绘制数据: Plot the generated data plt.plot(x_data, y_data, 'ro') plt.title('Input data') plt.show() 为感知器生成权重和偏差。权重由统一的随机数生成器生成,并将偏差设置为零: Generate weights and biases W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) 使用TensorFlow变量定义等式: Define equation for 'y' y = W * x_data + b 定义训练过程使用的损失函数。优化器将使损失函数的值尽可能地减小。 Define how to compute the loss loss = tf.reduce_mean(tf.square(y - y_data)) 定义梯度下降优化器并指定损失函数: Define the gradient descent optimizer optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) 所有变量都已到位,但尚未初始化。接下来: Initialize all the variables init = tf.initialize_all_variables() 启动TensorFlow会话并使用初始化程序运行它: Start the tensorflow session and run it sess = tf.Session() sess.run(init) 开始训练: Start iterating num_iterations = 10 for step in range(num_iterations): Run the session sess.run(train) 打印训练进度。进行迭代时,损失参数将持续减少: Print the progress print('nITERATION', step+1) print('W =', sess.run(W)[0]) print('b =', sess.run(b)[0]) print('loss =', sess.run(loss)) 绘制生成的数据并在顶部覆盖预测的模型。该情况下,模型是一条线: Plot the input data plt.plot(x_data, y_data, 'ro') Plot the predicted output line plt.plot(x_data, sess.run(W) * x_data + sess.run(b)) 设置绘图的参数: Set plotting parameters plt.xlabel('Dimension 0') plt.ylabel('Dimension 1') plt.title('Iteration ' + str(step+1) + ' of ' + str(num_iterations)) plt.show() 完整代码在linear_regression.py文件中给出。运行代码将看到以下屏幕截图显示输入数据: 如果关闭此窗口,将看到训练过程。第一次迭代看起来像这样: 可看到,线路完全偏离模型。关闭此窗口以转到下一个迭代: 这条线似乎更好,但它仍然偏离模型。关闭此窗口并继续迭代: 看起来这条线越来越接近真实的模型。如果继续像这样迭代,模型会变得更好。第八次迭代看起来如下: 该线与数据拟合的很好。将在终端上看到以下内容: 完成训练后,在终端上看到以下内容: 使用单层神经网络构建图像分类器 如何使用TensorFlow创建单层神经网络,并使用它来构建图像分类器?使用MNIST图像数据集来构建系统。它是包含手写的数字图像的数据集。其目标是构建一个能够正确识别每个图像中数字的分类器。 图片来源:pexels.com 创建新的python程序并导入以下包: import argparse import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data 定义一个解析输入参数的函数: def build_arg_parser(): parser = argparse.ArgumentParser(description='Build a classifier using MNIST data') parser.add_argument('--input-dir', dest='input_dir', type=str, default='./mnist_data', help='Directory for storing data') return parser 定义main函数并解析输入参数: if name == '__main__': args = build_arg_parser().parse_args() 提取MNIST图像数据。one_hot标志指定将在标签中使用单热编码。这意味着如果有n个类,那么给定数据点的标签将是长度为n的数组。此数组中的每个元素都对应一个特定的类。要指定一个类,相应索引处的值将设置为1,其他所有值为0: Get the MNIST data mnist = input_data.read_data_sets(args.input_dir, one_hot=True) 数据库中的图像是28 x 28像素。需将其转换为单维数组以创建输入图层: The images are 28x28, so create the input layer with 784 neurons (28x28=784) x = tf.placeholder(tf.float32, [None, 784]) 创建具有权重和偏差的单层神经网络。数据库中有10个不同的数字。输入层中的神经元数量为784,输出层中的神经元数量为10: Create a layer with weights and biases. There are 10 distinct digits, so the output layer should have 10 classes W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) 创建用于训练的等式: Create the equation for 'y' using y = W*x + b y = tf.matmul(x, W) + b 定义损失函数和梯度下降优化器: Define the entropy loss and the gradient descent optimizer y_loss = tf.placeholder(tf.float32, [None, 10]) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y, y_loss)) optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss) 初始化所有变量: Initialize all the variables init = tf.initialize_all_variables() 创建TensorFlow会话并运行: Create a session session = tf.Session() session.run(init) 开始训练过程。使用当前批次运行优化器的批次进行训练,然后继续下一批次进行下一次迭代。每次迭代的第一步是获取下一批要训练的图像: Start training num_iterations = 1200 batch_size = 90 for _ in range(num_iterations): Get the next batch of images x_batch, y_batch = mnist.train.next_batch(batch_size) 在这批图像上运行优化器: Train on this batch of images session.run(optimizer, feed_dict = {x: x_batch, y_loss: y_batch}) 训练过程结束后,使用测试数据集计算准确度: Compute the accuracy using test data predicted = tf.equal(tf.argmax(y, 1), tf.argmax(y_loss, 1)) accuracy = tf.reduce_mean(tf.cast(predicted, tf.float32)) print('nAccuracy =', session.run(accuracy, feed_dict = { x: mnist.test.images, y_loss: mnist.test.labels})) 完整代码在single_layer.py文件中给出。如果运行代码,它会将数据下载到当前文件夹中名为mnist_data的文件夹中。这是默认选项。如果要更改它,可以使用输入参数执行此操作。运行代码后,将在终端上获得以下输出: 正如终端上打印所示,模型的准确率为92.1%。 使用卷积神经网络构建图像分类器 上一节中的图像分类器表现不佳。获得92.1%的MNIST数据集相对容易。如何使用卷积神经网络(CNN)来实现更高的精度呢?下面将使用相同的数据集构建图像分类器,但使用CNN而不是单层神经网络。 创建一个新的python程序并导入以下包: import argparse import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data 定义一个解析输入参数的函数: def build_arg_parser(): parser = argparse.ArgumentParser(description='Build a CNN classifier using MNIST data') parser.add_argument('--input-dir', dest='input_dir', type=str, default='./mnist_data', help='Directory for storing data') return parser 定义一个函数来为每个层中的权重创建值: def get_weights(shape): data = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(data) 定义一个函数来为每个层中的偏差创建值: def get_biases(shape): data = tf.constant(0.1, shape=shape) return tf.Variable(data) 定义一个函数以根据输入形状创建图层: def create_layer(shape): Get the weights and biases W = get_weights(shape) b = get_biases([shape[-1]]) return W, b 定义执行2D卷积功能的函数: def convolution_2d(x, W): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 定义一个函数来执行2x2最大池操作: def max_pooling(x): return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') 定义main函数并解析输入参数: if name == '__main__': args = build_arg_parser().parse_args() 提取MNIST图像数据: Get the MNIST data mnist = input_data.read_data_sets(args.input_dir, one_hot=True) 使用784个神经元创建输入层: The images are 28x28, so create the input layer with 784 neurons (28x28=784) x = tf.placeholder(tf.float32, [None, 784]) 接下来是利用图像2D结构的CNN。为4D张量,其中第二维和第三维指定图像尺寸: Reshape 'x' into a 4D tensor x_image = tf.reshape(x, [-1, 28, 28, 1]) 创建第一个卷积层,为图像中的每个5x5切片提取32个要素: Define the first convolutional layer W_conv1, b_conv1 = create_layer([5, 5, 1, 32]) 用前一步骤中计算的权重张量卷积图像,然后为其添加偏置张量。然后,需要将整流线性单元(ReLU)函数应用于输出: Convolve the image with weight tensor, add the bias, and then apply the ReLU function h_conv1 = tf.nn.relu(convolution_2d(x_image, W_conv1) + b_conv1) 将2x2 最大池运算符应用于上一步的输出: Apply the max pooling operator h_pool1 = max_pooling(h_conv1) 创建第二个卷积层计算每个5x5切片上的64个要素: Define the second convolutional layer W_conv2, b_conv2 = create_layer([5, 5, 32, 64]) 使用上一步中计算的权重张量卷积前一层的输出,然后添加偏差张量。然后,需要将整流线性单元(ReLU)函数应用于输出: Convolve the output of previous layer with the weight tensor, add the bias, and then apply the ReLU function h_conv2 = tf.nn.relu(convolution_2d(h_pool1, W_conv2) + b_conv2) 将2x2最大池运算符应用于上一步的输出: Apply the max pooling operator h_pool2 = max_pooling(h_conv2) 图像尺寸减少到了7x7。创建一个包含1024个神经元的完全连接层: Define the fully connected layer W_fc1, b_fc1 = create_layer([7 7 64, 1024]) 重塑上一层的输出: Reshape the output of the previous layer h_pool2_flat = tf.reshape(h_pool2, [-1, 7764]) 将前一层的输出与完全连接层的权重张量相乘,然后为其添加偏置张量。然后,将整流线性单元(ReLU)函数应用于输出: Multiply the output of previous layer by the weight tensor, add the bias, and then apply the ReLU function h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 为了减少过度拟合,需要创建一个dropout图层。为概率值创建一个TensorFlow占位符,该概率值指定在丢失期间保留神经元输出的概率: Define the dropout layer using a probability placeholder for all the neurons keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 使用10个输出神经元定义读出层,对应于数据集中的10个类。计算输出: Define the readout layer (output layer) W_fc2, b_fc2 = create_layer([1024, 10]) y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 定义损失函数和优化函数: Define the entropy loss and the optimizer y_loss = tf.placeholder(tf.float32, [None, 10]) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_conv, y_loss)) optimizer = tf.train.AdamOptimizer(1e-4).minimize(loss) 定义如何计算准确度: Define the accuracy computation predicted = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_loss, 1)) accuracy = tf.reduce_mean(tf.cast(predicted, tf.float32)) 初始化变量后创建并运行会话: Create and run a session sess = tf.InteractiveSession() init = tf.initialize_all_variables() sess.run(init) 开始训练过程: Start training num_iterations = 21000 batch_size = 75 print('nTraining the model….') for i in range(num_iterations): Get the next batch of images batch = mnist.train.next_batch(batch_size) 每50次迭代打印准确度进度: Print progress if i % 50 == 0: cur_accuracy = accuracy.eval(feed_dict = { x: batch[0], y_loss: batch[1], keep_prob: 1.0}) print('Iteration', i, ', Accuracy =', cur_accuracy) 在当前批处理上运行优化程序: Train on the current batch optimizer.run(feed_dict = {x: batch[0], y_loss: batch[1], keep_prob: 0.5}) 训练结束后,使用测试数据集计算准确度: Compute accuracy using test data print('Test accuracy =', accuracy.eval(feed_dict = { x: mnist.test.images, y_loss: mnist.test.labels, keep_prob: 1.0})) 运行代码,将在终端上获得以下输出: 继续迭代时,精度会不断增加,如以下屏幕截图所示: 现在得到了输出,可以看到卷积神经网络的准确性远远高于简单的神经网络。
来源商业新知网,原标题:深度学习中的五大正则化方法和七大优化策略 深度学习中,卷积神经网络和循环神经网络等深度模型在各种复杂的任务中表现十分优秀。例如卷积神经网络(CNN)这种由生物启发而诞生的网络,它基于数学的卷积运算而能检测大量的图像特征,因此可用于解决多种图像视觉应用、目标分类和语音识别等问题。 但是,深层网络架构的学习要求大量数据,对计算能力的要求很高。神经元和参数之间的大量连接需要通过梯度下降及其变体以迭代的方式不断调整。此外,有些架构可能因为强大的表征力而产生测试数据过拟合等现象。这时我们可以使用正则化和优化技术来解决这两个问题。 梯度下降是一种优化技术,它通过最小化代价函数的误差而决定参数的最优值,进而提升网络的性能。尽管梯度下降是参数优化的自然选择,但它在处理高度非凸函数和搜索全局最小值时也存在很多局限性。 正则化技术令参数数量多于输入数据量的网络避免产生过拟合现象。正则化通过避免训练完美拟合数据样本的系数而有助于算法的泛化。为了防止过拟合,增加训练样本是一个好的解决方案。此外,还可使用数据增强、L1 正则化、L2 正则化、Dropout、DropConnect 和早停(Early stopping)法等。 增加输入数据、数据增强、早停、dropout 及其变体是深度神经网络中常用的调整方法。本论文作为之前文章《徒手实现 CNN:综述论文详解卷积网络的数学本质 》的补充,旨在介绍开发典型卷积神经网络框架时最常用的正则化和优化策略。 摘要:卷积神经网络(ConvNet)在一些复杂的机器学习任务中性能表现非常好。ConvNet 架构需要大量数据和参数,因此其学习过程需要消耗大量算力,向全局最小值的收敛过程较慢,容易掉入局部极小值的陷阱导致预测结果不好。在一些案例中,ConvNet 架构与数据产生过拟合,致使架构难以泛化至新样本。为了解决这些问题,近年来研究者开发了多种正则化和优化策略。此外,研究显示这些技术能够大幅提升网络性能,同时减少算力消耗。使用这些技术的前提是全面了解该技术提升网络表达能力的理论原理,本论文旨在介绍开发 ConvNet 架构最常用策略的理论概念和数学公式。 正则化技术 正则化技术是保证算法泛化能力的有效工具,因此算法正则化的研究成为机器学习中主要的研究主题 [9] [10]。此外,正则化还是训练参数数量大于训练数据集的深度学习模型的关键步骤。正则化可以避免算法过拟合,过拟合通常发生在算法学习的输入数据无法反应真实的分布且存在一些噪声的情况。过去数年,研究者提出和开发了多种适合机器学习算法的正则化方法,如数据增强、L2 正则化(权重衰减)、L1 正则化、Dropout、Drop Connect、随机池化和早停等。 除了泛化原因,奥卡姆剃刀原理和贝叶斯估计也都支持着正则化。根据奥卡姆剃刀原理,在所有可能选择的模型中,能很好解释已知数据,并且十分简单的模型才是较好的模型。而从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。 4.1 数据增强 数据增强是提升算法性能、满足深度学习模型对大量数据的需求的重要工具。数据增强通过向训练数据添加转换或扰动来人工增加训练数据集。数据增强技术如水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转通常应用在视觉表象和图像分类中。 4.2 L1 和 L2 正则化 L1 和 L2 正则化是最常用的正则化方法。L1 正则化向目标函数添加正则化项,以减少参数的值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。根据之前的研究,L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。机器学习中最常用的正则化方法是对权重施加 L2 范数约束。 标准正则化代价函数如下: 其中正则化项 R(w) 是: 另一种惩罚权重的值总和的方法是 L1 正则化: L1 正则化在零点不可微,因此权重以趋近于零的常数因子增长。很多神经网络在权重衰减公式中使用一阶步骤来解决非凸 L1 正则化问题 [19]。L1 范数的近似变体是: 另一个正则化方法是混合 L1 和 L2 正则化,即弹性网络罚项 [20]。 在《深度学习》一书中,参数范数惩罚 L2 正则化能让深度学习算法「感知」到具有较高方差的输入 x,因此与输出目标的协方差较小(相对增加方差)的特征权重将会收缩。而 L1 正则化会因为在方向 i 上 J(w; X, y) 对 J(w; X, y) hat 的贡献被抵消而使 w_i 的值变为 0(J(w; X, y) hat 为 J(w; X, y) 加上 L1 正则项)。此外,参数的范数正则化也可以作为约束条件。对于 L2 范数来说,权重会被约束在一个 L2 范数的球体中,而对于 L1 范数,权重将被限制在 L1 所确定的范围内。 4.3 Dropout Bagging 是通过结合多个模型降低泛化误差的技术,主要的做法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。而 Dropout 可以被认为是集成了大量深层神经网络的 Bagging 方法,因此它提供了一种廉价的 Bagging 集成近似方法,能够训练和评估值数据数量的神经网络。 Dropout 指暂时丢弃一部分神经元及其连接。随机丢弃神经元可以防止过拟合,同时指数级、高效地连接不同网络架构。神经元被丢弃的概率为 1 − p,减少神经元之间的共适应。隐藏层通常以 0.5 的概率丢弃神经元。使用完整网络(每个节点的输出权重为 p)对所有 2^n 个 dropout 神经元的样本平均值进行近似计算。Dropout 显著降低了过拟合,同时通过避免在训练数据上的训练节点提高了算法的学习速度。 4.4 Drop Connect Drop Connect 是另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能 [22]。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。 4.5 早停法 早停法可以限制模型最小化代价函数所需的训练迭代次数。早停法通常用于防止训练中过度表达的模型泛化性能差。如果迭代次数太少,算法容易欠拟合(方差较小,偏差较大),而迭代次数太多,算法容易过拟合(方差较大,偏差较小)。早停法通过确定迭代次数解决这个问题,不需要对特定值进行手动设置。 优化技术 5.1 动量(Momentum) 随机梯度下降和小批量梯度下降是机器学习中最常见的优化技术,然而在大规模应用和复杂模型中,算法学习的效率是非常低的。而动量策略旨在加速学习过程,特别是在具有较高曲率的情况下。动量算法利用先前梯度的指数衰减滑动平均值在该方向上进行回退 [26]。该算法引入了变量 v 作为参数在参数空间中持续移动的速度向量,速度一般可以设置为负梯度的指数衰减滑动平均值。对于一个给定需要最小化的代价函数,动量可以表达为: 其中 α 为学习率,γ ∈ (0, 1] 为动量系数,v 是速度向量,θ是保持和速度向量方向相同的参数。一般来说,梯度下降算法下降的方向为局部最速的方向(数学上称为最速下降法),它的下降方向在每一个下降点一定与对应等高线的切线垂直,因此这也就导致了 GD 算法的锯齿现象。虽然 SGD 算法收敛较慢,但动量法是令梯度直接指向最优解的策略之一。在实践中,γ初始设置为 0.5,并在初始学习稳定后增加到 0.9。同样,α 一般也设置地非常小,因为梯度的量级通常是比较大的。 5.2 Nesterov 加速梯度(NAG) Nesterov 加速梯度(NAG)和经典动量算法非常相似,它是一种一阶优化算法,但在梯度评估方面有所不同。在 NAG 中,梯度的评估是通过速度的实现而完成的。NAG 根据参数进行更新,和动量算法一样,不过 NAG 的收敛速度更好。在批量梯度下降中,与平滑的凸函数相比,NAG 的收敛速度超出 1/k 到 1/(k^2) [27]。但是,在 SGD 中,NAG 无法提高收敛速度。NAG 的更新如下: 动量系数设置为 0.9。经典的动量算法先计算当前梯度,再转向更新累积梯度。相反,在 NAG 中,先转向更新累积梯度,再进行校正。其结果是防止算法速度过快,且增加了反应性(responsiveness)。 5.3 Adagrad Adagrad 亦称为自适应梯度(adaptive gradient),允许学习率基于参数进行调整,而不需要在学习过程中人为调整学习率。Adagrad 根据不常用的参数进行较大幅度的学习率更新,根据常用的参数进行较小幅度的学习率更新。因此,Adagrad 成了稀疏数据如图像识别和 NLP 的天然选择。然而 Adagrad 的较大问题在于,在某些案例中,学习率变得太小,学习率单调下降使得网络停止学习过程。在经典的动量算法和 Nesterov 中,加速梯度参数更新是对所有参数进行的,并且学习过程中的学习率保持不变。在 Adagrad 中,每次迭代中每个参数使用的都是不同的学习率。 5.4 AdaDelta AdaDelta 使用最近历史梯度值缩放学习率,并且和经典的动量算法相似,累积历史的更新以加速学习。AdaDelta 可以有效地克服 Adagrad 学习率收敛至零的缺点。AdaDelta 将累积过去平方梯度的范围限制在固定窗口 w 内,取代了经典动量算法累积所有历史梯度值的做法。在时间 t 运行的平均值计算 Eg^2 依赖于过去的平均值和当前的梯度值。因此,该平均值计算可以表示为: 其中 γ 和动量项相同。实践中,该值通常设为 0.9 左右。根据等式 3.13,SGD 更新的等式为: 根据等式 5.6,Adagrad 的更新为: 使用过往的平方梯度 替换对角矩阵 G_i,得到 其中分母是梯度的平方根误差, 用 替换先前更新规则中的学习率 α,得到 5.5 RMS prop RMS prop 类似于 Adadelta 的较早的更新向量, RMS prop 的更新规则如下: 在 RMS prop 中,学习率除以平方梯度的指数衰减平均值。 5.6 Adam 1.Adam 优化算法的基本机制 Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。 Adam 算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即: 适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。 均方根传播(RMSProp)基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。 Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。 移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。 2.Adam算法 如上算法所述,在确定了参数α、β_1、β_2 和随机目标函数 f(θ) 之后,我们需要初始化参数向量、一阶矩向量、二阶矩向量和时间步。然后当参数 θ 没有收敛时,循环迭代地更新各个部分。即时间步 t 加 1、更新目标函数在该时间步上对参数θ所求的梯度、更新偏差的一阶矩估计和二阶原始矩估计,再计算偏差修正的一阶矩估计和偏差修正的二阶矩估计,然后再用以上计算出来的值更新模型的参数θ。 该算法更新梯度的指数移动均值(mt)和平方梯度(vt),而参数 β_1、β_2 ∈ [0, 1) 控制了这些移动均值(moving average)指数衰减率。移动均值本身使用梯度的一阶矩(均值)和二阶原始矩(有偏方差)进行估计。然而因为这些移动均值初始化为 0 向量,所以矩估计值会偏差向 0,特别是在初始时间步中和衰减率非常小(即β接近于 1)的情况下是这样的。但好消息是,初始化偏差很容易抵消,因此我们可以得到偏差修正(bias-corrected)的估计 m_t hat 和 v_t hat。 注意算法的效率可以通过改变计算顺序而得到提升,例如将伪代码最后三行循环语句替代为以下两个: Adam 的更新规则 初始化偏差修正 正如本论文第二部分算法所述,Adam 利用了初始化偏差修正项。本部分将由二阶矩估计推导出这一偏差修正项,一阶矩估计的推导完全是相似的。首先我们可以求得随机目标函数 f 的梯度,然后我们希望能使用平方梯度(squared gradient)的指数移动均值和衰减率 β_2 来估计它的二阶原始矩(有偏方差)。令 g1, …, gT 为时间步序列上的梯度,其中每个梯度都服从一个潜在的梯度分布 gt ~ p(gt)。现在我们初始化指数移动均值 v0=0(零向量),而指数移动均值在时间步 t 的更新可表示为: 其中 gt^2 表示 Hadamard 积 gt⊙gt,即对应元素之间的乘积。同样我们可以将其改写为在前面所有时间步上只包含梯度和衰减率的函数,即消去 v: 我们希望知道时间步 t 上指数移动均值的期望值 E[vt] 如何与真实的二阶矩 相关联,所以我们可以对这两个量之间的偏差进行修正。下面我们同时对表达式(1)的左边和右边去期望,即如下所示: 如果真实二阶矩 E[g^2] 是静态的(stationary),那么ζ = 0。否则 ζ 可以保留一个很小的值,这是因为我们应该选择指数衰减率 β1 以令指数移动均值分配很小的权重给梯度。所以初始化均值为零向量就造成了只留下了 (1 − βt^2 ) 项。我们因此在算法 1 中除以了ζ项以修正初始化偏差。 在稀疏矩阵中,为了获得一个可靠的二阶矩估计,我们需要选择一个很小的 β2 而在许多梯度上取均值。然而正好是这种小β2 值的情况导致了初始化偏差修正的缺乏,因此也就令初始化步长过大。 5.7 Nadam Nadam 是 NAG 和 Adam 优化器的结合 [28]。如果过往历史平方梯度的指数衰减平均值为 v_t,而过往历史梯度的指数衰减平均值为 m_t,那么经典动量更新规则如下: 我们需要修改动量规则以获得 Nadam 优化器。因此将上述公式扩展为: NAG 的修改如下: 可以通过更新梯度 g_t 时(第一次)和更新参数 θ_t+1(第二次)修改 NAG,而不是两次更新动量。因此动量向量直接更新参数可以表述如下: 为了添加 NAG 到 Adam,需要使用当前的动态向量替换先前的动态向量。因此,通过 m hat 和 m_t 扩展上述公式,Adam 更新规则如下: 利用先前时间步动量向量的偏差修正估计更新 Nadam 优化器的规则,如下:
来源商业新知网,原标题:2019 Python 面试 100 问,你会几道? 0 遇到过得反爬虫策略以及解决方法? 1.通过headers反爬虫 2.基于用户行为的发爬虫:(同一IP短时间内访问的频率) 3.动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成) 4.对部分数据进行加密处理的(数据是乱码) 解决方法:对于基本网页的抓取可以自定义headers,添加headers的数据 使用多个代理ip进行抓取或者设置抓取的频率降低一些, 动态网页的可以使用selenium + phantomjs 进行抓取 对部分数据进行加密的,可以使用selenium进行截图,使用python自带的pytesseract库进行识别,但是比较慢最直接的方法是找到加密的方法进行逆向推理。 1 urllib 和 urllib2 的区别?urllib 和urllib2都是接受URL请求的相关模块,但是urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。urllib不可以伪装你的User-Agent字符串。 urllib提供urlencode()方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。 2 列举网络爬虫所用到的网络数据包,解析包?网络数据包 urllib、urllib2、requests 解析包 re、xpath、beautiful soup、lxml 3 简述一下爬虫的步骤?确定需求;确定资源;通过url获取网站的返回数据;定位数据;存储数据。4 遇到反爬机制怎么处理?反爬机制:headers方向 判断User-Agent、判断Referer、判断Cookie。 将浏览器的headers信息全部添加进去 注意:Accept-Encoding;gzip,deflate需要注释掉 5 常见的HTTP方法有哪些?GET:请求指定的页面信息,返回实体主体; HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于捕获报头; POST:向指定资源提交数据进行处理请求(比如表单提交或者上传文件),。数据被包含在请求体中。 PUT:从客户端向服务端传送数据取代指定的文档的内容; DELETE:请求删除指定的页面; CONNNECT:HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器; OPTIONS:允许客户端查看服务器的性能; TRACE:回显服务器的请求,主要用于测试或者诊断。6 说一说redis-scrapy中redis的作用?它是将scrapy框架中Scheduler替换为redis数据库,实现队列管理共享。 优点:可以充分利用多台机器的带宽;可以充分利用多台机器的IP地址。7 遇到的反爬虫策略以及解决方法?通过headers反爬虫:自定义headers,添加网页中的headers数据。基于用户行为的反爬虫(封IP):可以使用多个代理IP爬取或者将爬取的频率降低。动态网页反爬虫(JS或者Ajax请求数据):动态网页可以使用 selenium + phantomjs 抓取。对部分数据加密处理(数据乱码):找到加密方法进行逆向推理。8 如果让你来防范网站爬虫,你应该怎么来提高爬取的难度 ?判断headers的User-Agent;检测同一个IP的访问频率;数据通过Ajax获取;爬取行为是对页面的源文件爬取,如果要爬取静态网页的html代码,可以使用jquery去模仿写html。9 scrapy分为几个组成部分?分别有什么作用?分为5个部分;Spiders(爬虫类),Scrapy Engine(引擎),Scheduler(调度器),Downloader(下载器),Item Pipeline(处理管道)。 Spiders:开发者自定义的一个类,用来解析网页并抓取指定url返回的内容。 Scrapy Engine:控制整个系统的数据处理流程,并进行事务处理的触发。 Scheduler:接收Engine发出的requests,并将这些requests放入到处理列队中,以便之后engine需要时再提供。 Download:抓取网页信息提供给engine,进而转发至Spiders。 Item Pipeline:负责处理Spiders类提取之后的数据。 比如清理HTML数据、验证爬取的数据(检查item包含某些字段)、查重(并丢弃)、将爬取结果保存到数据库中10 简述一下scrapy的基本流程?知识图谱,2019 Python 面试 100 问,你会几道?scrapy分为9个步骤:Spiders需要初始的start_url或则函数stsrt_requests,会在内部生成Requests给Engine;Engine将requests发送给Scheduler;Engine从Scheduler那获取requests,交给Download下载;在交给Dowmload过程中会经过Downloader Middlewares(经过process_request函数);Dowmloader下载页面后生成一个response,这个response会传给Engine,这个过程中又经过了Downloader Middlerwares(经过process_request函数),在传送中出错的话经过process_exception函数;Engine将从Downloader那传送过来的response发送给Spiders处理,这个过程经过Spiders Middlerwares(经过process_spider_input函数);Spiders处理这个response,返回Requests或者Item两个类型,传给Engine,这个过程又经过Spiders Middlewares(经过porcess_spider_output函数);Engine接收返回的信息,如果使Item,将它传给Items Pipeline中;如果是Requests,将它传给Scheduler,继续爬虫;重复第三步,直至没有任何需要爬取的数据11 python3.5语言中enumerate的意思是对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 enumerate多用于在for循环中得到计数 12 你是否了解谷歌的无头浏览器?无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。 Python中selenium模块中的PhantomJS即为无界面浏览器(无头浏览器):是基于QtWebkit的无头浏览器。 13 scrapy和scrapy-redis的区别?scrapy是一个爬虫通用框架,但不支持分布式,scrapy-redis是为了更方便的实现scrapy分布式爬虫,而提供了一些以redis为基础的组件 为什么会选择redis数据库?因为redis支持主从同步,而且数据都是缓存在内存中,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高 什么是主从同步?在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,也即是,将从服务器的数据库状态更新至主服务器当前所处的数据库状态 14 scrapy的优缺点?为什么要选择scrapy框架?优点:采取可读性更强的xpath代替正则 强大的统计和log系统 同时在不同的url上爬行 支持shell方式,方便独立调试 写middleware,方便写一些统一的过滤器 通过管道的方式存入数据库 缺点:基于python爬虫框架,扩展性比较差,基于twisted框架,运行中exception是不会干掉reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉 15 scrapy和requests的使用情况?requests 是 polling 方式的,会被网络阻塞,不适合爬取大量数据 scapy 底层是异步框架 twisted ,并发是最大优势 16 描述一下scrapy框架的运行机制?从start_urls里面获取第一批url发送请求,请求由请求引擎给调度器入请求对列,获取完毕后,调度器将请求对列交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理,如果提取出需要的数据,则交给管道处理,如果提取出url,则继续执行之前的步骤,直到多列里没有请求,程序结束。 17 写爬虫使用多进程好,还是用多线程好?IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能提升程序执行效率)。在实际的数据采集过程中,既考虑网速和响应的问题,也需要考虑自身机器的硬件情况,来设置多进程或多线程 18 常见的反爬虫和应对方法?基于用户行为,同一个ip段时间多次访问同一页面 利用代理ip,构建ip池请求头里的user-agent 构建user-agent池(操作系统、浏览器不同,模拟不同用户)动态加载(抓到的数据和浏览器显示的不一样),js渲染 模拟ajax请求,返回json形式的数据selenium / webdriver 模拟浏览器加载对抓到的数据进行分析加密参数字段 会话跟踪【cookie】 防盗链设置【Referer19 分布式爬虫主要解决什么问题?面对海量待抓取网页,只有采用分布式架构,才有可能在较短时间内完成一轮抓取工作。 它的开发效率是比较快而且简单的。 20 如何提高爬取效率?爬虫下载慢主要原因是阻塞等待发往网站的请求和网站返回 1,采用异步与多线程,扩大电脑的cpu利用率; 2,采用消息队列模式 3,提高带宽 21 说说什么是爬虫协议?Robots协议(也称为爬虫协议、爬虫规则、机器人协议等)也就是robots.txt,网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。 Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。因其不是命令,故需要搜索引擎自觉遵守。 22 如果对方网站反爬取,封IP了怎么办?放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量使用代理IP(免费的可能不稳定,收费的可能不划算)23 有一个jsonline格式的文件filedef get_lines(): with open('file.txt','rb') as f: return f.readlines() if name == '__main__': for e in get_lines(): process(e) # 处理每一行数据 现在要处理一个大小为10G的文件,但是内存只有4G,如果在只修改get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有那些? def get_lines(): with open('file.txt','rb') as f: for i in f: yield i Pandaaaa906提供的方法 from mmap import mmap def get_lines(fp): with open(fp,"r+") as f: m = mmap(f.fileno(), 0) tmp = 0 for i, char in enumerate(m): if char==b"n": yield m[tmp:i+1].decode() tmp = i+1 if __name__=="__main__": for i in get_lines("fp_some_huge_file"): print(i) 要考虑的问题有:内存只有4G无法一次性读入10G文件,需要分批读入分批读入数据要记录每次读入数据的位置。分批每次读取数据的大小,太小会在读取操作花费过多时间。 https://stackoverflow.com/questions/30294146/python-fastest-way-to-process-large-file 24 补充缺失的代码def print_directory_contents(sPath):"""这个函数接收文件夹的名称作为输入参数返回该文件夹中文件的路径以及其包含文件夹中文件的路径"""import osfor s_child in os.listdir(s_path): s_child_path = os.path.join(s_path, s_child) if os.path.isdir(s_child_path): print_directory_contents(s_child_path) else: print(s_child_path) 25 输入日期, 判断这一天是这一年的第几天?import datetimedef dayofyear(): year = input("请输入年份: ") month = input("请输入月份: ") day = input("请输入天: ") date1 = datetime.date(year=int(year),month=int(month),day=int(day)) date2 = datetime.date(year=int(year),month=1,day=1) return (date1-date2).days+1 26 打乱一个排好序的list对象alist?import randomalist = [1,2,3,4,5]random.shuffle(alist)print(alist)27 现有字典 d= {'a':24,'g':52,'i':12,'k':33}请按value值进行排序?sorted(d.items(),key=lambda x:x[1])28 字典推导式d = {key:value for (key,value) in iterable}29 请反转字符串 "aStr"?print("aStr"[::-1])30 将字符串 "k:1 |k1:2|k2:3|k3:4",处理成字典str1 = "k:1|k1:2|k2:3|k3:4"def str2dict(str1): dict1 = {} for iterms in str1.split('|'): key,value = iterms.split(':') dict1[key] = value return dict1 字典推导式 d = {k:int(v) for t in str1.split("|") for k, v in (t.split(":") )}31 请按alist中元素的age由大到小排序alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]def sort_by_age(list1): return sorted(alist,key=lambda x:x['age'],reverse=True) 32 下面代码的输出结果将是什么?list = ['a','b','c','d','e']print(list[10:])代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。然而,尝试获取列表的切片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。 33 写一个列表生成式,产生一个公差为11的等差数列print([x*11 for x in range(10)])34 给定两个列表,怎么找出他们相同的元素和不同的元素?list1 = [1,2,3]list2 = [3,4,5]set1 = set(list1)set2 = set(list2)print(set1 & set2)print(set1 ^ set2)35 请写出一段python代码实现删除list里面的重复元素?l1 = ['b','c','d','c','a','a']l2 = list(set(l1))print(l2)用list类的sort方法: l1 = ['b','c','d','c','a','a']l2 = list(set(l1))l2.sort(key=l1.index)print(l2)也可以这样写: l1 = ['b','c','d','c','a','a']l2 = sorted(set(l1),key=l1.index)print(l2)也可以用遍历: l1 = ['b','c','d','c','a','a']l2 = []for i in l1: if not i in l2: l2.append(i) print(l2)36 给定两个list A,B ,请用找出A,B中相同与不同的元素A,B 中相同元素: print(set(A)&set(B))A,B 中不同元素: print(set(A)^set(B))37 python新式类和经典类的区别? 在python里凡是继承了object的类,都是新式类 Python3里只有新式类 Python2里面继承object的是新式类,没有写父类的是经典类 经典类目前在Python里基本没有应用 38 python中内置的数据结构有几种? 整型 int、 长整型 long、浮点型 float、 复数 complex 字符串 str、 列表 list、 元祖 tuple 字典 dict 、 集合 set Python3 中没有 long,只有无限精度的 int 39 python如何实现单例模式?请写出两种实现方式?第一种方法:使用装饰器 def singleton(cls): instances = {} def wrapper(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return wrapper @singletonclass Foo(object): pass foo1 = Foo()foo2 = Foo()print(foo1 is foo2) # True第二种方法:使用基类 New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一个实例 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) return cls._instance class Foo(Singleton): pass foo1 = Foo()foo2 = Foo() print(foo1 is foo2) # True第三种方法:元类,元类是用于创建类对象的类,类对象创建实例对象时一定要调用call方法,因此在调用call时候保证始终只创建一个实例即可,type是python的元类 class Singleton(type): def __call__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(Singleton, cls).__call__(*args, **kwargs) return cls._instance Python2 class Foo(object): __metaclass__ = Singleton Python3 class Foo(metaclass=Singleton): pass foo1 = Foo()foo2 = Foo()print(foo1 is foo2) # True40 反转一个整数,例如-123 --> -321class Solution(object): def reverse(self,x): if -1010: return x str_x = str(x) if str_x[0] !="-": str_x = str_x[::-1] x = int(str_x) else: str_x = str_x[1:][::-1] x = int(str_x) x = -x return x if -21474836482147483647 else 0 if name == '__main__': s = Solution() reverse_int = s.reverse(-120) print(reverse_int) 41 设计实现遍历目录与子目录,抓取.pyc文件?第一种方法: import os def get_files(dir,suffix): res = [] for root,dirs,files in os.walk(dir): for filename in files: name,suf = os.path.splitext(filename) if suf == suffix: res.append(os.path.join(root,filename)) print(res) get_files("./",'.pyc')第二种方法: import os def pick(obj): if ob.endswith(".pyc"): print(obj) def scan_path(ph): file_list = os.listdir(ph) for obj in file_list: if os.path.isfile(obj): pick(obj) elif os.path.isdir(obj): scan_path(obj) if __name__=='__main__': path = input('输入目录') scan_path(path) 第三种方法 from glob import iglob def func(fp, postfix): for i in iglob(f"{fp}/**/*{postfix}", recursive=True): print(i) if name == "__main__": postfix = ".pyc" func("K:Python_script", postfix) 42 Python-遍历列表时删除元素的正确做法遍历在新在列表操作,删除时在原来的列表操作 a = [1,2,3,4,5,6,7,8]print(id(a))print(id(a[:]))for i in a[:]: if i>5: pass else: a.remove(i) print(a) print('-----------')print(id(a)) filter a=[1,2,3,4,5,6,7,8]b = filter(lambda x: x>5,a)print(list(b))列表解析 a=[1,2,3,4,5,6,7,8]b = [i for i in a if i>5]print(b)倒序删除 因为列表总是‘向前移’,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的 a=[1,2,3,4,5,6,7,8]print(id(a))for i in range(len(a)-1,-1,-1): if a[i]>5: pass else: a.remove(a[i]) print(id(a))print('-----------')print(a)43 字符串的操作题目全字母短句 PANGRAM 是包含所有英文字母的句子,比如:A QUICK BROWN FOX JUMPS OVER THE LAZY DOG. 定义并实现一个方法 get_missing_letter, 传入一个字符串采纳数,返回参数字符串变成一个 PANGRAM 中所缺失的字符。应该忽略传入字符串参数中的大小写,返回应该都是小写字符并按字母顺序排序(请忽略所有非 ACSII 字符) 下面示例是用来解释,双引号不需要考虑: (0)输入: "A quick brown for jumps over the lazy dog" 返回: "" (1)输入: "A slow yellow fox crawls under the proactive dog" 返回: "bjkmqz" (2)输入: "Lions, and tigers, and bears, oh my!" 返回: "cfjkpquvwxz" (3)输入: "" 返回:"abcdefghijklmnopqrstuvwxyz" def get_missing_letter(a): s1 = set("abcdefghijklmnopqrstuvwxyz") s2 = set(a) ret = "".join(sorted(s1-s2)) return ret print(get_missing_letter("python"))44 可变类型和不可变类型1,可变类型有list,dict.不可变类型有string,number,tuple. 2,当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。 3,不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。 45 is和==有什么区别?is:比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象。是否指向同一个内存地址 == : 比较的两个对象的内容/值是否相等,默认会调用对象的eq()方法 46 求出列表所有奇数并构造新列表a = [1,2,3,4,5,6,7,8,9,10]res = [ i for i in a if i%2==1]print(res)47 用一行python代码写出1+2+3+10248from functools import reduce 1.使用sum内置求和函数 num = sum([1,2,3,10248])print(num) 2.reduce 函数 num1 = reduce(lambda x,y :x+y,[1,2,3,10248])print(num1)48 Python中变量的作用域?(变量查找顺序)函数作用域的LEGB顺序 1.什么是LEGB? L: local 函数内部作用域 E: enclosing 函数内部与内嵌函数之间 G: global 全局作用域 B: build-in 内置作用 python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的 49 字符串 "123" 转换成 123,不使用内置api,例如 int()方法一: 利用 str 函数 def atoi(s): num = 0 for v in s: for j in range(10): if v == str(j): num = num * 10 + j return num 方法二: 利用 ord 函数 def atoi(s): num = 0 for v in s: num = num * 10 + ord(v) - ord('0') return num 方法三: 利用 eval 函数 def atoi(s): num = 0 for v in s: t = "%s * 1" % v n = eval(t) num = num * 10 + n return num 方法四: 结合方法二,使用 reduce ,一行解决 from functools import reducedef atoi(s): return reduce(lambda num, v: num * 10 + ord(v) - ord('0'), s, 0) 50 Given an array of integers给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定nums = [2,7,11,15],target=9 因为 nums[0]+nums[1] = 2+7 =9,所以返回[0,1] class Solution: def twoSum(self,nums,target): """ :type nums: List[int] :type target: int :rtype: List[int] """ d = {} size = 0 while size < len(nums): if target-nums[size] in d: if d[target-nums[size]] return [d[target-nums[size]],size] else: d[nums[size]] = size size = size +1 solution = Solution()list = [2,7,11,15]target = 9nums = solution.twoSum(list,target)print(nums)给列表中的字典排序:假设有如下list对象,alist=[{"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}],将alist中的元素按照age从大到小排序 alist=[{"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}] alist_sort = sorted(alist,key=lambda e: e.__getitem__('age'),reverse=True)51 python代码实现删除一个list里面的重复元素def distFunc1(a): """使用集合去重""" a = list(set(a)) print(a) def distFunc2(a): """将一个列表的数据取出放到另一个列表中,中间作判断""" list = [] for i in a: if i not in list: list.append(i) #如果需要排序的话用sort list.sort() print(list) def distFunc3(a): """使用字典""" b = {} b = b.fromkeys(a) c = list(b.keys()) print(c) if name == "__main__": a = [1,2,4,2,4,5,7,10,5,5,7,8,9,0,3] distFunc1(a) distFunc2(a) distFunc3(a) 52 统计一个文本中单词频次最高的10个单词?import re 方法一 def test(filepath): distone = {} with open(filepath) as f: for line in f: line = re.sub("W+", " ", line) lineone = line.split() for keyone in lineone: if not distone.get(keyone): distone[keyone] = 1 else: distone[keyone] += 1 num_ten = sorted(distone.items(), key=lambda x:x[1], reverse=True)[:10] num_ten =[x[0] for x in num_ten] return num_ten 方法二 使用 built-in 的 Counter 里面的 most_common import refrom collections import Counter def test2(filepath): with open(filepath) as f: return list(map(lambda c: c[0], Counter(re.sub("W+", " ", f.read()).split()).most_common(10))) 53 请写出一个函数满足以下条件该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件: 1、该元素是偶数 2、该元素在原list中是在偶数的位置(index是偶数) def num_list(num): return [i for i in num if i %2 ==0 and num.index(i)%2==0] num = [0,1,2,3,4,5,6,7,8,9,10]result = num_list(num)print(result)54 使用单一的列表生成式来产生一个新的列表该列表只包含满足以下条件的值,元素为原始列表中偶数切片 list_data = [1,2,5,8,10,3,18,6,20]res = [x for x in list_data[::2] if x %2 ==0]print(res)55 用一行代码生成[1,4,9,16,25,36,49,64,81,100][x * x for x in range(1,11)]56 输入某年某月某日,判断这一天是这一年的第几天?import datetime y = int(input("请输入4位数字的年份:"))m = int(input("请输入月份:"))d = int(input("请输入是哪一天")) targetDay = datetime.date(y,m,d)dayCount = targetDay - datetime.date(targetDay.year -1,12,31)print("%s是 %s年的第%s天。"%(targetDay,y,dayCount.days))57 两个有序列表,l1,l2,对这两个列表进行合并不可使用extenddef loop_merge_sort(l1,l2): tmp = [] while len(l1)>0 and len(l2)>0: if l1[0] 0]: tmp.append(l1[0]) del l1[0] else: tmp.append(l2[0]) del l2[0] while len(l1)>0: tmp.append(l1[0]) del l1[0] while len(l2)>0: tmp.append(l2[0]) del l2[0] return tmp 58 给定一个任意长度数组,实现一个函数让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,如字符串'1982376455',变成'1355798642' 方法一 def func1(l): if isinstance(l, str): l = [int(i) for i in l] l.sort(reverse=True) for i in range(len(l)): if l[i] % 2 > 0: l.insert(0, l.pop(i)) print(''.join(str(e) for e in l)) 方法二 def func2(l): print("".join(sorted(l, key=lambda x: int(x) % 2 == 0 and 20 - int(x) or int(x)))) 59 写一个函数找出一个整数数组中,第二大的数def find_second_large_num(num_list): """ 找出数组第2大的数字 """ # 方法一 # 直接排序,输出倒数第二个数即可 tmp_list = sorted(num_list) print("方法一nSecond_large_num is :", tmp_list[-2]) # 方法二 # 设置两个标志位一个存储最大数一个存储次大数 # two 存储次大值,one 存储最大值,遍历一次数组即可,先判断是否大于 one,若大于将 one 的值给 two,将 num_list[i] 的值给 one,否则比较是否大于two,若大于直接将 num_list[i] 的值给two,否则pass one = num_list[0] two = num_list[0] for i in range(1, len(num_list)): if num_list[i] > one: two = one one = num_list[i] elif num_list[i] > two: two = num_list[i] print("方法二nSecond_large_num is :", two) # 方法三 # 用 reduce 与逻辑符号 (and, or) # 基本思路与方法二一样,但是不需要用 if 进行判断。 from functools import reduce num = reduce(lambda ot, x: ot[1] < x and (ot[1], x) or ot[0] < x and (x, ot[1]) or ot, num_list, (0, 0))[0] print("方法三nSecond_large_num is :", num) if name == '__main___': num_list = [34, 11, 23, 56, 78, 0, 9, 12, 3, 7, 5] find_second_large_num(num_list) 60 阅读一下代码他们的输出结果是什么?def multi(): return [lambda x : i*x for i in range(4)] print([m(3) for m in multi()])正确答案是[9,9,9,9],而不是[0,3,6,9]产生的原因是Python的闭包的后期绑定导致的,这意味着在闭包中的变量是在内部函数被调用的时候被查找的,因为,最后函数被调用的时候,for循环已经完成, i 的值最后是3,因此每一个返回值的i都是3,所以最后的结果是[9,9,9,9] 61 统计一段字符串中字符出现的次数 方法一 def count_str(str_data): """定义一个字符出现次数的函数""" dict_str = {} for i in str_data: dict_str[i] = dict_str.get(i, 0) + 1 return dict_str dict_str = count_str("AAABBCCAC")str_count_data = ""for k, v in dict_str.items(): str_count_data += k + str(v) print(str_count_data) 方法二 from collections import Counter print("".join(map(lambda x: x[0] + str(x[1]), Counter("AAABBCCAC").most_common())))62 Python中类方法、类实例方法、静态方法有何区别?类方法: 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用 类实例方法: 是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身; 静态方法: 是一个任意函数,在其上方使用 @staticmethod 进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系 63 遍历一个object的所有属性,并print每一个属性名?class Car: def __init__(self,name,loss): # loss [价格,油耗,公里数] self.name = name self.loss = loss def getName(self): return self.name def getPrice(self): # 获取汽车价格 return self.loss[0] def getLoss(self): # 获取汽车损耗值 return self.loss[1] * self.loss[2] Bmw = Car("宝马",[60,9,500]) # 实例化一个宝马车对象print(getattr(Bmw,"name")) # 使用getattr()传入对象名字,属性值。print(dir(Bmw)) # 获Bmw所有的属性和方法64 写一个类,并让它尽可能多的支持操作符?class Array: __list = [] def __init__(self): print "constructor" def __del__(self): print "destruct" def __str__(self): return "this self-defined array class" def __getitem__(self,key): return self.__list[key] def __len__(self): return len(self.__list) def Add(self,value): self.__list.append(value) def Remove(self,index): del self.__list[index] def DisplayItems(self): print "show all items---" for item in self.__list: print item 65 关于Python内存管理,下列说法错误的是 BA,变量不必事先声明 B,变量无须先创建和赋值而直接使用 C,变量无须指定类型 D,可以使用del释放资源 66 Python的内存管理机制及调优手段?内存管理机制: 引用计数、垃圾回收、内存池 引用计数:引用计数是一种非常高效的内存管理手段,当一个Python对象被引用时其引用计数增加1, 当其不再被一个变量引用时则计数减1,当引用计数等于0时对象被删除。弱引用不会增加引用计数 垃圾回收: 1.引用计数 引用计数也是一种垃圾收集机制,而且也是一种最直观、最简单的垃圾收集技术。当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。比如某个新建对象,它被分配给某个引用,对象的引用计数变为1,如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收。不过如果出现循环引用的话,引用计数机制就不再起有效的作用了。 2.标记清除 调优手段 1.手动垃圾回收 2.调高垃圾回收阈值 3.避免循环引用 67 内存泄露是什么?如何避免?内存泄漏 指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。 有 __del__() 函数的对象间的循环引用是导致内存泄露的主凶。不使用一个对象时使用: del object 来删除一个对象的引用计数就可以有效防止内存泄露问题。 通过Python扩展模块gc 来查看不能回收的对象的详细信息。 可以通过 sys.getrefcount(obj) 来获取对象的引用计数,并根据返回值是否为0来判断是否内存泄露 68 python常见的列表推导式?[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 69 简述read、readline、readlines的区别?read 读取整个文件 readline 读取下一行 readlines 读取整个文件到一个迭代器以供我们遍历 70 什么是Hash(散列函数)?散列函数 (英语:Hash function)又称 散列算法 、 哈希函数 ,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做 散列值 (hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表 71 python函数重载机制?函数重载主要是为了解决两个问题。 1。可变参数类型。 2。可变参数个数。 另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。 好吧,那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。 那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。 好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。 72 手写一个判断时间的装饰器import datetime class TimeException(Exception): def __init__(self, exception_info): super().__init__() self.info = exception_info def __str__(self): return self.info def timecheck(func): def wrapper(*args, **kwargs): if datetime.datetime.now().year == 2019: func(*args, **kwargs) else: raise TimeException("函数已过时") return wrapper @timecheckdef test(name): print("Hello {}, 2019 Happy".format(name)) if name == "__main__": test("backbp") 73 使用Python内置的filter()方法来过滤?list(filter(lambda x: x % 2 == 0, range(10)))74 编写函数的4个原则1.函数设计要尽量短小 2.函数声明要做到合理、简单、易于使用 3.函数参数设计应该考虑向下兼容 4.一个函数只做一件事情,尽量保证函数语句粒度的一致性 75 函数调用参数的传递方式是值传递还是引用传递?Python的参数传递有:位置参数、默认参数、可变参数、关键字参数。 函数的传值到底是值传递还是引用传递、要分情况: 不可变参数用值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。 可变参数是引用传递:比如像列表,字典这样的对象是通过引用传递、和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变。 76 如何在function里面设置一个全局变量globals() # 返回包含当前作用余全局变量的字典。global 变量 设置使用全局变量77 对缺省参数的理解 ?缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会替代默认参数。 *args是不定长参数,它可以表示输入参数是不确定的,可以是任意多个。 **kwargs是关键字参数,赋值的时候是以键值对的方式,参数可以是任意多对在定义函数的时候 不确定会有多少参数会传入时,就可以使用两个参数 78 带参数的装饰器?带定长参数的装饰器 def new_func(func): def wrappedfun(username, passwd): if username == 'root' and passwd == '123456789': print('通过认证') print('开始执行附加功能') return func() else: print('用户名或密码错误') return return wrappedfun @new_funcdef origin(): print('开始执行函数') origin('root','123456789')带不定长参数的装饰器 def new_func(func): def wrappedfun(*parts): if parts: counts = len(parts) print('本系统包含 ', end='') for part in parts: print(part, ' ',end='') print('等', counts, '部分') return func() else: print('用户名或密码错误') return func() return wrappedfun79 为什么函数名字可以当做参数用?Python中一切皆对象,函数名是函数在内存中的空间,也是一个对象 80 Python中pass语句的作用是什么?在编写代码时只写框架思路,具体实现还未编写就可以用pass进行占位,是程序不报错,不会进行任何操作。 81 有这样一段代码,print c会输出什么,为什么?a = 10b = 20c = [a]a = 15答:10对于字符串,数字,传递是相应的值 82 交换两个变量的值?a, b = b, a83 map函数和reduce函数?map(lambda x: x * x, [1, 2, 3, 4]) # 使用 lambda [1, 4, 9, 16] reduce(lambda x, y: x y, [1, 2, 3, 4]) # 相当于 ((1 2) 3) 4 24 84 回调函数,如何通信的?回调函数是把函数的指针(地址)作为参数传递给另一个函数,将整个函数当作一个对象,赋值给调用的函数。 85 Python主要的内置数据类型都有哪些? print dir( ‘a ’) 的输出?内建类型:布尔类型,数字,字符串,列表,元组,字典,集合 输出字符串'a'的内建方法 86 map(lambda x:xx,[y for y in range(3)])的输出?[0, 1, 4]87 hasattr() getattr() setattr() 函数使用详解?hasattr(object,name)函数: 判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False。 class function_demo(object): name = 'demo' def run(self): return "hello function" functiondemo = function_demo()res = hasattr(functiondemo, "name") # 判断对象是否有name属性,Trueres = hasattr(functiondemo, "run") # 判断对象是否有run方法,Trueres = hasattr(functiondemo, "age") # 判断对象是否有age属性,Falseprint(res)getattr(object, name[,default])函数: 获取对象object的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面添加括号(). functiondemo = function_demo()getattr(functiondemo, "name")# 获取name属性,存在就打印出来 --- demogetattr(functiondemo, "run") # 获取run 方法,存在打印出方法的内存地址getattr(functiondemo, "age") # 获取不存在的属性,报错getattr(functiondemo, "age", 18)# 获取不存在的属性,返回一个默认值setattr(object, name, values)函数: 给对象的属性赋值,若属性不存在,先创建再赋值 class function_demo(object): name = "demo" def run(self): return "hello function" functiondemo = function_demo()res = hasattr(functiondemo, "age") # 判断age属性是否存在,Falseprint(res)setattr(functiondemo, "age", 18) # 对age属性进行赋值,无返回值res1 = hasattr(functiondemo, "age") # 再次判断属性是否存在,True综合使用 class function_demo(object): name = "demo" def run(self): return "hello function" functiondemo = function_demo()res = hasattr(functiondemo, "addr") # 先判断是否存在if res: addr = getattr(functiondemo, "addr") print(addr) else: addr = getattr(functiondemo, "addr", setattr(functiondemo, "addr", "北京首都")) print(addr) 88 一句话解决阶乘函数?reduce(lambda x,y : x*y,range(1,n+1))89 对设计模式的理解,简述你了解的设计模式?设计模式是经过总结,优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码,反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。 常见的是工厂模式和单例模式 90 请手写一个单例 python2 class A(object): __instance = None def __new__(cls,*args,**kwargs): if cls.__instance is None: cls.__instance = objecet.__new__(cls) return cls.__instance else: return cls.__instance 91 单例模式的应用场景有那些?单例模式应用的场景一般发现在以下条件下: 资源共享的情况下,避免由于资源操作时导致的性能或损耗等,如日志文件,应用配置。 控制资源的情况下,方便资源之间的互相通信。如线程池等,1,网站的计数器 2,应用配置 3.多线程池 4数据库配置 数据库连接池 5.应用程序的日志应用… 92 用一行代码生成[1,4,9,16,25,36,49,64,81,100]print([x*x for x in range(1, 11)])93 对装饰器的理解,并写出一个计时器记录方法执行性能的装饰器?装饰器本质上是一个callable object ,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。 import timefrom functools import wraps def timeit(func): @wraps(func) def wrapper(*args, **kwargs): start = time.clock() ret = func(*args, **kwargs) end = time.clock() print('used:',end-start) return ret return wrapper @timeitdef foo(): print('in foo()'foo()) 94 解释以下什么是闭包?在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。 95 函数装饰器有什么作用?装饰器本质上是一个callable object,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能。装饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。比如:插入日志,性能测试,事务处理,缓存。权限的校验等场景,有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用。 详细参考:https://manjusaka.itscoder.com/2018/02/23/something-about-decorator/ 96 生成器,迭代器的区别?迭代器是遵循迭代协议的对象。用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple, dictionary, set 等)。另一个方法则是创建一个另一种形式的迭代器 —— generator 。要获取下一个元素,则使用成员函数 next()(Python 2)或函数 next() function (Python 3) 。当没有元素时,则引发 StopIteration 此例外。若要实现自己的迭代器,则只要实现 next()(Python 2)或 next ()( Python 3) 生成器(Generator),只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值) 区别: 生成器能做到迭代器能做的所有事,而且因为自动创建iter()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常。 97 X是什么类型?X= (i for i in range(10)) X是 generator类型 98 请用一行代码 实现将1-N 的整数列表以3为单位分组N =100print ([[x for x in range(1,100)] [i:i+3] for i in range(0,100,3)])99 Python中yield的用法?yield就是保存当前程序执行状态。你用for循环的时候,每次取一个元素的时候就会计算一次。用yield的函数叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节省很多空间,generator每次计算需要上一次计算结果,所以用yield,否则一return,上次计算结果就没了。
来源商业新知网,原标题:手工计算神经网络第三期:数据读取与完成训练 数据集介绍 数据集采用著名的MNIST的手写数据集。根据官网介绍,这个数据集有70000个样本,包括60000个训练样本,10000个测试样本。 数据集下载下来之后,文件分为4个部分,分别是:训练集图片、训练集标签、测试集图片、测试集标签。这些数据以二进制的格式储存。 其中,训练集图片文件的前16个字节是储存了图片的个数,行数以及列数等。训练集标签文件前8个字节储存了图片标签的个数等。测试集的两个文件同理。 文摘菌下载好的文件存储地址 读取数据 train_img_path=r'C:UsersDellMNISTtrain-images.idx3-ubyte' train_lab_path=r'C:UsersDellMNISTtrain-labels.idx1-ubyte' test_img_path=r'C:UsersDellMNISTt10k-images.idx3-ubyte' test_lab_path=r'C:UsersDellMNISTt10k-labels.idx1-ubyte' 根据文件在本地解压后的储存地址,生成四个地址,上面代码中‘r’是转义字符,因为在Python中有特殊的用法,所以需用转义字符明确文件地址。 为了让后面的模型表现更好,我们将训练集拆分,拆成50000个训练集和10000个验证集。 注:验证集 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 import struct train_num=50000 valid_num=10000 test_num=10000 with open(train_img_path,'rb') as f: struct.unpack('>4i',f.read(16)) tmp_img=np.fromfile(f,dtype=np.uint8).reshape(-1,28*28) train_img=tmp_img[:train_num] #前五万个数据是训练集 valid_img=tmp_img[train_num:] #第五万到第六万个数据是测试集 with open(test_img_path,'rb') as f: struct.unpack('>4i',f.read(16)) test_img=np.fromfile(f,dtype=np.uint8).reshape(-1,28*28) with open(train_lab_path,'rb') as f: struct.unpack('>2i',f.read(8)) tmp_lab=np.fromfile(f,dtype=np.uint8) train_lab=tmp_lab[:train_num] valid_lab=tmp_lab[train_num:] with open(test_lab_path,'rb') as f: struct.unpack('>2i',f.read(8)) test_lab=np.fromfile(f,dtype=np.uint8) 因为,文件是以二进制的格式储存,所以数据读取方式是‘rb’。又因为我们需要数据以阿拉伯数字的方式显示。所以这里用到了Python的struct包。 struct.unpack('>4i',f.read(16)) 中的>号代表字节存储的方向,i是整数,4代表需要前4个整数。f.read(16)是指读取16个字节,即4个整数,因为一个整数等于4个字节。 reshape(-1,28*28) :如果参数中存在-1,表示该参数由其他参数来决定.-1是将一维数组转换为二维的矩阵,并且第二个参数是表示每一行数的个数。 注:fromfile的用法 np.fromfile (frame, dtype=np.float, count=‐1, sep=''),其中:frame : 文件、字符串。dtype :读取的数据类型。count : 读入元素个数,‐1表示读入整个文件。sep : 数据分割字符串。 文件读取完成,接下来按照用图片的方式显示数据。 import matplotlib.pyplot as plt def show_train(index): plt.imshow(train_img[index].reshape(28,28),cmap='gray') print('label:{}'.format(train_lab[index])) def show_test(index): plt.imshow(train_img[index].reshape(28,28),cmap='gray') print('label:{}'.format(test_lab[index])) def valid_train(index): plt.imshow(valid_img[index].reshape(28,28),cmap='gray') print('label:{}'.format(valid_lab[index])) 注意,如果不定义 cmap='gray' ,图片的底色会非常奇怪。 测试一下,定义完函数之后,显示的是这样的~ 数据显示和读取完成,接下来开始训练参数。 训练数据 在开始之前,为了能够上下衔接,我们把第一次课程的代码贴上来~ def tanh(x): return np.tanh(x) def softmax(x): exp = np.exp(x-x.max()) return exp/exp.sum() dimensions = [28*28,10] activation = [tanh,softmax] distribution=[ { 'b':[0,0] },{ 'b':[0,0], 'w':[-math.sqrt(6/(dimensions[0]+dimensions[1])),math.sqrt(6/(dimensions[0]+dimensions[1]))] }] 初始化参数b def init_parameters_b(layer): dist = distributionlayer return np.random.rand(dimensions[layer])*(dist[1]-dist[0])+dist[0] 初始化参数w def init_parameters_w(layer): dist = distributionlayer return np.random.rand(dimensions[layer-1],dimensions[layer])*(dist[1]-dist[0])+dist[0] 初始化参数方法 def init_parameters(): parameter=[] for i in range(len(distribution)): layer_parameter={} for j in distribution[i].keys(): if j=='b': layer_parameter['b'] = init_parameters_b(i) continue; if j=='w': layer_parameter['w'] = init_parameters_w(i) continue parameter.append(layer_parameter) return parameter 预测函数 def predict(img,init_parameters): l0_in = img+parameters0 l0_out = activation0 l1_in = np.dot(l0_out,parameters1)+parameters1 l1_out = activation1 return l1_out 先定义两个激活函数的导数,导数的具体推到过程在这里不呈现,感兴趣的同学可以自行搜索。 def d_softmax(data): sm = softmax(data) return np.diag(sm)-np.outer(sm,sm) def d_tanh(data): return 1/(np.cosh(data))**2 differential = {softmax:d_softmax,tanh:d_tanh} 其中tanh的导数 是 np.diag(1/(np.cosh(data))2) ,进行优化后的结果是 1/(np.cosh(data))2 注:diag生成对角矩阵 ,outer函数的作用是第一个参数挨个乘以第二个参数得到矩阵 然后定义一个字典,并将数解析为某一位置为1的一维矩阵 differential = {softmax:d_softmax,tanh:d_tanh} onehot = np.identity(dimensions[-1]) 求平方差函数,其中parameters是我们在第一次课程定义的那个初始化的参数,在训练的过程中,会自动更新。 def sqr_loss(img,lab,parameters): y_pred = predict(img,parameters) y = onehot[lab] diff = y-y_pred return np.dot(diff,diff) 计算梯度 def grad_parameters(img,lab,init_parameters): l0_in = img+parameters0 l0_out = activation0 l1_in = np.dot(l0_out,parameters1)+parameters1 l1_out = activation1 diff = onehot[lab]-l1_out act1 = np.dot(differential[activation[1]](l1_in),diff) grad_b1 = -2*act1 grad_w1 = -2*np.outer(l0_out,act1) 与上文优化d_tanh有关,将矩阵乘法化为数组乘以矩阵 grad_b0 = -2differential[activation[0]](l0_in)np.dot(parameters1,act1) return {'b1':grad_b1,'w1':grad_w1,'b0':grad_b0} 这次的梯度计算公式用到了公式:(y_predict-y)^2,根据复合函数求导,所以有-2(y_prdict-y)乘以相关的导数,这也是grad_b1后面-2的来历。 按理说应该更加导数的定义[f(x+h)-f(x)]/h验证下我们的梯度求的对不对,为了照顾新手同学对神经网络的理解过程,这一步在这儿省略了哈。 下面进入训练环节,我们将数据以batch的方式输入,每个batch定位包含100个图片。 batch_size=100 。梯度的获取是用平均求得的,代码体现在: grad_accu[key]/=batch_size。 def train_batch(current_batch,parameters): grad_accu = grad_parameters(train_img[current_batchbatch_size+0],train_lab[current_batchbatch_size+0],parameters) for img_i in range(1,batch_size): grad_tmp = grad_parameters(train_img[current_batchbatch_size+img_i],train_lab[current_batchbatch_size+img_i],parameters) for key in grad_accu.keys(): grad_accu[key] += grad_tmp[key] for key in grad_accu.keys(): grad_accu[key]/=batch_size return grad_accu import copy def combine_parameters(parameters,grad,learn_rate): parameter_tmp = copy.deepcopy(parameters) parameter_tmp0 -= learn_rate*grad['b0'] parameter_tmp1 -= learn_rate*grad['b1'] parameter_tmp1 -= learn_rate*grad['w1'] return parameter_tmp 采用copy机制,是避免parameters变化影响全局的训练, copy.deepcopy 可以重新拷贝不影响原来的数据。 并且这里用到了公式: 然后定义学习率: def learn_self(learn_rate): for i in range(train_num//batch_size): if i%100 == 99: print("running batch {}/{}".format(i+1,train_num//batch_size)) grad_tmp = train_batch(i,parameters) global parameters parameters = combine_parameters(parameters,grad_tmp,learn_rate) 里面的if语句可以让我们看到神经网络训练的进度。 到这里,我们就完成了神经网络的一次训练,为了验证准确度如何,我们可以用验证集看看准确度如何。 定义验证集的损失: def valid_loss(parameters): loss_accu = 0 for img_i in range(valid_num): loss_accu+=sqr_loss(valid_img[img_i],valid_lab[img_i],parameters) return loss_accu 计算准确度: def valid_accuracy(parameters): correct = [predict(valid_img[img_i],parameters).argmax()==valid_lab[img_i] for img_i in range(valid_num) ] print("validation accuracy:{}".format(correct.count(True)/len(correct))) 最后得到结果: 有90%的准确度哎~结果还好,还好,毕竟没有怎么调学习率以及解决过拟合。 好了,这一期的内容就到这了,内容有些多大家多多消化,下一期我们讲讲怎么调节学习率以及看看更复杂的神经网络。 *注:此篇文章受B站up主大野喵渣的启发,并参考了其代码,感兴趣的同学可以去B站观看他关于神经网络的教学视频,以及到他的Github地址逛逛。 视频地址与Github: https://www.bilibili.com/video/av51197008 https://github.com/YQGong
来源商业新知网,原标题:那些酷炫的深度学习网络图怎么画出来的? 本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。 1 NN-SVG 这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和机器学习工具用于分析生物数据。 github地址:https://github.com/zfrenchee 画图工具体验地址:http://alexlenail.me/NN-SVG/ 可以绘制的图包括以节点形式展示的FCNN style,这个特别适合传统的全连接神经网络的绘制。 以平铺网络结构展示的LeNet style,用二维的方式,适合查看每一层featuremap的大小和通道数目。 以三维block形式展现的 AlexNet style,可以更加真实地展示卷积过程中高维数据的尺度的变化,目前只支持卷积层和全连接层。 这个工具可以导出非常高清的SVG图,值得体验。 2 PlotNeuralNet 这个工具是萨尔大学计算机科学专业的一个学生开发的,一看就像计算机学院的嘛。 首先我们看看效果,其github链接如下,将近4000 star: https://github.com/HarisIqbal88/PlotNeuralNet 看看人家这个fcn-8的可视化图,颜值奇高。 使用的门槛相对来说就高一些了,用LaTex语言编辑,所以可以发挥的空间就大了,你看下面这个softmax层,这就是会写代码的优势了。 其中的一部分代码是这样的,会写吗。 pic[shift={(0,0,0)}] at (0,0,0) {Box={name=crp1,caption=SoftmaxLoss: $E_mathcal{S}$ ,% fill={rgb:blue,1.5;red,3.5;green,3.5;white,5},opacity=0.5,height=20,width=7,depth=20}}; 相似的工具还有: https://github.com/jettan/tikz_cnn 3 ConvNetDraw ConvNetDraw是一个使用配置命令的CNN神经网络画图工具,开发者是香港的一位程序员, Cédric cbovar 。 采用如下的语法直接配置网络,可以简单调整x,y,z等3个维度,github链接如下: https://cbovar.github.io/ConvNetDraw/ 使用方法如上图所示,只需输入模型结构中各层的参数配置。 挺好用的不过它目标 分辨率太低了,放大之后不清晰,达不到印刷的需求。 4 Draw_Convnet 这一个工具名叫draw_convnet,由Borealis公司的员工Gavin Weiguang Ding提供。 简单直接,是纯用python代码画图的, https://github.com/gwding/draw_convnet 看看画的图如下,核心工具是matplotlib,图不酷炫,但是好在规规矩矩,可以严格控制,论文用挺合适的。 类似的工具还有: https://github.com/yu4u/convnet-drawer 5 Netscope 下面要说的是这个,我最常用的,caffe的网络结构可视化工具,大名鼎鼎的netscope, 由斯坦福AILab的Saumitro Dasgupta开发,找不到照片就不放了,地址如下: https://github.com/ethereon/netscope 左边放配置文件,右边出图,非常方便进行网络参数的调整和可视化。这种方式好就好在各个网络层之间的连接非常的方便。 其他 再分享一个有意思的,不是画什么正经图,但是把权重都画出来了。 http://scs.ryerson.ca/~aharley/vis/conv/ 看了这么多,有人已经在偷偷笑了,上PPT呀,想要什么有什么,想怎么画就怎么画。 不过妹子呢? 怎么不来开发一个粉色系的可视化工具呢? 类似于这样的
来源商业新知网,原标题:计算机图形学遇上深度学习:针对3D图像的TensorFlow Graphics面世 今日,TensorFlow 宣布推出 TensorFlow Graphics,该工具结合计算机图形系统和计算机视觉系统,可利用大量无标注数据,解决复杂 3D 视觉任务的数据标注难题,助力自监督训练。 GitHub 地址:https://github.com/tensorflow/graphics 近几年,一种可以插入神经网络架构中的新型可微图形层(differentiable graphics layer)开始兴起。从空间变换器(spatial transformer)到可微图形渲染器,这些新型网络层利用多年的和图形学研究知识来构建更高效的新网络架构。将几何先验和约束显式建模到神经网络中,为能够以自监督的方式进行稳健、高效训练的架构打开了大门。 从高级层面来说,计算机图形管道需要 3D 物体及其在场景中的绝对位置、材质描述、光和摄像头。然后,渲染器利用该场景描述生成合成渲染。 相比之下,计算机视觉系统从图像开始,推理场景的参数,对场景中的物体及其材质、三维位置和方向进行预测。 训练能够解决这些复杂 3D 视觉任务的机器学习系统通常需要大量数据。由于标注数据的过程既昂贵又复杂,因此设计能够理解三维世界且训练时无需太多监督的机器学习模型非常重要。 结合计算机视觉和计算机图形学技术后,我们得以利用大量可用的无标注数据。如下图所示,这可以通过合成分析(analysis by synthesis)来实现:视觉系统抽取场景参数,图形系统基于这些参数渲染图像。 如果渲染图像结果与原始图像匹配,则说明视觉系统准确地抽取了场景参数。在该设置中,计算机视觉和计算机图形学携手合作,形成了一个类似自编码器的机器学习系统,该系统能够以自监督的方式进行训练。 可微图形层 接下来,我们将探索 TensorFlow Graphics 的一些可用功能。更多详情,参见 GitHub 项目。 变换 物体变换控制物体在空间中的位置。如下图所示,利用轴角度旋转立方体。旋转轴指向上方,旋转方向为逆时针,使得立方体逆时针旋转。以下 示例展示了如何在神经网络中训练旋转形式,该神经网络被训练用于预测观测物体的旋转和平移。 地址 https://colab.sandbox.google.com/github/tensorflow/graphics/blob/master/tensorflow_graphics/notebooks/6dof_alignment.ipynb 这项任务是很多应用的核心,包括聚焦于与其环境进行交互的机器人。在这些场景中,用机械臂抓取物体需要精确估计这些物体相对于机械臂的位置。 建模摄像头 摄像头模型在计算机视觉领域中非常重要且基础,因为它们对三维物体投影到图像平面上的外观有极大影响。如下图所示,该立方体看起来可以放大和缩小,但是事实上这些变化仅仅是由于焦距产生的变化。 想了解摄像头模型的详情,以及如何在 中使用它们的具体示例,可以查看: https://colab.sandbox.google.com/github/tensorflow/graphics/blob/master/tensorflow_graphics/notebooks/intrinsics_optimization.ipynb 材质 材质模型(material model)定义光与物体的交互过程,从而提供物体的外观。例如,一些材质(如石膏)在各个方向对光进行反射,而镜面等材质会对光进行镜面反射。 在以下交互式 Colab notebook 中,你可以了解如何使用 Tensorflow Graphics 生成如下渲染。你还可以试验不同的材质和光的参数,更充分地了解其交互过程。 地址:https://colab.sandbox.google.com/github/tensorflow/graphics/blob/master/tensorflow_graphics/notebooks/reflectance.ipynb 准确地预测材质属性是很多任务的基础。例如,它可以让用户在自己的环境中放置虚拟家具,室内环境搭配家具的场景非常逼真,从而让用户准确地感知到这件家具的外观。 几何——3D 卷积和池化 近年来,以点云或网格形式输出三维数据的传感器逐渐成为我们日常生活的一部分,包括智能手机深度传感器、自动驾驶汽车雷达等等。由于其结构不规则,在这些表征上执行卷积要比在规则网格结构上困难得多。 TensorFlow Graphics 提供两个 3D 卷积层和一个 3D 层,允许网络在网格上执行语义部分分类(如下图所示),更多信息参见该 Colab notebook: https://colab.sandbox.google.com/github/tensorflow/graphics/blob/master/tensorflow_graphics/notebooks/mesh_segmentation_demo.ipynb TensorBoard 3d 视觉 debug 是评估实验是否按正确方向运行的重要方式。因此,TensorFlow Graphics 配备有 TensorBoard 插件,以便交互式地查看 3d 网格和点云。 开始项目 TensorFlow Graphics 与 TensorFlow 1.13.1 及以上版本兼容。
来源商业新知网,原标题:简单粗暴!一文理解Skip-Gram上下文的预测算法 自然语言处理属于人工智能领域,它将人类语言当做文本或语音来处理,以使计算机和人类更相似,是人工智能最复杂的领域之一。 由于人类的语言数据格式没有固定的规则和条理,机器往往很难理解原始文本。 要想使机器能从原始文本中学习,就需要将数据转换成计算机易于处理的向量格式,这个过程叫做词表示法。 词向量 词表示法在向量空间内表达词语。 所以,如果词向量之间距离较近,这就意味着这些词是相互关联的。 在上图中,可以看到与女性有关的词语聚集在左边,而与男性有关的词语聚集在右边。 所以,如果我们给出“耳环”这种词语,电脑会把它和女性联系起来,这在逻辑上是正确的。 语言的词汇量很大,人类难以对其进行一一分类和标识; 因此我们需要使用无监督学习技术,该技术可以独立学习词语的上下文。 无监督学习是指: 没有标注的训练数据集,需要根据样本间的规律统计对样本进行分析,常见如任务聚类等。 Skip-gram就是一种无监督学习技术,常用于查找给定单词的最相关词语。 Skip-gram用于预测与给定中心词相对应的上下文词。 它和连续词袋模型(CBOW)算法相反。 在Skip-gram中,中心词是输入词(input word),上下文词是输出词(output word)。 因为要预测多个上下文词,所以这一过程比较困难。 Skip-gram示例 给定 “sat” 一词后,鉴于sat位于0位,我们会尝试在-1位上预测单词 “cat” ,在3位上预测单词 “mat” 。 我们不预测常用词和停用词,比如 “the”。 **架构 Skip-gram模型架构 上图中,w(t)就是中心词,也叫给定输入词。 其中有一个隐藏层,它执行权重矩阵和输入向量w(t)之间的点积运算。 隐藏层中不使用激活函数。 现在,隐藏层中的点积运算结果被传递到输出层。 输出层计算隐藏层输出向量和输出层权重矩阵之间的点积。 然后用softmax激活函数来计算在给定上下文位置中,单词出现在w(t)上下文中的概率。 使用到的变量 在数据库或文本中出现的特殊单词的汇总词典。 这个词典就叫做词汇量,是系统的已知词。 词汇量用字母“v”来表示。 “N”代表隐藏层中神经元的数量。 窗口大小就是预测单词的最大的上下文位置。 “c” 代表窗口大小。 比如,在给定的架构图中窗口大小为2,因此,我们会在 (t-2), (t-1), (t+1) 和 (t+2) 的上下文位置中预测单词。 上下文窗口是指会在给定词的范围内出现的、要预测的单词数量。 对于2*c的并且由K表示的窗口大小来说,上下文窗口值是该窗口大小的两倍。 给定图像的上下文窗口值是4。 输入向量的维度等于|V|。 每个单词都要进行one-hot编码。 隐藏层的权重矩阵(W)的维度是[|V|, N]。 “||” 是把数组值还原的模函数。 隐藏层的输出向量是H[N]。 隐藏层和输出层之间的权重矩阵 (W’) 维度是[N,|V|]。 W’和H之间的点积生成输出向量U[|v|]。 N = 上下文窗口 工作步骤 利用one-hot编码将单词转换为向量,这些向量的维度是 [1,|v|]。 one-hot编码 单词w(t)从|V|神经元被传递到隐藏层。 隐藏层执行权重向量W[|v|, N] 和输入向量w(t)之间的点积运算。 这里,我们可以总结出: 第(t)行的W[|v|, N] 会输出(H[1, N])。 谨记: 隐藏层不使用激活函数,所以H[1,k] 会直接传递到输出层。 输出层会执行 H[1, N] 和 W’[N, |v|] 之间的点积运算,并给出向量 U 。 现在,要得出每个向量的概率,我们要使用softmax函数,因为每次迭代都得出输出向量U,这是一种one-hot编码模式。 概率最大的那个单词就是最终结果。 如果在指定上下文位置中预测的单词是错误的,我们会使用反向传播算法来修正权重向量W和W’。 以上步骤对字典中的每个单词w(t) 都要执行。 而且,每个单词w(t) 会被传递K次。 所以我们可以得知,正向传播算法在每段时间内会执行 |v|*k次。 概率函数 Softmax概率 w(c, j) 是在第c个上下文位置上预测的第j个单词; w(O, c)是在第c个上下文位置上出现的实际单词; w(I)是唯一的输入词; u(c, j)是在第c个上下文位置上预测单词时,U向量的第j个值。 损失函数 损失函数 由于我们想在第c个上下文位置预测w(c, j) 时实现概率最大化,可以使用损失函数L。 优势 Skip-gram是一种无监督学习技术,因此它可以用于任何原始文本。 相比于其他单词转向量表达法,Skip-gram需要的记忆更少。 它只需要两个维度为[N, |v|]而不是[|v|, |v|]的权重矩阵。 而且通常情况下,N约为300,|v| 则约为数百万。 劣势 找到N和c的最佳值很困难。 Softmax函数计算耗费的时间很长。 训练这个算法耗时较长。
来源:商业新知网,原标题:对话行癫:解密阿里云顶层设计和底层逻辑 | 业内 编者按:几十个问题,万字长文,阿里云新任总裁行癫履新后首次深入讨论阿里云对云计算未来的判断,深度解读未来阿里云生态战略,揭秘阿里技术委员会和阿里中台思想的原生思考。 以下是行癫接受媒体采访的原文。 0 1 关于云计算的未来 Q:你关注到云计算竞争的焦点在发生什么样的变化,好像大家还比较关心价格? 行癫: 价格是初级竞争,最终还是回归到核心价值。价值要从两端来体现,一个是技术端,一个是应用端。云一开始都是做基础设施,但阿里巴巴从做云第一天起,做的就不仅是现在这个云,当初的理念是做一个数据处理平台,这和当时数据处理能力与业务的脱节也有关系,因为是十年前,很少有公司是基于智能、基于数据的,大部分是基于流程。 后来做了一段时间,发现光做这个还不够,在中国要想成功,还得有基础设施。 当然我们做的过程也比较曲折,一开始还想在开源系统上做数据处理,后来发现也不对,必须自研,阿里巴巴不仅是做了一个云的基础设施体系,也做了一个数据处理体系(备注:现在叫MaxCompute,当时叫做ODPS),这个是绝无仅有的,包括国内国外。 当然这个过程有点远,所以回过头来又必须把IaaS层做好。 底层的竞争肯定是拼基础设施的成熟度、稳定性和价格,但是上层的竞争肯定是拼人工智能等等。 知识图谱,对话行癫:解密阿里云顶层设计和底层逻辑 | 业内 Q:你刚才谈到数据处理,开源为什么不行? 行癫: 其实所有的开源软件公司都没有面对过这么大的数据量,Hadoop 、Spark是比数据库的处理能力前进了一大步,用分布式、用MapReduce的方法,但他们的数据量跟阿里巴巴数据量比还是差非常远。 第二个是开源的稳定性要求也达不到我们的要求。所以那时候我们第一次做了一个5K的集群,开源当时不可能超过5000台机器的,我们第一次突破了机器的限制,可以用更大规模的集群来处理。第三我们考虑成本,因为数据量规模小不关心成本,大了以后我们更加考虑成本,现在我们阿里巴巴每年业务量都是增长50%以上,但是我们的成本不能线性增长。 我们去年开始大规模混部(备注:一种新技术,使得在线处理与离线处理不再分别拥有专有的机器,而是运行在同一个集群的机器上,可以极大地节省资源,对于调度部署能力要求极高),我们没有专用的离线机器去处理大数据,都是用在线跑的机器做大规模的混部。双11来了,前一个小时暂时不处理数据分析全部用来跑应用,高峰过去之后,调度所有机器去做数据分析,开源是不可能做这个事情的。 我觉得大数据领域 如果自己公司没有应用,很难设计出一个很有弹性,很高性价比的、很高稳定性的处理平台。 Q:现在国外的云计算谈混合云比较多,你怎么来看混合云未来对云计算的影响? 行癫: 混合云未来还是一个很重要的发展方向, 很多客户对混合云还是有非常刚性的需求,包括一些政府、银行客户,他们觉得对自己的应用可管可控,或者物理的隔离是很重要的事情。 今天从现在的情况来看,公共云上的隔离,我们用硬件来做隔离,比如我们有神龙的服务器,原来是虚拟机的隔离,现在隔离水平也在逐年提高。但对混合云的需求这不完全是技术的原因,还有思路上的原因,所以很长一段时间内混合云还是会广泛存在。 Q:你怎么看待云计算的后台化趋势?你今天上午谈到阿里云不做SaaS,其实SaaS是一个很重要的跟云计算客户的连接,这样的话会不会未来云计算的厂商都会变成被遗忘的状态,就像现在的电厂、自来水厂一样。 行癫: 被遗忘而不可替代,也是值得期待的事情,就像空气一样,我觉得是一个非常好的状态,不见得一定要跑到最前面去和客户接触。 因为真正的2B一定介入客户的业务流程,不然不能叫2B,最多只能叫to customer。 但这个行业的需求太分散了,像SAP、Oracle,发布了很多ERP,他们仍然有十几万的工程师,包括自己的合作伙伴。当然也有比较集中的,比如微软,因为办公大家的需求比较一致,除此之外的业务领域,差异非常大。 我们把云定位成平台,不是定位成软件系统,所以云和电商在定位上没有很大的差别。电商是无数的品牌商、商家在平台上卖他们的产品,不需要关心支付、交易的事情。云未来一定会更专业,专业化分工是现在文明一个重要基石,我们要做生态也是要解决这个问题。 我们的专业到底是什么?我们擅长于做大规模的系统,擅长技术创新,对技术未来演进的趋势有一些看法。 当然,我们有丰富的业务场景,让我们把前面这些事情做的比别人好,这是我们的优势。但大量行业的业务还是需要行业内专业的人去做。他们也需要创新,不是简单把云作为一个IaaS,而是要看如何基于数据、基于智能去发展,所以我们要和合作伙伴一起完成转型。 再一个,中国的IT发展的很不平衡, 有些公司信息化还没有实现,就要讲数据化、智能化,有些公司IT能力很弱,更需要我们合作伙伴做一些贴身的服务,包括实施、咨询、辅导, 但这些阿里云都干不了。 Q:刚才你谈到Oracle、SAP的人员规模,是不是在你心里面对阿里云的规模是有一个预期的? 行癫: 是。我觉得一个有1万人的平台公司是一个非常大的平台型公司了,像淘宝做的这么大,也就几千人的规模。如果一个公司的人数与业务线性相关,可能是做了太多自己不擅长的东西。 Q:刚才谈到一些人工智能,现在做人工智能和开源这两个事情,起来非常快,你觉得未来对于云计算会有什么影响? 行癫: 开源使得云越来越标准化。 不管从上面互联网的一些技术部件,包括云的一些主要的模块,像容器等等,会越来越标准化,这个对云的发展是有利的。第一个是因为开源是一些发达的大公司在用,他们的技术会更稳定。最关键的一点是,云上大量的开发技术体系会更一致,大量工程师会熟悉这套体系,更容易把自己的应用变成云的一部分,单靠一家公司去制定标准还是非常难的。 知识图谱,对话行癫:解密阿里云顶层设计和底层逻辑 | 业内 Q:开源基本上被大厂商瓜分掉了,未来会给开源市场带来什么影响,开源未来会不会走向收费的道路? 行癫: 现在有点这个趋势。原来的开源可能就是免费开源,现在有的公司做收费的服务。但是大家都在云上了,那些公司的生意模式就发生变化了,所以他们去修改开源协议,这个我觉得是反趋势、反潮流的。最终他们会发现,过了一两年时间, 最后一定是云公司来做原生的云,要不然是大互联网公司推出完全免费的开源。 大的互联网公司不care这点小钱,他是要繁荣整个生态。 Q:关于云计算最后一个问题,技术的角度来说,现在云计算你最关注的技术是什么? 行癫: 第一个是你刚才谈到混合云现在发展非常快,所以我们还是做了非常多工作。第二个是安全,大家都上云的话,安全就变的非常关键。从产品角度来看,数据库发展非常快,大家都在想替代Oracle数据库,但是在关键核心应用上要1比1替代还是有挑战, 所以现在完全基于云原生的数据库发展非常快,像AWS完全把数据库作为一个核心能力来做,目前国内也是发展非常快。当然还有一个最底层的IaaS层的, 像容器、做隔离,我们也在推神龙服务器,做硬件层的隔离,这块发展也非常快。 云原来是有人做了一个比较完整的框,现在每个框它本身都在快速演进,它其实还不完全是静止的。当然生意模式也在演进,微软从SaaS往下做,AWS属于另外一条道路。 0 2 关于阿里云的未来 Q:上任四个月,这段时间你做了些什么事呢? 行癫: 主要是在讨论,阿里云要做到高增长,还要做到人员非线性增长,这个是我们讨论比较多的。第二个讨论云的未来,云以后到底是怎么样一个商业形态。第三个我们的核心能力到底是什么,我们不做什么,做什么,这个也讨论比较多。在这个讨论的前提下,我们怎么达成共识,怎么样去调整组织,怎么样去落实这个KPI,怎么样通过工具去保证这个流程。 Q:今天你的发言应该是一个讨论结果的展现。 行癫: 对,我觉得这是我们内部共同认定的。当然,阿里集团内部也发生一些变化,希望阿里云智能变成阿里经济体所有的技术跟产品的统一出口和客户界面,这个跟原来的定位可能也有区别,所以现在金融云、钉钉等等都作为整体一部分来考虑。 Q:外界一直认为,技术是阿里云的一个短板。你怎么看? 行癫: 很多人问这个问题,阿里巴巴到底是什么公司。阿里巴巴一直是技术性公司,只是商业做得太成功了,所以人家搞不清楚到底是技术公司还是商业公司。 阿里做的事情实在太多了,电子商务、支付、物流、文娱等等,所以人家觉得阿里是一家比较业务导向的公司。我一直认为, 技术依赖于业务,业务依赖于技术, 各个阶段比重不一样,有的时候业务拉着技术走,技术推着业务走,世界上没有纯技术的公司。 阿里巴巴是一家非常奇特的公司,我们是互联网的规模、企业级的复杂程度、金融级的准确度。举个小例子——搜索引擎,你搜索一个关键词,出来5页、出来10页、出来500页,用户不care,你丢掉一半数据,人家也不觉有什么问题。但阿里不一样,只要丢了一个商品,卖家立即打过来了。你交易出一分钱的错误,人家百分之百打电话过来,而且是非常严重的问题。 全世界没有一家公司,要同时处理这些事情,再加上每年要给你来一个双11,这是很复杂的。在成本没有大幅增加的情况下,要同时满足这三个条件,而且要有非常高的弹性。 所以阿里技术不管怎么讲都是非常复杂的。 技术有两种,一种是做单点突破,像语音、搜索、算法。第二是处理复杂流程。 这是两种一样难的事情。 今天在人才市场上处理复杂系统、构架复杂系统的人更稀缺,因为要有很多经验,才能处理这么一个系统。这是第一个事情。 第二个事情阿里是工程能力非常强的公司。有的公司能研究,但是写不出系统,但阿里不一样,今天你有事情要做,我们一定是可以非常确定告诉你,多长时间,多少天能够上线,全球很少有公司能达到这样一个自信。 第三个外界的看法,可能是因为突破性的技术不够多。但达摩院现在很多技术是非常领先的,包括语音,像法院的语音系统是用我们的。另外视频处理,在城市大脑这样的应用就更不用说了。我们自己的芯片很快就有流片,八九月就能出。到这个程度,就更立体,让大家觉得阿里巴巴是一家怎么样的公司。 我觉得阿里巴巴也是技术和商业结合最好的一家公司,有的公司CTO天天换,因为没有这个土壤,外面来的人的技术,来了之后一直跟业务结合不了,就会被组织抛弃。 Q:你刚刚谈到提到业务技术互相拉动,你觉得阿里现在谁在拉动谁? 行癫: 最早,业务比技术跑的快,技术一直追业务,因为业务增长实在太快了。前两年我觉得是技术推动业务,特别是人工智能兴起的之后,包括我们程序化交易、广告平台、千人千面、推荐、搜索大量用算法和AI,包括客服等等大量用数据智能在驱动业务。 云也是一样,云是技术的突破才能带来成本下降、效率的提升。云是比较典型的,原来的电商业务这两年大部分红利是靠技术突破带来的。因为商业模式突破已经非常难,今天大家都聪明,以后的竞争门槛会抬高,这个门槛很多都是技术门槛。 阿里巴巴这几年的实践,特别中台提出以后,我们积累核心能力更快,浪费更少。然后我们数据中台提出后,数据全部打通,这个也是效率很高。这个是公司中台成功的一个很重要的地方。当然跟组织能力有关系,不是说有理念一定会实施。有些公司可能推都推不下去,我们也是花了大概两年的时间,逐步整合。 一个中台你得证明自己,你比别人技术好,这不是这么快和容易的事情。 0 3 关于阿里的中台 Q:你认为中台跟组织结构的关系是什么? 行癫: 这个还是非常非常有关系的,包括组织能力、信任关系,包括一些考核,这里边有非常多一些关系。 你做中台,做不好就变成一个原来的公社。公社其实就是一个中台体系,你专门种玉米,你专门种水稻,但是为什么到后来大家都搞不下去了呢? 中台不是把所有部门理一理,这个让你做,那个不让你做,技术能力跟不上、组织能力跟不上,还是低效的。 我比较特别,我做中台,原来的部门都做过,还是能够影响到很多人。 第二、我们还是很踏实的,承认哪些做得好,哪些做不好,也不是所有都拿来做。 第三、阿里制度上做了一些创新,我们有一个技术委员会,到现在很多人都在学,但是我觉得他们都还没明白,我们到底怎么运作的。 我们技术委员会下面有技术小组,因为我们有很多专家,语音的、视频的、视觉的,如果原来是三个部门做,那么三个部门成立一个小组,你们先去解决统一的问题、发展的问题。他们如果不能解决,我再出面解决。所以我们是提倡让工程师用技术的手段来解决技术的分歧和发展。 中台不仅是个组织,中台是个理念,所以说这个中台的技术,如果放在高德是最适合的,就放在高德,但是对高德来说,这个技术一定要有一个定位,要为全体人负责,不仅是为自己服务。所以有些是中台的技术,但不一定在中台,例如智能机器人技术,那就是在客服部门,因为他最贴近现场。但是一些中心业务技术,要不在达摩院,要不在中台部门统一建设。 Q:KPI的问题,我原来也跟孙权聊过这个事。现在你最看中的是什么? 行癫: 我觉得第一个是 规模 ,因为这个意味着你产业的竞争,这个肯定是非常核心。第二个我们还是非常关注公共云的 份额 ,因为最终云的基础还是公共云的发展,当然也有混合云的发展这个也很关键。第三个提倡生态,到底在多少生态上,阿里巴巴有多高的竞争力?现在我们有几千家主要的合作伙伴,我们希望把主要业务放在阿里云上的,要占一个更大的比重。 Q:钉钉未来会跟阿里云有更紧密的协同吗?云端协同未来是不是一个重要的打法? 行癫: 刚才我们讲的数据化智能化,另外很大一块就是工作在线化,包括办公的协同,这个我们想靠钉钉的能力来补上这块体系。现在,云是两个驱动力,数据+智能,到明年我们会加一块工作协同。我们认为这个工作协同是互联网公司跟其他公司的区别,因为互联网公司大量的运用这些新工具来做工作的协同,传统企业很少用这种工具。像钉钉这样的生产力工具出现之后,发生了很大变化,原来用邮件,现在钉钉在线实时工作效率非常高了。以前的审批也是,通过它的机制全部串联起来。 再进一步像文本,供应链体系,都通过钉钉体系串联起来,更轻快。手机协同性不是很好,我们希望通过钉钉串联起来。然后把钉钉这个能力变成我们合作伙伴的一个基础能力输出。这是我们的一个想法。 Q:是不是钉钉对阿里云的价值,类似于office365对于微软 Azure? 行癫: 有一点类似,但是还是没有那么SaaS化。钉钉主要是一个协同沟通的平台。我们希望未来的企业既是数据的,又是智能的,还是在线协同的,这是我们对我们客户的一个主要未来的描述。 Q:今天还有一个事挺有意思的:繁星计划-小程序,小程序在大的部署当中现在是一个什么样的角色? 行癫: 小程序是很重要的角色,因为现在越来越多应用都会在无线端,不管数字政府还是各行各业的应用。这个应用有两种形式,一种是做独立APP,另一种是依托于某一个大的流量入口, 我们觉得 大部分长尾应用自己去做独立APP都有很大难度,可能会依托于大的流量入口, 比如微信、阿里这样的。 阿里跟微信有很大差别,我们叫一云多端,不仅是在支付宝、淘宝可以跑,在高德也可以跑,甚至可能以后在微博上也能跑。就像是Android一样,开发一次到处可以跑,但是微信更像是iphone,在他这里开发这里跑。 我们的小程序是一个生态,我们会提供云到端的一系列工具,让开发者很快就能做出来。 Q:可不可以理解小程序更像一个端? 行癫: 一个轻量化的端,是各行各业一个轻量化的出口。 Q:据我所知是拿支付宝小程序做了一个框架。 行癫: 对,因为支付宝在这个方面接触比较多、探索比较多。这就是我们的一个好处,一下子全部都能用。 0 4 关于被集成 Q:你今天提到“被集成”这个概念是非常新鲜的,这个思路是怎么被提出的?因为阿里其实一直是平台,平台和被集成有矛盾吗? 行癫: 原来阿里是个平台,我也做过两年中台,我一直在琢磨中台跟平台到底有什么区别。像阿里巴巴、淘宝、天猫这种平台只要搭好了,客户直接开店就可以了,不需要关心任何事情,但我觉得中台不一样,中台自己单独的产品不能直接产生价值、不能直接对外服务,一定要变成别人产品的一部分, 让别人的产品提供更好的服务,这是我理解的中台。 包括数据智能和人工智能,这两个东西肯定不是平台,肯定要变成人家的一部分,从这个角度上,阿里云智能既是一个平台,也是一个中台,所以我们提出口号叫“被集成”,就像英特尔的CPU一样,也是被集成,集成到各种各样的电脑里去,是一样的逻辑。 Q:“被集成”的策略对阿里云的运作,包括组织管理,都会产生一些比较大影响,这个其实是调用和被调用的关系,和以前太不一样了,内部需要做什么调整吗? 行癫: 其实我们原来自己也在做一些总包,我们也在做集成,集成我们的技术。但是我们发现我们的交付成本非常高。有些行业是没有办法的,像城市大脑,因为这个行业是新兴行业、增量应用,以前没有玩家,你要做些show case,这个行业我们会去做,但是做了以后去复制、大规模推广,我们肯定需要大家一起来干。 Q:这一步我觉得还是非常高明的,把原来阿里云很多问题缓解了,包括交付能力,把原来集中式交付变成了分布式交付。 行癫: 而且很多合作伙伴愿意做交付,他们擅长。 Q:被集成这个概念提出来以后,未来整个生态会怎么打造。 行癫: 简单一点就是,能合作伙伴签合同的,你们签。非得让阿里云签的,我们一起签。 Q:未来生态的打造会有什么变化?现在被集成之后这个关系就有点混乱。 行癫: 生态一定还是一个分工协同。 传统的生态不像想象中那么整合,他们也是分工协作的。比如说做一个传统企业的ERP系统,他们也是分工协作的,比如德勤做咨询,SAP做软件,埃森哲去实施。我们不去破坏大家的分工合作,只是我们的产品技术变成这个体系的一部分,是这么一个逻辑。 Q:原来传统的2B的生态,还是一个比较均衡的生态,因为基本后来都是大公司。但是在互联网生态,基本是一个大平台,然后一堆小公司。 行癫: 我个人觉得,大公司一定会做比较通用的系统,但是通用系统如果被云化,像有些大公司有可能就被取代了。 但是专业化的服务能力,是个性化,c2m。 个性化意味着什么?意味着对大品牌来说,是要碎片化,云这个服务我觉得以后也是一样的,一定有很多细分的专业服务商,而不是一个很大的专业服务商,服务很多行业。我认为这是一个趋势。就像化妆品一样,不是天天涂大宝,它很细分,有很多的品牌。 Q:那未来的这种生态的打造思路会不太一样,要靠什么政策,把大家吸引过来? 行癫: 原来,简单的生态是reseller的模式,但是今天我觉得,我们更希望合作伙伴理解这个行业,跟我们掌握的技术有一个共创。比如我们有一个很好的语音技术,我们不知道什么行业可以用。合作伙伴掌握这个技术,也懂得客户应该怎么用,比如人可以用在考勤上,或者用在什么门禁上。 所以我今天更看中的生态伙伴是对这个行业未来有定义能力的、有创新能力的公司,是我们优先去合作的人。真正头部的概念就是说这家公司是不是够专业、是不是对行业未来有洞察。 毕马威有两句话说的非常好。他们把今年的策略总结成两句话,一句叫 发现 ,一句叫 实现 。我们希望跟合作方一样要能发现,而且有能力实现它。 Q:现在怎么看阿里云的短板? 行癫: 我觉得阿里云的短板很明显,我们虽然做云,但是2B服务能力是我们比较缺的,所以需要通过生态快速的发展来补。第二个从核心技术积累上,有这么多年的积累之后,我们原来是一个平台化、产品化的结构,这两个还不一样,平台都得自己做,所以不用单产品剥离出去,别人可以很好用,我们内部也可以用的很好,因为开发者就在公司内部,你可以直接问他,所以他构建了一个非常复杂的平台, 但是这个复杂的平台不是单一个单产品,非常结构化的构成,所以我们今天也在加紧产品化。 产品化包括要丰富的文档,手册,这个其实还是有很多工作要去做。 Q:被集成这个事情有没有指标?你怎么衡量? 行癫: 我们有几千家合作伙伴,我们希望有业务的合作伙伴数量,要有非常严格的指标,包括他们的规模。对于我们大型头部的合作伙伴,大家都不是收入的指标,包括德勤、埃森哲,我们还是希望打造头部标杆案例,真正从行业未来定义的案例,这是都是我们一些共同的目标。 Q:今天上午说不做SaaS,咨询会做的非常少,但咨询这个事情非常重要,意味着你跟客户密切的交流,未来阿里云怎么保持跟客户之间的沟通,未来怎么了解客户的需求? 行癫: 今天,我们不仅是把产品简单提供给合作伙伴,我们大部分的时候,还是跟伙伴一起做样板市场,所以我刚才讲为什么头部的, 有市场定义能力的人一起做, 包括德勤,埃森哲,也是和我们一起在定义这个市场,只是我们今天把产品能力变成他们的解决方案的一部分。 Q:其实包括未来整个被集成这个事情,对阿里云也有压力,比如说技术能力封装。 行癫: 其实被集成是更高的要求。不仅是我接触客户少了,都是合作方在接触了。合作方为什么选阿里云,为什么不选其他的云厂商,对我要求更高,要服务好,产品一定要有竞争力。 Q:这样把主动权交出去了。 行癫: 是的,那个主动权我就是掌握了也没有用,因为那也不是云要做的事情。怎么走好我觉得还是很有挑战的。 0 5 关于企业上云的未来 Q:因为现在架构变的非常重要,很多企业正在经历架构变化的过程,从技术到架构这一步的跨越是很困难的事情吗? 行癫: 企业的架构,我认为 绝大部分是业务架构,不是纯粹的技术架构,他缺的是把自己的业务都分析清楚,变成了一堆业务架构的能力,用技术手段去实现。 互联网公司两者兼而有之,我们公司有些是业务架构,有些是技术架构,技术架构更偏纯技术,业务架构非常复杂,它做很多决定,比如说做电子商务系统,他决定要分多少个模块,各个模块关系怎么样,最好用什么技术实现。技术怎么实现的,是技术架构干的事情,我觉得大部分企业缺乏非常好的业务架构,这个业务架构你没法招聘,一定要自己培养,这样才能理解自己业务。 Q:你做阿里CTO一段时间了,我特别想了解,作为一家大企业的CTO,你最大的职责是什么? 行癫: 阿里的CTO,第一要对未来有看法有判断,到底未来要有什么样的技术;第二个组织内部基础资源整合好,不能各自为战。第三,技术工程师的文化要定义,我们经常讨论这个事情,到底怎么激励我们的公司,第四保证业务系统的技术需求得到及时的满足,不能业务系统都支持不好,就有难度了。 Q:因为现在整个技术变化非常大,我想也听听,你给这些传统企业的CEO、CIO一些建议,他们怎么样树立自己的技术视角,怎么让他们用自己的视角判断技术价值? 行癫: 我觉得 大部分公司关注好业务就差不多了,大部分中小企业都是这个状态。 技术不要成为瓶颈,就非常不错了。只有很大型的互联网公司,他才能判断有没有系统性技术风险,比如一些新技术,基于一些新技术的商业模式,他可能要反复思考一些问题。比如5G起来,智能手机普及了,大概会对我们商业模式技术体系有什么影响,物联网起来了会有什么影响,智能驾驶到底会怎么样,这些都是我们要去提前想的。 Q:这些问题你会怎么判断? 行癫: 我们也会反复判断,对我们业务有什么用,因为我们业务很复杂,区块链怎么样,我们怎么用,我们不做有什么风险,这是我们经常在看。但是很难总结方法论,得出一个结论,这个是非常难的。 Q:现在企业里边,大家都在追求很时髦的东西,上云、架构,但是有一些被忽略的问题,包括运维、安全。从你的角度来看,传统企业上云有哪些问题应该提起他们的重视,有哪些被忽略的问题? 行癫: 云上系统,上云的第一刻开始,我们阿里很多人都投在运维,这样才能保证系统永远处于健康状态。原来都是开箱即用的技术,弄个oracle就可以了,弄个数据库DBA就可以了,但现在不行了。 以后整个系统要保持效率最高,运维工作还是非常重要, 但中国公司绝大部分没有付费做运维这个习惯,这个我觉得还需要一个改变。 安全其实压力小了很多,因为云解决了很多原来线下没法解决的问题,比如说有个补丁、有个漏洞,我们第一时间知道,厂商会告诉我们,我们全部把它修复了。总体上,上云比不上云安全得多。 Q:真正上云之后,企业尤其是传统企业,会带来很多变化,包括能力和人员的配备。这块你看的更多,你怎么看这些变化? 行癫: 现在诞生了非常多一些第三方公司,专门帮政府云上做运维,给政府的IT部门带来很大变化。企业也一样,比如原来信息化部规模可能比较大,因为原来的人可能要端到端覆盖,所以工种也比较复杂。上云以后,总的来说,从固定资本投入,还有对人员的一些要求都会有很大变化,至少DBA就不是很重要的岗位了。 Q:人工智能的出现,有一个副作用,那就是它对技术能力的要求,几乎超过了哪怕最大规模的传统企业的承受能力。这对企业的技术选型和系统建设策略会带来很大的影响,这件事你怎么看? 行癫: 我觉得他们肯定更应该关注跟行业属性相关的,这部分别人没有办法复制,其他都是市场上可以采购的,包括云服务、语音服务、数据处理服务、AI服务。他需要明白的是,这个技术对我们的行业产生什么影响。很多行业现在没有能力承载(一些技术的开发), 倒不在于一次性投入有多高,主要没有一个规模化的业务场景去做承载, 它的演进时间就没有公司能容忍。 但现在一些公司还在做云,做人脸识别,这个不会构成它的核心能力,它的核心能力是跟自己业务相关的部分。 Q:现在一些大型的企业,还有两三千人的IT团队,还在做大量的自己研发的工作,你觉得未来这种事未来会变的更多还是更少? 行癫: 我觉得更少,专业化的分工一定是现代社会的精髓,漠视这一点,可能不会获得最高效率。 怎么利用社会分工,专业化服务, 这是大公司也好,小公司也好,真正能够提升自己的效率,能够集中在自己核心优势的一个地方。阿里云,刚才你也问我,我觉得如果我们现在有几万人,那说明肯定不够聚焦,那样的话肯定在做我们并不擅长的事情。
来源商业新知网,原标题:云计算和区块链结合,将为大规模的应用打下基础! 最近几年,区块链作为新兴的技术引起了广泛的关注。区块链可以应用的领域非常广,包含支付、身份识别、云计算、物品溯源、游戏、投票、医疗等。众多传统的技术也可以和区块链技术相结合发挥更大的作用,比如在传统的云计算领域,将云计算和区块链结合起来可以实现更高效、更经济、更安全可信的分布式云计算。 知识图谱,云计算和区块链结合,将为大规模的应用打下基础! 云计算及所面临的问题 云计算是一种基于互联网的计算方式。通过这种方式,共享软硬件资源和信息,可以按需求提供给计算机各种终端和其他设备。云计算是继上世纪80年代大型计算机到客户端—服务器的大转变之后的又一巨变。用户不再需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云计算描述了一种基于互联网的新IT服务增加、使用和交付模式,通常涉及通过互联网来提高动态易拓展且经常虚拟化的资源。 然而,云计算技术的发展也存在不少痛点。 现有云计算市场极度中心化,市场份额由少数几家科技巨头依靠自身高度集中化的服务器资源垄断了整个云计算市场,借助市场力量享受高额利润,进而导致算力服务价格居高不下。BOINC(伯克利开放式网络计算平台)是目前最为主流的分布式计算平台,为众多的数学、物理等学科类别的项目所使用,但是由于这是基于分布在世界各地的志愿者的计算资源而形成的分布式计算平台,缺乏足够的志愿者来贡献算力。 分布式云计算的良好平台 桌面网格的思想是收集互联网上未充分利用的计算机资源,在一个分布式虚拟的超级计算机上,以极小成本执行大规模并行及分布式应用程序。 桌面网格计算技术有三个功能使其成为完全分布式云计算的良好平台:第一是韧性,如果某些节点出现故障,计算仍能继续在其他工作节点上运行;第二是效率,即使计算节点多种多样,应用程序仍可以获得最佳性能;第三是易于部署,无需特定配置即可使用任意节点,甚至包括那些位于网络边缘的节点。这使得包括传统的高性能计算集群、云基础设施及个人电脑等计算资源的桌面网格成为组合混合基础设施的完美解决方案。 然而,桌面网格仍然存在一些重要的问题,比如难以计算各个节点对网络作出的贡献,从而缺少激励机制,难以撮合需求与计算资源的匹配等。 区块链技术的出现,可以很好地解决这些问题,比如通过贡献证明协议提供可证明的共识、可追溯性和信用机制。 基于区块链的分布式云计算 基于区块链的分布式云计算基础设施将允许按需、安全和低成本地访问最具竞争力的计算基础设施。而分布式应用程序DApps则可以通过分布式云计算平台自动检索、查找、提供、使用、释放所需的所有计算资源,如应用程序、数据和服务器。通过简化访问服务器的方式,分布式云计算大大降低了数据中心的热能损耗,同时使得数据供应商和消费者更容易获得所需计算资源。 传统区块链,如比特币和以太坊依赖于工作量证明机制(PoW),以确保区块链上参与者之间发生的代币交易被大量节点采用的加密挑战所验证。而基于区块链的分布式云计算则可以采用贡献证明协议,即通过链外行为,如实时提供数据集、传输文件、执行计算、提供专业服务等活动引发参与者之间的代币交易。 因此,需要一个新的协议来证明贡献已经准确无误地发生,且相应的代币交易可以在区块链上进行。我们称这种共识机制为贡献证明机制。有几个采用相似协议的平台如GridCoin、FatCom、FileCoin,它们允许在区块链和链外资源之间建立共识。例如,GridCoin提出了研究证明来奖励那些捐赠了部分计算机时间给生物医学研究,以及探索宇宙等伟大科学计算的志愿者。相比较而言,贡献证明将更加通用,允许验证更多的行为。 总而言之,区块链的众多优势使其可以很好地解决现有一些技术所面临的瓶颈问题,利用这些优势和传统云计算技术相结合,将促进基于区块链的分布式云计算领域的一些突破和应用,为大规模的应用打下基础。
Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台,它立足于内存计算,性能超过Hadoop百倍,从多迭代批量处理出发,兼收并蓄数据仓库、流处理和图计算等多种计算范式,是罕见的全能选手。Spark采用一个统一的技术堆栈解决了云计算大数据的如流处理、图技术、机器学习、NoSQL查询等方面的所有核心问题,具有完善的生态系统,这直接奠定了其一统云计算大数据领域的霸主地位。 伴随Spark技术的普及推广,对专业人才的需求日益增加。Spark专业人才在未来也是炙手可热,轻而易举可以拿到百万的薪酬。而要想成为Spark高手,也需要一招一式,从内功练起:通常来讲需要经历以下阶段: 第一阶段:熟练的掌握Scala语言Spark框架是采用Scala语言编写的,精致而优雅。要想成为Spark高手,你就必须阅读Spark的源代码,就必须掌握Scala,;虽然说现在的Spark可以采用多语言Java、Python等进行应用程序开发,但是最快速的和支持最好的开发API依然并将永远是Scala方式的API,所以你必须掌握Scala来编写复杂的和高性能的Spark分布式程序;尤其要熟练掌握Scala的trait、apply、函数式编程、泛型、逆变与协变等;第二阶段:精通Spark平台本身提供给开发者API掌握Spark中面向RDD的开发模式,掌握各种transformation和action函数的使用;掌握Spark中的宽依赖和窄依赖以及lineage机制;掌握RDD的计算流程,例如Stage的划分、Spark应用程序提交给集群的基本过程和Worker节点基础的工作原理等第三阶段:深入Spark内核此阶段主要是通过Spark框架的源码研读来深入Spark内核部分: 通过源码掌握Spark的任务提交过程;通过源码掌握Spark集群的任务调度;尤其要精通DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节;第四阶级:掌握基于Spark上的核心框架的使用Spark作为云计算大数据时代的集大成者,在实时流处理、图技术、机器学习、NoSQL查询等方面具有显著的优势,我们使用Spark的时候大部分时间都是在使用其上的框架例如Shark、Spark Streaming等: Spark Streaming是非常出色的实时流处理框架,要掌握其DStream、transformation和checkpoint等;Spark的离线统计分析功能,Spark 1.0.0版本在Shark的基础上推出了Spark SQL,离线统计分析的功能的效率有显著的提升,需要重点掌握;对于Spark的机器学习和GraphX等要掌握其原理和用法;第五阶级:做商业级别的Spark项目通过一个完整的具有代表性的Spark项目来贯穿Spark的方方面面,包括项目的架构设计、用到的技术的剖析、开发实现、运维等,完整掌握其中的每一个阶段和细节,这样就可以让您以后可以从容面对绝大多数Spark项目。 第六阶级:提供Spark解决方案彻底掌握Spark框架源码的每一个细节;根据不同的业务场景的需要提供Spark在不同场景的下的解决方案;根据实际需要,在Spark框架基础上进行二次开发,打造自己的Spark框架;前面所述的成为Spark高手的六个阶段中的第一和第二个阶段可以通过自学逐步完成,随后的三个阶段最好是由高手或者专家的指引下一步步完成,最后一个阶段,基本上就是到”无招胜有招”的时期,很多东西要用心领悟才能完成。来源商业新知网,原标题:如何成为云计算大数据Spark高手
BigData 概念在上世纪90年代被提出,随Google的3篇经典论文(GFS,BigTable,MapReduce)奠基,已经发展了超过10年。这10年中,诞生了包括Google大数据体系,微软Cosmos体系,开源Hadoop体系等优秀的系统,这其中也包括阿里云的飞天系统。这些系统一步一步推动业界进入“数字化“和之后的“AI化”的时代。 同时,与其他老牌系统相比(如,Linux等操作系统体系,数据库系统,中间件,很多有超过30年的历史),大数据系统又非常年轻,随云计算普惠,正大规模被应用。海量的需求和迭代推动系统快速发展,有蓬勃的生机。(技术体系的发展,可以通过如下Hype-Cycle概述,作者认为,大数据系统的发展进入技术复兴期/Slope of Enlightenment,并开始大规模应用Plateau of Productivity。) 上图来自Gartner 如果说,0到1上线标志一个系统的诞生,在集团内大规模部署标志一个系统的成长,在云上对外大规模服务标志一个系统的成熟。MaxCompute这10年已经走向成熟,经过多次升级换代,功能、性能、服务、稳定性已经有一个体系化的基础,成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务。 “十年磨一剑”。MaxCompute去年做了哪些工作,这些工作背后的原因是什么?大数据市场进入普惠+红海的新阶段,如何与生态发展共赢?人工智能进入井喷阶段,如何支持与借力?本文从过去一年的总结,核心技术概览,以及每条技术线路未来展望等几个方面做一个概述。 1.MaxCompute(ODPS)概述 1.1 背景信息: 十年之后,回头看什么是大数据"Big data represents the information assets characterized by such a high volume, velocity and variety to require specific technology and analytical methods for its transformation into value". 用5个“V”来描述大数据的特点: Volume-数据量:数据量非线性增长,包括采集、存储和计算的量都非常大,且增速很快。 Variety-数据类型:包括结构化和非结构化的数据,特别是最近随音视图兴起,非结构化数据增速更快。 Velocity-数据存储和计算的增长速度:数据增长速度快,处理速度快,时效性要求高。 Veracity-信噪比:数据量越大,噪声越多,需要深入挖掘数据来得到结果。 Value-价值:数据作为一种资产,有1+1>2的特点。 总结下来,大数据具备如下的五个趋势: 数据爆炸导致数据和计算量增速很高,很多时候超过业务增速。带来成本压力! 数据量变大,但单位数据的价值在下降,深度挖掘势在必行,但反过来要求计算力的进一步提升。 非结构化数据处理,成为趋势。 时效性,是能完成任务之后,用户的新期待。 超大规模的数据和计算,对人工管理是一个挑战。 上述趋势,也会得出了作为大数据平台,我们要发力的方向:计算力,智能化,生态系统。 1.2 MaxCompute 定位阿里云大数据计算服务(MaxCompute,原名ODPS)是阿里云提供的一种安全可靠、高效能、低成本、从GB到EB级别按需弹性伸缩的在线大数据计算服务。 MaxCompute向用户提供了丰富的大数据开发工具、完善的数据导入导出方案以及多种经典的分布式计算模型。能够最快速的解决用户海量数据计算问题,有效降低企业大数据计算平台的总体拥有成本,提高大数据应用开发效率,并保障数据在云计算环境的安全。被广泛的应用于互联网海量数据分析类场景。 MaxCompute是大数据云数仓的数据汇集点,存储和管理EB级数据,支持弹性伸缩的高性能大数据计算服务:它不只是个单一的引擎,而是一个平台。 “不是单一的引擎”体现在,MaxCompute原生支持SQL、MR、DAG编程语义和Graph、PAI机器学习计算,同时也通过联合计算平台支持任意第三方引擎,如Spark、Flink等。 “一个平台”体现在,MaxCompute提供统一高效的数据存储,可靠的元数据服务,跨地域多集群管理,和数据/计算调度能力。 MaxCompute以其可靠性、高性能、扩展性、安全性和富生态被广泛的用于互联网海量数据分析场景,如海量数据分析与处理、大数据仓库、产品维度报表、机器学习训练、等场景。 1.3 竞品对比与分析大数据发展到今天,数据仓库市场潜力仍然巨大,更多客户开始选择云数据仓库,CDW仍处于高速增长期。当前互联网公司和传统数仓厂家都有进入领导者地位,竞争激烈,阿里巴巴CDW在全球权威咨询与服务机构Forrester发布的《The Forrester WaveTM: Cloud Data Warehouse, Q4 2018》报告中位列中国第一,全球第七。 在CDW的领导者中,AWS Redshift 高度商业化、商业客户部署规模领先整个市场,GoogleBigQuery以高性能、高度弹性伸缩获得领先,Oracle 云数仓服务以自动化数仓技术获得领先。 MaxCompute当前的定位是市场竞争者,目标是成为客户大数据的“航母”级计算引擎,解决客户在物联网、日志分析、人工智能等场景下日益增长的数据规模与计算性能下降、成本上升、复杂度上升、数据安全风险加大之间的矛盾。在此目标定位下,对MaxCompute在智能数仓、高可靠性、高自动化、数据安全等方面的能力提出了更高的要求。 2018年MaxCompute技术发展概述过去的一个财年,MaxCompute 在技术发展上坚持在核心引擎、开放平台、技术新领域等方向的深耕,在业务上继续匠心打造产品,扩大业界影响力。 效率提升2018年9月云栖大会发布,MaxCompute 在标准测试集 TPC-BB 100TB整体指标较2017年提升一倍以上。 得益于整体效率的提升,在集团内部 MaxCompute 以20%的硬件增长支撑了超过70%的业务增长。 系统开放性和与生态融合联合计算平台 Cupid 逐步成熟,性能 与EMR Spark Benchmark 持平,支持K8S接口,支持完整的框架安全体系。Spark On MaxCompute已开始支持云上业务 Python分布式项目MARS正式发布,开源两周内收获1200+ Star,填补了国内在Python生态上支持大规模分布式科学计算的空白,是竞品Dask性能的3倍。 探索新领域 MaxCompute 持续在前沿技术领域投入,保持技术先进性。在下一代引擎方向(如Adaptive Operators、,Operator Fusion、ClusteredTable等),智能数仓 Auto Datawarehouse 方向上的调研都取得了不错的进展。在渐进计算 (Progressive Execution)、Advanced Fail Checking and Recovery 、基于 ML的分布式计算平台优化、超大数据量Query子图匹配等多个方向上的调研也在进行中。 深度参与和推动全球大数据领域标准化建设2018年11月,MaxCompute与DataWorks/AnalyticDB一起代表阿里云入选 Forrester Wave™ Q4 2018云数据仓库研究报告,在产品能力综合得分上力压微软,排名全球第七,中国第一。 2019年3月,MaxCompute 正式代表Alibaba加入了TPC委员会推动融入和建立标准。 MaxCompute持续在开源社区投入。成为全球两大热门计算存储标准化开源体系ORC社区的PMC,MaxCompute成为近两年贡献代码量最多的贡献者,引导存储标准化;在全球最热门优化器项目Calcite,拥有一个专委席位,成为国内前两家具备该领域影响力的公司,推动数十个贡献。 3.核心技术栈大数据市场进入普惠+红海的新阶段,如何借力井喷阶段中的人工智能,如何与生态发展共赢? 基于横向架构上的核心引擎和系统平台, MaxCompute在计算力、生态化、智能化3个纵向上着力发展差异化的竞争力。 3.1 计算力首先我们从计算力这个角度出发,介绍一下 MaxCompute 的技术架构。 a.核心引擎支撑 MaxCompute 的计算力的核心模块之一是其 SQL 引擎:在 MaxCompute 的作业中,有90%以上的作业是 SQL 作业,SQL 引擎的能力是 MaxCompute 的核心竞争力之一。在MaxCompute 产品框架中,SQL 引擎将用户的SQL语句转换成对应的分布式执行计划来执行。SQL 引擎由3个主要模块构成: 编译器 Compiler: 对 SQL 标准有友好支持,支持100% TPC-DS语法;并具备强大都错误恢复能力,支持 MaxCompute Studio 等先进应用。 运行时 Runtime: 基于LLVM优化代码生产,支持列式处理与丰富的关系算符;基于 CPP 的运行时具有更高效率。 优化器 Optimizer: 支持HBO和基于 Calcite 的 CBO, 通过多种优化手段不断提升 MaxCompute 性能。 (上图中部分功能只在阿里集团内部发布,云上版本会陆续发布上线) MaxCompute SQL 引擎当前的发展,以提升用户体验为核心目标,在 SQL 语言能力、引擎优化等多个方向上兼顾发力,建立技术优势,在SQL 语言能力方面,新一代大数据语言NewSQL做到了 Declarative 语言和 Imperative 语言的融合,进一步提升语言兼容性,目前已100% 支持 TPC-DS 语法。过去一年中,MaxCompute 新增对 GroupingSets,If-Else分支语句,动态类型函数,等方面的支持。 b.存储MaxCompute 不仅仅是一个计算平台,也承担着大数据的存储。阿里巴巴集团99%的大数据存储都基于MaxCompute,提高数据存储效率、稳定性、可用性,也是MaxCompute一直努力的目标。 MaxCompute 存储层处于 MaxCom pute Tasks和底层盘古分布式文件系统之间,提供一个统一的逻辑数据模型给各种各样的计算任务。 MaxCompute的存储格式演化,从最早的行存格式CFile1,到第一个列存储格式CFile2,到第三代存储格式。 支持更复杂的编码方式,异步预读等功能,进一步提升效能。在存储和计算2个方面都带来了效能的提升。存储成本方面,在阿里巴巴集团内通过新一代的列存格式节省约8%存储空间,直接降低约1亿成本;在计算效率上,过去的一个财年中发布的每个版本之间都实现了20%的提升。目前在集团内大规模落地的过程中。 在归档以及压缩方面,MaxCompute 支持ZSTD压缩格式,以及压缩策略,用户可以在Normal,High和Extreme三种Stategy里面选择。更高的压缩级别,带来更高效的存储,但也意味着更高的读写CPU代价。 2018年,MaxCompute 陆续推出了 Hash Clustering 和 Range Clustering 支持富结构化数据,并持续的进行了深度的优化,例如增加了 Shuffle Remove,Clustering Pruning 等优化。从线上试用数据,以及大量的 ATA 用户实践案例也可以看出,Clustering 的收益也获得了用户的认可。 c.系统框架资源与任务管理 MaxCompute 框架为ODPS上面各种类型的计算引擎提供稳定便捷的作业接入管理接口,管理着ODPS各种类型Task的生命周期。过去一年对短作业查询的持续优化,缩短e2e时间,加强对异常作业(OOM)的自动检测与隔离处理,全面打开服务级别流控,限制作业异常提交流量,为服务整体稳定性保驾护航。 MaxCompute 存储着海量的数据,也产生了丰富的数据元数据。在离线元仓统计T+1的情况下,用户至少需要一天后才能做事后的数据风险审计,现实场景下用户希望更早风险控制,将数据访问事件和项目空间授权事件通过CUPID平台实时推送到用户DataHub订阅,用户可以通过消费DataHub实时获取项目空间表、volume数据被谁访问等。 元数据管理 元数据服务支撑了MaxCompute各个计算引擎及框架的运行。每天运行在MaxCompute的作业,都依赖元数据服务完成DDL,DML以及授权及鉴权的操作。元数据服务保障了作业的稳定性和吞吐率,保障了数据的完整性和数据访问的安全性。元数据服务包含了三个核心模块: Catalog完成DDL,DML及DCL(权限管理)的业务逻辑,Catalog保障MaxCompute作业的ACID特性。 MetaServer完成元数据的高可用存储和查询能力。 AuthServer是高性能和高QPS的鉴权服务,完成对MaxCompute的所有请求的鉴权,保障数据访问安全。 元数据服务经过了模块化和服务化后,对核心事务管理引擎做了多次技术升级,通过数据目录多版本,元数据存储重构等改造升级,保障了数据操作的原子性和强一致,并提高了作业提交的隔离能力,并保障了线上作业的稳定性。 在数据安全越来越重要的今天,元数据服务和阿里巴巴集团安全部合作,权限系统升级到了2.0。核心改进包括: MAC(强制安全控制)及安全策略管理:让项目空间管理员能更加灵活地控制用户对列级别敏感数据的访问,强制访问控制机制(MAC)独立于自主访问控制机制(DAC)。 数据分类分级:新增数据的标签能力,支持对数据做隐私类数据打标。 精细权限管理:将ACL的管控能力拓展到了Package内的表和资源,实现字段级的权限的精细化管理。 系统安全 系统安全方面, MaxCompute通过综合运用计算虚拟化和网络虚拟化技术, 为云上多租户各自的用户自定义代码逻辑提供了安全而且完善的计算和网络隔离环境。SQL UDF(python udf 和 java udf), CUPID联合计算平台(Sparks/Mars等), PAI tensorflow等计算形态都基于这套统一的基础隔离系统构建上层计算引擎。 MaxCompute 还通过提供原生的存储加密能力, 抵御非授权访问存储设备的数据泄露风险. MaxCompute内置的存储加密能力, 可以基于KMS云服务支持用户自定义秘钥(BYOK)以及AES256加密算法,并计划提供符合国密合规要求的SM系列加密算法支持。 结合MaxCompute元仓(MetaData)提供的安全审计能力和元数据管理(MetaService)提供的安全授权鉴权能力,以及数据安全生态中安全卫士和数据保护伞等安全产品,就构成了 MaxCompute安全栈完整大图。 3.2 生态化作为一个大规模数据计算平台,MaxCompute 拥有来自各类场景的EB级数据,需要快速满足各类业务发展的需要。在真实的用户场景中,很少有用户只用到一套系统:用户会有多份数据,或者使用多种引擎。联合计算融合不同的数据,丰富 MaxCompute 的数据处理生态,打破数据孤岛, 打通阿里云核心计算平台与阿里云各个重要存储服务之间的数据链路。联合计算也融合不同的引擎,提供多种计算模式,支持开源生态。开源能带来丰富和灵活的技术以赋能业务,通过兼容开源API对接开源生态。另一方面,在开源过程中我们需要解决最小化引入开源技术成本及打通数据、适配开源接口等问题。 Cupid 联合计算平台联合计算平台 Cupid 使一个平台能够支持 Spark、Flink,Tensorflow、Numpy,ElasticSearch 等多种异构引擎, 在一份数据上做计算。在数据统一、资源统一的基础上,提供标准化的接口,将不同的引擎融合在一起做联合计算。 Cupid 的工作原理是通过将 MaxCompute 所依赖的 Fuxi 、Pangu 等飞天组间接口适配成开源领域常见的 Yarn、HDFS 接口,使得开源引擎可以顺利执行。现在,Cupid 新增支持了 Kubernetes 接口,使得联合计算平台更加开放。 案例:Spark On MaxCompute Spark 是联合计算平台第一个支持的开源引擎。基于 Cupid 的 Spark on MaxCompute 实现了与 MaxCompute 数据/元数据的完美集成;遵循 MaxCompute 多租户权限及安全体系;与Dataworks、PAI平台集成;支持 Spark Streaming,Mllib, GraphX, Spark SQL, 交互式等完整 Spark生态;支持动态资源伸缩等。 多源异构数据的互联互通随着大数据业务的不断扩展,新的数据使用场景在不断产生,用户也期望把所有数据放到一起计算,从而能取得 1+1 > 2 这样更好的结果。MaxCompute 提出了联合计算,将计算下推,联动其他系统:将一个作业在多套系统联动,利用起各个系统可行的优化,做最优的决策,实现数据之间的联动和打通。 (上图为MaxCompute集团内和专有云能力,公共云已实现与OSS、OTS的数据互通)MaxCompute 通过异构数据支持来提供与各种数据的联通,这里的“各种数据”是两个维度上的: 多样的数据存储介质(外部数据源),插件式的框架可以对接多种数据存储介质。当前支持的外部数据源有:OSS, TableStore(OTS), TDDL,Volume。 2. 多样的数据存储格式:开源的数据格式支持,如 ORC、Parquet 等;半结构化数据,如包括 CSV、Json等隐含一定 schema 的文本文件;完全无结构数据,如对OSS上的文本,音频、图像及其他开源格式的数据进行计算。基于MaxCompute 异构数据支持,用户通过一条简单的 DDL 语句即可在 MaxCompute 上创建一张EXTERNAL TABLE(外表),建立 MaxCompute 表与外部数据源的关联,提供各种数据的接入和输出能力。创建好的外表在大部分场景中可以像普通的 MaxCompute 表一样使用,充分利用 MaxCompute 的强大计算力和数据集成、作业调度等功能。MaxCompute 外表支持不同数据源之间的Join,支持数据融合分析,从而帮助您获得通过查询独立的数据孤岛无法获得的独特见解。从而MaxCompute 可以把数据查询从数据仓库扩展到EB级的数据湖(如OSS),快速分析任何规模的数据,没有MaxCompute存储成本,无需加载或 ETL。 异构数据支持是MaxCompute 2.0升级中的一项重大更新,意在丰富MaxCompute的数据处理生态,打破数据孤岛,打通阿里云核心计算平台与阿里云各个重要存储服务之间的数据链路。 Python 生态和 MARS科学计算引擎MaxCompute 的开源生态体系中,对 Python 的支持主要包括 PyODPS、Python UDF、和 MARS。 PyODPS一方面是MaxCompute 的 Python SDK,同时也提供 DataFrame 框架,提供类似 pandas 的语法,能利用 MaxCompute 强大的处理能力来处理超大规模数据。 基于MaxCompute丰富的用户自定义函数(UDF)支持,用户可以在 ODPS SQL 中编写 Python UDF 来扩展 ODPS SQL。 MARS 则是为了赋能 MaxCompute 科学计算, 全新开发的基于矩阵的统一计算框架。 使用 Mars 进行科学计算,不仅能大幅度减少分布式科学计算代码编写难度,在性能上也有大幅提升。 3.3 智能化随着大数据的发展,我们在几年前就开始面对数据/作业 爆发式增长的趋势。面对百万计的作业和表,如何做管理呢? MaxCompute通过对历史作业特征的学习、基于对数据和作业的深刻理解,让MaxCompute上的业务一定程度实现自适应调整,让算法和系统帮助用户自动、透明、高效地进行数仓管理和重构优化工作,实现更好地理解数据,实现数据智能排布和作业全球调度,做到大数据处理领域的“自动驾驶”,也就是我们所说的Auto Data Warehousing。 Auto Data Warehousing 在线上真实的业务中,到底能做什么呢?我们以Hash Clustering的自动推荐来小试牛刀。Hash Clustering 经过一年多的发展,功能不断完善,但对用户来说,最难的问题仍然在于,给哪些表建立怎样的Clustering策略是最佳的方案? MaxCompute 基于 Auto Data Warehousing,来实现为用户推荐如何使用 Hash Clustering,回答如何选择Table、如何设置Clutering key和分桶数等问题,让用户在海量数据、海量作业、快速变化的业务场景下,充分利用平台功能。 商业化历程 从2009年云梯到ODPS,再到MaxCompute,MaxCompute(ODPS) 这个大数据平台已经发展了十年。回顾 MaxCompute 的发展,首先从云梯到完成登月,成为了一个统一的大数据平台。 2014年,MaxCompute 开始商业化的历程,走出集团、向公共云和专有云输出,直面中国、乃至全球的用户。面对挑战,MaxCompute 坚持产品核心能力的增强,以及差异化能力的打造, 赢得了客户的选择。 回顾上云历程,公共云的第一个节点华东2上海在2014(13年)年7月开服,经过4年多发展,MaxCompute 已在全球部署18个Region,为云上过万家用户提供大数据计算服务,,客户已覆盖了新零售、传媒、社交、互联网金融、健康、教育等多个行业。专有云的起点则从2014年8月第一套POC环境部署开始,发展至今专有云总机器规模已超过10000台;输出项目150+套,客户涵盖城市大脑,大安全,税务,等多个重点行业。 今天,MaxCompute 在全球有超过十万的服务器,通过统一的作业调度系统和统一的元数据管理,这十万多台服务器就像一台计算机,为全球用户提供提供包括批计算、流计算、内存计算、机器学习、迭代等一系列计算能力。这一整套计算平台成为了阿里巴巴经济体,以及阿里云背后计算力的强有力支撑。MaxCompute 作为一个完整的大数据平台,将不断以技术驱动平台和产品化发展,让企业和社会能够拥有充沛的计算能力,持续快速进化,驱动数字中国。来源商业新知网,原标题:阿里靠什么支撑EB级计算力
来源商业新知网,原标题:阿里:2018阿里技术参考图册(算法篇+研发篇) 2018年4月18日,阿里技术团队重磅发布的《阿里技术参考图册》,总计600余页,将为你呈现阿里技术全景,走进各个技术领域的世界。此书邀请了阿里多个重要部门的研究员、资深技术专家、资深算法专家参与撰写。内容分为研发篇、算法篇两册,全面展示了在超大规模的企业级应用需求下,阿里全新升级的大中台、小前台的技术组织架构,以及各个技术领域的突破及创新。 为何这套图册值得所有技术人收藏? 近日,英国品牌评估机构 Brand Finance 发布“2018 全球 100 个最有价值的科技品牌榜”,阿里巴巴成为中国最有价值的科技品牌,2017年研发投入居中国企业之首。翻开此书,你可以清晰看到阿里繁荣的业务生态:文化娱乐核心电商业务、本地生活、支付&金融服务、智慧物流、市场营销、云计算等全貌。 此外,你更能高屋建瓴、深入了解每个业务背后的技术支撑体系:高性能基础设施如何支撑商业系统?集群调度系统高效怎样提升资源效率?新一代分布式存储引擎、数据库技术、高性能分布式中间件有哪些创新之处?同时,你还能在此看到新一代计算平台打造的世界级计算能力、机器智能实验室引领的技术和产业创新、新零售开启的DT时代消费新体验等等。 《阿里技术参考图册》研发篇部分精彩内容 网络研发事业部:构建世界一流的互联网基础设施(研究员-张铭)计算平台事业部:大数据计算平台的创新与实践(资深技术专家-布民)阿里巴巴中间件的前世今生(高级技术专家-冯嘉)新零售下的前端技术发展&突破(高级前端专家-铁军)菜鸟网络技术驱动智慧物流(资深技术专家-唐韧)《阿里技术参考图册》算法篇部分精彩内容走进人工智能实验室(研究员-永川)从人工智能到机器智能 (资深算法专家-智捷)天猫技术:电商“最强大脑”(资深算法专家-志昭)阿里云:为了无法计算的价值(资深专家-蔡华)菜鸟网络智慧物流:算法应用的新蓝海(资深算法专家-元享)阿里技术大牛共同打造 这套图册的分享者多达三十位,几乎都是阿里重要部门的研究员、资深技术专家、资深算法专家等技术大牛。阿里首次将技术体系全面对外公开:从人工智能到机器智能,从世界一流的互联网基础设施到大数据计算平台、智慧物流运维等标杆技术,从前端到研发效能,基本涵盖了阿里巴巴所有技术兵种,内容涉及业务框架、核心架构、优化算法等。 《阿里技术参考图册》适合什么人阅读? 如果你希望加入阿里搞技术,却面对不同的部门、成百上千的技术岗位一头雾水,这本图册将为你拨开迷雾,带你了解每个事业部的主攻方向、技术创新及突破、发展路径等。特别是对于JAVA工程师、C/C++/工程师、数据研发工程师、数据分析师、算法类工程师,此书具有巨大的参考价值。 如果你希望了解业界最新前沿趋势,来自阿里人工智能实验室、机器智能实验室、蚂蚁、天猫、菜鸟等技术负责人,同样带来了技术解析,揭秘阿里各个领域的技术积累以及未来发展方向。你可以把它当作床头书,或是在路上随手翻翻,充充电。希望这本书,能为你打开一扇窗户,去看更大的世界;成为一个小支点,帮你撬动更大的进步。 受限于篇幅原因,此书未对各个技术领域进行深入讲解。如有兴趣,可关注阿里技术官方公众号,查阅300篇+阿里技术精华干货,并在持续更新中。
来源商业新知网,原标题:云计算霸占网络基础架构多年,5G时代是时候掀开下一幕了! Technavio预测,从2018年到2022年,边缘计算技术的应用量将以每年近20%的速度增长。这也是为何办了多年的CDN峰会,今年一下子成为边缘计算的主场。 稍作分析的话,就会发现,这并非偶然。最核心的缘由在于无论是CDN还是边缘计算,其底层逻辑或者说技术思想,是一致的。都是希望化整为零的去中心运动,为客户提供更好的、更高性价比的产品、技术和解决方案,为用户提供更优质的使用体验。所以,行业里有不少人认为,对于边缘计算,CDN厂商有着近水楼台先得月的优势,也是事出有因的。 纵观整个TMT行业,跟应用层三年河东三年河西相比,技术架构层一直以来都是相对稳定的。无非是从IOE结构,到去IOE,从云计算,再到如今的边缘计算,中间夹杂着IDC、CDN等等行业的轮回发展。那么如今火爆的边缘计算,会变革当下云计算主导下的集中式网络架构吗? 土妖的答案是——会的。现阶段,无论是变革、取代还是其他的字眼,我们之所以看得比较少,一是因为云计算厂商的“反抗”;二是因为边缘计算厂商的蛰伏;三是很多人只能站在当下看当下,以及站在当下看未来,而不能站在未来看当下,更遑论站在未来看未来了。 总之,无论从2C端,还是从2B端,又或者从2T端看,边缘计算取代云计算都不是问题,如果有问题的话,那也仅仅是“时间”的问题而已。 2C端:应用和业务的“去中心化”,是云计算退位边缘计算崛起的根本原因 TMT行业有一个很有意思的现象,就是被人为地分为了2C和2B领域。2C自不必说,2B从最终的产品和服务来看,“使用者”仍然是用户,所以说,“用户”才是TMT行业最终的决定力量,也即所谓的“得用户者得天下”。 以其中的互联网行业为例,经过十几年的发展,“用户”一直被裹挟进“去中心化”的运动之中。从门户、搜索到信息流,信息、内容一直在去中心化;从平台电商、自营电商,到社交电商、社区团购、微商等,电商一直在去中心化;从长视频,到短视频、小视频、直播,视频流媒体也一直在去中心化…… 如果反向推导的话,就很容易发现,应用和业务形态的去中心化;意味着用户的去中心化;用户的去中心化意味着数据产生的去中心化;数据产生的去中心化意味着数据处理和网络架构要去中心化;也意味着中心化的基础设施和网络架构,要让位与分布式、去中心化的架构模式。 很显然,既然客户的用户在去中心化,那么为客户提供服务的B端厂商,也自然要顺应这种从中心化到去中心化、从集中式到分布式的变革。这就是在靠近物体或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,并就近提供最近端服务的边缘计算,能够崛起的最根本原因。其它诸如5G、IoT、人工智能、智慧家庭、自动驾驶等等,不过是边缘计算兴起的利好产业背景或者说应用加速器而已。 当然,也绝不能忽视利好产业背景和加速器的作用。以IoT为例,根据《2017-2018年中国物联网发展年度报告》,早在2017年的时候,全球物联网设备数量就已经达到了84亿台,成功超过了全球人口的数量。中国产业信息网、中国通信工业协会物联网分会的相关数据也显示,预计2019年中国联网AIoT设备总数将达到24.3亿台。就连工信部部长苗圩在近期召开的博鳌会议上也指出,5G应用应该是二八分布,即20%用于人与人的通信,80%用于物与物之间的通信,即物联网。 全球物联网设备数对全球人口的超越,以及中国联网AIoT数字远比我国的智能手机保有量、网民数量要高,都表明物联网相较于移动互联网,有着更为广袤的空间。《2017-2018年中国物联网发展年度报告》就预测,到2025年,全球物联网市场规模或将成长至3.9-11.1万亿美元。无独有偶,国际知名数据分析公司Statista也预计,物联网市场的规模将有望在2020年达到9万亿美元。 毫无疑问,要想真正实现IoT的万物互联、物联互通,最大化挖掘产业的容量与价值,人与设备、设备与设备间的网络、计算、存储、应用,自然是最为关键的,而这些都是边缘计算的“业务范畴”。 从更大的TMT行业技术演进的视角去看,无论是IOE和去IOE,还是IDC和CDN,又或者是云计算和边缘计算,TMT在网络技术和基础架构层面,就像“合久必分,分久必合”的历史规律一样,也一直在中心化和去中心化“这两点”中间的路上,不断来回。只不过如今的天平,再一次偏向了去中心化的一端而已。 2B端:三大行业趋势和底层逻辑,决定云计算是过去式而边缘计算是下一站 前面说到,2C端的应用和业务的“去中心化”,是云计算退位边缘计算崛起的根本原因。那么如果从2B端看呢?在2B的视角里,会发现边缘计算更加符合行业发展的三大趋势和底层逻辑: 首先,边缘计算更平等,更符合TMT行业充分竞争的趋势。在云计算时代,行业被亚马逊AWS、 微软Azure、谷歌云、阿里云等巨头把守,其他厂商获得的机会非常少。但是边缘计算却不同,其是互联网、移动互联网、物联网、工业互联网、电子、AI、IT、云计算、硬件设备、运营商等诸多领域的“十字交叉口”,每一类型的厂商都有自己独特的优势,都有趁势崛起的机会。比如运营商,就拥有互联互通的优势;比如CDN厂商,就拥有分布式架构以及产品、技术运营的先天优势等等。 其次,边缘计算是算力的下沉,符合当下“下沉为王”的时代脚步。近年来TMT行业,尤其是互联网领域,掀起了声势浩荡的下沉运动。市场下沉、渠道下沉、运营下沉、品牌下沉、营销下沉……“下沉为王”的时代轰然到来。边缘计算的算力下沉,既是紧随行业的脚步,也是为其他作业节点的下沉,提供技术架构方面的保证。 就像Gartner首席研究分析师Santhosh Rao所说的,“已经开始数字化商业旅程的组织已经意识到,需要一种更加分散的方法来满足数字化商业基础设施的需求。”和CDN技术理念和思想一脉相承的边缘计算,显然就是这种“更加分散”的方法。 再次,边缘计算更加符合TMT行业的下一步走势。TMT行业的下一步走势是什么?从大的方面说,是人工智能、5G、物联网、工业互联网,从更小点的维度看,则是智慧家庭、自动驾驶、智能交通、智慧城市、智能制造、AR、VR以及万物互联、万物云化等等。 这些不同的细分领域有着一个共同的特点,那就是对网络、计算、存储、应用的“时效要求”,如果把数据从终端设备传到云端,在云端分析、计算之后在传到终端设备,在响应速度上,显然是无法满足需求的。因此,边缘计算的“近端处理”,就成为了目前最合适的解决之道了。 根据传统上的定义,CDN是依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。边缘计算和CDN异曲同工,都是充分利用了边缘的“能量”,只不过跟CDN相比,边缘计算不仅仅是网络传输层面的内容分发而已,还包括了计算、存储、应用等等。 从这个角度出发,甚至可以一定意义上,把边缘计算看作是CDN在业务和技术领域的“升级版”。难怪无论是国外的Akamai、AWS 、EdgeCast、Fastly、Cloudflare、还是国内的网宿科技、蓝汛等等,个个都在摩拳擦掌。很显然,他们也看到了潜在天然的卡位优势。 这和行业大佬的观点,也是不谋而合的。Gartner的云服务提供商研究副总裁Ted Chamberlin就表示,“老实说我认为,对于边缘路由和交换、甚至对于DDoS(分布式拒绝服务)设备中的传统防火墙来说,最大的威胁来自真的能够夺取这个市场的CDN。直到最近它们才醒悟过来,意识到自己可轻松取代广域网边缘设备市场。” 2T端:最难超越的技术优势,就是“天生优势” 在TMT行业里,相比于产品、运营、资金、资源等元素,技术才是最难超越的,而要超越“天生的技术优势”,则是难上加难。边缘计算除了拥有更加符合行业发展趋势和底层逻辑的三大特点之外,就技术本身而言,相较于云计算,边缘计算也有着三大优势。 第一,是响应上几乎“无延迟性”的优势。如今AR、VR、4K、8K、直播、短视频、游戏、云上办公、云上娱乐、自动驾驶、智能家居、智能交通等各种场景日益普及,这些场景下的应用对传输、计算、存储等的速度和效率要求也越来越高。 以自动驾驶为例,在这方面,几乎是要求秒级甚至是毫秒级的速度。而面对自动驾驶方面由摄像头、雷达、激光雷达等众多传感器创造的大量原生数据,以及人与车、人与路、车与车、车与路等各种交互数据,传统数据中心模式的响应、计算和传输速度,显然是不够的,这时候“近端处理”的边缘计算,自然就成为了 “实时化”要求的最好选择。 对此,著名风投厂商安德森·霍洛维茨公司的彼得·莱文表示,“在不久的将来,一辆自动驾驶汽车,其内部可能有超过200台电脑的能力,一辆自动驾驶汽车实际上是一个车轮上的数据中心。”在这样的背景下,“遥远”的云计算,自然“远水救不了近火”。 就像国际咨询机构IDC的物联网和移动副总裁Carrie McGillivray所认为的,边缘计算使计算能够在整个网络中分布,未来的数据将不总是需要传回云中。这里所说的“云中”,就是传统云计算架构中的“数据中心”。 第二,是对重要数据资产的“化整为零”的防暴露优势。在边缘计算出现之前,用户的大部分数据都要上传至数据中心,在这一上传的过程中,用户的数据尤其是重要的隐私数据,比如个体标签数据、银行账户密码、电商平台消费数据、搜索记录、甚至智能摄像头等等,就存在着泄露的风险。而边缘计算因为很多情况下,不用再把每一条数据上传到集中式云中心,而是在边缘就近处理,因此也从源头有效解除了类似的风险。 第三,是对资源能源消耗更低的绿色优势。这点比较好理解,因为数据是在近端处理,因此在网络传输、中心运算、中心存储、回传等各个环节,都能节省大量的服务器、存储、带宽、电量乃至物理空间等诸多成本,从而实现低成本化、绿色化。 或许正是因为仅在技术层面就有诸多优势,才让各大第三方调研机构,纷纷看多边缘计算市场。美国市场调研公司CB Insights估算,到2023 年全球边缘计算行业,整体市场容量有望达到340亿美元。而无论是各类厂商还是投资机构,更是或者通过产品、技术和解决方案创新,或者战略、财务投资等各种方式,早早地就进行了布局。 为加快边缘计算的落地,国内外厂商还都纷纷推出了融合容器技术的边缘计算平台,比如全球最大云服务商亚马逊AWS、工业互联网鼻祖GE Digital等推出的边缘计算平台等,就都采用了容器技术;而在国内,网宿科技也在去年推出的边缘计算平台,同样融合容器等虚拟化技术。 投资机构方面,则包括德森霍洛维茨基金(Andreessen Horowitz)、软银(Softbank)、伯克希尔哈撒韦公司(Berkshire Partners)和高盛(Goldman Sachs)等在内的,几乎所有顶级风投基金都已纷纷押注边缘计算领域的初创公司。边缘人工智能解决方案提供商Anagog、云和边缘计算公司Packet.inc、基础架构和边缘计算解决方案提供商Vopor.io以及边缘智能软件公司Swim.ai等大批涌现的初创公司纷纷获得了顶级风投的资金注入。 写在最后: 去IOE,让IBM、Oracle、EMC没落了,EMC甚至还卖身戴尔,边缘计算会不会未来也革了亚马逊AWS、微软Azure、谷歌云、阿里云的命?这一问题现在看来似乎有点像无稽之谈,但是回顾一下科技企业的历史,看看柯达、北电、Sun、摩托罗拉、诺基亚,这一长串远去背影的名单,还会觉得这只是天方夜谭吗? 云计算已经霸占网络基础架构多年了,在5G、IoT、人工智能时代,是时候掀开下一幕了。
来源商业新知网,原标题:【集客经营】云计算产业如何率先推行信用管理? 近年来,加强社会信用体系建设成为国内外关注的重点。 工信部将信息通信领域监管重心由事前逐步转向事中事后,并积极探索和推动市场信用管理机制的建设。 其中,云服务行业信用管理工作在政府、企业、研究机构和行业组织的多方努力下卓有成效,中国电信、中国移动、阿里云、腾讯云等11家企业率先获得云服务企业AAA级信用认证。 客观来看,信用评价机制在云服务领域的具体实践,对整个信息通信领域信用管理工作具有示范性意义。 信用体系受关注 国内外存在差距 从全球范围来看,欧美发达国家的信用体系较为完善。 目前,发达国家经过探索和实践,已经形成了较为完善的社会信用体系。 例如,美国建立了较为完备的信用法律法规体系,其信用体系发展主要依靠市场管理运作的信用模式,信用中介机构在其中发挥着主导作用; 以德国为代表的欧洲大陆国家则建立了政府主导的社会信用体系,形成了覆盖全国的社会信用信息网络数据库,保证信用信息高度集中。 国内建筑、互联网金融等重点行业逐步建立正向信用管理机制。 为贯彻落实《国务院办公厅关于社会信用体系建设的若干意见》相关要求,部分重点行业已经率先开展了信用管理工作。 例如,建筑行业由中国建筑业协会开展了全国建筑行业AAA级信用企业评价工作; 互联网金融行业由中国中小企业协会信用管理中心发起,对互联网金融平台开展信用评级工作。 目前,这些工作已经取得了积极的进展,为信用管理工作在更多行业的渗透和推进提供了借鉴。 云计算产业成熟 率先推行信用管理 进入成熟期的云计算产业,在多方面因素的共同作用下,实现了云服务信用管理体系的构建。 云计算市场增速较快,整体产业进入了成熟期。 随着云计算步入发展历程中的第二个10年,全球云计算市场趋于稳定增长。 但与此不同,我国云计算市场却处于高速增长阶段: 2017年我国云计算整体市场规模达691.6亿元,增速为34.32%; 截至2018年12月,超过500家企业获得了工信部颁发的云服务(互联网资源协作服务)许可资质,预计未来几年云服务市场仍将保持快速增长。 云服务市场管理重心向事中事后转移。 近年来,工信部将信息通信领域监管重心由事前逐步转向事中事后,并积极探索和推动市场信用管理机制建设。 2017年工信部公布了修订后的《电信业务经营许可管理办法》(工业和信息化部第42号令),落实了国务院“简政放权、放管结合、优化服务”有关要求。 建立信用管理制度、建立失信名单和惩戒制度的明确提出,表明信用管理工作已成为工信部后续重要工作方向。 云服务行业协同治理机制初步形成。 在工信部信息通信管理局的指导下,中国信息通信研究院牵头组织国内主流云服务商于2017年成立云服务经营自律委员会,有效促成了云服务行业多方参与的协同治理模式。 2018年年初,云服务经营自律委员会正式发布《云服务经营自律规范》,重点明确了云服务技术合作和公平竞争方面的要求,从场地设施、合同票据、商标品牌、数据安全、SLA权责等方面进行了细化和规范。 云服务企业合规经营工作得以量化评价,为建立信用评价体系打下了不可或缺的基础。 可信云评估为云服务行业率先推行信用管理打下良好基础。 评估云服务能力是评价云服务企业信用水平的必要前提,可信云评估工作的扎实基础是云服务行业能够率先推行信用管理的重要原因。 中国信息通信研究院从2013年开始持续开展可信云标准和评估工作,推动建立云计算服务信任体系,目前已形成了多维度全流程评估监测体系,覆盖了云计算服务和软件评估,运维、安全、风险管理等专项能力评估,政务、金融等行业云评估。 该监测体系,在加速云计算市场成熟和保障行业健康发展方面起到了重要作用。 顺利开展信用评级 云服务行业更健康 目前,云服务企业信用评级在多方力量的共同推动下已顺利开展,为行业的健康发展发挥了重要的推动作用。 其中,《云服务企业信用评价办法》由云服务经营自律委员会于2018年年初正式发布,明确依据三方面工作开展信用评价: 一是不良失信行为记录情况,主要指云服务企业被记录在工信部电信业务经营不良名单和失信名单的情况; 二是自律工作开展情况,主要指云服务企业签署《云服务经营自律规范》和具体遵守相关自律要求的实际情况; 三是服务能力可信情况,主要指云服务企业通过第三方机构的服务质量可信度的评估情况,主要参考可信云分级评估结果。 基于以上三方面工作,云服务企业信用等级被分为AAA、AA、A/B/C三等五级。 目前,第一批云服务企业信用评级工作顺利完成。 2018年云服务经营自律委员会依据《云服务企业信用评价办法》组织自律委员会成员开展云服务企业信用评级工作。 中国电信、中国移动、阿里云、腾讯云、华为、金山云、UCloud、京东云、浪潮、迅达云、网宿11家企业率先通过AAA级信用评估,为推动云服务行业健康发展起到了较好的示范作用。 云服务企业在守法经营、切实自律和提升可信服务能力方面的积极性大为提高。 2018年下半年,云服务市场低价中标事件明显减少,企业间技术合作合规意识显著提升。 初步探索显成效 未来仍需不断完善 截至目前,云服务行业信用管理工作在政府、企业、研究机构和行业组织的多方推动下已取得了显著进展,对整个信息通信领域的信用管理工作具有开创性和示范性意义。 尽管成绩显著,但客观来看云服务行业信用管理工作仍处于初步探索阶段,后续可从四个方面不断完善。 第一,加大推广力度,做好相关培训和宣传工作,引导更多企业加入自律委员会相关工作中。 第二,跟踪研究新问题新挑战。 例如,前期信用评级过程反映出部分持证企业之间的深度合作,可能会带来服务权责划分不清晰、监管系统对接责任不明确等新问题。 在这种情况下,现有监管规则需要与时俱进,行业规范应发挥灵活优势,及时作出应对。 第三,不断探索守信激励,推动落实对守信云服务企业的激励措施,为守信企业营造更好的经营环境。 第四,进一步完善信用评级机制。 立足维护云服务市场健康发展的基本原则,对信用评级流程、公示机制等细节做好优化,保障信用评级工作自身能够长远发展,真正做到持续服务好云计算企业 。
物流配送是一种先进、综合的物流活动形式,在现代物流发展中扮演着越来越重要的角色。在配送运输中,由于配送用户多,城市交通路线又复杂,如何组成最佳路线,如何使配装和配送路线有效搭配等,是配送运输的特点,也是难度较大的工作。于是采用科学的、合理的方法来确定配送线路,成为提高物流配送车辆效益、提高企业服务质量并且降低物流成本的重要途径,也是配送活动中非常重要的一项工作。 路径优化是对车辆行驶路线的优化过程,也是对车辆进行调度的一个问题。随着物流业的发展,在物流配送中,由于运输任务的性质和特点不同、道路条件及车辆类型等各种约束标准不同,即使在相同收发货运点间完成同样任务时,所采用的行驶路线方案也可能不同,物流配送中的路径优化问题已不单单是求取路径最小化的问题。 为什么ROS路径优化系统如此重要? 节约成本。ROS路径优化系统利用现代智能优化技术,对于物流配送中涉及到的各种难题提供可行的计算方案,在有限时间内充分利用资源,优化业务流程、优化配送线路、提高配送效率、提高车辆配载率,最终降低成本,提高效益。 智能管理。ROS路径优化系统利用GPS/物联网技术,可以对运输过程进行监控和调度;利用GIS/物联网技术,可直观的显示配送调度设计的各种实体和参数,并进行准确的定位,可以基于路网进行区域与路径的规划,方便的实现均衡与优化。 那么,作为物流云服务领跑者的物流链云平台的云ROS产品又是如何实践的呢? 看得见的成本节约。物流链云ROS路径优化系统采用国际先进的智能优化算法,运算速度快,支持配送约束条件多,实现少配车,多装货的目标,有效节省5%~20%的物流配送成本。 显著的效率提升。物流链云ROS路径优化系统支持批量导入,一键优化,将传统人工1~2小时的配送计划编制时间缩减到5~10分钟,效率提升12倍。优化结果满足所有系统约束条件,能有效利用资源,并且提升配送时效满足率。 智能的管理方式。物流链云ROS路径优化系统可以通过平台直观的显示出配送路线,还可通过手机APP的辅助进行现场调度,使物流配送更加灵活。除此之外,还可实现实时监控、追踪车辆在途的动态信息,轻松做到随时随地获取货物位置和到达时间。 物流配送车辆调度优化,是做配送计划的关键所在。物流链云ROS路径优化系统可对货运配送路径进行优化,切实帮助企业提高物流配送车辆效益、降低物流成本。 来源商业新知网,原标题:物流链云平台云ROS——看得见的成本节约
来源商业新知网,原标题:为混合云精选的架构是啥样? 现在,云计算资源的交付和使用已经成为全球的 “新常态”,因为有了云平台的支撑,企业可以简化IT服务,创建更多的新业务。 在传统大中型企业开始上云的大背景下,混合云成为未来的主旋律,混合架构让云厂商通过差异化构建竞争力,促成了目前越来越多新型态云服务模式的涌现,即 Everything as a Service。 新技术和云力量正在为客户绘制未来,但在落地中,云服务和功能的多样化比以往任何时候都复杂,对于用户来说,上云的过程充满挑战,既要考虑云端应用与基础架构的配合,还要与不同的软件供应商、硬件供应商和服务商接洽,提供不同的服务接口。 构建云服务的基础设施是硬件和软件的有机结合,共同的要求是强大、高效、灵活,与僵硬的、会导致高昂成本的专用基础设施相比,高度灵活、敏捷、现代化的、软件定义的基础设施更有助于服务创新,产出利润和降低成本。 混合云的未来 每年RightScale都会对企业和中小型企业进行调查,分析云的采用情况,此前,RightScale已经被Flexera收购,今年3月的报告也是该公司被收购后的第一份报告。 与2018年相比,混合云的使用比例在增加,按照报告来看,混合云的采用率增加了7%,而使用多个公共云平台则增加4%。 企业混合云同比增长状况 同样在国内,无论是IDC还是Gartner的报告都会提到中国是私有云增长速度最快的国家,混合云场景依然是未来的方向,单纯公有云或者私有云的IT架构是无法满足客户需求。 2018年,云计算继续和实体经济深度融合。从国家层面来说,工信部《云计算发展三年行动计划(2017-2019年)》指出,云计算带来了软件开发部署模式的革新,并为大数据、物联网、人工智能等新兴领域的发展提供了基础支撑。 “混合云”模式减少了企业应用在云间更换的不便和不必要成本,还能满足企业成长不同阶段的发展需求,既能提供私有云的安全性,也能够提供公有云的开放性。 而从用户的角度来说,政企市场更成为云计算的主战场,以往云应用于个人娱乐和消费领域,现在云进入了生产领域,企业的关键应用上云。 混战升级Azure Stack打进数据中心 在今年的Flexera报告中,Azure采用率从45%增加到52%,已经逐渐接近AWS。之后是谷歌云,今年使用率19%(2018年18%),其次是VMware Cloud on AWS(12%)、IBM Cloud(12%)、甲骨文的云服务(11%)以及阿里云(3%)。 可以看出 ,双A的竞争加速,混合云都将会是未来角逐的一个重点。 2018年,当AWS宣布退出AWS Outposts时,立马引起行业内所有厂商的注意力,给行业内一个更强的信号,这意味着混合云市场经过了过去几年的发展,已经逐渐形成了完整的厂商技术路线和生态圈。 事实上,在混合云具备天然优势的微软,其公布和落地混合云解决方案的时间更早,与AWS的技术路线相反,作为微软混合云战略的重要组成部分,Azure Stack以超融合设备(一体机)的形式部署在用户的私有云一端,很多人认为,这将会是微软Azure在云计算领域重新通知世界的一款产品。 Azure Stack提供的是一个能够与主流公有云完全保持一致的混合型云平台,Azure Stack是Azure公有云在本地数据中心的延伸,将Azure云服务的灵活性和快节奏的技术创新带到本地数据中心——支持为Azure开发的IaaS和PaaS服务以及Azure Marketplace应用。 从体验上来说,从API接口、开发工具、云市场、运营管理等各个层面,都能提供与Azure一致的混合云平台和体验。 对于用户来说,用户可以自己开发的完整的一套解决方案可以无缝的在Azure Stack上运行,同时将来可以扩展到Azure的公有云架构上,所有的应用、所有的开发,用户只需要一次性开发就可以,这也意味着不管用户在经验、运行模式还是开发工具上、使用的所有方式都是保持一致的。 这样一来,用户可以以最短的时间、最低的成本拥有混合云方案。 在生态构建和落地上,在Azure Stack一体机的推广上,微软采取了跟合作伙伴一起推广的策略,在中国联合华为、Dell EMC、联想等共同推出的Azure Stack一体机在去年上半年就正式商用。 可以看出,Azure Stack结合了云计算的灵活性和创新性,同时又解决了某些应用场景对于数据安全和网络延迟的担心,对于用户来说,也是一大利好。 释放出基础设施的潜能 构建灵活的云平台,在数字化转型时代参与竞争,对于用户来说,需要构建一套灵活的数字化平台。 Flexera报告中指出,在上云过程中成本优化是企业面临的最大挑战。 大企业和中小企业在云服务方面的挑战 而基于英特尔架构的灵活的硬件和底层的运行环境,在此时正在赋予计算、存储和网络资源更灵活的可管理性和高级性能,还可以解决企业面临的成本挑战。 面向 Microsoft Azure Stack 的英特尔精选解决方案有一大亮点就是提供全闪存配置,基础配置为更苛刻的混合云应用需求提供优化性能,吞吐量和低延迟至关重要。增强配置适用于客户那些要求最苛刻的混合云应用,这些应用需要最高性能的吞吐量和最低的延迟。 说到底,客户和企业既可以构建统一架构的混合云,还可以实现更低的长期总体拥有成本,因为超融合解决方案可提供更出色的性价比,并具有更好的扩展能力和敏捷性,以快速应对不断变化的需求。 与此同时,弹性计算是IaaS层的基础服务,从公有云到私有云,目前主流的做法仍然是通过虚拟机(VM)提供计算实例,但以Docker和Kubernetes(K8s)为代表的容器(Container)服务正越来越流行。 同样在Flexera报告中,指出大企业的容器工具采用率呈上升趋势。 容器实用工具的年度对比 包括微软Azure在内,各大公有云平台都已能提供较为完善的容器服务。 将容器服务方案构建在IaaS平台上的缺点是,用户在统一的虚拟机资源池中构建各自的应用,这种方案带来调度效率的下降,同时也使中间层的管理变得复杂。从安全性上看,由于容器与宿主机共享操作系统内核,只要宿主机上任一容器存在安全隐患,或宿主机本身存在安全漏洞,就有可能危及所有容器的安全。 可不可以将容器与虚拟机的优点相结合,兼具前者的轻量级和后者的隔离性?业界在这个方向上做了不少的努力,譬如在2015年推出的Intel Clear Containers项目,通过Intel VT(Virtualization Technology,虚拟化技术)在轻量级的虚拟机中加载容器。同时英特尔VT用于确保系统中每个层级的安全,英特尔TXT(可信执行技术)可用于从硬件级别开始建立信任,以便证实整个解决方案堆栈的安全性。 可以基于英特尔的平台和架构可以提高客户基础架构效率、敏捷开发部署应用等优点的同时,保证了应用的有效隔离,有助于加速应用容器化的进程。 当然这套方案包含采用英特尔至强可扩展处理器、高带宽英特尔以太网适配器以及其他英特尔技术的服务器,这些全新集成的系统可以为用户在混合云环境中提供强大的性能和丰富的功能。 如今,云计算已经不再是一个可选项,对于不同企业的来说,是否上云已经不是问题,只是上云的策略和路线不同而已。 云是让一切都实现软件定义的地方,而基础架构和数据中心就是数据和代码存在的地方,不管用户是应用融合、超融合还是远程定义的数据中心,基于英特尔架构的基础设施可以为用户实现不同混合场景、不同混合环境下、不同混合负载的支持,最终让用户用智能的基础架构去支撑新应用。
上期回顾 作为一个互联网公司或提供互联网服务的公司,其核心的技术资产就是云端平台和云端平台上的服务。 我们通常所说的云服务或云平台广义上是一个概念,但其实内部是两个部分。 支撑云服务运行的硬件和软件系统环境(云架构平台,简称云平台); 实现业务逻辑,支持客户应用,对外提供服务的应用服务平台(云服务平台,简称云服务)。 在 《云服务平台的架构及优势(上)》 ,我们解读了云平台的选择与优势,本期我们将为您解读关键词“云服务”。 云服务——选择 云服务的核心重点在于架构的设计。 软件架构是一个包含各种组件的软件系统结构,这些组件包括但不限于:接口服务,应用服务,数据库服务,缓存服务,消息服务,日志服务,存储服务,网络及通讯服务等等, 它们彼此存在关联或和平台环境存在关联。系统架构设计的目标和目的就是协调和解决这些组件的边界相关点。 当前,我们的软件服务已经进入云计算时代,一个系统所服务的对象已经不再限于单个项目或企业,也不再限于单一行业或同类用户,甚至服务提供者都无法预知消费服务的对象。 在这样的服务消费时代背景下,一个需要全方位,多角度,多维度提供服务的架构方案已成为必然,微服务架构也自然应运而生。 微服务架构区别于传统架构的重要特点: · 模块以服务划分而非项目; · 模块独立部署且相互隔离; · 模块通讯用轻量级API调用。 时代必然,我们的云服务选择的是微服务架构。 云服务——解读 服务拆分 服务按业务拆分这是水平维度的拆分,服务按技术实现前后端分离这是垂直维度的拆分,水平垂直两个维度的拆分把服务分成小块状,这是微服务中"微"思想的体现。 服务独立 服务独立,需要相互调用提供完整业务逻辑,我需要其它服务,其它服务也需要我,我为人人,人人为我,这是微服务中"服务"思想的体现。 服务调用 HTTP(S)+JSON采用轻量级通讯协议和简单数据结构:服务间不再需要关心对方模型和实现,仅通过事先约定好的接口来进行数据流转即可,这是微服务中"解耦"思想的体现。 服务部署 正因为服务独立,所以每个服务都可以单独部署,每个服务都可以独立扩展,也可以独立建立负载。 综上所述,微服务可以体现出以下几点优势: · 开发效率更高; · 沟通成本更低; · 响应速度更快; · 迭代周期更短。 解读: 每个微服务结构独立,功能专一,规模很小,功能明确,能够被团队快速开发和迭代; 每个微服务之间是松耦合的,接口确定后无需关注实现,不会产歧义,减少协调沟通成本; 每个微服务都可以独立部署,快速实现新功能、新需求而不会对整个系统产生影响。 Pivotal 与微服务 很长一段时间以来,Pivotal都是云原生、微服务背后的巨人,这些概念被认知程度已经高过Pivotal自身的品牌。比如微服务火爆后被带热的Spring系列技术,但是很多人并不知道Pivotal才是Spring技术的拥有者。 在Pivotal成立之前,Cloud Foundry一直由VMware在推动,拥有大量开源用户。在Pivotal成立之后,正式发布Pivotal Cloud Foundry (PCF) 1.0版本。 从2016年开始,Pivotal开始支持Docker在企业环境中的运行;也支持把Spring Cloud引入PCF平台,以实现微服务化的应用。 目前Pivotal拥有Spring Boot、Spring Cloud和Spring Cloud Data Flow,用以构建微服务、治理微服务、连接微服务数据。 云原生Java的标准 Nebulogy遵循云原生十二要素,提供基于微服务架构的PaaS平台,同时通过与Pivotal合作,不仅达成产品层面的无缝集成,同时也得以应用敏捷和DevOps等新型软件开发方法,为您提供一站式的服务,帮您设计高性能的微服务架构。
来源商业新知网,原标题:【干货分享】云服务平台的架构及优势(上)前言 我们通常所说的云服务或云平台广义上是一个概念,但其实内部是两个部分。 1.支撑云服务运行的硬件和软件系统环境(云架构平台,简称云平台); 2.实现业务逻辑,支持客户应用,对外提供服务的应用服务平台(云服务平台,简称云服务)。 本期我们为您解读“云平台”的业界概况和优势。 云平台——选择 经过数年的爆发式技术发展和几年的市场沉淀,云平台在2017年终于实现了天下一统,来自Google云平台的开源容器集群管理系Kubernetes(通常称为k8s)成为业界事实标准,世界各大知名云服务商和企业为更好促进云平台云服务的发展,以Kubernetes为核心共同发起了一个组织称之为 云计算基金会 (CNCF,Cloud NativeComputing Foundation)。 该组织的目标有两个: · 与开源社区和合作伙伴一起共同把控Kubernetes未来的发展; · 开发新的软件以让整个容器工具集更加健壮。 加入及通过CNCF兼容性认证的部分厂商 可以看到包括: · 国外Google、Amazon、IBM、Microsoft、Oracle等; · 国内阿里、腾讯、华为、中兴等; 全球知名云平台和云服务商悉数在列。 毫无疑问, 我们的选择是Kubernetes(k8s)。 云平台——解读 Kubernetes是一个开源的Linux容器自动化运维平台和资源编排工具,它消除了容器化应用程序在部署,伸缩时涉及到的许多手动操作。换句话说,你可以将多台主机组合成集群来运行Linux容器,而Kubernetes可以帮助你简单高效地管理那些集群。 Kubernetes平台有以下优势: • 可移植:支持公有云,私有云,混合云; • 可扩展:模块化,组件化,可挂载,可组合; • 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展; • 快速部署应用,快速扩展应用; • 节省资源,优化硬件资源的使用。 以上虽然列出了很多优势,但想要利用好这些优势也不容易, Kubernetes作为开源项目,真正企业生产部署,还至少需要解决以下问题: • 多租户(用户)认证管理,将权限、资源合理分配,避免资源被滥用; • 应用商店(服务目录),快速部署常用中间件以及通用服务; • 持久化存储,对于有状态的应用来说,存储是绕不过的关键性问题; • 统一的监控告警、日志分析,让Kubernetes运行不再是一个黑盒子; • 集群的快速搭建部署以及多集群环境的管理,部署问题一开始困扰了很大部分想要使用Kubernetes的企业。
引言在互联网、大数据、人工智能火爆的今天,“算法”这个词几乎妇孺皆知,业已成为“高薪”“牛X”的代名词。 应不少朋友的邀请,特连载本系列,旨在用最通俗的方式——“”讲人话、无废话、看得懂、用得上“”——将位于神龛之上的算法送进寻常百姓家。 本篇作为系列的第一篇,采用“What、Why、How”文章结构,来给大家普及一下算法的基本概念(也纠正一些朋友的错误概念)。 What is Algorithm?(算法是个什么鬼 )为了不落入俗套,本文不会重复wiki上“算法”的官方定义,而采用启发式结构来阐述算法的本质, 试想平时在遇到问题的时候,我们是如何解决的。 朴素而广泛的过程方法论如下: 重新定义问题,结构化描述 根据重定义,归类问题 根据问题类别,做经验匹配 根据匹配结果,分支处理:若匹配,采用经验方法;若匹配不上,设计开发新方法 迭代更新经验库,增强面向未来问题的能力 与算法相关的就是上面的第3步~第5步。 简单来说,算法本质是:解决某类问题的方法。如果方法已经在经验库里了,直接拿来主义,也就是“既有算法”;如果不在,那么设计开发的新方法,新方法就是“新算法”。 当然还有一种情况:虽然经验库里有针对该类问题的方法了,但是设计开发了一个更有效的新方法,那么也称为“新算法”。 下面来对几个关键点进行阐述!!! 什么是“更有效的算法”?“更有效”的背后逻辑其实比较的就是“代价”,或者称为“开销”。经济上衡量就是成本,它分为两个维度:时间成本和资源成本。 资源成本在计算机上的体现就是硬盘、内存、CPU等一系列硬件资源开销。对这些硬件资源开销进一步抽象,就是空间成本。 算法其实从学科分类上讲,属于计算数学,计算数学属于应用数学。用学科术语来描述时间成本与空间成本,就是计算复杂度,很自然地,它也有两个维度:时间复杂度和空间复杂度。描述复杂度的数学符号是O()。后面我们会详细介绍O()的表达。 综上所述,所谓的“更有效”的算法,指的就是时间复杂度或者空间复杂度更优的算法。 为什么要“重新定义问题,结构化描述”?把人脑也看做一台机器的话,很显然这台机器的运行方式和效率与计算机有所不同(尽管现在的机器学习在尽可能地模拟人脑的机理,但是两者至少在现阶段还有本质不同)。 人脑在连续信号和非结构化场景下的处理能力是卓越的,但是计算机只能处理离散信号,并且必须最终转化成结构化数据才能进行处理(尽管现在的机器学习可以通过自我学习来将数据结构化)。 用一张图来描述这个过程就是: Why to use Algorithm?(算法有什么鬼用)从上面对解决现实问题的过程方法论的描述中,其实已经可以看出算法的价值就在于:经验的重用。 套用一句IT行话就是“不要重复制造轮子”。好了,既然现在你已经对算法有了大致的感性认识,那么接下来根据人类的学习习惯,就需要来看看抽象的算法概念,在现实里到底“长什么模样”。 很多人认为“算法=程序或者程序”,这其实是一个狭义的理解。如前面所说的,算法的本质是解决某类问题的方法,而程序或者代码只是方法的一种表达形式而已。你也可以用自然语言或者伪代码来进行表达算法。 算法的“模样”(应对电灯不工作的算法——代码方式):public STATUS_CODE lamp_issue_handler() { STATUS_CODE ret_val = UNKNOWN_ISSUE; if (!isPowerOn(this)) { ret_val = powerOn(this) ? NOT_POWER_ON_ISSUE : POWER_ISSE; } else if(!isBulbCrash(this)) { ret_val = replaceBulb(this) ? BULB_CRASH_ISSUE : REPLACE_ISSUE; } else { ret_val = fixBulb(this) ? BULB_FIXABLE_ISSUE : FIX_FAILURE_ISSUE; } return ret_val;}算法的“模样”(应对电灯不工作的算法——自然语言方式):首先检查电源是否接好了:没有接好,接上。 如果接上了仍然不工作,看看灯泡是否烧坏了:如果是,换个新灯泡 如果灯泡没有烧坏,修理灯泡 算法的“模样”(应对电灯不工作的算法——流程图方式): How to use Algorithm?(如何使用算法)算法的本质就是方法,既然是方法,就是一系列的操作;既然是操作,就必然有作用对象。 在软件程序设计中,这样的作用对象就是“数据结构”。 怎么来理解数据结构呢? 前面我们讲到了,解决问题的第一步就是要将问题结构化描述。结构化描述的本质就是利用一系列便于操作的“基础元素”来表达。 那么怎样的“基础元素”是便于操作的呢? 首先我们要清楚,操作的主体是谁。从上一段的阐述来看,这个主体貌似是算法,但是我们注意,算法不是凭空去运行的,是要在计算机上运行的。 所以归根结底,操作的主体是计算机。所以,这里所谓的“便于操作”指的是便于计算机运行。 计算机运行有两个维度:硬件维度和软件维度。 1.从硬件维度看: 学过计算机组成原理就知道,程序是在计算机的CPU高速缓存和内存中运行的。对应的存储结构,通常都是线性的。 为了充分提升线性结构的性能优势,硬件厂商(如CPU厂商)在设计硬件时,就抽象了针对一些结构(如堆栈)的操作(如压栈、出栈),所以很自然地,这样的结构就应该作为数据结构。 2.从软件维度看: 我们编写的应用程序一般不会直接运行在硬件之上,而是运行在操作系统、运行时或者虚拟机(如JVM)之上。 所以操作系统、运行时或者虚拟机已经抽象的结构(如数组、队列、树、图等),也应该作为数据结构。 上面赘述了这么多,其实就是要表达一个观点:算法是要配合数据结构的,抛开数据结构谈算法就是无源之水、无根之树。 看到这里,我想你一定彻底明白,为什么图灵奖得主尼古拉斯·沃斯会提出那个著名的等式了:程序 = 算法 +数据结构。 总结看到这里,相信你已经对算法这个概念已经不再陌生,它对于你而言也不再高高在上。 无论在大学学习,还是在工作中,大家都几乎被一种说法反复洗脑:算法非常重要,它是计算机的灵魂。 在这里,我想纠正一下这个错误的观点。首先,广义的算法不仅仅只是软件算法;再次,计算机系统不仅仅只是由软件构成,还有硬件。 硬件涉及到材料科学、制造工艺等一系列技术,这些是不能简单被算法替代的。所以,脱离上下文、一味强调算法的重要性是耍流氓。来源商业新知网,原文标题:算法+数据结构(第01篇)走下神坛吧!算法
来源商业新知网,原标题:云计算在智慧城市建设中的应用 智慧城市的发展是现代化城市发展的必然趋势,云计算为智慧城市建设的关键点,更是智慧城市的“智慧”所在。在智慧城市的建设中,建立以云计算为核心,综合多应用、多行业、多系统的智慧城市设计,已经成为目前智慧城市发展的一个重要思路。 1、 概述 云计算是基于互联网的新一代计算方式,它是网格计算、并行计算、分布式计算等传统计算机技术和网络技术发展融合的产物;是一种基于网络的支持异构设施和资源流转的服务供给模型,它提供给客户可自治的服务。智慧城市是以多应用、多行业、复杂系统组成的综合体,其建设存在大数据量的存储需求、高访问量的社会公共查询需求、多系统的综合管理需求和多用户的资源分享需求等。云计算的出现为智慧城市发展提供新的契机,通过云计算可以解决智慧城市中数据海量、随时更新并且实时性要求非常高的计算问题。因此,智慧城市的建设和实现需要云计算,政务管理、交通管理,智能医疗、教育服务、居民生活等具体应用就更加离不开基于云计算的数据计算与处理平台。 2、 基于云计算的智慧城市架构 2.1 基于云计算的政务管理平台 智慧政府是智慧城市发展的核心动力,政府信息资源可通过政务管理平台实现资源的优化配置和高效利用,而其功能的实现依赖于云计算的支撑。基于云计算的政务管理平台不仅向公众提供了可参与的网络平台,还可保证公众的诉求有良好的回应。通过政务管理平台,公民可以自助满足对政府服务的各种需要,这些服务以开放公用的方式集中在云端,公众可通过网站、APP等各种手段享受智慧政府的各种服务。 2.2 基于云计算的交通应用支撑平台 智慧交通指的是交通信息系统、通讯网络、定位系统和智能化分析与选线的交通系统的总称。结合目前城市交通现状和需求,打造一套基于云计算的城市交通支撑平台是交通事业发展的必然选择,也是实现智慧交通的必经之路。智慧交通依靠城市交通基础设施中的传感器,可以将整个城市的车流量、道路状况、天气、温度、交通事故等大数据量的信息实时收集起来储存在“云”端,通过云计算中心动态的分析并计算出最优的交通指挥方案和车行路线,并将这些信息通过无线通信、有线广播、电子显示屏、互联网、车载器等方式向出行者、驾驶员发布,从而保障人与车、路、环境之间的信息交互,进而提高交通系统的效率。 2.3 基于云计算的医疗服务支撑平台 智慧医疗通过打造以电子健康档案为中心的区域医疗信息平台,实现患者与医务人员、医疗机构、医疗设备之间的互动。智慧医疗可以整合现有医疗机构的设施,形成统一的“医疗云”,并收集医疗机构的号源统一存储在“云端”,使公众可以通过网络、电话、APP等各种渠道进行预约挂号,解决“一号难求”的问题;公众可按预约的时间前往医院就医,免去了医院排队的时间。 2.4 基于云计算的教育支撑平台 云计算的出现为智慧教育带来了希望与可能,是智慧教育实现智慧的所在。基于云计算的教育支撑平台将全面整合教育系统中的各种优质教学资源、平台、应用等,构建一个统一的智能开放架构的云计算平台,为用户提供租用或免费服务,满足用户通过各种终端应用完成教学、学习、管理、科研、社会交往等各方面的需求,实现发布教育信息、获取教学资源、开展教学互动、统计教育信息与数据、形成科学决策、实施教育评价、开展协同科研等系列教育活动。 2.5 基于云计算的居民生活应用平台 智慧社区可实现社区内的充分联通,达到人与物、人与人的全方位交流,有助于解决民生问题,以及日渐复杂的城市管理问题。云计算技术将全面整合社区内的物业、家居、监控、医疗、教育等各种资源,集成物业服务、家居服务、医疗服务、教育服务、安保服务等业务,集中智能化处理社区中的各种资源信息,向社区居民提供各种信息和应用服务,实现社区服务的高效运行,为住户提供一种安全、舒适、方便、快捷和开放的信息化生活空间。 3、 云计算应用于智慧城市建设的意义 3.1 让城市更加智能化 云计算平台以其空前强大的数据分析计算能力,成为智慧城市的“大脑”,全面协调城市生活的各个方面,实现对城市中海量数据的计算以及存储,并可提高城市中各种资源利用率,节约智慧城市建造成本。在智慧城市的建设中,累积了大量数据信息,并且在城市的多个应用系统之间存在资源共享与信息交互的需求。智慧城市的各个应用系统均需要存储在“云”中的各种数据,用于实现各自功能。如此众多而繁复的系统需要多个强大的信息处理中心来进行各种信息、各种数据的处理,所以说,云计算的特点能满足智慧城市建设的要求。 3.2 有利于整合城市信息资源 城市各个领域之间是“相互依赖”的,是一种网状关系。智慧城市的建设需要充分了解城市中的信息,分析城市各个领域之中改的网状关系。智慧城市将城市中的人才流、物资流、信息流、资源流、资金流等信息储存在云端,全面整合城市的信息资源。智慧城市需要各方协力推进,更需要注重整合相关信息资源。智慧城市建设要高度重视信息的挖掘、整合与再应用。而云计算作为一种新兴的计算模式,其重要功能就是整合资源,为应用提供强大的支撑,是信息能够全方面的共享,为预测和决策提供有力的智慧参考,从而提升政府的行政能力。 3.3 降低信息共享成本 云计算的突出特点,在于实现资源共享。采用云计算方案构建的智慧城市将提高城市基础资源的利用率,有效的降低城市基础设施的投资规模。此外,云计算还可以有效的节能能源,设备资源在夜间负载低时,可以将业务转移到部分物理资源上,而将其他空闲的物理资源关机或转入节能模式。云计算数据中心通过集中的资源管理,降低了日常维护工作量,大量的工作都转移到后台由专业人员完成,从而降低管理维护成本,提高管理效率。云计算数据中心通过资源整合、统一管理可以有效的降低信息资源共享的成本,降低了信息化的门槛,使更多的单位和企业走进信息化时代,提高工作效率。
来源商业新知网,原标题:云智能:阿里云定义下一个十年的云计算范式 云计算会过时吗?这要取决于定义本身。现在看来,至少演变已经开始发生。那种提供传统计算能力的云计算,正在变得不那么重要了。 一种新的范式正试图取而代之。各行业的Top企业已经清楚地意识到,随着经营环境的改变,企业需要在IT基础设施云化的基础上,更多地基于数据进行智能化决策,直接解决商业问题。 信息化时代,企业通过流程再造,实现效率的提升;但是在数字化时代,企业需要进行业务的创新,而这就需要使用各类智能技术,实现有别于以往的产品服务和客户体验。 这是不是说,计算不再重要?听到这样的观点不免让人有些惊诧。云计算当然是计算,然而转念一想,云计算大放异彩的根本原因并不是仅仅实现了弹性计算,而是解决了客户的问题,帮助客户实现了业务创新。 云的新范式2009年阿里云成立之初,内外质疑不绝于耳,看不上、看不懂几成主流。有人认为几十年前已经实现,有人认为未来几百年都做不到。阿里巴巴倒是耿直:不做云计算,就会死。 在阿里云极速狂奔数年后,才陆续有厂商入场。也正是这一背景,奠定了当下中国云计算市场的基本格局。 所有人都知道云计算未来潜力巨大,但是云未来究竟是怎样的?答案还不确定。至少从目前来看,亚马逊AWS、微软、谷歌每家厂商的思路都不同,当然阿里云也有自己的思考。 2018年底,阿里云事业群升级为阿里云智能事业群。3个月后,阿里云智能高管们在北京集体亮相,并首次对外解释了从云到云智能的不同思考。 “算力是基础,更重要是智能化的算法。”阿里云智能总裁张建锋说,“算法跟各行各业的业务有密切相关,所以阿里巴巴通过与各行各业合作,沉淀了一个完整的智能化平台。” IT基础设施的云化、核心技术的互联网化以及在之上叠加数据+智能化的平台和能力,完整地组成了阿里云智能的整体能力框架——云智能,是阿里云给出的对下一阶段云的定义。 它是阿里在过去10年打下云业务的基础上,再度开创的云计算 “新范式”,而不是字面意义上的新增“智能”二字的差异。在它的背后,加持了阿里在过去十多年间积累的顶尖商业与技术心得。 这些独特元素的融入,正把阿里云变得更厚重,更贴近商业创新。 云计算的价值超出算力阿里云写下第一行代码距今已经10年。中国企业上云意愿从很小的个位数增长到今天的90%左右,可以说阿里云开创了中国的云时代。 2009年2月,阿里云飞天写下的第一行代码。 云计算的早期,代替传统IT架构方面的价值确实很突出。但是10年之后,云计算已经不是一个单纯的算力问题,否则云计算市场的份额,也就不是今天的格局所显现的那样了。 惠普、思科、IBM、富士通等都做过服务器,对于计算问题很了解,但在公有云领域,这种优势并没有发挥出来。这某种程度上也佐证了,云计算本质非仅仅意味着算力本身。 对于企业而言,如果今天还只是依靠云计算节省一些算力上的成本,是大材小用,真正发挥云计算价值的方式应该是——通过强大的计算平台加上高效算法,进一步挖掘数据价值,最大化数据效率,并形成正向循环。 数据、计算平台和算法的结合,是未来非常重要的趋势。而云计算则能加速数据融合,例如孤立的看气象数据价值有限,但如果和农业或商业结合,就会产生激烈的“化学反应”;传统制造业如果能充分利用大数据,也将有助于大幅提升如良品率等。 所以,未来的云计算应该是一种超出算力,通过融合多种能力,跟业务结合,产生巨大价值的新计算范式。这应该也是阿里云提出所谓云智能的价值取向。 阿里云持续领跑十年前,对云计算的争论言犹在耳。那一次阿里云胜出,并最终获得了中国第一、全球第三的业绩。如今,阿里云始提云智能,市场参与者理应不能小觑——可以帮助企业进行业务创新的云计算,将是未来发展的新范式。 一种新服务或者理念的提出,跟业务场景有莫大关系。如果没有在过去10年在云计算市场上对于客户痛点的深度理解和成功的数据+智能实践,阿里云也不会提出云智能的定义。 过去20年来,阿里巴巴一直走在数字化经营的前沿,具有复杂而多样的场景——阿里云的技术和能力也是在这些场景之下沉淀而来。 利用数据和智能技术,阿里经济体每天售卖上百亿的商品,却只有几百个运营人员,这跟传统的商业形成了鲜明对比。阿里尝到了云智能的甜头,所以会做出未来2年内,整个阿里经济体都要上公有云的决策。从另外一种角度看,也可以说,阿里用自身的实践成功检验了云智能。 正是这种一个又一个的成功实践,触发阿里云思考未来云计算的具体形态,并最终用云智能的概念,对下一阶段的云计算作出了定义。
来源商业新知网,原标题:云计算演进历程与模式 - 初识云计算知识专栏(2) 计算演进历程 云计算产生背景 云计算的产生是需求推动、技术进步、商业模式转变共同促进的结果。需求推动指的是政企客户低成本且高性能的信息化需求;人用户的互联网、移动互联网应用需求强烈,追求更好用户体验。技术进步指的是虚拟化技术、分布与并行计算、互联网技术的发展与成熟,使得基于互联网提供包括IT基础设施、开发平台、软件应用成为可能。 宽带技术及用户发展,使得基于互联网的服务使用模式逐渐成为主流。商业模式转变指的是少数云计算的先行者(例如 Amazon的 IaaS、PaaS)的云计算服务已开始运营。市场对云计算商业模式已认可,越来越多的用户接受并使用云计算服务生态系统正在形成,产业链开始发展和整合。 几年之内,云计算已从新兴技术发展成为当今的热点技术。从 Google 公开发布的核心文件到 Amazon EC2(亚马逊弹性计算云)的商业化应用,再到美国电信巨头 AT&T(美国电话电报公司)推出的 Synaptic Hosting(动态托管)服务,云计算从节约成本的工具到盈利的推动器,从 ISP(网络服务提供商)到电信企业,已然成功地从内置的 IT 系统演变成公共的服务。 演进历程 云计算 (Cloud Computing)是分布式计算(Distributed Computing)、并行计算(Parallel Computing)和网格计算(Grid Computing)的发展或者说是这些计算机科学概念的商业实现。 并行计算 一般是指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算的过程分解成小部分,之后以并发方式来加以解决。一般计算量特别大,相同场景下不同数据的验证计算;也即,并发处理同样的任务。 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果,整个处理流程是集中管理。 网格计算 是跨地区的,甚至跨国家的,甚至跨洲的这样一种独立管理的资源结合。资源在独立管理,并不是进行统一布置、统一安排的形态。网格这些资源都是异构的,不强调有什么统一的安排。另外网格的使用通常是让分布的用户构成虚拟组织(VO),在这样统一的网格基础平台上用虚拟组织形态从不同的自治域访问资源。 下面的计算都不是云计算 云计算(Cloud Computing)是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、 网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。 云计算的模式 云计算的部署模式 云计算部署模式:私有云计算、公有云计算、混合云计算。 私有云计算: 一般由一个组织来使用,同时由这个组织来运营。华为数据中心属于这种模式,华为自己是运营者,也是它的使用者,也就是说使用者和运营者是一体,这就是私有云。 公有云计算: 就如共用的交换机一样,电信运营商去运营这个交换机,但是它的用户可能是普通的大众,这就是公有云。 混合云计算: 它强调基础设施是由二种或更多的云来组成的,但对外呈现的是一个完整的实体。企业正常运营时,把重要数据保存在自己的私有云里面(比如:财务数据),把不重要的信息放到公有云里,两种云组合形成一个整体,就是混合云。比如说电子商务网站,平时业务量比较稳定,自己购买服务器搭建私有云运营,但到了圣诞节促销的时候,业务量非常大,就从运营商的公有云租用服务器,来分担节日的高负荷;但是可以统一的调度这些资源,这样就构成了一个混合云。 云计算的商业模式 IaaS (Infrastructure as a service):基础设施即服务,指的是把基础设施以服务形式提供给最终用户使用。包括计算、存储、网络和其它的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。例如:虚拟机出租、网盘等。 PaaS (Platform as a service):平台即服务,指的是把二次开发的平台以服务形式提供给最终用户使用,客户不需要管理或控制底层的云计算基础设施,但能控制部署的应用程序开发平台。例如:微软的Visual Studio开发平台。 SaaS (Software as a service):软件即服务,提供给消费者的服务是运行在云计算基础设施上的应用程序。例如:企业办公系统。 Web2.0 是 相对 Web1.0 的新的一类互联网应用的统称。Web1.0 的主要特点在于用户通过浏览器获取信息。Web2.0 则更注重用户的交互作用,用户既是网站内容的浏览者,也是网站内容的制造者。所谓网站内容的制造者是说互联网上的每一个用户不再仅仅是互联网的读者,同时也成为互联网的作者;不再仅仅是在互联网上冲浪,同时也成为波浪制造者;在模式上由单纯的「读」向「写」以及「共同建设」发展;由被动地接收互联网信息向主动创造互联网信息发展,从而更加人性化。 网页寄存 (Web hosting)是指一类因特网寄存服务,它提供个人,组织和用户用于存储信息,图像,视频或任何通过网络可访问的内容的在线系统。 CRM: Customer Relationship Management, 客户关系管理。 云计算的流派 云计算有两个典型的流派: 大分小模式和小聚大模式 大分小模式: 资源在应用间时分复用;关键技术点包括计算、存储和网络虚拟化以及虚拟机监控、调度和迁移。典型代表:Amazon EC2。 小聚大模式: 应用资源需求大,可以划分为子任务;关键技术点包括任务分解、调度、分布式通信总线和全局一致性。典型代表:Google。 注释: VM:Virtual Machine,虚拟机。 VMM:Virtual Machine Monitor,虚拟机监控器。 App:Application,应用系统。 IaaS:Infrastructure as a Service,基础设施即服务。
来源商业新知网,原标题:云计算基础知识(二):云分类及服务模式 目前看来,云主要分类有公有云、私有云、混合云、移动云和行业云。随着云计算的不断发展,可能会产生更多种类的云。公有云公有云通常指第三方提供商为用户提供的能够使用的云。公有云一般可通过Internet使用,可能是免费或成本低廉的。这种云有许多实例,可在当今整个开放的公有网络中提供服务。 私有云私有云为一个企业单独使用而构建,提供对数据、安全性和服务质量的最有效控制。私有云可由企业的IT部门或云平台业务提供商搭建。企业可以在搭建的云平台基础上部署自己的网络或应用服务。私有云可部署在企业的数据中心中,也可统一部署在云平台业务提供商的机房。 混合云混合云是公有云和私有云两种服务方式的结合。由于安全和控制原因,并非所有的企业信息都能放置在公有云上,因此大部分已经应用云计算的企业将会使用混合云模式。混合云为其他目的的弹性需求提供了很好的基础。比如私有云可以把公有云作为灾难转移的平台,在需要的时候使用它。 移动云移动云把虚拟化技术应用于手机和平板电脑。适用于移动设备终端(手机或平板电脑)使用企业应用系统资源,它是云计算移动虚拟化中非常重要的一部分。 行业云行业云是一种云平台。它由行业内或某个区域内起主导作用或者掌握关键资源的组织建立和维护,以公开或者半公开的方式向行业内部或相关组织和公众提供有偿或无偿服务。 行业云又可以分为金融云、政府云、教育云、电信云、医疗云、工业云等。 服务模式云计算包括三个层次的服务,如图所示: 各服务模式之间没有必然联系,也不相互依赖。各服务模式的简单说明如下: 基础设施即服务IaaS提供给客户的服务是对所有设施的利用,包括处理、存储、网络和其他基本的计算资源。客户能够部署和运行任意软件,包括操作系统和应用程序。客户不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如防火墙、负载均衡器等)的控制。 平台即服务PaaS提供给客户的服务是把客户开发或收购的应用程序部署到供应商的云计算基础设施上。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置。 软件即服务SaaS提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过瘦客户端界面访问。客户不需要管理或控制任何云计算基础设施。
有个朋友是金融行业产品经理,最近在对已有的站内用户做分层与标签分类,需要对用户进行聚类分析。一般从事数据分析行业的朋友对这类词并不陌生,但是像市场运营人员就会把这类些名词概念搞混,导致结果不准确。数据分析相关概念多且杂,容易搞混。为了便于大家区分,今天小编就来盘点一下数据分析常用的术语解释。建议大家收藏起来方便查看。 按照以下三类进行汇总。 1、 互联网常用名词解释 2、 统计学名词解释 3、 数据分析名词解释 一、互联网常用名词解释 1、PV(Page View)页面浏览量 指某段时间内访问网站或某一页面的用户的总数量,通常用来衡量一篇文章或一次活动带来的流量效果,也是评价网站日常流量数据的重要指标。PV可重复累计,以用户访问网站作为统计依据,用户每刷新一次即重新计算一次。 2、UV(Unique Visitor)独立访客 指来到网站或页面的用户总数,这个用户是独立的,同一用户不同时段访问网站只算作一个独立访客,不会重复累计,通常以PC端的Cookie数量作为统计依据。 3、Visit 访问 指用户通过外部链接来到网站,从用户来到网站到用户在浏览器中关闭页面,这一过程算作一次访问。 Visit可重复累计,比如我打开一个网站又关闭,再重新打开,这就算作两次访问。 4、Home Page 主页 指一个网站起主目录功能的页面,也是网站起点。通常是网站首页。 5、Landing Page 着陆页 指用户从外部链接来到网站,直接跳转到的第一个页面。比如朋友给我发了一个介绍爆款T恤的淘宝链接,我点开会直接跳转到介绍T恤的那个页面,而不是淘宝网众多其他页面之一,这个介绍T恤的页面可以算作是着陆页。 6、Bounce Rate 跳出率 指用户通过链接来到网站,在当前页面没有任何交互就离开网站的行为,这就算作此页面增加了一个“跳出”,跳出率一般针对网站的某个页面而言。 跳出率=在这个页面跳出的用户数/PV 7、退出率 一般针对某个页面而言。指用户访问某网站的某个页面之后,从浏览器中将与此网站相关的所有页面全部关闭,就算此页面增加了一个“退出“。 退出率=在这个页面退出的用户数/PV 8、Click 点击 一般针对付费广告而言,指用户点击某个链接、页面、banner的次数,可重复累计。比如我在PC端看到一则新闻链接点进去看了一会就关了,过了一会又点进去看了一遍,这就算我为这篇新闻贡献两次点击。 9、avr.time 平均停留时长 指某个页面被用户访问,在页面停留时长的平均值,通常用来衡量一个页面内容的质量。 avr.time=访客数量/用户总停留时长 10、CTR 点击率 指某个广告、Banner、URL被点击的次数和被浏览的总次数的比值。一般用来考核广告投放的引流效果。 CTR=点击数(click)/被用户看到的次数 11、Conversion rate 转化率 指用户完成设定的转化环节的次数和总会话人数的百分比,通常用来评价一个转化环节的好坏,如果转化率较低则急需优化该转化环节。 转化率=转化会话数/总会话数 12、漏斗 通常指产生目标转化前的明确流程,比如在淘宝购物,从点击商品链接到查看详情页,再到查看顾客评价、领取商家优惠券,再到填写地址、付款,每个环节都有可能流失用户,这就要求商家必须做好每一个转化环节,漏斗是评价转化环节优劣的指标。 13、投资回报率(ROI:Return On Investment ) 反映投入和产出的关系,衡量我这个投资值不值得,能给到我多少价值的东西(非单单的利润),这个是站在投资的角度或长远生意上看的。 其计算公式为:投资回报率(ROI)=年利润或年均利润/投资总额×100%,通常用于评估企业对于某项活动的价值,ROI高表示该项目价值高。 14、重复购买率 指消费者在网站中的重复购买次数。 15、Referrer 引荐流量 通常指将用户引导至目标页面的URL(超链接)。在百度统计中,引荐流量叫做“外部链接”。 16、流失分析(Churn Analysis/Attrition Analysis) 描述哪些顾客可能停止使用公司的产品/业务,以及识别哪些顾客的流失会带来最大损失。流失分析的结果用于为可能要流失的顾客准备新的优惠。 17、顾客细分&画像(Customer Segmentation & Profiling) 根据现有的顾客数据,将特征、行为相似的顾客归类分组。描述和比较各组。 18、顾客的生命周期价值 (Lifetime Value, LTV) 顾客在他/她的一生中为一个公司产生的预期折算利润。 19、购物篮分析(Market Basket Analysis) 识别在交易中经常同时出现的商品组合或服务组合,例如经常被一起购买的产品。此类分析的结果被用于推荐附加商品,为陈列商品的决策提供依据等。 20、实时决策(Real Time Decisioning, RTD) 帮助企业做出实时(近乎无延迟)的最优销售/营销决策。比如,实时决策系统(打分系统)可以通过多种商业规则或模型,在顾客与公司互动的瞬间,对顾客进行评分和排名。 21、留存/顾客留存(Retention / Customer Retention) 指建立后能够长期维持的客户关系的百分比。 22、社交网络分析(Social Network Analysis, SNA) 描绘并测量人与人、组与组、机构与机构、电脑与电脑、URL与URL、以及其他种类相连的信息/知识实体之间的关系与流动。这些人或组是网络中的节点,而它们之间的连线表示关系或流动。SNA为分析人际关系提供了一种方法,既是数学的又是视觉的。 23、生存分析(Survival Analysis) 估测一名顾客继续使用某业务的时间,或在后续时段流失的可能性。此类信息能让企业判断所要预测时段的顾客留存,并引入合适的忠诚度政策。 二、统计学名词解释 1、绝对数和相对数 绝对数:是反应客观现象总体在一定时间、一定地点下的总规模、总水平的综合性指标,也是数据分析中常用的指标。比如年GDP,总人口等等。 相对数:是指两个有联系的指标计算而得出的数值,它是反应客观现象之间的数量联系紧密程度的综合指标。 相对数一般以倍数、百分数等表示。 相对数的计算公式: 相对数=比较值(比数)/基础值(基数) 2、百分比和百分点 百分比:是相对数中的一种,他表示一个数是另一个数的百分之几,也成为百分率或百分数。百分比的分母是100,也就是用1%作为度量单位,因此便于比较。 百分点:是指不同时期以百分数的形式表示的相对指标的变动幅度,1%等于1个百分点。 3、频数和频率 频数:一个数据在整体中出现的次数。 频率:某一事件发生的次数与总的事件数之比。频率通常用比例或百分数表示。 4、比例与比率 比例:是指在总体中各数据占总体的比重,通常反映总体的构成和比例,即部分与整体之间的关系。 比率:是样本(或总体)中各不同类别数据之间的比值,由于比率不是部分与整体之间的对比关系,因而比值可能大于1。 5、倍数和番数 倍数:用一个数据除以另一个数据获得,倍数一般用来表示上升、增长幅度,一般不表示减少幅度。 番数:指原来数量的2的n次方。 6、同比和环比 同比:指的是与历史同时期的数据相比较而获得的比值,反应事物发展的相对性。 环比:指与上一个统计时期的值进行对比获得的值,主要反映事物的逐期发展的情况。 7、变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 8、连续变量 在统计学中,变量按变量值是否连续可分为连续变量与离散变量两种。在一定区间内可以任意取值的变量叫连续变量,其数值是连续不断的,相邻两个数值可作无限分割,即可取无限个数值。如:年龄、体重等变量。 9、离散变量 离散变量的各变量值之间都是以整数断开的,如人数、工厂数、机器台数等,都只能按整数计算。离散变量的数值只能用计数的方法取得。 10、定性变量 又名分类变量:观测的个体只能归属于几种互不相容类别中的一种时,一般是用非数字来表达其类别,这样的观测数据称为定性变量。可以理解成可以分类别的变量,如学历、性别、婚否等。 11、均值 即平均值,平均数是表示一组数据集中趋势的量数,是指在一组数据中所有数据之和再除以这组数据的个数。 12、中位数 对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。 13、缺失值 它指的是现有数据集中某个或某些属性的值是不完全的。 14、缺失率 某属性的缺失率=数据集中某属性的缺失值个数/数据集总行数。 15、异常值 指一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。 16、方差 是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。 方差是衡量源数据和期望值相差的度量值。 17、标准差 中文环境中又常称均方差,是离均差平方的算术平均数的平方根,用σ表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。 18、皮尔森相关系数 皮尔森相关系数是用来反映两个变量线性相关程度的统计量。相关系数用r表示,其中n为样本量,分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的绝对值越大表明相关性越强。 19、相关系数 相关系数是最早由统计学家卡尔·皮尔逊设计的统计指标,是研究变量之间线性相关程度的量,一般用字母r表示。由于研究对象的不同,相关系数有多种定义方式,较为常用的是皮尔森相关系数。 20、特征值 特征值是线性代数中的一个重要概念。在数学、物理学、化学、计算机等领域有着广泛的应用。设A是向量空间的一个线性变换,如果空间中某一非零向量通过A变换后所得到的向量和X仅差一个常数因子,即AX=kX,则称k为A的特征值,X称为A的属于特征值k的特征向量或特征矢量。 三、数据分析名词解释 A 聚合(Aggregation): 搜索、合并、显示数据的过程。 算法(Algorithms): 可以完成某种数据分析的数学公式。 分析法(Analytics): 用于发现数据的内在涵义。 异常检测(Anomaly detection): 在数据集中搜索与预期模式或行为不匹配的数据项。除了“Anomalies”,用来表示异常的词有以下几种:outliers,exceptions,surprises,contaminants.他们通常可提供关键的可执行信息。 匿名化(Anonymization): 使数据匿名,即移除所有与个人隐私相关的数据。 分析型客户关系管理(Analytical CRM/aCRM): 用于支持决策,改善公司跟顾客的互动或提高互动的价值。针对有关顾客的知识,和如何与顾客有效接触的知识,进行收集、分析、应用。 B 行为分析法(Behavioural Analytics): 这种分析法是根据用户的行为如“怎么做”,“为什么这么做”,以及“做了什么”来得出结论,而不是仅仅针对人物和时间的一门分析学科,它着眼于数据中的人性化模式。 批量处理(Batch processing): 尽管从大型计算机时代开始,批量处理就已经出现了。由于处理大型数据集,批量处理对大数据具有额外的意义。批量数据处理是处理一段时间内收集的大量数据的有效方式。 商业智能(Business Intelligence): 分析数据、展示信息以帮助企业的执行者、管理层、其他人员进行更有根据的商业决策的应用、设施、工具、过程。 C 分类分析(Classification analysis): 从数据中获得重要的相关性信息的系统化过程;这类数据也被称为元数据(meta data),是描述数据的数据。 云计算(Cloud computing): 构建在网络上的分布式计算系统,数据是存储于机房外的(即云端)。 集群计算(Cluster computing): 这是一个使用多个服务器集合资源的“集群”的计算术语。要想更技术性的话,就会涉及到节点,集群管理层,负载平衡和并行处理等概念。 聚类分析(Clustering analysis): 它是将相似的对象聚合在一起,每类相似的对象组合成一个聚类(也叫作簇)的过程。这种分析方法的目的在于分析数据间的差异和相似性。 冷数据存储(Cold data storage): 在低功耗服务器上存储那些几乎不被使用的旧数据。但这些数据检索起来将会很耗时。 对比分析(Comparative analysis): 在非常大的数据集中进行模式匹配时,进行一步步的对比和计算过程得到分析结果。 相关性分析(Correlation analysis): 是一种数据分析方法,用于分析变量之间是否存在正相关,或者负相关。 D 仪表板(Dashboard): 使用算法分析数据,并将结果用图表方式显示于仪表板中。 数据聚合工具(Data aggregation tools): 将分散于众多数据源的数据转化成一个全新数据源的过程。 数据分析师(Data analyst): 从事数据分析、建模、清理、处理的专业人员。 数据库(Database): 一个以某种特定的技术来存储数据集合的仓库。 数据湖(Data lake): 数据湖是原始格式的企业级数据的大型存储库。与此同时我们可以涉及数据仓库,它在概念上是相似的,也是企业级数据的存储库,但在清理、与其他来源集成之后是以结构化格式。数据仓库通常用于常规数据(但不是专有的)。数据湖使得访问企业级数据更加容易,你需要明确你要寻找什么,以及如何处理它并明智地试用它。 暗数据(Dark Data): 基本上指的是,由企业收集和处理的,但并不用于任何意义性目的的数据,因此它是“暗”的,可能永远不会被分析。它可以是社交网络反馈,呼叫中心日志,会议笔记等等。有很多人估计,所有企业数据中的 60-90% 可能是“暗数据”,但谁又真正知道呢? 数据挖掘(Data mining): 数据挖掘是通过使用复杂的模式识别技术,从而找到有意义的模式,并得出大量数据的见解。 数据中心(Data centre): 一 个实体地点,放置了用来存储数据的服务器。 数据清洗(Data cleansing): 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。 数据质量(Data Quality): 有关确保数据可靠性和实用价值的过程和技术。高质量的数据应该忠实体现其背后的事务进程,并能满足在运营、决策、规划中的预期用途。 数据订阅(Data feed): 一种数据流,例如Twitter订阅和RSS。 数据集市(Data Mart): 进行数据集买卖的在线交易场所。 数据建模(Data modelling): 使用数据建模技术来分析数据对象,以此洞悉数据的内在涵义。 数据集(Data set): 大量数据的集合。 数据虚拟化(Data virtualization): 数据整合的过程,以此获得更多的数据信息,这个过程通常会引入其他技术,例如数据库,应用程序,文件系统,网页技术,大数据技术等等。 判别分析(Discriminant analysis): 将数据分类,按不同的分类方式,可将数据分配到不同的群组,类别或者目录。是一种统计分析法,可以对数据中某些群组或集群的已知信息进行分析,并从中获取分类规则。 分布式文件系统(Distributed File System): 提供简化的,高可用的方式来存储、分析、处理数据的系统。 文件存贮数据库(Document Store Databases): 又称为文档数据库,为存储、管理、恢复文档数据而专门设计的数据库,这类文档数据也称为半结构化数据。 E 探索性分析(Exploratory analysis): 在没有标准的流程或方法的情况下从数据中发掘模式。是一种发掘数据和数据集主要特性的一种方法。 提取-转换-加载(ETL:Extract,Transform and Load): 是一种用于数据库或者数据仓库的处理过程,天善学院有国内唯一的最全的ETL学习课程。即从各种不同的数据源提取(E)数据,并转换(T)成能满足业务需要的数据,最后将其加载(L)到数据库。 G 游戏化(Gamification): 在其他非游戏领域中运用游戏的思维和机制,这种方法可以以一种十分友好的方式进行数据的创建和侦测,非常有效。 图形数据库(Graph Databases): 运用图形结构(例如,一组有限的有序对,或者某种实体)来存储数据,这种图形存储结构包括边缘、属性和节点。它提供了相邻节点间的自由索引功能,也就是说,数据库中每个元素间都与其他相邻元素直接关联。 网格计算(Grid computing): 将许多分布在不同地点的计算机连接在一起,用以处理某个特定问题,通常是通过云将计算机相连在一起。 H Hadoop: 一 个 开源的分布式系统基础框架,可用于开发分布式程序,进行大数据的运算与存储。 Hadoop数据库(HBase): 一个开源的、非关系型、分布式数据库,与Hadoop框架共同使用。 HDFS: Hadoop分布式文件系统(Hadoop Distributed File System);是一个被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。 高性能计算(HPC:High-Performance-Computing): 使用超级计算机来解决极其复杂的计算问题。 I 内存数据库(IMDB:In-memory): 一种数据库管理系统,与普通数据库管理系统不同之处在于,它用主存来存储数据,而非硬盘。其特点在于能高速地进行数据的处理和存取。 物联网(IoT): 最新的流行语是物联网(IOT)。IOT通过互联网将嵌入式对象(传感器,可穿戴设备,汽车,冰箱等)中的计算设备进行互连,并且能够发送以及接收数据。IOT生成大量数据,提供了大量大数据分析的机会。 K 键值数据库(Key-Value Databases): 数据的存储方式是使用一个特定的键,指向一个特定的数据记录,这种方式使得数据的查找更加方便快捷。键值数据库中所存的数据通常为编程语言中基本数据类型的数据。 L 负载均衡(Load balancing): 将工作量分配到多台电脑或服务器上,以获得最优结果和最大的系统利用率。 位置信息(Location data): GPS信息,即地理位置信息。 日志文件(Log file): 由计算机系统自动生成的文件,记录系统的运行过程。 M M2M数据(Machine 2 Machine data): 两台或多台机器间交流与传输的内容。 机器数据(Machine data): 由传感器或算法在机器上产生的数据。 机器学习(Machine learning): 人工智能的一部分,指的是机器能够从它们所完成的任务中进行自我学习,通过长期的累积实现自我改进。 Map Reduce: 是处理大规模数据的一种软件框架(Map:映射,Reduce:归纳)。 大规模并行处理(MPP:Massivel yParallel Processing): 同时使用多个处理器(或多台计算机)处理同一个计算任务。 元数据(Meta data): 被称为描述数据的数据,即描述数据数据属性(数据是什么)的信息。 多维数据库(Multi-Dimensional Databases): 用于优化数据联机分析处理(OLAP)程序,优化数据仓库的一种数据库。 多值数据库(MultiValue Databases): 是一种非关系型数据库(NoSQL),一种特殊的多维数据库:能处理3个维度的数据。主要针对非常长的字符串,能够完美地处理HTML和XML中的字串。 N 自然语言处理(Natural Language Processing): 是计算机科学的一个分支领域,它研究如何实现计算机与人类语言之间的交互。 网络分析(Network analysis): 分析网络或图论中节点间的关系,即分析网络中节点间的连接和强度关系。 NewSQL: 一个优雅的、定义良好的数据库系统,比SQL更易学习和使用,比NoSQL更晚提出的新型数据库。 NoSQL: 顾名思义,就是“不使用SQL”的数据库。这类数据库泛指传统关系型数据库以外的其他类型的数据库。这类数据库有更强的一致性,能处理超大规模和高并发的数据。 O 对象数据库(Object Databases): (也称为面象对象数据库)以对象的形式存储数据,用于面向对象编程。它不同于关系型数据库和图形数据库,大部分对象数据库都提供一种查询语言,允许使用声明式编程(declarative programming)访问对象。 基于对象图像分析(Object-based Image Analysis): 数字图像分析方法是对每一个像素的数据进行分析,而基于对象的图像分析方法则只分析相关像素的数据,这些相关像素被称为对象或图像对象。 操作型数据库(Operational Databases): 这类数据库可以完成一个组织机构的常规操作,对商业运营非常重要,一般使用在线事务处理,允许用户访问、收集、检索公司内部的具体信息。 优化分析(Optimization analysis): 在产品设计周期依靠算法来实现的优化过程,在这一过程中,公司可以设计各种各样的产品并测试这些产品是否满足预设值。 本体论(Ontology): 表示知识本体,用于定义一个领域中的概念集及概念之间的关系的一种哲学思想。(译者注:数据被提高到哲学的高度,被赋予了世界本体的意义,成为一个独立的客观数据世界) 异常值检测(Outlier detection): 异常值是指严重偏离一个数据集或一个数据组合总平均值的对象,该对象与数据集中的其他它相去甚远,因此,异常值的出现意味着系统发生问题,需要对此另加分析。 联机分析处理(On-Line Analytical Processing,OLAP): 能让用户轻松制作、浏览报告的工具,这些报告总结相关数据,并从多角度分析。 P 模式识别(Pattern Recognition): 通过算法来识别数据中的模式,并对同一数据源中的新数据作出预测 平台即服务(PaaS:Platform-as-a-Service): 为云计算解决方案提供所有必需的基础平台的一种服务。 预测分析(Predictive analysis): 大数据分析方法中最有价值的一种分析方法,这种方法有助于预测个人未来(近期)的行为,例如某人很可能会买某些商品,可能会访问某些网站,做某些事情或者产生某种行为。通过使用各种不同的数据集,例如历史数据,事务数据,社交数据,或者客户的个人信息数据,来识别风险和机遇。 公共数据(Public data): 由公共基金创建的公共信息或公共数据集。 Q 数字化自我(Quantified Self): 使用应用程序跟踪用户一天的一举一动,从而更好地理解其相关的行为。 R R: 是一种编程语言,在统计计算方面很出色。如果你不知道 R,你就称不上是数据科学家。R 是数据科学中最受欢迎的语言之一。 再识别(Re-identification): 将多个数据集合并在一起,从匿名化的数据中识别出个人信息。 回归分析(Regression analysis): 确定两个变量间的依赖关系。这种方法假设两个变量之间存在单向的因果关系(译者注:自变量,因变量,二者不可互换)。 实时数据(Real-time data): 指在几毫秒内被创建、处理、存储、分析并显示的数据。 推荐引擎(Recommendation engine): 推荐引擎算法根据用户之前的购买行为或其他购买行为向用户推荐某种产品。 路径分析(Routing analysis): –针对某种运输方法通过使用多种不同的变量分析从而找到一条最优路径,以达到降低燃料费用,提高效率的目的。 S 半结构化数据(Semi-structured data): 半结构化数据并不具有结构化数据严格的存储结构,但它可以使用标签或其他形式的标记方式以保证数据的层次结构。 结构化数据(Structured data): 可以组织成行列结构,可识别的数据。这类数据通常是一条记录,或者一个文件,或者是被正确标记过的数据中的某一个字段,并且可以被精确地定位到。 情感分析(Sentiment Analysis): 通过算法分析出人们是如何看待某些话题。 信号分析(Signal analysis): 指通过度量随时间或空间变化的物理量来分析产品的性能。特别是使用传感器数据。 相似性搜索(Similarity searches): 在数据库中查询最相似的对象,这里所说的数据对象可以是任意类型的数据。 仿真分析(Simulation analysis): 仿真是指模拟真实环境中进程或系统的操作。仿真分析可以在仿真时考虑多种不同的变量,确保产品性能达到最优。 软件即服务(SaaS:Software-as-a-Service): 基于Web的通过浏览器使用的一种应用软件。 空间分析(Spatial analysis): 空间分析法分析地理信息或拓扑信息这类空间数据,从中得出分布在地理空间中的数据的模式和规律。 SQL: 在关系型数据库中,用于检索数据的一种编程语言。 流处理(Stream processing): 流处理旨在对有“连续”要求的实时和流数据进行处理。结合流分析,即在流内不间断地计算数学或统计分析的能力。流处理解决方案旨在对高流量进行实时处理。 T 时序分析(Time series analysis): 分析在重复测量时间里获得的定义良好的数据。分析的数据必须是良好定义的,并且要取自相同时间间隔的连续时间点。 拓扑数据分析(Topological Data Analysis): 拓扑数据分析主要关注三点:复合数据模型、集群的识别、以及数据的统计学意义。 交易数据(Transactional data): 随时间变化的动态数据 透明性(Transparency): –消费者想要知道他们的数据有什么作用、被作何处理,而组织机构则把这些信息都透明化了。 文本挖掘(Text Mining): 对包含自然语言的数据的分析。对源数据中词语和短语进行统计计算,以便用数学术语表达文本结构,之后用传统数据挖掘技术分析文本结构。 U 非结构化数据(Un-structured data): 非结构化数据一般被认为是大量纯文本数据,其中还可能包含日期,数字和实例。 V 价值(Value): (译者注:大数据4V特点之一)所有可用的数据,能为组织机构、社会、消费者创造出巨大的价值。这意味着各大企业及整个产业都将从大数据中获益。 可变性(Variability): 也就是说,数据的含义总是在(快速)变化的。例如,一个词在相同的推文中可以有完全不同的意思。 多样(Variety): (译者注:大数据4V特点之一)数据总是以各种不同的形式呈现,如结构化数据,半结构化数据,非结构化数据,甚至还有复杂结构化数据 高速(Velocity): (译者注:大数据4V特点之一)在大数据时代,数据的创建、存储、分析、虚拟化都要求被高速处理。 真实性(Veracity): 组织机构需要确保数据的真实性,才能保证数据分析的正确性。因此,真实性(Veracity)是指数据的正确性。 可视化(Visualization): 只有正确的可视化,原始数据才可被投入使用。这里的“可视化”并非普通的图型或饼图,可视化指是的复杂的图表,图表中包含大量的数据信息,但可以被很容易地理解和阅读。 大量(Volume): (译者注:大数据4V特点之一)指数据量,范围从Megabytes至Brontobytes。 W 天气数据(Weather data): 是一种重要的开放公共数据来源,如果与其他数据来源合成在一起,可以为相关组织机构提供深入分析的依据。 网络挖掘/网络数据挖掘(Web Mining / Web Data Mining): 使用数据挖掘技术从互联网站点、文档或服务中自动发现和提取信息。 X XML数据库(XML Databases): XML数据库是一种以XML格式存储数据的数据库。XML数据库通常与面向文档型数据库相关联,开发人员可以对XML数据库的数据进行查询,导出以及按指定的格式序列化。 以上就是数据分析相关术语的盘点,看完别忘了收藏哟~ 第 181 篇 数据分析展示就用DataHunter -end- 关于 DataHunter DataHunter 是一家 专业的数据分析和商业智能服务提供商 ,注册于2014年。 团队核心成员来自 IBM、Oracle、SAP 等知名公司,深耕大数据分析领域,具有十余年丰富的企业服务经验。 DataHunter 旗下核心产品智能数据分析平台 Data Analytics 、数据大屏设计配置工具 Data MAX 已在业内形成自己的独特优势,并在各行业积累了众多标杆客户和成功案例。 成立以来,DataHunter就致力于 为客户提供实时、高效、智能的数据分析展示解决方案,帮助企业查看分析数据并改进业务,成为最值得信赖的数据业务公司。 来源商业新知网,原文标题:考考你,这些数据分析常用术语你都分清楚了吗?
本文来源商业新知网,原标题:云计算基础知识介绍。 一、什么是云计算?云计算概念已经兴起多年,大家也都谈了很多年,但是到目前为止,从事计算机行业的大部分人,包括系统架构师、数据分析师甚至很多资深的专家对云计算的概念理解的都不一定正确。不同的人站在不同的立场,他们对云计算的概念理解各不相同。 1.对于相关软硬件厂商,他们都声称自己都拥有云计算产品,HP会说我的服务器就是云计算服务器;Vmware会说我的虚拟软件可以来做云计算;英特尔会说我的CPU可以虚拟多个,自己产品也是云计算的产品等,每个厂商都强调自己的产品符合云计算的要求,自己的方案就是云计算的解决方案。 2.对于不相关软硬件厂商:Oracle在没有云计算的产品时称,云计算不就是一根网线加上计算机吗?拥有自己的产品后,Oracle Exadata则改口称Exadata就是云计算。 3.对于政府:云计算就是超级计算机。例如我国的神威太湖一号(SunwayTaihuLight)天河2号等超级计算机(见下图一)。 4.对于广大吃瓜群众:云计算是什么,是集群么?是Hadoop?是Openstack?是Vmware?或者其它?如盲人摸象,每个人都有自己不同的理解。 图一:截止到2016年11月世界超级计算机排名 二、云计算定义1.云计算是服务模式。它不是一种新的硬件或者软件产品,所以各个软硬件厂商都不用争谁是云计算之父;它也不是新技术,更准确来说不应称之为技术,它是在一些关键技术日趋成熟后催生的一种新的服务模式。 2.云计算通过集中拥有,使用户能得到其本身无法得到的服务,或是以更低成本获得相同的服务,降低拥有成本是云计算的核心价值之一。 3.云计算项目,必先考虑服务模式和盈利模式的问题,其次才是投资和技术。 图二:云计算涉及到的具体技术 三、云计算有哪些特征?1.自我服务。用户自己可以搞定所有的事情,用户通过界面可以完成服务的申请,系统的检测等。 2.按使用量计费。理想中的收费,应该是根据CPU、内存、带宽来收费。 3.弹性架构。云计算应该能够实现资源弹性分配,在系统繁忙时多分配的资源(通过增加节点等方式),在系统空闲时,减少分配资源。 4.可定制化。用户可以定制在云计算平台里需要的组件,并且在定制化的前提下做自我开发。 图三:云计算能够提供的应用服务 四、云计算如何降低成本?1.提高软硬件使用率 2.集中管理降低能耗 3.节约维护人员费用 五、云计算模式有风险吗?1.安全风险会增加。提供云计算的公司员工是否可靠,云公司是否盗用客户数据,这些都带来额外的风险,实际上增加了成本。 2.可用性风险。过分的依赖云计算平台的服务,对云计算平台的可靠性提出更高的要求。 3.绑架风险。一旦数据和服务全部放到云计算平台上去,如果云计算平台提高收费标准,用户将处于进退两难的境地。 六、云计算的形态有哪些?1.私有云。企业内部云计算的集群,集中存放企业的数据,提供给各部门去使用。 2.公有云。如搜索引擎,各种网盘,迅雷的离线下载等。 3.混合云。私有云和公有云的结合,既满足企业内部云计算需要,又面对普通大众。 七、云计算的解决方案有哪些?1.Hadoop:分布式文件系统提供了低单位成本的巨大的存储能力,高冗余度的可靠性。Map-Reduce提供了快速并行计算能力,这种能力可以随着节点数的增加线性递增。2.Openstack:提供了一个部署云的工作平台或者工具集,其宗旨在于,帮助组织运行虚拟技术或者存储服务的云,为共有云、私有云提供可扩展的灵活的云计算。 综上所述,云计算就像电力逐渐发展成为一种公共资源一样,云计算的最终形态也会是一种公共资源。
前言作为一个互联网公司或提供互联网服务的公司,其核心的技术资产就是云端平台和云端平台上的服务。 我们通常所说的云服务或云平台广义上是一个概念,但其实内部是两个部分。 1.支撑云服务运行的硬件和软件系统环境(云架构平台,简称云平台); 2.实现业务逻辑,支持客户应用,对外提供服务的应用服务平台(云服务平台,简称云服务)。 本期我们为您解读“云平台”的业界概况和优势。 云平台——选择经过数年的爆发式技术发展和几年的市场沉淀,云平台在2017年终于实现了天下一统,来自Google云平台的开源容器集群管理系Kubernetes(通常称为k8s)成为业界事实标准,世界各大知名云服务商和企业为更好促进云平台云服务的发展,以Kubernetes为核心共同发起了一个组织称之为 云计算基金会 (CNCF,Cloud NativeComputing Foundation)。 该组织的目标有两个: · 与开源社区和合作伙伴一起共同把控Kubernetes未来的发展; · 开发新的软件以让整个容器工具集更加健壮。 加入及通过CNCF兼容性认证的部分厂商可以看到包括: · 国外Google、Amazon、IBM、Microsoft、Oracle等; · 国内阿里、腾讯、华为、中兴等; 全球知名云平台和云服务商悉数在列。 毫无疑问, 我们的选择是Kubernetes(k8s)。 云平台——解读Kubernetes是一个开源的Linux容器自动化运维平台和资源编排工具,它消除了容器化应用程序在部署,伸缩时涉及到的许多手动操作。换句话说,你可以将多台主机组合成集群来运行Linux容器,而Kubernetes可以帮助你简单高效地管理那些集群。 Kubernetes平台有以下优势: • 可移植:支持公有云,私有云,混合云; • 可扩展:模块化,组件化,可挂载,可组合; • 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展; • 快速部署应用,快速扩展应用; • 节省资源,优化硬件资源的使用。 以上虽然列出了很多优势,但想要利用好这些优势也不容易, Kubernetes作为开源项目,真正企业生产部署,还至少需要解决以下问题: • 多租户(用户)认证管理,将权限、资源合理分配,避免资源被滥用; • 应用商店(服务目录),快速部署常用中间件以及通用服务; • 持久化存储,对于有状态的应用来说,存储是绕不过的关键性问题; • 统一的监控告警、日志分析,让Kubernetes运行不再是一个黑盒子; • 集群的快速搭建部署以及多集群环境的管理,部署问题一开始困扰了很大部分想要使用Kubernetes的企业。 企业级云平台——PKS+NebulogyPivotal PKS(PivotalContainer Service)是帮助企业和云服务商运维Kubernetes 的一个产品,可以解决上述在生产系统中运维的痛点,为用户带来真正企业级的 Kubernentes 集群,加速企业的数字化变革。 PKS优势: • Google唯一支持的企业版Kubernetes; • 纯开源K8S,对K8S没有任何定制和分支扩展,随时升级最新K8s; • 自动化运维:按需生成K8s集群,高可用部署,监控自愈,不停机升级; • 高级网络安全功能:NSX-T带来的容器网络隔离以及细化安全策略控制; • 跨云部署:适用于主流公有云和私有云平台,一致的开发运维体验。 Nebulogy 旗下的系列产品遵循云原生十二要素,无缝集成K8s 与 Pivotal PKS,为企业客户提供Kubernetes as a service服务,快速落地容器平台,实现K8S容器集群及应用的生命周期管理,支撑企业业务互联网化、云原生微服务架构落地、开发运维一体化、业务创新及孵化等场景。 构建企业级云原生应用生态,轻松落地你的业务构想。 来源:新知号——K2 BPM原文链接:https://www.shangyexinzhi.com/Article/details/id-84255/
大数据标准化背景 面对目前数量、速度和多样性日益增长的信息资产,大数据技术通过各种解决方案、体系、结构、工具和平台集合,能有效应对大数据场景。 因为数据是大数据的基础,对于大数据标准化,除了继承数据标准化的内容外,有其特别关注的方面。 比如:定义大数据专业词汇,增加不同类型的数据结构如何标准化,解决海量多样化数据集的存储计算架构,定义并标识敏感数据,研究海量数据脱敏及数据隐私等。 在大数据领域,标准研制机构也陆续研制和发布了一系列标准,如何有效将这些标准梳理并串接起来,需要构建一套框架。 2017年11月发布的《金融业标准化体系建设发展规划(2016-2020年)》就明确提出要构建金融大数据标准体系。以下通过大数据技术参考模型角度来梳理大数据系列标准。 大数据技术参考模型 《信息技术大数据技术参考模型》是2018年7月实施的国家标准。此标准规范了大数据的基础通用模型,包括大数据角色、活动和功能组件以及它们之间的关系。 大数据参考模型总体上可以概括为“一个概念体系、二个价值链维度”。 “一个概念体系”是指它为大数据参考模型中使用的概念提供了一个构件层级分类体系,即“角色—活动—功能组件”,用于描述参考架构中的逻辑构件及其关系。“二个价值链维度”分别为“IT价值链”和“信息价值链”。其中“IT价值链”反映的是大数据作为一种新兴数据应用范式对IT技术产生的新需求所带来的价值;“信息价值链”反映的是大数据作为一种数据科学方法论,对数据到知识的处理过程中所实现的信息流价值。 大数据标准梳理 概念体系角度:上述参考模型的角色、活动和组件涉及大数据概念,需要大数据基础标准来定义。 比如最新发布的大数据标准《信息技术大数据术语》《信息技术大数据技术参考模型》等。 信息价值维度:包括数据提供者、大数据应用提供者和数据消费者角色。 其中大数据应用提供者包括收集、预处理、分析、可视化、访问活动。提供信息价值服务需要业务类标准规范数据,也需要针对大数据从产生到其使用终止的数据生命周期制定标准。业务标准比如《征信数据元》《统计数据和元数据交换(SDMX)》《银行间市场基础数据元》等。 IT价值链维度:包括大数据框架提供者、大数据应用提供者、系统协调者角色。 其中大数据框架提供者包括基础设施、平台、处理框架活动。IT基础服务需要制订大数据技术类的标准,包括大数据平台相关工具和产品规范,以及针对不同功能层次系统和技术架构系统之间的互联和互操作机制。比如说工信部正在制订的《信息技术大数据系统通用规范》通过对照大数据技术参考模型来设计规范测试内容。 框架的外围支撑:需要制订相应的大数据管理类标准和安全类标准为上述角色活动提供支撑。 管理模块:数据管理能力标准对于金融机构很有意义。 比如国际管理标准方面,国外有DAMA(数据管理协会)组织致力于研究此领域;GB/T36073-2018《数据管理能力成熟度评估模型》标准已发布,是我国首个数据管理领域的国家标准。 安全和隐私模块:安全类大数据标准需贯穿于整个数据生命周期的各个阶段,指导行业在数据采集、传输、存储、整合、共享、应用、归档与销毁等阶段进行安全技术防护和安全管理。 在大数据安全方面国标《信息安全技术大数据服务安全能力要求》已经发布,规定了大数据服务提供者应具有的相关基础安全能力和数据生命周期相关的数据服务安全能力。 来源商业新知:https://www.shangyexinzhi.com/Article/details/id-63835/