雲計算

雲計算

带你读《金融科技:变迁与演进》之一:传统金融的困与变

点击查看第二章金融科技:变迁与演进 未央网 主编 引 言 金融科技是什么 文/洪偌馨金融科技是Financial Technology的中文翻译,简称Fin-Tech,是指传统金融企业利用科技手段推动创新变革、提高效率以及提升用户体验,或者新型创业利用科技手段推出全新的金融产品或商业模式,尤其多指后者。一家典型的金融科技公司具有较为明显的特点。一是通过互联网或者移动互联网推送金融产品和服务;二是技术驱动,比如利用大数据和机器学习进行风险评估和信用判断、精准营销或者资产配置等,典型例子是利用车载传感器和可穿戴设备来提取数据并分别应用于车险和健康险的定价等。相较于近几年国内兴起的“互联网金融”,“金融科技”是一个相对较新的概念。从商业模式的涵盖范围来看,二者之间并无太大不同,但是,互联网金融所包含的“技术驱动”的含义没有金融科技那么强。英国剑桥大学互联网金融报告团队的观点认为,互联网金融在英国被称为替代金融(Alternative Finance),因其更强调对传统金融的补充和替代,而金融科技则更强调技术对金融创新的推动。美国金融业解除管制的时间比较早:在1975年实现了证券交易佣金的自由化,1986年实现了利率市场化,1999年通过金融现代化法案实现了混业经营。再加上互联网技术的发展和应用也比较早,美国在20世纪80年代开始就相继出现了第一批互联网券商、互联网银行和互联网保险等。因此,在美国,互联网和金融的结合是一个渐进的过程,基于这个原因他们并不觉得“互联网+金融”有什么特别的地方,以至于互联网金融或者“Internet Finance”并没有作为一个词在英文的语境中出现。直到2005年之后,P2P网贷和众筹在美国开始出现,再后来大数据和机器学习渐渐被广泛地应用于个人和小企业网络借贷的信用判断和定价,尤其是近两年智能投顾(Robot Advisor)以及类似Kensho这种利用云计算和人工智能的新一代信息和数据服务公司的崛起,金融科技(FinTech)这个词才开始出现并流传开来。 金融科技的三个阶段 文/周广益金融科技1.0:金融科技1.0时代又可称作Classical Fin-Tech,即传统金融科技。2013年之前可称为金融科技1.0时代,因为在2013年之前金融虽然与科技紧密结合,但远没有达到现在这样的广泛应用程度。在金融领域,2013年以后互联网金融机构开始大量爆发,包括网贷公司、第三方支付公司、众筹、门户理财等,该年也被普遍认为是“互联网金融元年”;在科技领域,移动互联网、大数据、云计算等如今已经深刻影响我们生活的科技变革也是方兴未艾。金融科技1.0的特点表现为传统的金融机构以使用IT技术、自上而下推动、数据封闭为主,科技领先并不能带来大幅的领先优势,并且有很大一部分中小城商行都还处于基础设施建设阶段。金融科技1.0阶段的代表产业包括软件服务商、硬件服务商、短信、外呼、传统数据(工资单、银行流水、征信)等。此处选择软件服务商、硬件服务商进行介绍,传统金融机构在这两块的投入占整个科技投入的60%以上。软件服务商:金融软件服务商是指由专业的软件企业运用成熟的IT技术,依照银行的业务及管理要求,提供应用软件开发及相关技术服务以提升业务处理效率、改进业务流程,实现IT技术对银行决策、管理、业务等方面的支持。传统金融机构的IT部门通常较少完全独立开展软件产品应用开发业务,大多会与专业的银行软件厂商进行合作开发,以提高管理及开发效率。在二者合作过程中,银行IT部门通常负责项目监督、进程跟踪及业务开展情况的检查,软件供应商的业务团队通常按照银行的各项要求或合同约定的开发目标负责实施项目各环节的具体开发工作及技术服务工作。硬件服务商:传统金融机构硬件不仅仅包括服务器,还包括计算机、存储、网络设备、ATM及其他硬件等。很多传统金融机构还处于基础设施建设阶段,硬件采购金额占比能达到整个IT预算的50%以上。金融科技2.0:金融科技2.0时代又可称作Social FinTech,即社会化的金融科技。该阶段由三股力量共同推动,我们通过三个英文单词来解释它。Socialise—以前科技虽然与金融结合较为紧密,但更多是传统金融机构在使用,就算各家银行都推出了网银,但使用频次并不高,随着移动互联的出现,金融科技开始进入千家万户,最简单的一个例子是大家出门都不用再携带钱包。Financial—在2013年前后民间金融同时爆发的代表业态有P2P、网贷、理财、众筹、第三方支付、消费金融等,民间金融的爆发同时也为广大百姓普及了一次金融理念,即除了传统银行储蓄贷款之外,还有多样化的投资及筹资渠道。Technology—此处其实技术发生了一个小的范式创新,三股技术同时推动社会的进步,包括MT(Mobile Technology)、CT(Cloud Technology)和DT(Data Technology)。随着移动互联网金融的爆发,手机成为人体另一个“器官”,并且使得获取大数据中的全量数据成为可能,从而让不用面签放款成为可能。云计算大大降低了企业创立的成本,其运算的弹性也让流量峰值算力与常备算力所需的花费大大降低,有效扩展了互联网金融企业及上下游服务企业的服务能力,让业务呈指数级增长成为可能。金融科技2.0的特点表现为互联网金融机构引领科技潮流,传统金融机构选择性跟进,自下而上推动(许多互联网金融机构管理十分扁平)。由于为多家企业服务,出现了一批打通数据的优秀第三方服务公司,当然业务井喷之后也出现了一定的乱象,该阶段整体监管环境较为宽松。金融科技2.0阶段的代表产业包括风控建模、第三方支付、大数据风控(黑名单、设备反欺诈、活体识别、位置信息)、在线仲裁、电子签章、聚合客服系统、云计算、网络安全等。在金融科技2.0阶段,金融科技被普遍使用,此处简述两个金融科技企业使用超前于传统金融的产业—大数据风控与云计算。大数据风控:数据类服务商通过各种手段如爬虫、cookie、设备指纹等,集合海量非结构化数据,通过对其进行分析,为金融机构提供客户全方位信息,通过分析和挖掘客户的社交、交易和消费信息来掌握客户的习惯,并准确预测客户行为,使金融机构和金融服务平台在风控方面有的放矢。金融科技企业对数据的使用更开放、大胆,大数据被广泛应用于贷前/贷中/贷后,并且成为风控中不可或缺的一环。而银行限于风控要求、监管要求和可解释性要求等对许多非结构化数据使用相对谨慎。云计算:一种按使用量付费的模式,这种模式提供可用、便捷、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务),这些资源能够被快速提供,且只需投入很少的管理工作,或与服务供应商进行很少的交互。传统金融机构对于云计算的使用相对保守,而很多互联网金融企业由于都是在互联网上开展业务,不仅经常遇到流量峰值与常规硬件运算能力不匹配的情况,而且也会出现自身的IT管理、安全水平参差不齐等问题,所以它们更多地使用云计算服务。金融科技3.0:金融科技3.0时代又可称作Intelligent FinTech,即智能金融科技。具体来看,在金融方面,随着国家金融体制改革和对金融监管的日益完善,金融行业的经营将以持牌为主。在科技方面,5G、物联网、AI、区块链等也将在基础设施完善之后井喷而至。5G是物联网也是区块链的基础,5G成熟后许多现在需要大量实时同步数据传输来远程完成的事情都可以快速实现了,物联网的完善将极大推动整个供应链的效率,供应链金融中商流、物流、信息流、资金流可以做到四流合一。而作为一种去中介的新型社会组织方式,区块链被称为“信任机器”,它将极大地改变现在金融机构作为中介的运作方式。AI技术现阶段的两大瓶颈在于数据不足和算力不足,但随着基础设施的健全,AI技术应用将会迎来爆发期,从而极大地推动金融行业变革。金融科技3.0的特点表现为:经营智能化(金融作为一个完全数字化的产业,有许多环节都可以使用科技手段替代)、监管智能化(中国的监管现状为混业经营和分业监管,分业监管既有历史原因也有IT手段不足、混业监管成本高的原因,随着万物互联人工智能的介入,监管也会迎来一个新的阶段)、大量无法使用新技术的传统金融企业生存艰难。智能是金融科技3.0阶段的主题,该阶段的代表产业包括5G、人工智能、区块链、物联网、雾计算、VR/AR等。在此先简述两个产业,一个是人工智能,另一个是被预言可以颠覆金融底层的区块链技术。人工智能:是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能够以与人类智能相似的方式做出反应的智能机器。云计算、大数据等技术的成熟催化了人工智能技术的进步和发展。深度学习在算法上的突破则掀起了人工智能浪潮,使得复杂任务的分类准确率大幅度提升,从而推动了计算机视觉、机器学习、自然语言处理、语音识别、专家系统等的快速发展。人工智能在某些领域将彻底改变人类目前的生产模式,取代更多人、更多重复性工作,劳动密集型工作将完全由机器人来完成,人力将投向更具价值的事情。对于金融领域,人工智能主要有以下两方面的影响。1)金融行业服务模式更加个性化、智能化。人工智能技术将大幅改变金融现有格局,使金融服务(银行、保险、理财、借贷、投资等方面)更加个性化和智能化。2)金融大数据处理能力大幅提升。长期以来,金融行业沉淀了大量数据,通过运用人工智能的深度学习系统,金融行业有足够多的数据供机器进行学习,并不断完善甚至能够超过人类的知识回答能力,尤其在风险管理与交易这种对复杂数据的处理方面,人工智能的深度神经网络技术的应用将大幅降低人力成本并提升金融风控及业务处理能力,这在实践应用中已经得到了检验。区块链:学术一点的解释即分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。简单点说,区块链是一种分布式存储过程。对区块链的赞誉很多,比如“与互联网同等级的创新”“将重新定义世界”“将带领人类进入价值互联网”等。而在现时,区块链技术还处于早期阶段,能解决的问题确实不多,但已经有一些有意思的案例落地,类似区块链保险、区块链供应链金融、区块链产品溯源等。虽然区块链技术还没有被广为认可,许多企业还对其持观望态度,但是那些敢于率先运用区块链技术的企业已经从中看到了区块链的巨大发展潜力,相信假以时日区块链技术会为更多行业所接受,其改变人类生存方式的一面也会日益展露出来。对金融科技2.0及3.0阶段各细分领域的介绍将在后续章节详细展开。 第一章 传统金融的困与变近些年,随着区块链、大数据、人工智能、物联网等技术的发展,金融与新科技的融合日益趋深。在这个过程中,一大批金融科技初创公司应运而生。这些掌握先进技术的金融科技公司对传统金融机构的龙头地位发起了强烈的冲击,使金融市场的竞争变得愈加激烈。悄然间,转型已成为趋势。传统金融机构和新兴金融业态之间的鸿沟正在收窄,二者之间的合作“共生”将使其各自发挥自身优势。西方金融业频频出现的对开放银行(Open Banking)、金融数据共享的讨论也表明:那些故步自封的传统金融机构正面临着危机。 […]

雲計算

5G来了,真的来了!你准备好了么?

这个镜头来自2012年9月国内上映的一部好莱坞大片《敢死队2》,饰演恐怖分子头目的尚格·云顿掏出手机,遥控将埋设在坑道内的炸弹引爆。仔细看就会发现恐怖分子遥控引爆炸弹用的还是功能机和3G网络。一年以后,到2013年12月4日,国家工信部正式向三大运营商发布4G牌照。又过去一年多,笔者在2015年初去北京参加一个培训,期间去东四胡同吃卤煮火烧,看到有个白发苍苍的老奶奶带着自家的盆去打卤煮,居然用的是智能手机移动支付结的帐。这一年,火起来的除了移动支付还有O2O、百团大战、滴滴、今日头条。今天,2019年11月1日,国内三大运营商正式上线5G商用套餐。假如再过一年,又能看到哪些有意思的事情?但问题是你做好应对5G的冲击了么? 5G的第一波冲击将来自网络带宽 5G的理论速度是4G的10到100倍,即便是当前的非独立组网模式下5G的下载速度也能达到1000M。那么问题来了,你的网站服务器又有多少M的带宽? 阿里云动静分离解决方案 通过将网站的静态内容转移到OSS对象存储并与CDN内容分发网络直接绑定,即可轻松化解。阿里云OSS对象存储单用户单地域默认最大支持10G带宽,并可通过工单升级。阿里云CDN节点阿里云在全球拥有2800+节点。中国大陆拥有2300+节点,覆盖34个省级区域,大量节点位于省会等一线城市。海外、中国香港、中国澳门和中国台湾拥有500+节点,覆盖70多个国家和地区。阿里云所有节点均接入万兆网卡,单节点存储容量达40TB 到 1.5PB,带宽负载达到40Gbps到200Gbps,具备130Tbps带宽储备能力。 阿里云共享带宽包 多台服务器可共享同一份带宽,通过削峰填谷帮您省钱。为应对流量峰值,单用户最大可开通100G以上的共享带宽实例。 5G的第二波冲击将来自海量设备接入 5G对比4G最主要的改进除了大带宽外还有高可靠低时延通信和 海量物联,5G将让万物互联成为现实,面对如此多的大带宽、低时延设备的集中轰炸,您的云端服务能坚持多久? 阿里云物联网平台 IOT接入服务可以让您也能过实现亿级设备的长连接能力、百万级并发处理能力。边缘计算服务可以让您在离客户最近的地方处理数据,实现数据在哪里,计算就在哪里。规则引擎可以让您灵活的指定后端数据流向,实现一份数据N种应用。物模型可以让让您直接使用在阿里云平台上积累的海量设备模型,将物理世界的设备行为投影到虚拟世界,快速实现数字孪生。 5G的第三波冲击将来自海量数据 更高的带宽、更多的设备必然导致更多的数据,您的数据库能挺的住么? 阿里云POLARDB数据库 阿里云POLARDB数据库支持最大容量100T,最多可横向扩展16个节点,每个节点最高88 vCPU。POLARDB提供三种数据库引擎,支持MySQL/PostgreSQL不修改代码直接迁移,可高度兼容Oracle 数据库代码。

雲計算

阿里云服务器双11冰点底价:86元/年起,现在可以申请啦!

一年一度的双11大促就要开始了,双11并不局限11月11日,从现在就可以先参与了。 详见:阿里云双11活动跟你拼了 只要是新用户,就可以直接购买,无需拼团,没有任何门槛。 阿里云ECS突发性能型t5:1核2G内存1M带宽,86元/1年 229元/3年 阿里云ECS共享型n4:2核4G内存3M带宽,799元/3年 阿里云ECS共享通用型mn4:2核8G内存5M带宽,1399元/3年 阿里云ECS突发性能t5(香港机房):1核1G内存1M带宽,119元/1年 阿里云MySQL 8.0 基础版:1核2G内存,388元/1年 阿里云MySQL 8.0 高可用版:1核2G内存,988元/1年 小技巧: 1、由于本活动仅限新用户参与,老用户可以新注册一个账号,注册新账号不能用以前用过的手机号、邮箱、身份信息等,否则还会被当做老用户。2、新账号申请的服务器,仍然可以用你的老账号备案网站,没有问题。

雲計算

机器学习算法—SVM支持向量机算法原理及阿里云PAI平台算法模块参数说明

概述: SVM支持向量机是最常用的机器学习分类算法之一,属于有监督学习。这种算法的本质是对数据进行二元线性分类,这种特点和其算法原理有直接关系,通俗来说SVM支持向量机在单一计算周期中只能将数据分成两类并且分隔的手段都表现为线性特征,如对于二维空间内的分隔为线,三维空间内为平面,更高维度的称为超平面。 算法原理: 1、通过散点图观察数据的分布情况,因为是一个二分类问题所以例子中的数据只有蓝色和红色两个类别2、对数据进行二分类的话可以发现能够找到无数种分隔方式3、既然分隔方式有无数种,SVM支持向量机算法的意义就在于通过计算来确定一个最优化的分隔方式,根据SVM算法原理中分隔的手段都表现为线性的特点,二维空间的分隔为线、三维空间的分隔为平面、更高维度的为超平面(不可见),因此算法在计算分隔方式的时候本质就是计算最优的分隔线、分隔平面和分隔超平面,以二维空间为例,计算出的分割线需要处于以下位置4、以二维空间为例,如果分隔线处在最合适的位置,表现出的特征应该是其距离两个类别中最近的点的距离相等,即L1=L25、距离分隔线最近的两类中的点,即称为支持向量,如图中绿色标记的两个点即为本例子中的支持向量,可以得出结论:分隔线的确定只与支持向量有关,同其余样本无关6、图中两条虚线间的距离为L1+L2,由于分隔线的分隔结果需要与两个支持向量的距离相等即做到L1=L2,因此计算的目的就是求出(L1+L2)/2最大值的过程7、将分隔线以及更高维度的分隔平面和分隔超平面函数化,即分隔线的方程为Y=aX+b,需要根据第6步的原理计算出a和b以确定分隔线的方程8、升维到平面和超平面的函数即为Y=WT*X+b,其中T是指W矩阵的转置,同理需要根据第6步的原理计算出WT和b来确定分隔平面和分隔超平面的方程9、为了方便计算,二分类中将两个类别分别称为正例和负例,假设正例的输出值为1,负例的输出值为-1,则最佳的分隔线、分隔平面和分隔超平面的输出值为0如图所示10、实际的数据分布不会像例子中那样能够方便的进行分类,如下图的数据无法在二维平面内进行线性分隔11、SVM算法在这种情况下采用核函数的方法进行分类,核函数的选择有很多种,本质思维是一样的,就是将空间进行升维,原空间即本例子中的二维空间称为输入空间,升维后的空间称为特征空间,将输入空间内的数据映射到特征空间,使数据在高维度的空间内有分类的可能,在本例子中因为数据已经无法在二维空间内进行线性分隔,因此通过核函数将数据样本映射到三维空间内进行分类,如图所示 阿里云PAI平台SVM模块参数选择重点: 1、PAI平台中的SVM模块只支持二分类2、PAI平台中的SVM模块无法使用核函数,即无法将数据映射到高维度空间进行分类3、最重要的参数有以下几个:positiveLabel:正例的值,是一个可选的值,如果不选择则在label的取值中随机选择一个,因为SVM只进行二分类,当两类样本的差异较大时,选择其中一个值作为正例的值,或者称为基准值能够提高分类的准确性。positiveCost:正例权重值,即正例惩罚因子。惩罚因子可以根据需要选择所有大于0的数,越大表示整个过程中对于总误差的重视程度越高,对于减小误差的要求越高,甚至不惜使间隔减小。通俗的说法就是惩罚因子越大则对误差的容忍度越小,追求的是分类的准确性,当惩罚因子趋向于无穷时代表对误差没有任何容忍。当惩罚因子趋于0时,则不再关注分类是否正确,只要求间隔越大越好,那么算法将无法得到有意义的解且算法不会收敛,因为分类如果不需要任何准确性的话就根本无法确定间隔。negativeCost:负例权重值,即负例惩罚因子,其意义与正例权重值一样。epsilon:收敛系数,同样表示的是对分类误差的容忍程度,阿里云PAI平台SVM模块的默认收敛系数是0.001,代表1000个数据样本中最多只能容许有1个数据样本分类错误。

雲計算

带你读《JVM G1源码分析和调优》之一:垃圾回收概述

Java核心技术系列点击查看第二章点击查看第三章JVM G1源码分析和调优 彭成寒 编著 第1章 垃圾回收概述Java的发展已经超过了20年,已是最流行的编程语言。为了更好地了解和使用Java,越来越多的开发人员开始关注Java虚拟机(JVM)的实现技术,其中垃圾回收(也称垃圾收集)是最热门的技术点之一。目前G1作为JVM中最新、最成熟的垃圾回收器受到很多的人关注,本书从G1的原理出发,介绍新生代收集、混合收集、Full GC、并发标记、Ref?ine、Evacuation等内容。本章先回顾Java语言的发展历程,然后介绍JVM中一些常用的概念以便与读者统一术语,随后介绍垃圾回收的主要算法以及JVM中实现了哪些垃圾回收的算法。 1.1 Java发展概述 Java平台和语言最开始是SUN公司在1990年12月进行的一个内部研究项目,我们通常所说的Java一般泛指JDK(Java Developer Kit),它既包含了Java语言和开发工具,也包含了执行Java的虚拟机(Java Virtual Machine,JVM)。从1996年1月23日开始,JDK 1.0版本正式发布,到如今Java已经经历了23个春秋。以下是Java发展历程中值得纪念的几个时间点:□1998年12月4日JDK迎来了一个里程碑版本1.2。其技术体系被分为三个方向,J2SE、J2EE、J2ME。代表技术包括EJB、Java Plug-in、Swing;虚拟机第一次内置了JIT编译器;语言上引入了Collections集合类等。□2000年5月8日,JDK1.3发布。在该版本中Hotspot正式成为默认的虚拟机,Hotspot是1997年SUN公司收购LongView Technologies公司而获得的。□2002年2月13日,JDK1.4发布。该版本是Java走向成熟的一个版本。从此之后,每一个新的版本都会增加新的特性,比如JDK5改进了内存模型、支持泛型等;JDK6增强了锁同步等;JDK7正式支持G1垃圾回收、升级类加载的架构等;JDK8支持函数式编程等。□2006年11月13日的JavaOne大会上,SUN公司宣布最终会把Java开源,由OpenJDK组织对这些源码独立管理,从此之后Java程序员多了一个研究JVM的官方渠道。□2009年4月20日,Oracle公司宣布正式以74亿美元的价格收购SUN公司,Java商标从此正式归Oracle所有,自此Oracle对Java的管理和发布进入了一个新的时期。随着时间的推移,JDK 9和JDK 10也已经正式发布,但是JDK 9和JDK 10并不是Oracle长期支持的版本(Long Term

雲計算

蚂蚁金服有哪些金融特色的机器学习技术?

在9月27日于杭州云栖小镇召开的云栖大会“金融智能”专场上,人工智能大咖宋乐教授分享了金融特色机器学习在蚂蚁金服的发展与应用。宋乐教授是蚂蚁金服人工智能部研究员,同时也是美国乔治亚理工大学终身副教授和机器学习中心副主任。他还是国际机器学习协会董事以及多个国际顶级会议的领域主席。 机器学习在蚂蚁金服各个场景,已经像水和油一样渗透,驱动着各种各样业务的发展。会议现场,宋乐教授详细介绍了金融特色的机器学习,重点阐述了三方面的技术:面向海量图数据的深度学习系统、自动机器学习系统、多智体对抗强化学习系统。 以下为演讲的文字实录: 面向海量图数据的深度学习系统 金融场景和互联网其它场景不一样的地方是,其数据是一个巨大的金融网络。在这个网络中资金在不同的个体之间流动。资金流动过程中涉及到各种各样类型的节点,有用户、商家、公司等角色节点,也有账号等虚拟节点,还有WIFI设施、终端等设备节点,以及地点等物理节点。同时,这些节点之间的关系和信息交互的类型也可以不同,从而形成巨大的图。如何对这个图进行机器学习建模,发现其中的有效信息,是非常复杂的过程。 懂机器学习的同学知道,机器学习要对图数据建模,首先需要把数据进行向量表征,例如类似逻辑回归、决策树等模型都需要先对数据进行向量表征。但图数据的输入并不是向量表征,它是异构且不规则的,每个节点的邻居个数不一样,连接的关系也不一样,这需要一个平台实现图数据到向量表征的转换过程,然后再基于向量表征实现各种各样的机器学习模型。下图展示了一种通用的图向量表征框架。 图数据进行表征学习之后,就可以做各种各样的应用,例如推荐和决策应用,也可以做一些生成模型。现在有一个在学界比较火的深度学习模型叫做卷积神经网络,其学习过程就是对每个节点和边用神经网络参数化传播的方式来实现深度神经网络的建模。 蚂蚁金服的图数据非常复杂庞大,可以涉及到上百亿的节点,上千亿的边。怎样把大体量的数据用起来,进行机器学习建模,需要很好的系统架构和平台建设支撑。其中包括,怎样存储这些图数据,从而能够支持快速查询,快速推理;以及在逻辑层怎样组织这些数据,是社交关系网络、资金转移网络还是媒介网络。有了这些数据的逻辑组织和图数据的存储以后,还要做通用的算子,包括对图进行采样、随机游走和消息传播。然后,基于这些算子的构件,我们就可以实现各种各样的图深度学习模型,其中既包括基于非监督学习的表征学习模型,也有基于监督学习的表征学习模型。进行表征学习以后,就可以通过机器学习对各种节点、边的类型进行预测,或者时序行为的预测,以及多重目标的预测。基于这些预测模型,我们可以通过离线学习打分或在线学习打分的方式来支持各种上层金融业务。 针对蚂蚁业务海量的数据,除了前面讲的平台的架构设计的思考,还有一些技术上的难点需要解决。我们可能面临百亿级节点、千亿级边,需要考虑怎么样在图上快速的查询节点,并把节点周围的子图抽取出来,这里会用到我们的图存储系统GraphFlat和PHStore。有了这个以后,需要设计机器学习的算法,譬如随机采样的算法,然后把图数据变成一个稀疏的或者是稠密的矩阵运算,在GPU和CPU上进行分布式计算。 除此之外,为了支持各种各样的金融场景应用,还需要支持对不同结构的网络建模。通常金融场景涉及到的网络可能是没有属性的同构网络;也可能是在风控场景经常涉及的异构网络,例如用户和商家之间的资金转移关系;也有可能是带有属性的网络。我们需要用不同的算法模型来处理不同结构类型的网络关系,同时无论哪种类型网络,都可以用一套平台进行建模。目前,我们已经建设了面向多类型图数据的算法库。包括: 面向无属性网络的xGrep,可以针对十亿级节点,千亿级边,数千亿样本进行训练,并研发了分布式随机游走框架和分布式word2vec训练框架; 面向属性网络的GeniePath,这是自适应深度/广度的图神经网络,性能业内领先; 面向异质网络的HeGNN& IGNN,其层次注意力机制提供金融级可解释性,可以自动学习异质信息丰富的语义; 面向知识图谱的KGNN,可对知识图谱进行表达学习,包括图神经网络+图谱模型。 在金融场景很多时候需要具备可解释性,因而需要我们对训练出来的深度模型进行解释,找出具体是网络上的哪一条边或者哪一个节点影响了整个风控系统的决策。为此,我们定义了各种各样的模型,包括GeniePath可以在深度学习网络中自动搜寻节点的邻居,看哪个邻居对当前的信息节点的风控有影响;或者是基于HeGNN、IGNN考虑不同网络层次的影响,甚至是比较粗糙的高层次的网络影响,以及网络的不同维度的影响。 综上所述,一个可用性高的深度图学习平台需要对架构做逻辑的划分,同时中间的每个划分模块都会有很多技术点,包括系统工程的技术、高性能计算的技术,以及模型算法方面的技术。 上图是两个具体的落地实例。首先,我们把图深度学习应用到营销场景,通过用户和商家的历史购买行为来预测用户对红包金额的敏感程度,从而对商家红包实现个性化定价,帮助商家更好地分配红包金额,提升营销资金利用效率,这个方法把营销的成本降低了8%。我们还把深度图学习和知识图谱结合起来应用在企业信贷,提高了授信额度,新增授信额度数百亿。此外,深度图学习平台还在支付、贷款、保险,财富管理等其他场景中均有各种各样的应用。 在互联网金融中,图神经网络是非常有用的新技术,也是蚂蚁金服大力发展的技术方向之一。 自动机器学习系统

雲計算

带你读《JVM G1源码分析和调优》之二:G1的基本概念

点击查看第一章点击查看第三章 第2章 G1的基本概念通常我们所说的GC是指垃圾回收,但是在JVM的实现中GC更为准确的意思是指内存管理器,它有两个职能,第一是内存的分配管理,第二是垃圾回收。这两者是一个事物的两个方面,每一种垃圾回收策略都和内存的分配策略息息相关,脱离内存的分配去谈垃圾回收是没有任何意义的。本书第3章会介绍G1如何分配对象,第4章到第10章都是介绍G1是如何进行垃圾回收的。为了更好地理解后续章节,本章主要介绍G1的一些基本概念,主要有:G1实现中所用的一些基础数据堆分区、G1的停顿预测模型、垃圾回收中使用到的对象头、并发标记中涉及的卡表和位图,以及垃圾回收过程中涉及的线程、栈帧和句柄等。 2.1 分区 分区(Heap Region,HR)或称堆分区,是G1堆和操作系统交互的最小管理单位。G1的分区类型(HeapRegionType)大致可以分为四类:□自由分区(Free Heap Region,FHR)□新生代分区(Young Heap Region,YHR)□大对象分区(Humongous Heap Region,HHR)□老生代分区(Old Heap Region,OHR)其中新生代分区又可以分为Eden和Survivor;大对象分区又可以分为:大对象头分区和大对象连续分区。每一个分区都对应一个分区类型,在代码中常见的is_young、is_old、is_houmongous等判断分区类型的函数都是基于上述的分区类型实现,关于分区类型代码如下所示: 在G1中每个分区的大小都是相同的。该如何设置HR的大小?设置HR的大小有哪些考虑?HR的大小直接影响分配和垃圾回收效率。如果过大,一个HR可以存放多个对象,分配效率高,但是回收的时候花费时间过长;如果太小则导致分配效率低下。为了达到分配效率和清理效率的平衡,HR有一个上限值和下限值,目前上限是32MB,下限是1MB(为了适应更小的内存分配,下限可能会被修改,在目前的版本中HR的大小只能为1MB、2MB、4MB、8MB、16MB和32MB),默认情况下,整个堆空间分为2048个HR(该值可以自动根据最小的堆分区大小计算得出)。HR大小可由以下方式确定:□可以通过参数G1HeapRegionSize来指定大小,这个参数的默认值为0。□启发式推断,即在不指定HR大小的时候,由G1启发式地推断HR大小。HR启发式推断根据堆空间的最大值和最小值以及HR个数进行推断,设置InitialHeapSize(默认为0)等价于设置Xms,设置MaxHeapSize(默认为96MB)等价于设置Xmx。堆分区默认大小的计算方式在HeapRegion.cpp中的setup_heap_region_size(),代码如下所示: 按照默认值计算,G1可以管理的最大内存为2048×32MB = 64GB。假设设置xms = 32G,xmx

雲計算

带你读《JVM G1源码分析和调优》之三:G1的对象分配

点击查看第一章点击查看第二章 第3章 G1的对象分配对象分配直接关系到内存的使用效率、垃圾回收的效率,不同的分配策略也会影响对象的分配速度,从而影响Mutator的运行。本章主要介绍G1的对象分配是怎样的。大体来说G1提供了两种对象分配策略:基于线程本地分配缓冲区(Thread Local Allocation Buffer,TLAB)的快速分配和慢速分配;当不能成功分配对象时就会触发垃圾回收,所以本章还总结了垃圾回收触发的时机;最后介绍了对象分配过程中涉及的参数调优。值得注意的是本章介绍的内容不仅适用于G1的对象分配,大多数调优参数也适用于其他的垃圾回收器。 3.1 对象分配概述 为了提高效率,无论快速分配还是慢速分配,都应该在STW之外调用,即都应该尽量避免使用全局锁,最好满足不同Mutator之间能并行分配且无干扰。但实际上堆空间只有一个,所以JVM的设计者致力于优秀的内存分配算法,把内存分配算法设计成几个层次,首先进行无锁分配,再进行加锁,从而尽可能地满足并行化分配。我们以一个普通的Java对象分配为例,来梳理一下对象分配的过程。根据Java对象在JVM中的实现,JVM会先创建instanceklass,然后通过allocate_instance分配一个instanceOop。入口在InstanceKlass::allocate_instance,代码如下: 在CollectedHeap::obj_allocate中完成内存分配,如果成功则初始化对象;如果不成功则抛出异常。主要工作在CollectedHeap::common_mem_allocate_noinit()中,我们直接来看这个函数。该函数包含了我们上面提到的两种分配方法:TLAB快速分配allocate_from_tlab和慢速分配Universe::heap()->mem_allocate。代码如下: 对象分配相对来说逻辑清晰,图3-1为对象分配的全景流程图。 3.2 快速分配 TLAB产生的目的就是为了进行内存快速分配。通常来说,JVM堆是所有线程的共享区域。因此,从JVM堆空间分配对象时,必须锁定整个堆,以便不会被其他线程中断和影响。为了解决这个问题,TLAB试图通过为每个线程分配一个缓冲区来避免和减少使用锁。在分配线程对象时,从JVM堆中分配一个固定大小的内存区域并将其作为线程的私有缓冲区,这个缓冲区称为TLAB。只有在为每个线程分配TLAB缓冲区时才需要锁定整个JVM堆。由于TLAB是属于线程的,不同的线程不共享TLAB,当我们尝试分配一个对象时,优先从当前线程的TLAB中分配对象,不需要锁,因此达到了快速分配的目的。更进一步地讲,实际上TLAB是Eden区域中的一块内存,不同线程的TLAB都位于Eden区,所有的TLAB内存对所有的线程都是可见的,只不过每个线程有一个TLAB的数据结构,用于保存待分配内存区间的起始地址(start)和结束地址(end),在分配的时候只在这个区间做分配,从而达到无锁分配,快速分配。另外值得说明的是,虽然TLAB在分配对象空间的时候是无锁分配,但是TLAB空间本身在分配的时候还是需要锁的,G1中使用了CAS来并行分配。 在图3-2中,Tn表示第n个线程,深灰色表示该TLAB块已经分配完毕,浅灰色表示该TLAB块还可以分配更多的对象。从图中我们可以看出,线程T1已经使用了两个TLAB块,T1、T2和T4的TLAB块都有待分配的空间。这里并没有提及Eden和多个分区的概念,实际上一个分区可能有多个TLAB块,但是一个TLAB是不可能跨分区的。从图中我们也可以看出,每个线程的TLAB块并不重叠,所以线程之间对象的分配是可以并行的,且无影响。另外图中还隐藏了一些细节:□T1已经使用完两个TLAB块,这两个块在回收的时候如何处理?□我们可以想象TLAB的大小是固定的,但是对象的大小并不固定,因此TLAB中可能存在内存碎片的问题,这个该如何解决?请继续往下阅读。快速TLAB对象分配也有两步:□从线程的TLAB分配空间,如果成功则返回。□不能分配,先尝试分配一个新的TLAB,再分配对象。代码如下所示: 从TLAB已分配的缓冲区空间直接分配对象,也称为指针碰撞法分配,其方法非常简单,在TLAB中保存一个top指针用于标记当前对象分配的位置,如果剩余空间(end-top)大于待分配对象的空间(objSize),则直接修改top = top + ObjSize,相关代码位于thread->tlab().allocate(size)中。对于分配失败,处理稍微麻烦一些,相关代码位于allocate_from_tlab_slow()中,在学习这部分代码之前,先思考一下这样的内存分配管理该如何设计。如果TLAB过小,那么TLAB则不能存储更多的对象,所以可能需要不断地重新分配新的TLAB。但是如果TLAB过大,则可能导致内存碎片问题。假设TLAB大小为1M,Eden为200M。如果有40个线程,每个线程分配1个TLAB,TLAB被填满之后,发生GC。假设TLAB中对象分配符合均匀分布,那么发生GC时,TLAB总的大小为:40×1×0.5 = 20M(Eden的10%左右),这意味着Eden还有很多空间时就发生了GC,这并不是我们想要的。最直观的想法是增加TLAB的大小或者增加线程的个数,这样TLAB在分配的时候效率会更高,但是在GC回收的时候则可能花费更长的时间。因此JVM提供了参数TLABSize用于控制TLAB的大小,如果我们设置了这个值,那么JVM就会使用这个值来初始化TLAB的大小。但是这样设置不够优雅,其实TLABSize默认值是0,也就是说JVM会推断这个值多大更合适。采用的参数为TLABWasteTargetPercent,用于设置TLAB可占用的Eden空间的百分比,默认值1%,推断方式为TLABSize

雲計算

带你读《HBase原理与实践》之二:基础数据结构与算法

点击查看第一章点击查看第三章第2章 基础数据结构与算法 著名的计算机科学家N.Wirth说过:程序=算法+数据结构。对于HBase这样的一个分布式数据库来说,它的代码规模已经非常庞大,如果加上测试代码以及序列化工具(Protobuf/Thrift)生成的代码,HBase项目(2.0分支)代码行数已经突破150万。但是,即使这样庞大的项目也是由一个个算法和数据结构组成。本章将会介绍HBase用到的一些核心算法和数据结构。这里,我们假设读者已经具备了“数据结构”课程相关的基础知识,例如链表、栈、队列、平衡二叉树、堆等。HBase的一个列簇(Column Family)本质上就是一棵LSM树(Log-Structured Merge-Tree)。LSM树分为内存部分和磁盘部分。内存部分是一个维护有序数据集合的数据结构。一般来讲,内存数据结构可以选择平衡二叉树、红黑树、跳跃表(SkipList)等维护有序集的数据结构,这里由于考虑并发性能,HBase选择了表现更优秀的跳跃表。磁盘部分是由一个个独立的文件组成,每一个文件又是由一个个数据块组成。对于数据存储在磁盘上的数据库系统来说,磁盘寻道以及数据读取都是非常耗时的操作(简称IO耗时)。因此,为了避免不必要的IO耗时,可以在磁盘中存储一些额外的二进制数据,这些数据用来判断对于给定的key是否有可能存储在这个数据块中,这个数据结构称为布隆过滤器(Bloom Filter)。本章将介绍HBase的核心数据结构,主要包括跳跃表、LSM树和布隆过滤器。同时,为了使读者加深印象,我们设计了一个轻量级KV存储引擎MiniBase,并提供了一些相关的编程练习。 2.1 跳跃表 跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,从而可以实现更高的并发性。正因为这些优点,跳跃表广泛使用于KV数据库中,诸如Redis、LevelDB、HBase都把跳跃表作为一种维护有序数据集合的基础数据结构。众所周知,链表这种数据结构的查询复杂度为O(N),这里N是链表中元素的个数。在已经找到要删除元素的情况下,再执行链表的删除操作其实非常高效,只需把待删除元素前一个元素的next指针指向待删除元素的后一个元素即可,复杂度为O(1),如图2-1所示。 图2-1 链表删除元素操作 但问题是,链表的查询复杂度太高,因为链表在查询的时候,需要逐个元素地查找。如果链表在查找的时候,能够避免依次查找元素,那么查找复杂度将降低。而跳跃表就是利用这一思想,在链表之上额外存储了一些节点的索引信息,达到避免依次查找元素的目的,从而将查询复杂度优化为O(logN)。将查询复杂度优化之后,自然也优化了插入和删除的复杂度。1.定义如图2-2所示,跳跃表的定义如下: 跳跃表由多条分层的链表组成(设为S0, S1, S2, … , Sn),例如图中有6条链表。 每条链表中的元素都是有序的。 每条链表都有两个元素:+ ∞(正无穷大)和- ∞(负无穷大),分别表示链表的头部和尾部。

雲計算

带你读《KVM实战:原理、进阶与性能调优》之一:虚拟化简介

云计算与虚拟化技术丛书点击查看第二章点击查看第三章KVM实战:原理、进阶与性能调优 任永杰 程舟 著 第1章 虚拟化简介在写作上一本书的时候(2013年),云计算虽然已经在国际上提出多年,但在国内还是刚刚兴起。到写作本书时这短短4年内,国内云计算已经翘首追赶,紧跟国际的步伐。例如阿里云,截至笔者写作时,阿里云已经连续7个季度3位数的同比增长率。老牌公司微软也在这几年加速追赶,在这个新的领域跻身一线。 1.1 云计算概述 1.1.1 什么是云计算 一直以来,云计算(Cloud Computing)的定义也如同它的名字一样,云里雾里,说不清楚。维基百科里是这样定义的:是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。以前,我们的信息处理(计算)是由一个实实在在的计算机来完成的,它看得见,摸得着。后来,随着计算硬件、网络技术、存储技术的飞速发展,人们发现,每个人独自拥有一台计算机似乎有些浪费,因为它大多数时候是空闲的。那么,如果将计算资源集中起来,大家共享,类似现代操作系统那样分时复用,将是对资源的极大节省和效率的极大提升,经济学上的解释也就是边际效应(成本)递减。科技行业的发展,根源也是经济利益的推动。在这样的背景下,云计算应运而生了。它就是把庞大的计算资源集中在某个地方或是某些地方,而不再是放在身边的那台计算机了;用户的每一次计算,都发生在那个被称为云的他看不见摸不着的某个地方。以CPU为例,图1-1和图1-2摘选了从2000年到2017年上市的Intel桌面CPU的参数(主频、核数、LLC、制造工艺),从中可以大概看到CPU处理能力的飞速提升。它的另一面也就意味着,个人单独拥有一台计算机,从资源利用效率角度来看,被大大闲置了的。 1.1.2 云计算的历史 正式的云计算的产品始发于2006年,那年8月,亚马逊(Amazon)发布了“弹性计算云”(Elastic Compute Cloud)。2008年10月,微软宣布了名为Azure的云计算产品,并在2010年2月正式发布Windows Azure。Google也从2008年开始进入云计算时代,那年4月,其发布了Google App Engine Beta,但直到2013年12月,其Google Compute Engine对标AWS EC2才正式可用。2010年7月,NASA和Rackspace共同发布了著名的开源项目Openstack。从国内来看,2009年,阿里巴巴率先成立了阿里云部门,一开始只对内服务于其自身的电商业务,如淘宝、天猫。2011年7月,阿里云开始正式对外销售云服务。无论是国内还是国外,云计算的市场都快速发展。“Amazon把云计算做成一个大生意没有花太长的时间:不到两年时间,Amazon上的注册开发人员达44万人,还有为数众多的企业级用户。有第三方统计机构提供的数据显示,Amazon与云计算相关的业务收入已达1亿美元。云计算是Amazon增长最快的业务之一。”国内的阿里云也在2013年以后快速蓬勃发展。无论是国际巨头AWS(亚马逊)还是国内的阿里云,这些年都是快速增长,尤其阿里云,虽然体量暂时还远不及AWS,但一直都是超过100%的增长,让人侧目,如图1-3所示。 1.1.3 云计算的几种服务模型

Scroll to Top