关于ai开发:Sora

闲聊一下从去年的大模型开始其实,文生视频的 Ai我的项目 曾经层出不穷,像 Runway、 Pika、 Leonordo 从巨头到各种各样的初创公司。 因为我自身从去年到今年以来也自身始终在做一些Ai方面的工作(Midjourney、MyShell、Character Ai等),我大多数时候感觉很多的模型和产品都是在抬高自己(全世界的Ai产品都这样~),但理论体验比拟 个别 甚至称得上 毛糙。 而为什么 Sora 值得一讲,因为我在 Openai 的宣传中,看到对于视频渲染的 真实性 和 物理世界引擎 连贯性(不得不吐槽一些还几帧几帧的文生图产品)几乎对于其余的文生图模型是降维打击(这是在Gpt之后的第二波了)。 而后当初是在 Beta 版,但我曾经想提前做点事件,去承接一下了。 重要的事件讲三遍!!!它是 Beta版!!!谨防常识付费/欺骗。 Sora只有外部能用,当初这个阶段的常识付费全是割韭菜!!! 什么是Sora?Sora 是 OpenAI 的技术,能够将文本转换成视频,就像是魔术一样,将你的故事或形容的文字以视频的模式出现。它能够为各种各样的场景发明视觉效果,从日常场景到富裕想象力的奇幻场景,能够参考 Dall-e-3的 vivid 和 natural。 它的应用场景首先是最根底的一点,Ai的呈现在某种程度上来说是对于集体和小型团队和工作室的微小利好,所有的Ai工具都是效率工具。 其次它是创造力 和 认知 的延长。 Sora实用于那些心愿从文本中生成 真切 和 想象力 视频的用户。它面向须要生成 简单 场景、角色和动作的集体或组织,比方讲故事、娱乐、教育或内容创作等。能够设想这对于 视频内容创作 的大洗牌。 代码实现看起来它跟其余的Api用法差异不大。 import openaiimport requestsimport time# Set OpenAI API keyopenai.api_key = 'your-api-key'# Define a function to generate video using Soradef generate_video(description, engine="sora-beta", max_tokens=150): try: # Generate video using Sora response = openai.Completion.create( engine=engine, prompt=description, max_tokens=max_tokens ) # Retrieve the generated video URL video_url = response['choices'][0]['video'] return video_url except Exception as e: print("An error occurred:", e) return None# Define a function to download the generated videodef download_video(video_url, output_file): try: # Send request to download video with requests.get(video_url, stream=True) as r: r.raise_for_status() with open(output_file, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) print("Video downloaded successfully!") return output_file except Exception as e: print("An error occurred:", e) return None# Define the main functiondef main(): # Define a short description for the desired video description = "A bustling futuristic cityscape with flying cars and neon lights." # Generate video using Sora video_url = generate_video(description) if video_url: # Define output file path output_file = "generated_video.mp4" # Download the generated video downloaded_file = download_video(video_url, output_file) if downloaded_file: # Display the generated video URL and path print("Generated Video URL:", video_url) print("Downloaded Video Path:", downloaded_file)# Call the main functionif __name__ == "__main__": main()它是如何工作的?Sora 是基于以前的 DALL·E 和 GPT模型钻研的一个弱小的AI模型。它利用了在 DALL·E 3模型中采纳的从新题目(re-captioning)技术,这种技术可能为视觉训练数据生成高度形容的字幕。 ...

February 17, 2024 · 2 min · jiezi

关于ai开发:揭示CTGAN的潜力利用生成AI进行合成数据

举荐:应用NSDT场景编辑器助你疾速搭建可编辑的3D利用场景 咱们都晓得,GAN在生成非结构化合成数据(如图像和文本)方面越来越受欢迎。然而,在应用GAN生成合成表格数据方面所做的工作很少。合成数据具备许多益处,包含其在机器学习应用程序、数据隐衷、数据分析和数据加强中的应用。只有多数模型可用于生成合成表格数据,CTGAN(条件表格生成反抗网络)就是其中之一。与其余 GAN 一样,它应用生成器和鉴别器神经网络来创立与实在数据具备类似统计属性的合成数据。CTGAN能够保留实在数据的底层构造,包含列之间的相关性。CTGAN的额定益处包含通过特定于模式的规范化来加强训练过程,一些架构更改,以及通过应用条件生成器和采样训练来解决数据不均衡问题。 在这篇博文中,我应用CTGAN依据从Kaggle收集的信用剖析数据集生成合成数据。 CTGAN的长处生成与理论数据具备相似统计属性的合成表格数据,包含不同列之间的相关性。保留实在数据的底层构造。CTGAN生成的合成数据可用于各种利用,例如数据加强,数据隐衷和数据分析。能够解决间断、离散和分类数据。 CTGAN的毛病CTGAN须要大量的实在表格数据来训练模型并生成与实在数据具备类似统计属性的合成数据。CTGAN是计算密集型的,可能须要大量的计算资源。CTGAN生成的合成数据的品质可能会有所不同,具体取决于用于训练模型的实在数据的品质。 调整CTGAN与所有其余机器学习模型一样,CTGAN在调优时体现更好。在调整CTGAN时须要思考多个参数。然而,对于此演示,我应用了“ctgan 库”附带的所有默认参数: 纪元:生成器和鉴别器网络在数据集上训练的次数。学习率:模型在训练期间调整权重的速率。批量大小:每次训练迭代中应用的样本数。生成器和鉴别器网络大小。优化算法的抉择。CTGAN还思考了超参数,例如潜在空间的维数,生成器和判断器网络中的层数以及每层中应用的激活函数。参数和超参数的抉择会影响生成的合成数据的性能和品质。CTGAN的验证CTGAN的验证是辣手的,因为它存在局限性,例如难以评估生成的合成数据的品质,特地是在波及表格数据时。只管有一些指标可用于评估实在数据和合成数据之间的相似性,但确定合成数据是否精确示意实在数据中的基本模式和关系依然具备挑战性。此外,CTGAN容易受到适度拟合的影响,并且能够产生与训练数据过于类似的合成数据,这可能会限度它们泛化到新数据的能力。 一些常见的验证技术包含: 统计测试:比拟生成数据和实在数据的统计属性。例如,应用相关性剖析、柯尔莫哥罗夫-斯米尔诺夫测验、安德森-达林测验和卡方测验等测验来比拟生成的数据和实在数据的散布。可视化:通过绘制直方图、散点图或热图来可视化异同。应用程序测试:通过在理论应用程序中应用合成数据,查看其性能是否与实在数据类似。 个案研究对于信用剖析数据信用剖析数据蕴含间断和离散/分类格局的客户数据。出于演示目标,我通过删除具备 null 值的行并删除本演示不须要的几列来预处理数据。因为计算资源的限度,运行所有数据和所有列将须要大量的计算能力,而我没有。以下是连续变量和分类变量的列列表(离散值,如子变量计数 (CNT_CHINDREN) 被视为分类变量):分类变量: TARGET NAME_CONTRACT_TYPECODE_GENDERFLAG_OWN_CARFLAG_OWN_REALTYCNT_CHILDREN连续变量: AMT_INCOME_TOTALAMT_CREDITAMT_ANNUITYAMT_GOODS_PRICE生成模型须要大量洁净的数据来训练以取得更好的后果。然而,因为计算能力的限度,我从超过 10,000 行的实在数据中只抉择了 9,993 行(正好是 300,000 行)进行本演示。尽管这个数字可能被认为绝对较小,但对于本演示的目标来说应该足够了。 实在数据的地位:https://www.kaggle.com/datasets/kapoorshivam/credit-analysis 生成的合成数据的地位: CTGAN的综合信用剖析数据(Kaggle)CTGAN生成的合成表格数据集(钻研门)DOI: 10.13140/RG.2.2.23275.82728 后果我生成了 10k(确切地说是 9997)合成数据点,并将它们与实在数据进行了比拟。后果看起来不错,只管仍有改良的后劲。在我的剖析中,我应用了默认参数,其中“relu”作为激活函数和 3000 个 epoch。减少纪元的数量应该能够更好地生成相似实在的合成数据。生成器和鉴别器损失看起来也不错,损耗越低,示意合成数据和实在数据之间的相似性越近: 相对对数平均值和标准差图中沿对角线的点示意生成的数据品质良好。 下图中间断列的累积总和并不齐全重叠,但它们很靠近,这表明合成数据的生成良好且没有适度拟合。分类/离散数据的重叠表明生成的合成数据靠近实在。进一步的统计分析见下图: 以下关联图显示了变量之间的显著相关性。重要的是要留神,即便通过彻底的微调,实在数据和合成数据之间的属性也可能存在差别。这些差别实际上是无益的,因为它们可能会揭示数据集中可用于创立新解决方案的暗藏属性。据察看,减少纪元数能够进步合成数据的品质。 变量之间的相关性(实在数据) 变量之间的相关性(合成数据)样本数据和理论数据的汇总统计仿佛也令人满意。 实在数据和合成数据的汇总统计 Python代码# Install CTGAN!pip install ctgan# Install table evaluator to analyze generated synthetic data!pip install table_evaluator# Import librariesimport torchimport pandas as pdimport seaborn as snsimport torch.nn as nnfrom ctgan import CTGANfrom ctgan.synthesizers.ctgan import Generator# Import training Datadata = pd.read_csv("./application_data_edited_2.csv")# Declare Categorical Columnscategorical_features = [ "TARGET", "NAME_CONTRACT_TYPE", "CODE_GENDER", "FLAG_OWN_CAR", "FLAG_OWN_REALTY", "CNT_CHILDREN",]# Declare Continuous Columnscontinuous_cols = ["AMT_INCOME_TOTAL", "AMT_CREDIT", "AMT_ANNUITY", "AMT_GOODS_PRICE"]# Train Modelfrom ctgan import CTGANctgan = CTGAN(verbose=True)ctgan.fit(data, categorical_features, epochs=100000)# Generate synthetic_datasynthetic_data = ctgan.sample(10000)# Analyze Synthetic Datafrom table_evaluator import TableEvaluatorprint(data.shape, synthetic_data.shape)table_evaluator = TableEvaluator(data, synthetic_data, cat_cols=categorical_features)table_evaluator.visual_evaluation()# compute the correlation matrixcorr = synthetic_data.corr()# plot the heatmapsns.heatmap(corr, annot=True, cmap="coolwarm")# show summary statistics SYNTHETIC DATAsummary = synthetic_data.describe()print(summary)论断CTGAN的训练过程无望收敛到生成的合成数据与实在数据无奈辨别的水平。然而,在事实中,不能保障趋同。有几个因素会影响CTGAN的收敛性,包含超参数的抉择、数据的复杂性和模型的架构。此外,训练过程的不稳定性可能导致模式解体,其中生成器仅生成一组无限的类似样本,而不是摸索数据分布的全副多样性。 ...

September 11, 2023 · 1 min · jiezi

关于ai开发:极光笔记-如何为您的业务开发和训练一个AIBOT

生成式AI(Generative AI)是当今科技领域的前沿技术之一。随着数据量的一直减少和计算能力的一直晋升,AI技术在企业和集体生存中的利用越来越宽泛。AI-BOT(以下简称BOT)是生成式AI技术的其中一种重要的利用模式,它能够通过学习各类业务数据信息,帮忙人们执行一系列工作,从而进步工作效率,缩小人力老本。 而GPTBots作为BOT开发平台,始终是生成式AI的前沿探索者。本文将与您分享,如何在GPTBots上,为您的业务开发和训练一个领有高可用性的BOT。 PART 01 筹备工作注册GPTBots平台注册一个GPTBots账号,是开发BOT的第一步。进入GPTBots平台(https://gptbots.ai/developer),点击【注册】,并登录到【开发者后盾】。实现注册后,平台会为您赠送一些积分,这些积分可能让您进行平台性能的初体验,例如创立BOT、调试BOT、训练BOT等。如果实现企业认证,还能够取得高达 500 积分的赠送。 业务剖析首先,您须要明确BOT在您的业务中的定位和指标。 定位指的是BOT在您的业务中的非凡地位,它被用于解决某个特定畛域的问题,因而与其余BOT是存在差别的。指标指的是BOT在您的业务中所能达成的具体后果,例如降低成本、晋升人效等。 咱们建议您能够把BOT了解为一名员工,这位员工常识渊博,无所不知,但在某些业余畛域又有些欠缺。不过,只须要提供相干专业知识,它就能够化身领域专家,无效解决业余问题。因而,在明确定位和指标时,咱们能够这么思考: 定位: 一名十分业余的电商售后客服人员,他对于公司业务一目了然,可能疾速且业余地为客户解决各类型售后问题。 指标: 晋升客户服务效率和品质,升高客户服务老本。其次,您须要理解BOT所需解决的业务畛域中存在的问题和挑战。理解这些,有助于帮忙您进一步定位BOT的能力范畴。 数据收集在明确了BOT的定位和指标后,咱们须要为BOT进行数据收集。 依据上文咱们提供的倡议,咱们把这个BOT设想成为一名无所不能的员工。但一名弱小的员工,除非局部人有天才以外,更多地肯定是通过一直的常识学习和教训积攒后能力做到的。而BOT的数据,指的就是BOT须要学习的常识。 持续应用上文的例子。“一名十分业余的电商售后客服人员”,肯定是领有十分丰盛的公司售后业务知识,包含但不限于:公司的售后服务政策、公司历史解决售后问题经典案例…… 因而,咱们须要做以下工作:1. 收集数据。作为给这个“电商售后BOT”的学习材料; 数据分类。分类越清晰,越有助于BOT常识的保护治理,以及晋升BOT的响应品质。例如电商售后服务常识,咱们能够大抵分类为:服务总则、服务细则、服务流程、常见问题、经典案例等;数据荡涤及预处理。以保障最终给BOT学习的数据是绝对“洁净”,不含“杂质”的。留神,数据的收集并不是越多越好,更重要的是数据的品质。咱们须要给BOT“学习”高质量的常识,BOT能力给咱们输入高质量的后果。PART 02 构建BOT在以上筹备工作均已实现后,就能够开始构建这个“电商售后BOT”。 更多的GPTBots应用教程,请拜访GPTBots官网文档(https://gptbots.gitbook.io/gptbots.zh/),在本文中不做具体开展。 创立BOT依据业务理论,创立适合类型的BOT。GPTBots定义了两类BOT:- 常识问答:领有“短记忆”能力,实用于一些简略的问答场景,例如翻译、客服、常识检索等; 智能助理:领有“短记忆+长记忆”能力,实用于较为简单的对话场景。用户可按本身理论需要来抉择BOT类型。 身份提醒撰写技巧在构建BOT的过程中,比拟重要的一个环节,就是为BOT撰写身份提醒。 身份提醒可用来塑造BOT的身份、能力,边界和情绪等。一个优质的身份提醒,可能让BOT以更加合乎冀望地回复用户问题。 咱们能够用一个通用的构造来撰写身份提醒,如下:- 角色:BOT须要负责的角色,如“业余的售后服务人员”; 技能:BOT须要领有的技能,如“杰出的售后服务能力与客户沟通技巧”;共性:BOT的语气、共性、沟通形式等,如“语气请温和,用词需礼貌”指标:BOT的工作指标,如“基于参考内容及客户发问,答复客户的问题”;链式思考:为BOT提供一些思考流程与形式,以疏导BOT依照你的要求进行思考和解决问题,如“MUST follow these steps to answer the customer queries: Step1 - Step2 - Step3 - Step4...”。在一些较为垂直、特定的场景下,该办法十分好用。输入规定:若您须要BOT输入内容为特定构造或格局(如:json、markdown……),您也能够在此定义。请留神,这部分不是必须的,可按理论需要撰写。以上文“电商售后BOT”为例,咱们能够这样撰写身份提醒: 请表演一名业余的售后服务人员。你领有杰出的售后服务能力与客户沟通技巧。你的工作是,基于参考内容及客户发问,答复客户的问题。语气请温和,用词需礼貌。 PART 03 训练BOT在设定好BOT的根本信息后,咱们须要对BOT进行常识“投喂”以及训练。 常识输出咱们须要将数据收集阶段收集到的售后服务类数据,以适合的格局,“投喂”给BOT进行训练。GPTBots平台目前反对文档导入(.docx、.md、.txt、……)、网站爬取、在线文本、在线Q&A等形式进行常识输出。 向量搜寻训练实现后,能够立即通过“向量搜寻”性能,对常识进行向量搜寻测试,查看命中状况,目标是为了察看曾经训练好的常识在面对理论问题时,是否可能无效地实现信息召回。 聊天记录训练在BOT曾经投入使用后,咱们仍然能够对BOT进行重复训练。 目前GPTBots反对基于用户的聊天记录进行训练。这种训练形式的劣势在于,训练的语料应用的是用户在应用BOT过程中理论产生的对话,应用这些对话作为训练资料,可能让BOT更无效地靠近理论的用户应用场景。 调试BOT调试模式能够帮忙开发者一边应用BOT一边调整BOT参数,以让BOT达到开发者所冀望的成果。 PART 04 更简单的场景,如何解决?在理论业务中,会很多远比售后服务问答要简单得多的场景。面对这些场景,GPTBots提供了更丰盛的解决形式以应答。 为BOT插上翅膀——插件能力大语言模型(LLM)自身是有常识范畴限度的,当须要LLM帮忙咱们解决更多业务定制化的、简单的工作时,咱们能够通过为LLM增加插件的形式,扩大LLM的能力,使BOT领有更加弱小的能力。 GPTBots以后已反对插件性能。GPTBots官网曾经提供了一些收费的公开插件供用户应用(更多的官网插件正在陆续开发中……)。同时,GPTBots也反对开发者自行开发插件,以个性化地笼罩本身的业务场景。例如,开发者能够通过开发插件,将BOT对接到本人的业务零碎,调用本人的业务数据,让BOT来解决特定业务工作。 用可视化流程(FLOW)构建BOT若是存在更加简单的业务场景,则能够通过可视化流程(FLOW)来构建BOT。GPTBots目前正在内测的FLOW构建BOT性能。咱们将一个BOT应有的或常见的模块形象为多个组件,用户能够通过在可视化面板上利落拽的形式,个性化地构建一个简单场景下的BOT,以解决更加垂直、更加特定场景下的问题。 将BOT与业务连贯GPTBots反对将构建好的BOT与用户本人的业务进行连贯,目前次要有以下三种形式:- API:GPTBots以后提供了多个与BOT进行交互的API,包含但不限于创立对话、发送音讯、获取音讯等; iframe网页嵌入:将BOT对话界面以iframe的模式嵌入到您的网页内进行应用;bubble网页小部件:将BOT以bubble小部件的模式嵌入到您的网页内进行应用,它将以气泡的模式,展现在您网页的右下角。写在最初在生成式AI倒退迅猛的明天,GPTBots为开发者提供了弱小的自主构建AI-BOT的能力,可能帮忙开发者疾速高效地构建个性化的BOT,以解决其业务痛点或问题,驱动业务增长。 拜访极光GPTBots官网 https://www.gptbots.a立刻注册体验注册即赠送积分赠送。参加企业认证或邀请好友注册,也能获取更多积分~ 对于极光极光(Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国当先的客户互动和营销科技服务商。成立之初,极光专一于为企业提供稳固高效的音讯推送服务,凭借先发劣势,曾经成长为市场份额遥遥领先的挪动音讯推送服务商。随着企业对客户触达和营销增长需要的不断加强,极光前瞻性地推出了音讯云和营销云等解决方案,帮忙企业实现多渠道的客户触达和互动需要,以及人工智能和大数据驱动的营销科技利用,助力企业数字化转型。

August 17, 2023 · 1 min · jiezi

关于ai开发:ThinkPHPV80发布AI助力开发体验

ThinkPHPV8.0为基于PHP8的重构版本,降级了相干依赖,官网开启了AI助理晋升开发体验,晋升ThinkORM版本依赖为3.0,反对6.0/6.1的无缝降级。(本文局部内容采纳ThinkChat生成) ThinkPHPV8.0在外围性能上尽管并没有大的更新(事实上大部分用户也不须要太简单的底层性能),作为一个全新的版本,更多的意义在于一种官网的姿势——我思故我在。ThinkPHP在寻求一种扭转或者是新的摸索,从新版LOGO、新版官网,以及一系列的官网生态服务的陆续推出,无一不是在通知用户,咱们心愿为生态、为用户做更多的事件,更好打造官网对大道至简的开发理念和愿景,从而帮忙开发者更好的开发。值此新版公布之际,官网也正式发表推出了的私人开发AI助理服务ThinkChat。 ThinkPHP8.0作为一个全新的版本,承载了官网对将来生态的全新冀望。官网也将始终秉承大道至简及无缝降级的策略,致力打造简略易用的框架及服务,不便生态产品和服务的更新迭代。这一版本的公布,标记着ThinkPHP在继续翻新和改良的路线上迈出了重要一步。新版不仅是对过来版本的降级,更是对国内PHP开发生态的一次推动和变革。置信通过这一全新版本及AI开发助理的引入,将为宽广开发者带来更便捷、高效的开发体验,助力他们构建出更杰出的Web利用。 在ThinkPHP6.0+公布以来的这些年,官网始终在致力于摸索和打造生态及商业模式,在企业常识治理及利用认证方面的一直尝试,让咱们深信只有构建可继续的生态及倒退能力让框架走的更好更远。 在此也要感恩始终以来反对和资助咱们的用户,咱们唯有不负众望,做一个值得开发者信赖的框架,并砥砺前行! 次要更新基于PHP8.0+重构减少startWith、endWith及contain验证规定简化验证类的正则优化路由检测降级PSR依赖依赖think-orm3.0版本8.0版本后续会陆续更新其它性能,6.0/6.1版本将不再做新性能更新,仅限BUG修改和安全更新。 文档8.0版本开始官网手册启用新的域名:doc.thinkphp.cn,并反对版本切换。 官网服务当初开始,你能够应用官网提供的ThinkChat,让你在学习ThinkPHP的旅途中享受私人AI助理服务! 资助咱们ThinkPHP全新的资助打算,能够让你通过咱们的网站、手册、欢送页及GIT仓库取得微小曝光,同时晋升企业的品牌名誉,也更好保障ThinkPHP的可继续倒退。

July 1, 2023 · 1 min · jiezi

关于ai开发:客户案例云联壹云帮助华北电力大学搭建-AI-训练平台

客户介绍华北电力大学是教育部直属全国重点大学,是国家“211 工程”和“985 工程劣势学科翻新平台”重点建设大学。2017 年,学校进入国家“双一流”建设高校行列,重点建设能源电力迷信与工程学科群,全面开启了建设世界一流学科和高水平研究型大学的新征程。 为了不便人工智能相干业余的教研、教学、学生实际,学校基于云联壹云新一代企业级公有云平台建设了 AI 训练平台,同时和本身的办公特点相结合,实现了资源的流程化、自动化、精细化治理,进步了教学质量和教研效率的同时,升高建设老本和保护老本。 客户痛点教学资源申请交付效率有待进一步提高; GPU 调度不灵便,算力没有开释; 机型繁多,虚拟化工具不适配老旧机型; 教研教学 IT 资源的计量计费; 资源使用率低,无奈具体量化。 解决方案平台自服务,工单流程放慢资源交付; GPU 灵便调度,进步 GPU 的利用率; 适配兼容多服务器机型,设施利旧; 提供公有云账单解决方案,老师、学生应用资源有据可依。 部署架构 客户收益资源申请速度较以往晋升 200%,管理员投入人力缩小 2/3; 开释 GPU 算力,GPU 资源利用率晋升 300%; 异构设施利用率晋升,升高新设施洽购老本 25%; 平台提供公有云账单性能,资源应用更加清晰。 以上是文章的次要内容,作为交融云/多云治理/公有云/FinOps 厂商,云联壹云会继续关注这些畛域的动静,分享相干的信息和技术,能够通过的官网(yunion.cn)或关注的公众号(云联壹云)来获取最新的信息,感激大家的工夫。 原文地址:https://www.yunion.cn/article/html/20230609.html 举荐浏览企业面对FinOps,到底能做些什么?总结了4个方面 云联壹云交融云治理平台的 10 大利用场景 Flexera 2023 云状态报告解读 新品公布 | Cloudpods 3.10版本上线!

June 9, 2023 · 1 min · jiezi

关于ai开发:鹅厂专家讲透AI文本生成解码策略与代码实现

腾小云导读 本文以 huggingface-transformers 的文本生成解码代码为例,对文本生成罕用的五种解码策略 greedy search、beam search、sample、sample and rank & beam sample、group beam search 进行逐行解读。每一大节首先会介绍对应解码策略的原理,接着给出供大家疾速上手的代码示例,并逐层介绍调用过程,最初给出所应用到的所有类之间调用的时序图。由简到繁再到简,帮忙大家建设起一个整体的意识,并且可能疾速利用。干货较多,欢送浏览并进行实际尝试。 目录 1 总体介绍 2 greedy search 2.1 原理介绍 2.2 疾速上手 2.3 代码解读 2.4 整体流程 3 beam search 3.1 原理介绍 3.2 疾速上手 3.3 代码解读 3.4 整体流程 4 sample 4.1 原理介绍 4.2 疾速上手 4.3 代码解读 4.4 整体流程 5 sample and rank & beam sample 5.1 原理介绍 5.2 疾速上手 5.3 代码解读 5.4 整体流程 6 group beam search ...

June 5, 2023 · 32 min · jiezi

关于ai开发:开源之夏-2023欢迎报名-DLRover-社区项目

开源之夏是由“开源软件供应链点亮打算”发动并长期反对的一项暑期开源流动,旨在激励在校学生积极参与开源软件的开发保护,促成优良开源软件社区的蓬勃发展,造就和挖掘更多优良的开发者。 流动联结国内外各大开源社区,针对重要开源软件的开发与保护提供我的项目工作,并面向寰球高校学生凋谢报名。 2023 年,DLRover 社区退出中国科学院软件研究所的高校开源流动——“开源之夏 2023”,一共为大家筹备了四个工作,波及 AI、Python、Linux、Kubernetes、Deep learning、Docker、Algorithm 等多个畛域。 DLRover 我的项目介绍 DLRover (Distributed Deep Learning System) 是蚂蚁团体 AI Infra 团队保护的开源社区,是基于云原生技术打造的主动分布式深度学习零碎。DLRover 使得开发人员可能专一于模型架构的设计,而无需解决任何工程方面的细节,例如硬件加速和分布式运行等。目前,DLRover 反对应用 K8s、Ray 进行自动化操作和保护深度学习训练任务。 流动规定 开源之夏官网: https://summer-ospp.ac.cn/ 各位同学能够自由选择我的项目,与社区导师沟通实现计划并撰写我的项目计划书。被选中的学生将在社区导师领导下,按计划实现开发工作,并将成绩奉献给社区。社区评估学生的完成度,主办方依据评估后果发放赞助金额给学生。 DLRover 社区我的项目 我的项目链接:https://m.summer-ospp.ac.cn/org/orgdetail/3dd008dd-3875-4ee1-bd2c-016202e58f86 我的项目社区导师:长凡 mailto:qinlong.wql@antgroup.com 数据并行同步训练主动资源配置算法 项目编号:233dd0048 我的项目难度:根底/Basic 在同步数据并行训练中,每个 Worker 计算一个 Micro Batch 后会和其余 Worker 通过 Allreduce 同步梯度,而后更新模型参数。Worker 数量会影响 Batch Size 和通信开销。Batch Size 会继而影响模型精度,而通信开销会影响训练吞吐,因而如何为模型寻找适合的 Worker 数量来晋升训练吞吐和精度是比拟难的。现阶段用户须要重复提交作业来寻找最优的配置。DLRover 当初反对数据并行的弹性训练,能够在训练过程中扭转 Worker 数量,从而寻找最优的数量配置。 须要输入代码、文档、实验报告。须要纯熟应用 Kubernetes、Python。我的项目社区导师:玄钛 mailto:hanxudong.hxd@antgroup.com 反对 TorchRec 的弹性容错 项目编号:233dd0049 我的项目难度:根底/Basic TorchRec 是 PyTorch 反对大规模举荐模型的框架,其训练采纳同步的模型并行加数据并行训练。咱们在星散群上提交 TorchRec 的分布式训练作业时,须要思考容错和弹性。目前,DLRover 实现了数据并行训练和节点的容错与弹性调度,反对了 PyTorch 的 DDP。对于 DeepRec 模型并行训练,节点出错后须要思考两种形式:节点从新拉起来复原训练;节点资源被抢占,须要更新设施上的模型分片。 ...

May 11, 2023 · 1 min · jiezi

关于ai开发:百度AI开发者-AKSK申请

吐槽一下百度开发者文档:1、最大问题:文档没有梳理分明。外面文档太乱了,昨天去调用“文本信息提取”api,依据文档去创立AK、SK基本找不到中央,起初也不晓得从哪里进去创立好了利用,明天再进去的时候,又找不到了,真是头晕。在这之前,我还屡次调用过百度的地图api,那个文档感觉就清晰一些。2、文档内容不残缺。预计是百度开发人员业务太忙了,整进去的文档都是半成品,不是有肯定功底的人,初学者真是会被文档整吐血。3、登录状态没有买通。各个文档和控制台等平台之间登录信息没有买通,总叫我登录,这么大一家技术型公司,还有这么低级的问题,真是让人无语。 正筹备去提交意见给百度,后果点进去就显示了如何去申请AK、SK的链接。这个链接不像api文档中的链接,这个是正确无效的,尽管我至今还没找到正式的入口,好歹找到一个隐秘口子,连忙记录下来。地址:https://cloud.baidu.com/doc/Reference/index.html点击治理控制台,进去后就能够创立利用了。点击左侧的利用列表,就能够看到本人已经创立过的利用,这外面就有你的AK、SK。

April 27, 2023 · 1 min · jiezi

关于ai开发:亲们看过来2023首场昇腾AI开发者创享日来到东北黑土地沈阳

2023年3月11日,依靠沈阳人工智能计算中心与沈阳昇腾人工智能生态翻新核心,昇腾AI开发者创享日全国巡回流动首站将来到沈阳,昇腾AI将携手开发者一起“创将来,享不凡”。当全国重工业老大哥遇上昇腾AI,首场创享日流动注定精彩绝伦! 西南“老大哥”辽宁:干劲十足,带头搞AI 西南的数字化转型,虽不是最快的,但却是最典型的。特地是在2021年,科技部正式发函批复,反对沈阳建设国家新一代人工智能翻新倒退试验区后,通过充分发挥人工智能对沈阳制造业转型降级和西南老工业基地全面振兴的辐射带动作用,沈阳国家核心城市建设再次加速度,并向“西南数字第一城”的指标继续迈进。 通过人工智能、大数据、物联网等新一代信息技术,为“老字号”产业赋能增效;大力发展工业机器人等“新字号”产业,重塑工业振兴的“发动机”。2022年8月,在昇腾AI助力下,沈阳人工智能计算中心完工并投入经营,为沈阳建成西南“数字第一城”提供弱小算力。 创享日首站到沈阳:亮点颇多,够得劲 基于此,昇腾AI开发者创享日首站流动就走进西南,当开发者老铁遇上昇腾AI,这场流动注定“够得劲”! 大神嘉宾齐聚,点亮人工智能将来方向 本次流动拟邀辽宁省科技厅相干领导,中煤科工团体沈阳研究所有限公司首席科学家王雷,东北大学软件学院传授郭贵冰,华为昇腾计算业务CTO周斌,昇腾CANN生态首席专家杜鹏等多位政产学研界大咖。 他们将会带来本地人工智能产业倒退最新趋势、前沿AI技术解析、人工智能技术创新利用实际案例分享等重要内容,帮忙开发者更深刻地理解沈阳人工智能计算中心在沈阳,乃至西南区域人工智能产业倒退中表演的角色、平台劣势、翻新利用场景等,与开发者独特点亮人工智能将来方向。 系列签约,推动人工智能产学研用全面倒退 倒退人工智能,辽宁省特地关注“产学研用”的多维推动。本次流动,围绕产学研用将举办一系列签约及揭牌典礼。 产业转型赋能方面,聚焦“将来工业互联网科研基础设施”平台建设,将举办辽宁辽河实验室人工智能单干签约典礼。 学研翻新孵化方面,东北大学、沈阳昇腾人工智能生态翻新核心单干建设的“沈阳.太一”大模型联结实验室将举办揭牌典礼,将来基于多模态举荐模型,沈阳将在大数据、互联网等以内容为外围的行业畛域进行利用场景和社会价值的摸索。 业余人才培养方面,为更好地帮忙当地高校发展人工智能学科建设和人才培养,本次流动将举办人才倒退减速打算签约典礼。同时,为推动当地专家人才入驻计算中心、晋升高校教师、企业开发者的AI技术能力,流动中还将举办沈阳人工智能计算中心专家聘任典礼。 重磅公布,昇腾矿用机器人解决方案减速矿山智能化建设 作为我国的老工业基地,辽宁省有着倒退机器人产业的制造业底蕴和技术根底。近些年,在“人工智能+”牵引下,煤矿机器人在整个煤矿行业曾经产生深远影响,正继续推动煤炭生产方式的“智能化”改革。 联合昇腾AI根底软硬件平台的劣势及沈阳人工智能计算中心技术团队的深刻反对,中煤科工团体沈阳研究院有限公司正在研发多款基于昇腾Atlas 200 AI减速模块、Atlas 500智能小站等的矿用机器人,并已有落地利用的矿用机器人案例,流动中,还将重磅公布昇腾矿用机器人解决方案。 能唠会玩,创享日就稀奇给开发者“整全套” 创享日始终致力于从“新技术、新体验、新机会”三个维度为开发者发明新价值,因而,新技术解密和各类AI体验流动天然不能少。 开发者不仅能够现场凝听CANN赋能泛机器人前沿钻研介绍、基于昇思MindSpore的“沈阳.太一”模型的实际与思考,还能够参加昇腾AI训练营-Atlas 200I DK A2开发者套件专场、遇见大咖·开发者AI说-走进行业等专场流动。流动期间,计算中心还将联结东北大学和沈阳理工大学举办“走进高校”分会场流动。为了让开发者在流动中“能唠会玩”,创享日AI开发者创享日大放全招。 2022年,昇腾AI开发者创享日相继在西安、成都、南京胜利举办,通过联结全国翻新核心,笼罩百万开发者,造成良好的开发者生态品牌声量。2023年,创享日流动将依靠各区域人工智能计算中心、昇腾人工智能生态翻新核心,夯实经营体系,通过紧跟AI技术热点、继续为行业开发者赋能、加大成功者案例共享等形式,牵引开发者奉献价值,真正推动人工智能与实体经济的无效交融,实现科技翻新的价值转化。 置信首场沈阳站,将在打造一系列围绕昇腾AI的人工智能产业生态、建立沈阳产业建圈强链标杆方面,为其余区域做出表率。3月11日,以AI之名,共赴一场独属于开发者的创享盛宴。让咱们相约2023昇腾AI开发者创享日·沈阳站,不见不散! 共创昇腾产业将来,共享不凡成长、成就、胜利,更多对于昇腾AI开发者创享日沈阳站的精彩内容,可拜访昇腾社区! 精彩流程领先看

March 3, 2023 · 1 min · jiezi

关于ai开发:博学谷人工智能AI进阶年度钻石会员2022最新

download:博学谷人工智能AI进阶年度钻石会员2022最新全面了解Properties类 java.util.Properties继承自java.util.Hashtable,是一个持久化的属性保存对象,可能将属性内容写出到stream中或者从stream中读取属性内容。 它的重要个性如下: 在底层的Hashtable中,每一对属性的key和value都是按照string类型来保存的。Properties反对文本形式和xml形式的数据存储。在文本形式中,格局为key:value,其中分隔符可能是:冒号(:)、等号(=)、空格。其中空格可能作为key的结束,同时获取的值回将宰割符号两端的空格去掉。Properties可能将其余的Properties对象作为默认的值。Hashtable的一切办法Properties对象均可能拜访,然而不倡导这么做,因为Hashtable可能存放其余数据类型,这样会导致Properties一些方法调用报错。在properties文件中,可能用井号"#"来作正文。线程安全key、value不可能是null构造方法Properties()创建一个无默认值的空属性列表。 Properties(Properties defaults)创建一个带有指定默认值的空属性列表。 要害方法getProperty ( String key)根据指定的key获取对应的属性value值,如果在自身的存储会合中没有找到对应的key,那么就间接到默认的defaults属性指定的Properties中获取属性值。 getProperty(String, String)当getProperty(String)方法返回值为null的时候,返回给定的默认值,而不是返回null。 load ( InputStream inStream)从byte stream中加载key/value键值对,申请所有的key/value键值对是按行存储,同时是用ISO-8859-1编译的, 不反对中文。 load(Reader)从字符流中加载key/value键值对,申请所有的键值对都是按照行来存储的。 loadFromXML(InputStream)从xml文件中加载property,底层使用XMLUtils.load(Properties,InputStream)方法来加载。 setProperty ( String key, String value)调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。 store ( OutputStream out, String comments)将所有的property(保存defaults的)都写出到流中,同时如果给定comments的话,那么要加一个正文。 storeToXML(OutputSteam, comment, encoding)写出到xml文件中。 Set stringPropertyNames()获取所有Properties中所有的key会合 clear ()清除所有装载的 键值对。该方法在基类中提供。

September 15, 2022 · 1 min · jiezi

关于ai开发:未来源码-吴恩达教授重磅演讲Tips-for-using-a-datacentric-AI-approach

一个AI零碎蕴含两个局部:模型和数据。 机器学习支流钻研人员致力于在规范数据集上一直优化模型,来进步AI零碎的性能。这种以模型为核心的倒退之路为咱们带来了高性能的模型架构以及模型开发工具,但对数据的优化却绝对落后。 《A Chat with Andrew on MLOps: From Model-centric to Data-centric AI 》演讲中吴恩达通过缺点检测试验表明,优化模型取得的收益不如优化数据集,baseline的准确率为76.2%,换模型调参之后,模型的准确率简直没有晋升,但通过对数据的优化,零碎性能最高晋升了16.9%。 这篇文章总结了吴恩达提出的data-centric AI零碎开发的5大数据优化准则,包含y定义的优化,乐音数据剔除和数据量之间的trade off , 以及如何通过对数据子集进行谬误剖析来晋升零碎性能。data-centric 模式认为数据集的优化应该作为AI零碎的外围过程,随零碎一直迭代优化,数据优化不是严格意义上的数据预处理,数据预处理是数据优化的强效工具之一。 这些data-centric 数据处理准则为工程师在AI零碎性能优化上提供了一些切实可行且无效的优化门路,在开发新模型来解决问题前,不如花更多的精力去优化数据以及数据定义。 ——雍雍 MobTech袤博科技高级数据挖掘工程师 以下为文章原文: 1.The future of data-centric AI talk seriesBackgroundAndrew Ng is a machine-learning pioneer, founder and CEO of Landing AI, and a former team leader at Google Brain. Recently he gave a presentation to the Future of Data-Centric AI virtual conference, where he discussed some practical tips for responsible data-centric AI development. This presentation dives into tips for data-centric AI applicable to unstructured data and is summarized below. If you would like to watch Andrew’s presentation, we’ve included it here as well, and you can find the entire event on our Youtube channel.(具体视频内容请见文尾链接) ...

April 22, 2022 · 13 min · jiezi

关于ai开发:作业帮云原生降本增效实践之路

简介:目前,作业帮曾经和阿里云有一个对于 AEP 的 tair 计划的联合,在新的一年心愿咱们有更大规模的落地。文章里讲得比拟多的是对于降本做的一些技术改良,其实在降本增效这外面还有很大一块工作量是经营,老本经营咱们也通过自动化实现了平台化,将来咱们将会进一步向 BI 化、AI 化去演进。 本文整顿自作业帮基础架构负责人董晓聪在云原生实战峰会上的分享,解说作业帮降本增效实际的路线上遇到的问题及教训,次要分为三个方面。一是作业帮的业务和现状,以及为什么要做降本增效。第二,如何和阿里云一起解决在降本过程中遇到的一系列挑战,最初是对将来技术趋势的瞻望。 背景作者 | 董晓聪 作业帮成立于 2015 年,是一家以科技伎俩助力普惠教育的公司,公司次要的业务分为两大板块。第一,作业帮 APP 是一款典型的流量互联网产品,二是作业帮直播课,是一款典型的产业互联网产品,涵盖教育主播链条,如教研、教学、教务、辅导等。 我是 2019 年十月份退出作业帮的,过后我看到作业帮的技术现状演绎为两点。一是规模化,另外是复杂化。 规模化:作业帮线上有数千个应用服务,这么多应用服务对应数万个服务实例,这么多的服务实例跑在数十万的计算外围之上;复杂化:作业帮整体的技术栈是比拟多元的。其中占比最高的技术栈是 Golang 和 PHP,还有大量模块是 C++、Python、Java 等进行编写的,作业帮守业之初就在云上,充沛享受了云计算的红利,起初因为一系列起因创立了多元的架构,性能疾速迭代也是咱们一贯的谋求。那为什么要进行降本增效呢?这个事之前也始终在做,只不过明天须要做得更好,其中有几点起因: 第一点,随着互联网红利的消退,企业心愿每一分钱失去最大的收益,实现老本效益最大化。第二点,尽管咱们始终在强调降本增效,但必定还是有不必要的收入存在,这些节约是应该被节俭的。第三点,作为技术人员的幻想,还是想写出更优质、更高性能的代码。 在降本增效的过程当中要留神一点,降本不能降质,降低成本时稳定性、效率、平安不能打折扣。咱们看一下老本模型。 各种各样的个性和性能利用在计算机上其实是一个一个的代码模块,这些代码其实还是须要各种各样的资源来运作,有计算、存储、网络等等,那么咱们看一下这个模型里降本增效怎么来做。 首先公司必定心愿本人的用户越来越多,应用越来越沉闷。其次,在利用侧降本增效做的事件就是要晋升单位算力承载量,艰深来讲就是 QPS。但咱们面临的一个挑战就是作业帮技术栈太多元了,咱们如何整体晋升?再看资源侧,存储、网络这些资源要么是刚需,要么就是很难管制老本。资源侧降本的重点还是计算资源,而对于计算资源咱们须要晋升单位成本的算力。 咱们面临的挑战是什么呢?就是如何抉择更优的机型以及在抉择完机型之后,如何让业务更加疾速、无感、平滑的过渡过去。在利用和计算资源的两头还有一块微小的晋升空间,就是两者之间的匹配和部署的问题。在部署侧咱们也面临一些艰难和挑战。 第一,咱们在线业务集群的负载并不高。对于高吞吐的业务个别作为外围业务,这些业务要留肯定的闲暇。对于低负载的业务要有碎片化和长尾化,把线上负载率拉低了。一方面是在线业务负载并不高,另外一方面是大数据离线计算要贴地进行,造成空间不均,还有工夫上的不均,互联网业务有显著的波峰波谷。在线教育更加显著,波峰波谷会差两个数量级,咱们始终在为波峰进行买单。 如何做到降本增效下面列举了相干的问题和挑战,作业帮是如何来做的呢?咱们抉择和阿里云一起,抉择开源的力量再联合肯定的自研进行相干问题的解决。在利用层面,咱们晋升了支流技术栈的运行性能,对于应用最多的检索服务进行架构的重构,以此来晋升性能和运维效率。 在部署侧,通过 GPU 调度、ECS,在离线混部解决空间和工夫的不均。在资源 K8s 技术实现利用通明无感,这样替换机型变得更加快捷。 上面基于利用、部署简略来聊。 利用这一层对支流技术栈进行优化。第一,咱们是从新编译,咱们以 FastCGI 运行,对非线程平安进行编译,还有服务注册发现,摒弃之前传统基于名字服务,为了进一步晋升性能和成功率,咱们还做了 LocalDNS,应用更新的内核 4.10+,和阿里云内核团队进行相应的调优、优化解决一系列问题,解决 IPVS 过多的性能和稳定性问题。 最初得益于 Terway 网络以及网络做的长久化,能够对性能有更显著的晋升。实现之后裸框架能够有几倍的晋升,能够带来 43% 左右的收益。检索服务作为底层服务,对其性能要求比拟高,传统架构个别是计算存储耦合在一起的,随着底下文件数量越来越多,单机无奈包容,要进行切片。每个切片要高牢靠、高性能,由此造成二维矩阵,这种状况下存在诸多的问题,比如说像数据更新周期长、整体运维效率并不高,还有零碎的瓶颈迟迟得不到解决。 要解决上述问题要做计算和存储的拆散,咱们引入 Fluid 做一个要害的纽带。Fluid 是一款基于 K8s 的数据编排零碎,用于解决云原生过程中遇到的拜访数据过程简单、拜访数据慢等一系列问题,JindoRuntime 用于实现缓存的减速,当咱们应用 Fliud 和 JindoRuntime 实现整个检索系统的重构之后,取得的收益也比拟显著。 ...

April 6, 2022 · 1 min · jiezi

关于ai开发:AI开发平台系列1AI开发平台家族概览

【编者按:AI技术蓬勃发展,已逐步浸透进国民经济的各行各业。但企业在AI技术的利用仍面临数据、算法、技术等方面的挑战,需业余AI开发与计算工具帮忙企业升高AI利用门槛,减速翻新。在此趋势下,AI开发平台纷纷涌现。白海科技将通过系列文章,梳理典型AI开发平台,并对其技术与性能进行比照剖析,为宽广企业与行业搭档揭开AI开发平台的神秘面纱】 1. AI开发平台背景AI技术日益浸透进各行各业近年来,随着大数据、云计算等技术的长足进展,机器学习、计算机视觉、语音辨认、常识图谱等人工智能技术飞速发展,逐步逾越迷信与利用的“鸿沟”,日益浸透进国民经济的各行各业。除互联网等数字化原生企业作为AI技术利用的先行者外,批发、制造业等传统企业和政府机构也在踊跃拥抱人工智能这一颠覆性技术,以部分业务为试点进行摸索。 图1 人工智能技术在我国各行业的利用现状AI减速商业化仍需平台工具的助力尽管人工智能技术后劲微小,对企业的翻新和倒退具备颠覆性意义,但其在具体实际落地中仍面临来自数据、算法和算力层面的重重挑战。 数据方面:数据是算法开发与训练的养料,影响算法训练的成果与品质。数据层面的外围挑战是海量数据的治理与摸索,一方面半结构化和非结构化数据的激增,加剧数据接入、数据标准化和数据价值开掘的挑战;另一方面,理论业务和生产中的数据噪声较多,也极大晋升了数据管理和摸索的难度。此外,数据标注繁冗也是重要的挑战,海量数据标注通常消耗大量的工夫和精力。 算法方面:在算法开发与训练方面,随着算法模型日益宏大和简单,最外围的挑战是训练效率和计算性能。其次,AI开发、训练技术和工具门槛高,在AI业余人员广泛短缺状况下,企业对AI技术的摸索与利用阻力较高;此外,算法开发与生产波及多角色协同,目前不足无效的合作工具与平台,沟通不畅极大地影响效率。 算力方面:一方面算力老本居高不下,企业算法开发训练老本极高,传统企业累赘算力老本具备较大压力;另一方面,企业目前普遍存在算力资源利用效率低的问题,需要与算力供应的无效匹配和算力资源的高效调度均亟待优化。 面临以上挑战,企业亟需集数据接入、数据摸索、模型开发、算力资源调度治理等于一身的AI开发与生产根底工具,以帮忙其低成本、高效率地利用AI技术,减速产品和业务的翻新。AI开发平台产品亦由此应运而生。 2. AI开发平台分类与概述白海科技从产品逻辑和状态的角度对AI开发平台进行初步分类,与大家探讨。咱们将AI开发平台分为两大类——集成式机器学习平台和AI根底软件平台。 图2 次要AI开发平台类型 2.1 集成式机器学习平台 *集成式机器学习平台以算法开发全流程为导向,集成数据筹备、模型开发、模型训练与部署等环节的相应工具或子产品集,在同一平台环境中满足企业算法开发与生产的全生命周期需要。集成式AI开发平台致力于提供一站式“大而全”的服务,且冀望同时满足数据科学家/算法工程师的业余需要和不足算法开发根底的数据分析师和业务人员的要求,对企业客户和理论用户来说,通常会存在产品过于厚重简单的挑战。 云厂商是集成式机器学习平台的外围玩家之一,依靠本身云服务技术和资源,帮忙客户在云上疾速搭建机器学习模型。国内AWS,国内阿里云、百度、华为等均已推出机器学习平台产品。 AWS Sagemaker:亚马逊云科技于2017年11月推出了 Amazon SageMaker 机器学习平台服务,是寰球集成式机器学习平台的先行者。Sagemaker产品的广度和深度均处于行业标杆位置,广度方面不断完善AI开发各环节的工具,实现MLOps;深度方面,各环节工具绝对更加精细化,且仍在一直打磨与欠缺其易用性。 Azure ML:微软早在2015年即推出ML Studio(经典版)——繁难的拖拽式无代码开发环境。随着市场和技术的倒退,微软不断完善机器学习平台相干性能,打造Azure Machine Learning (Azure ML),为数据科学家和算法工程师提供机器学习全生命周期服务。目前Azure ML已成为MLOps标杆平台之一。 阿里云PAI:起初服务于阿里团体外部,2018年正式商业化,次要提供PAI-Studio可视化建模平台、PAI-DSW云原生交互式建模平台、PAI-DLC云原生AI根底平台、PAI-EAS云原生弹性推理服务平台四大子产品。PAI重点聚焦在模型的开发、训练和部署环节。基于阿里云的计算性能优化是其外围劣势,PAI可为AI开发与生产提供大规模训练和推理的算力,反对阿里巴巴容器服务(ACK)集群级别的资源隔离。 百度BML:2020年,百度智能云正式公布飞桨AI开发平台企业版BML4.0,简称BML。BML基于PaddlePaddle平台和组件进行封装,次要为企业提供低门槛算法开发解决方案——一站式人工智能建模与推理预测服务。开源平台中积攒的丰盛的算法库和面向业余AI开发人员的工具是其外围劣势,同时,百度BML反对宽泛对接百度云内外部数据源。 华为云ModelArts:2018年,华为推出ModelArts 1.0。ModelArts与Sagemaker类似,致力于提供欠缺的端到端机器学习服务。ModelArts与华为软硬件生态(Asend芯片、CANN算子、MoXing、MindSpore框架等)深度协同,极大晋升计算性能;同时在反对云-端-边疾速部署方面,也具备劣势。 (* 本文提及的平台与产品不具备任何排名和评估性质) 2.2 AI根底软件平台AI根底软件平台以用户交互和应用需要为导向,可依据用户在AI开发和生产中的理论须要,配置相应功能模块。相比集成式AI开发平台,AI根底软件平台工具对数据科学家和算法工程师而言更加轻量、易上手。 从产品类型来看,AI根底软件平台更加丰盛多样,各产品有差异化的性能和技术侧重点。典型的产品包含Databricks数据与AI平台、基于Kubernetes的机器学习开源工具集Kubeflow、以及以IDE为外围的Google Colab和JupyterLab等。值得一提的是开源工具平台Kubeflow,2017年12月该开源社区成立,历时两年,2020年3月Kubeflow1.0版本正式公布。Kubeflow的根底是Kubernetes,利用云原生技术的劣势,让算法开发人员疾速、便捷地部署和应用AI开发生产相干技术和软件。Kubeflow严格来说并非为一个对立的平台,而是一群涣散工具组件的汇合,各组件可独自应用也可协同配合应用。 白海科技也属于AI根底软件平台领域,致力于提供新一代AI根底软件平台,推出Baihai IDP(Intelligent Development Platform),为企业、数据科学家和算法工程师提供易用的集成开发环境、高性能的计算引擎和高效的数据管理平台。 3. AI开发平台的外围价值尽管两类平台在产品状态和侧重点方面具备差别,但均为数据科学家在数据管理、模型开发、计算与训练等算法开发外围环节提供了丰盛工具选项,帮忙其晋升开发效率,升高企业AI利用老本。 数据管理:算法开发与训练中,数据起源通常极为扩散,数据存储具备多样性。通过AI开发平台,可便捷对接各类数据源,对数据集的接入、增删进行对立治理,简化数据科学家/算法工程师在数据接入与治理环节中的工作。 建模筹备:数据品质是影响模型成果的要害,数据科学家和算法工程师通常需耗费大量工夫与精力在数据摸索、数据预处理和数据标注等筹备工作环节。AI开发平台通过提供可视化的数据摸索工具、数据荡涤和数据加强等预处理工具和数据标注辅助工具,最大化晋升算法开发人员的效率,使其更加专一在模型开发。 模型开发:模型开发方面,AI开发平台的外围价值是提供高易用性的集成开发环境。在这一方面,集成式机器学习平台和AI根底软件平台的性能侧重点具备显著差别。集成式机器学习平台通常同时提供交互式建模和利落拽的可视化建模两种开发工具,以满足业余数据科学家/算法工程师和低门槛业务人员/数据分析师的差异化需要,其中交互式开发环境以集成开源JupyterLab、Jupyter Notebook为主。AI根底软件平台则更侧重于服务数据科学家和算法工程师,为其提供反对多语言、环境治理、代码辅助、业余包库治理等性能的更便捷易用的交互式开发环境,帮忙其晋升效率。 计算与训练:模型训练须要耗费大规模算力资源和大量计算等待时间。AI开发平台通过提供分布式训练架构晋升训练效率、升高开发人员等待时间,通过弹性计算资源的治理,无效晋升算力资源利用率,节约算力老本。此外,白海IDP(Intelligent Development Platform)差异化地提供断点续跑和主动休眠性能,实现工作计算中间状态的保留与复原,确保曾经耗费的资源不被节约,并大幅节约计算与训练工夫。此外,局部集成式机器学习平台如AWS Sagemaker、百度BML开始提供模型评估工具,帮忙开发人员疾速辨认模型抉择和训练中的问题,助力模型迭代优化。 模型部署与运维:企业进行模型开发的最终目标是将其部署于业务利用中,实现商业价值。但模型的部署也面临重重挑战,如需反对不同的框架、异构硬件设施(CPU/GPU/NPU/FPGA等)等。AI开发平台,尤其是提供端到端服务的集成式机器学习平台,会帮忙企业进行模型全生命周期的治理,买通开发训练和生产环境,实现模型的疾速高效部署。 图3 次要AI开发平台性能比照* (* 依据各产品官网明确公开信息整顿,如有问题请及时分割咱们) 【预报:下一期,咱们将对局部云厂商集成式机器学习平台进行性能和技术的比照剖析,敬请期待】 白海科技:https://www.baihai.co

January 14, 2022 · 1 min · jiezi

关于ai开发:OGeek-Day北京站多场景智能助手专场12月11日邀您共享

OGeek Day北京站「多场景智能助手」,将于2021年12月11日14:00在北京The Future Hall将来场隆重揭幕,这也是继南京站「云生态构建」之后,OGeek Day系列技术沙龙的第二场。 本场沙龙由OPPO数智工程事业部、小布匠心学堂、小布助手联结主办。盛邀OPPO小布助手首席架构师万玉龙、爱数智慧创始人兼CEO张晴晴、OPPO语音合成负责人宋阳、有道人工智能团队技术总监孙艳庆、美团平台算法研究员杨帆等泛滥业内专家到场分享,与您独特摸索多场景下AI助手的演进和利用教训。 干货十足,多畛域AI技术落地实际 时至今日,在AI技术的参加下,金融业、教育业、生存服务等不同产业的产业模式产生了天翻地覆的变动,每个人与AI的分割也变得更加亲密,AI浸透在人们工作、生存的方方面面。 智能助手以后次要聚焦在哪些场景落地?OPPO在其智能助手小布助手的智能交互上,又进行了哪些方向的摸索与翻新实际?本场沙龙邀请5位AI专家到场分享,就AI助手在挪动设施、教育、生存服务电商平台等不同行业的利用案例进行解读,探讨AI助手背地的语音技术、大数据、人机交互等前沿技术发展趋势。心愿您无论位于哪个细分畛域赛道,都能有所播种。 扫描下方二维码一键报名 对于OGeek Day OGeek Day是由OPPO数智工程事业部主办的行业技术沙龙品牌,旨在为技术爱好者搭建一个技术交换和分享的开放平台。沙龙次要围绕万物互融的趋势方向,聚焦于智能终端生态提供平安高效的数据、算力、算法、云服务方面的前沿技术,包含但不限于云基础设施、数据平台、平安隐衷、机器学习、举荐搜索算法、对话式智能助手等。过来,团队曾经在全国多个城市发展了多种主题的沙龙流动,取得了现场观众的高度评价,也让技术爱好者从更多维度加深了对智能终端行业及其相干反对技术的了解。 OGeek Day北京站则是OPPO数智工程事业部面向AI畛域的技术爱好者重磅推出的技术沙龙,旨在为人工智能行业在智能终端及其他利用场景的倒退搭建技术交换和分享的开放平台,独特探讨业内多场景AI助手及语音、数据等技术的演进方向与将来趋势。在引领国内AI技术倒退浪潮的同时,为AI技术的落地提供更为多元化的场景撑持。

December 7, 2021 · 1 min · jiezi

关于ai开发:解读业界5种主流的深度网络模型

摘要:介绍目前业界次要的模型优化的办法,而后对模型量化进行重点论述,介绍量化的基本原理,办法分类,将来倒退,以及对前沿论文进行解读。本文分享自华为云社区《模型量化综述及利用》,作者:Alan_wen。 前言随着深度学习的一直倒退,神经网络广泛应用于不同的畛域,获得远超以往的性能,然而深度网络模型的参数也越来越大,重大制约着深度网络在业界的利用,因而本文行将介绍目前业界次要的模型优化的办法,而后对模型量化进行重点论述,介绍量化的基本原理,办法分类,将来倒退,以及对前沿论文进行解读。 1.模型优化的办法1.1设计高效的网络结构设计紧凑的网络结构能够实现模型的优化,比方提出的MobileNet系列网络,其中简洁的Depth-Wise Convolution和Point-Wise Convolution。然而目前手工设计的神经网络已逐步被AutoML和网络结构搜寻取代,通过网络结构搜寻能够失去高精度而构造又紧凑的网络。 1.2模型剪枝应用手工设计的网络结构个别能够取得较高的精度,然而微小的网络参数很难间接利用到工业界的产品中,个别会对模型进行剪枝,模型剪枝分为结构化剪枝和非结构化剪枝,非结构化剪枝个别很难实现底层减速,而模型剪枝也逐步被网络结构搜寻取代。 1.3常识蒸馏除了剪枝能够将一个大模型放大为小模型外,常识蒸馏同样能够实现该性能。常识蒸馏将原先大模型作为Teacher模型,而设计的小模型Student模型,通过soft-target疏导Student模型训练,实现Teacher模型的常识迁徙。 1.4稠密稠密次要是通过对网络权重或者特色进行稠密,能够通过正则化训练的形式实现稠密化,而网络权重稠密后个别通过与模型剪枝的形式联合,对不沉闷的权重进行裁剪,以压缩网络结构。 1.5模型量化模型量化是目前工业界最无效的模型优化办法之一,如FP32-->INT8能够实现4倍的参数压缩,在压缩内存的同时能够实现更疾速的计算,进行极其的二值量化实践上甚至能够实现32倍的压缩,然而适度的压缩会导致模型的精度疾速降落。下文将对模型量化进行具体介绍。 2.模型量化综述2.1什么是量化?在信息系统中量化是将信号的间断取值近似为无限多个离散值的过程 (能够认为是一种信息压缩的办法) 。 在计算机系统中,量化是指定点与浮点等数据之间建设一种数据映射关系,使得以较小的精度损失代价取得了较好的收益,可简略了解为用“低比特”数字示意FP32等数值。 在开始介绍量化的原理之前先问三个问题: 为什么量化有用? 因为卷积神经网络对噪声不敏感,量化相当于对原输出退出了大量的噪声。为什么用量化? • 模型太大,比方VGG19大于500MB的参数量,存储压力大;• 每个层的weights范畴根本都是确定的,且稳定不大,适宜量化压缩;• 此外,量化既缩小访存又可缩小计算量 为什么不间接训练低精度的模型? 因为训练须要反向流传和梯度降落,int8为离散数值,举个例子就是咱们的学习率个别都是零点几零点几的,int8不匹配无奈反向流传更新。2.2量化原理量化是指将信号的间断取值近似为无限多个离散值的过程。可了解成一种信息压缩的办法。在计算机系统上思考这个概念,个别用“低比特”来示意。 模型量化为定点与浮点等数据之间建设一种数据映射关系,使得以较小的精度损失代价取得了较好的收益。具体如下: R 示意实在的浮点值,Q 示意量化后的定点值,Z 示意 0 浮点值对应的量化定点值,S 则为定点量化后可示意的最小刻度。 由浮点到定点的量化公式如下: 浮点到定点的量化: 2.3量化根底概率平均与非平均量化: 如上图所示,量化可分为平均量化和非平均量化,上图左图的平均量化即为公式(1)形式的线性量化。而网络权重或者特色散布不肯定是平均的,简略的线性量化可能导致原网络显著的信息失落,因而还能够进行非平均量化,如应用Kmeans对网络权重进行聚类,失去不同的聚类核心,而后将聚类核心作为同一簇权重的量化代表。 对称与非对称量化: 在现实的状况下,如上图左图所示,特色散布比拟平均,因而能够对模型进行对称量化,即以0点值左右两边绝对值相等进行量化。然而很多状况下模型权重或特色是散布不平均的,不肯定在0点值两边对称,如上图右图所示,间接进行对称量化会某一侧的特色被重大压缩,大量失落网络信息,因而可为了尽可能以的放弃原网络示意的信息,可进行非对称量化。 动静与动态量化:有不同的校准办法来确定上图[, ]的剪切范畴。量化办法的另一个重要辨别因素是裁剪范畴的确定。能够动态地计算权重的范畴,因为在大多数状况下,参数在推断期间是固定的。然而,每个输出样本的激活映射是不同的。因而,有两种量化激活的办法:动静量化和动态量化。 在动静量化中,在运行时期间为每个激活映射动静计算此范畴。这种办法须要实时计算信号统计信息(最小值、最大值、百分位数等),这些统计信息可能具备十分高的开销。然而,动静量化通常能取得更高的精度,因为信号范畴是准确计算每个输出的。 另一种量化办法是动态量化,其中剪裁范畴是事后计算的,在推理期间是动态的。这种办法在推理过程不会减少任何计算开销,但与动静量化相比,它通常会导致更低的精度。预计算的一种风行办法是运行一系列校准输出以计算典型激活范畴。 总的来说,动静量化动静计算每个激活的裁切范畴,通常可实现最高精度。然而,动静计算裁切的范畴十分耗费计算,因而,业界最常应用动态量化,其中所有输出的裁切范畴都是固定的。 不同量化粒度: 在计算机视觉工作中,每层的激活输出有许多不同的卷积滤波器卷积,如图上所示。这些卷积滤波器的每个都能够具备不同的值范畴。因而,量化办法的一个区别是如何为权重计算裁切范畴[,]的粒度。可将它们分类为层量化,分组量化和通道量化: a)层量化:在这种办法中,裁切范畴是通过思考层卷积滤波器中的所有权重来确定的,如上图的第三列所示。通过该层中整个参数的统计信息(如最小、最大和百分位数等),而后对整层卷积滤波器应用雷同的裁切范畴。尽管这种办法实现非常简单,但它通常会导致次优解,因为每个卷积滤波器的范畴可能会有很大的变动,会使某些参数范畴绝对较窄的卷积核失去量化分辨率。b)分组量化:能够将层内的多个不同通道分组,以计算裁切范畴(激活或卷积核)。这对于单个卷积/激活中参数散布变化很大的状况可能会有所帮忙,分组量化能够在量化分辨率和计算开销之间建设一个很好的斗争。c)通道量化:裁切范畴的一个通常抉择是为每个卷积滤波器应用固定值,独立于其余通道,如上图最初一列所示。也就是说,每个通道都被调配了一个专用的缩放因子。这确保了更好的量化分辨率,并通常导致更高的精度,通道量化是目前用于量化卷积核的规范办法。 随机量化在推理过程中,量化计划通常是确定性的。然而,这并不是惟一的可能性,一些工作曾经摸索了随机量化用于量化感知训练以及升高精度训练。高层次的直觉是,与确定性量化相比,随机量化可能容许NN进行更多摸索。人们通常认为小的权重更新可能不会导致任何权重变动,因为四舍五入操作可能总是返回雷同的权重。然而,启用随机舍入可能会为NN提供转变的机会,从而更新其参数。上面公式为在Int量化和二值量化的随机舍入形式。 微调的办法 量化后,通常须要调整神经网络(NN)中的参数。这能够通过retraining模型来执行,该过程称为量化感知训练(QAT),也能够在不retraining的状况下实现,该过程通常称为训练后量化(PTQ)。上图显示了这两种办法之间的示意性比拟(左图为量化感知训练,右图为训练后量化),并在下文进一步探讨。 量化感知训练(伪量化)给定一个训练好的模型,量化可能会对训练好的模型参数引入扰动,这可能会将模型偏离以浮点精度训练时收敛到的点。能够通过应用量化参数从新训练NN模型来解决这个问题,以便模型可能收敛到具备更好损失的点。一种风行的办法是应用量化感知训练(QAT),其中通常的正向和反向传递是在浮点中对量化模型执行的,但模型参数在每次梯度更新后都会量化。特地是,在以浮点精度执行权重更新后,执行此投影十分重要。应用浮点执行向后传递十分重要,因为在量化精度中累积梯度可能会导致零梯度或具备高误差的梯度,特地是在低精度中。 反向流传中的一个重要奥妙之处是如何解决不可微量化算子(公式1)。在没有任何近似的状况下,这个运算符的梯度简直在任何中央都是零,因为在公式中的舍入操作是分段立体运算符。解决这个问题的一种风行办法是通过所谓的直通预计器(STE)近似该运算符的梯度。STE基本上疏忽了舍入操作,并应用标识函数近似它,如下图所示。 只管STE是粗略近似的,但QAT已被证实无效。然而,QAT的次要毛病是从新训练NN模型的计算成本。这种从新训练可能须要执行几百个epoch来复原精度,特地是对于低位精度量化。如果量化模型要在很长一段时间内部署,如果效率和准确性特地重要,那么在从新训练方面的投资可能是值得的。然而,状况并不总是这样,因为有些模型的寿命绝对较短。 训练后量化代替低廉的QAT办法是训练后量化(PTQ)执行量化和权重调整,不进行任何微调。因而,PTQ的开销非常低,而且往往能够忽略不计。与QAT不同,QAT须要足够数量的训练数据进行再培训,PTQ还有一个额定的劣势,即它能够利用于数据无限或未标记的状况。然而,与QAT相比,这通常是以更低的精度为代价的,尤其是对于低精度量化。 Zero Shot(即data-free)如目前所探讨的,为了在量化后实现最小的精度降落,咱们须要拜访整个或者局部训练数据。首先,咱们须要晓得激活的范畴,以便咱们能够剪裁值并确定适当的缩放因子(文献中通常称为校准)。其次,量化模型通常须要微调来调整模型参数并复原精度降落。然而,在许多状况下,在量化过程中,不可能拜访原始训练数据。这是因为训练数据集要么太大,无奈散发,要么是独有的(例如Google的JFT-300M),要么是因为平安或隐衷问题(例如医疗数据)而敏感的。目前提出了几种不同的办法来解决这一挑战,咱们称之为Zero Shot量化(ZSQ)。依据高通的一个工作的启发[2],能够形容两个不同级别的Zero Shot量化: 第1级:无数据,无微调(ZSQ+PTQ)。第2级:无数据,但须要微调(ZSQ +QAT).级别1容许更快、更容易的量化,而无需任何微调。微调通常很耗时,而且通常须要额定的超参数搜寻。级别1可通过权重平衡或者BatchNorm的统计参数实现校对,无需微调。然而,级别2通常会导致更高的精度,因为微调有助于量化模型复原精度降落,特地是在超低位精度设置中。级别2微调的输出数据次要通过GAN生成,可依据量化前的模型,应用GAN生成近似的散布数据,而无需再拜访内部数据。 Zero Shot(又名date-free)量化执行整个量化,而不拜访训练/验证数据。这对于心愿放慢客户工作负载部署而无需拜访其数据集的提供商来说尤其重要。此外,这对于平安或隐衷问题可能限度对训练数据的拜访的状况十分重要。 2.4量化进阶概念FP32,伪量化和定点量化部署量化NN模型有两种常见的办法,模仿量化(又名伪量化)和仅整数量化(又名定点量化)。在模仿量化中,量化的模型参数存储在低精度中,但操作(如矩阵乘法和卷积)是用浮点算法执行的。因而,量化参数须要在浮点运算之前反量化,如图上图(两头)所示。因而,人们不能齐全受害于疾速高效的低精度逻辑与模仿量化。然而,在纯整数量化中,所有操作都应用低精度整数算术执行,如上图(右)所示。这容许整个推理能够用无效的整数算法执行,而不须要对任何参数或激活进行任何浮点反量化。 一般来说,应用浮点算法在全精度下执行推理可能有助于最终量化精度,但这是以无奈从低精度逻辑中受害为代价的。低精度逻辑在提早、功耗和区域效率方面与全精度逻辑相比具备多重劣势。与模仿/假量化相比,仅整数量化和二进量化更可取。这是因为仅整数应用较低精度的逻辑进行算术,而模仿量化应用浮点逻辑来执行运算。然而,这并不意味着伪量化永远没有用途。事实上,伪量化办法对带宽限度而不是计算限度的问题是无益的,例如在举荐零碎中,对于这些工作,瓶颈是内存占用空间和从内存加载参数的老本。因而,在这些状况下,执行伪量化是能够承受的。 混合精度量化很容易看到,随着咱们应用较低精度量化,硬件性能失去了进步。然而,将模型平均量化到超低精度可能会导致精度显著降落。能够通过混合精度量化来解决这个问题。在这种办法中,每个层都以不同的位精度量化,如上所示。这种办法的一个挑战是,抉择此位设置的搜寻空间在层数上是指数级的。目前提出了不同的办法来解决这一微小的搜寻空间。a)为每个层抉择这种混合精度实质上是一个搜寻问题,并且曾经提出了许多不同的搜寻办法。 b)另一类混合精度办法应用周期函数正则化来训练混合精度模型,通过主动辨别不同层及其在精度方面的变动重要性,同时学习它们各自的位宽。 c)HAWQ 引入了一种基于模型二阶灵敏度的主动办法来查找混合精度设置。混合精度量化已被证实是一种无效的硬件高效办法,用于不同神经网络模型的低精度量化。在这种办法中,NN的层被分组为对量化敏感/不敏感,每个层应用高/低位。因而,人们能够最大限度地缩小精度降落,并依然受害于缩小内存占用和低精度量化更快的减速。 硬件感知量化量化的指标之一是进步推理时延。然而,并非所有硬件在量化某个层/操作后都提供雷同的速度。事实上,量化的益处取决于硬件,片上内存、带宽和缓存层次结构等许多因素都会影响量化速度。 思考这一事实对于通过硬件感知量化实现最佳效益十分重要。因而须要模仿硬件提早,在硬件中部署量化操作时,需测量不同量化位精度的每层的理论部署提早。 蒸馏辅助量化量化中一个乏味的工作路线是联合模型蒸馏以进步量化精度。模型蒸馏是一种应用精度较高的大模型作为老师,帮忙训练紧凑型学生模型的办法。在学生模型的训练过程中,模型蒸馏提出利用老师产生的软概率,而不是仅仅应用ground-true类标签,该软概率可能蕴含更多输出信息。也就是说,总体损失函数包含学生损失和蒸馏损失。 极致量化二值化是最极其的量化办法,其中量化值被限度为1位示意,从而将内存需要大幅升高32×。除了内存劣势外,二进制(1位)和三元(2位)操作通常能够应用位算术无效计算,并能够在更高精度(如FP32和INT8)上实现显著的减速。然而,简略的二值化办法将导致精度显著降落。因而,有大量工作提出了不同的解决方案来解决这一问题,次要分为以下三类: a. 量化误差最小化(应用多个二值矩阵组合模仿近似,或者应用更宽网络)b. 改良损失函数(例如退出蒸馏损失)c. 改良训练方法(如反向流传时用更润滑的函数取代sign) ...

October 11, 2021 · 2 min · jiezi

关于ai开发:大力出奇迹揭秘昇腾CANN的AI超能力

摘要:CANN(Compute Architecture for Neural Networks)异构计算架构,是以晋升用户开发效率和开释昇腾AI处理器极致算力为指标,专门面向AI场景的异构计算架构。1、引言从2016年,战败世界顶级棋手,强势将了人类一军的AlphaGo, 到2020年,会写小说、编剧本、敲代码,科科满分样样全能的GPT-3, 再到2021年,最靠近人类中文理解能力,泛化力超群的盘古大模型… 近几年的人工智能畛域,像开了挂一样,一直刷新人类认知,颠覆人类设想… 和人类把握某项技能一样,训练一个足够聪慧的AI算法模型往往须要成千上万的数据量。以GPT-3为例,其参数量曾经达到1750亿、样本大小有45TB之多,单次训练工夫以月为单位,算力诉求已是挡在AI赛道上的绊脚石! 同时,随着人工智能利用日益成熟,文本、图片、音频、视频等非结构化数据的解决需要呈指数级增长,数据处理过程从通用计算逐渐向异构计算适度。 华为推出的昇腾AI根底软硬件平台。其中,昇腾AI处理器+ 异构计算架构CANN,带着与生俱来的超强算力和异构计算能力,软硬件强强联合,正逐步成为促成AI产业疾速落地的催化剂。 CANN(Compute Architecture for Neural Networks)异构计算架构,是以晋升用户开发效率和开释昇腾AI处理器极致算力为指标,专门面向AI场景的异构计算架构。对上反对支流前端框架,向下对用户屏蔽系列化芯片的硬件差别,以全场景、低门槛、高性能的劣势,满足用户全方位的人工智能诉求。 2、支流前端框架兼容,疾速搞定算法移植目前人工智能畛域内,AI算法模型搭建方面的技能曾经是炉火纯青,市面上用于AI模型搭建的深度学习框架,除了华为开源的MindSpore,还有Google的TensorFlow、Facebook的PyTorch、Caffe等。 CANN通过Plugin适配层,能轻松承接基于不同框架开发的AI模型,将不同框架定义的模型转换成标准化的Ascend IR(Intermediate Representation)表白的图格局,屏蔽框架差别。 这样,开发者只须要非常少的改变,即可疾速搞定算法移植,体验昇腾AI处理器的磅礴算力,大大减少了切换平台的代价,就说它香不香? 3、简略易用的开发接口,让小白也能玩转AI依附人工智能实现智能化转型,简直成为了各行各业的必修课,CANN秉承极简开发的理念,提供了一套简略易用的AscendCL(Ascend Computing Language)编程接口,为开发者屏蔽底层处理器的差别,你只须要把握一套API,就能够全面利用于昇腾全系列AI处理器。 同时,可能满足开发者可能在将来CANN版本升级的状况下,仍然能够做到后向全面兼容,且运行效率不打折扣! 简略的AI利用开发接口 人工智能寄托着人类对将来美好生活的神往,当咱们每天面对“这是什么垃圾,要扔在哪个桶里”的灵魂拷问的时候,一个AI垃圾分类桶利用,就能把你从生灵涂炭中解救出来。 AscendCL提供了一套用于开发深度神经网络推理利用的C语言API库,兼具运行时资源管理、模型加载与执行、图像预处理等能力,可能让开发者轻松解锁图片分类、指标辨认等各类AI利用。并且能够做到即反对通过支流开源框架调用AscendCL库,也反对间接调用CANN凋谢的AscendCL编程接口。 上面教你5步搞定AI垃圾分类利用: 运行治理资源申请:用于初始化零碎外部资源。加载模型文件并构建输入内存:将开源模型转换成CANN反对的om模型,并加载到内存;获取模型根本信息,构建模型输入内存,为后续模型推理做筹备。数据预处理:对读入的图像数据进行预处理,而后构建模型的输出数据。模型推理:依据构建好的模型输出数据进行模型推理。解析推理后果:依据模型输入,解析模型的推理后果。灵便的算子开发接口 当你的AI模型中有CANN尚未反对的算子,或者想要批改已有算子以晋升计算性能时,能够利用CANN凋谢的自定义算子开发接口,得心应手地开发你想要的算子。 面向不同程度的AI开发者,CANN提供高效(TBE-DSL)和业余(TBE-TIK)两种算子开发模式,可灵便满足不同档次程度的开发者。 其中,TBE-DSL的入门难度较低,它能够主动实现数据的切分和调度,开发者只需关注算子自身的计算逻辑,无需理解硬件细节,即可开发出高性能算子。 TBE-TIK绝对难一些,不像TBE-DSL只是在高层形象编程,而是提供指令级编程和调优能力,开发者须要手工实现类指令级调用,这样能充沛开掘硬件能力,实现更加高效和简单的算子。 便捷的IR构图接口 另外,开发者还能够通过标准化的Ascend IR(Intermediate Representation)接口,抛开深度学习框架自身,间接调用CANN中的算子库,构建出能够在昇腾AI处理器上执行的高性能模型。 4、1200+高性能算子库,筑起磅礴算力源泉基于深度学习框架构建的模型,其实是由一个个计算单元组成,咱们称这些计算单元为算子(Operator,简称Op),它对应着特定的计算逻辑。 算子在硬件上的减速计算形成了减速神经网络的根底和外围。目前CANN提供了1200+种深度优化的、硬件亲和的算子,正是如此丰盛的高性能算子,筑起了磅礴的算力源泉,让你的神经网络「刹时」减速。 NN(Neural Network)算子库:CANN笼罩了包含TensorFlow、Pytorch、MindSpore、ONNX框架在内的,罕用深度学习算法的计算类型,在CANN所有的算子中占有最大比重,用户只须要关注算法细节的实现,大部分状况下不须要本人开发和调试算子。BLAS(Basic Linear Algebra Subprograms)算子库:BLAS为根底线性代数程序集,是进行向量和矩阵等根本线性代数操作的数值库,CANN反对通用的矩阵乘和根底的Max、Min、Sum、乘加等运算。DVPP(Digital Video Pre-Processor)算子库:提供高性能的视频编解码、图片编解码、图像裁剪缩放等预处理能力。AIPP(AI Pre-Processing)算子库:次要实现扭转图像尺寸、色域转换(转换图像格式)、减均值/乘系数(图像归一化),并与模型推理过程交融,以满足推理输出要求。HCCL(Huawei Collective Communication Library)算子库:次要提供单机多卡以及多机多卡间的Broadcast,allreduce,reducescatter,allgather等汇合通信性能,在分布式训练中提供高效的数据传输能力。5、高性能图编译器,赋予神经网络超能力世间最苦是期待,等红绿灯,等寒暑假,等外卖,等那个对的人… 人工智能畛域也是一样,随着神经网络构造的疾速演进,单纯利用手工优化来解决AI模型性能问题越来越容易呈现瓶颈,CANN的图编译器像是一个魔法师,将具备较高形象度的计算图,依据昇腾AI处理器的硬件构造特点,进行编译优化,从而可能高效执行。 魔法师到底有哪些「神操作」呢? 主动算子交融:基于算子、子图、SCOPE等多维度进行主动交融,无效缩小计算节点,大幅缩小计算工夫。 Buffer交融:针对神经网络计算大数据吞吐,memory bound问题,通过缩小数据搬运次数、晋升昇腾AI处理器内缓存利用率,晋升计算效率。 咱们对Buffer交融前后做一比对: 交融前,算子1在昇腾AI处理器上计算完后,将数据从昇腾AI处理器内的缓存buffer搬运到内部存储,算子2从内部存储获取数据作为输出,搬入缓存buffer进行计算。交融后,算子1计算实现后,数据保留在缓存buffer,算子2从缓存buffer间接获取数据进行算子2的计算,无效缩小数据搬运次数,晋升了计算性能。 全图下沉:昇腾AI处理器,集成了丰盛的计算设施资源,比方AICore/AICPU/DVPP/AIPP等,正是得益于昇腾AI处理器上丰盛的土壤,使得CANN不仅能够将计算局部下沉到昇腾AI处理器减速,还能够将控制流、DVPP、通信局部一并下沉执行。尤其在训练场景,这种把逻辑简单计算图的全副闭环在AI处理器内执行的能力,能无效缩小和Host CPU的交互工夫,晋升计算性能。 异构调度能力:当计算图中含有多类型的计算工作时,CANN充分利用昇腾AI处理器丰盛的异构计算资源,在满足图中依赖关系的前提下,将计算任务分配给不同的计算资源,实现并行计算,晋升各计算单元的资源利用率,最终晋升计算工作的整体效率。 6、主动混合精度,无效达到收益均衡顾名思义,主动混合精度是一种主动将半精度和单精度混合应用,从而减速模型执行的技术,在大规模模型训练场景下有着不可或缺的位置。 单精度(Float Precision32,FP32)是计算机罕用的一种数据类型,半精度(Float Precision16,FP16)则是一种绝对较新的浮点类型,在计算机中应用 2 字节(16 位)存储,实用于精度要求不高的场景。 ...

September 22, 2021 · 1 min · jiezi

关于ai开发:AI云原生把卫星遥感虐的死去活来

摘要:遥感影像,作为地球自拍照,可能从更广大的视角,为人们提供更多维度的辅助信息,来帮忙人类感知自然资源、农林水利、交通灾祸等多畛域信息。本文分享自华为云社区《AI+云原生,把卫星遥感虐的死去活来》,作者:tsjsdbd。 AI牛啊,云原生牛啊,所以1+1>2?遥感影像,作为地球自拍照,可能从更广大的视角,为人们提供更多维度的辅助信息,来帮忙人类感知自然资源、农林水利、交通灾祸等多畛域信息。 AI技术,能够在很多畛域超过人类,要害是它是主动的,省时又省力。可显著晋升遥感影像解译的工作效率,对各类地物元素进行自动化的检测,例如建筑物,河道,路线,农作物等。能为智慧城市倒退&治理提供决策依据。 云原生技术,近年来堪称是一片炽热。易构建,可反复,无依赖等劣势,无论从哪个角度看都与AI算法天生一对。所以大家也能够看到,各畛域的AI场景,大都是将AI推理算法运行在Docker容器外面的。 AI+云原生这么6,那么强强联手后,地物分类、指标提取、变化检测等高性能AI解译不就手到擒来?咱们也是这么认为的,所以基于AI+Kubernetes云原生,构建了反对遥感影像AI解决的空天地平台。 不过现实是好的,过程却跟西天取经个别,九九八十一难,最终修成正果。 业务场景介绍遇到问题的业务场景叫影像交融(Pansharpen),也就是对地球自拍照进行“多镜头单干美颜”性能。(能够了解成:手机的多个摄像头,同时拍照,合并成一张高清黑白大图)。 所以业务简略总结就是:读取2张图片,生成1张新的图片。该性能咱们放在一个容器外面执行,每张交融后的后果图片大概5GB。 问题的要害是,一个批次业务量须要解决的是3000多张卫星影像,所以每批工作只须要同时运行实现3000多个容器就OK啦。云原生YYDS! 业务架构图示为了帮忙了解,这里合成应用云原生架构实现该业务场景的逻辑图如下: 在云上,原始数据,以及后果数据,肯定是要寄存在对象存储桶外面的。因为这个数据量,只有对象存储的价格是适合的。(对象存储,1毛钱/GB。文件存储则须要3毛钱/GB) 因为容器之间是相互独立无影响的,每个容器只须要解决本人的那幅影像就行。例如1号容器解决 1.tif影像;2号容器解决2.tif影像;一次类推。 所以管理程序,只须要投递对应数量的容器(3000+),并监控每个容器是否胜利执行结束就行(此处为简化阐明,理论业务场景是一个pipeline解决流程)。那么,需要曾经依照云原生现实的状态合成,咱们开始起(tang)飞(keng)吧~ 注:以下形容的问题,是通过梳理后出现的,理论问题呈现时是相互交叉盘根错节的。 K8s死掉了当作业投递后,不多久零碎就显示作业纷纷失败。查看日志报调用K8s接口失败,再一看,K8s的Master都曾经挂了。。。 K8s-Master处理过程,总结版: 发现Master挂是因为CPU爆了所以扩容Master节点(此次反复N次);性能优化:扩容集群节点数量;性能优化:容器分批投放;性能优化:查问容器执行进度,少用ListPod接口;具体版: 看监控Master节点的CPU曾经爆掉了,所以最简略粗犷的想法就是给Master扩容呀,嘎嘎的扩。于是从4U8G 3 一路扩容一路测试一路失败,扩到了32U64G 3。能够发现CPU还是爆满。看来简略的扩容是行不通了。 3000多个容器,投给K8s后,大量的容器都处于Pending状态(集群整体资源不够,所以容器都在排队呢)。而正在Pending的Pod,K8s的Scheduler会不停的轮训,去判断是否有资源能够给它安顿上。所以这也会给Scheduler微小的CPU压力。扩容集群节点数量,能够缩小排队的Pod数量。 另外,既然排队的太多,不如就把容器分批投递给K8s吧。于是开始分批次投递工作,想着别一次把K8s压垮了。每次投递数量,缩小到1千,而后到500,再到100。 同时,查问Pod进度的时候,防止应用ListPod接口,改为间接查问具体的Pod信息。因为List接口,在K8s外部的解决会列出所有Pod信息,解决压力也很大。 这一套组合拳下来,Master节点终于不挂了。不过,一头问题按上来了,另一头问题就冒出来了。 容器跑一半,挂了尽管Master不挂了,然而当投递1~2批次作业后,容器又纷纷失败。 容器挂掉的处理过程,总结版: 发现容器挂掉是被eviction驱赶了;Eviction驱赶,发现起因是节点报Disk Pressure(存储容量满了);于是扩容节点存储容量;缩短驱赶容器(被动kill容器)前的容忍工夫;具体版: (注:以下问题是定位梳理后,按程序出现给大家。但其实出问题的时候,程序没有这么敌对) 容器执行失败,首先想到的是先看看容器外面脚本执行的日志呗:后果报日志找不到~ 于是查问Pod信息,从event事件中发现有些容器是被Eviction驱赶干掉了。同时也能够看到,驱赶的起因是 DiskPressure(即节点的存储满了)。 当Disk Pressure产生后,节点被打上了驱赶标签,随后启动被动驱赶容器的逻辑: 因为节点进入Eviction驱赶状态,节点下面的容器,如果在5分钟后,还没有运行完,就被Kubelet被动杀死了。(因为K8s想通过干掉容器来腾出更多资源,从而尽快退出Eviction状态)。 这里咱们假如每个容器的失常运行工夫为1~2个小时,那么不应该一产生驱动就马上杀死容器(因为曾经执行到一半的容器,杀掉从新执行是有老本节约的)。咱们冀望应该尽量期待所有容器都运行完结才入手。所以这个 pod-eviction-timeout 容忍工夫,应该设置为24小时(大于每个容器的均匀执行工夫)。 Disk Pressure的间接起因就是本地盘容量不够了。所以得进行节点存储扩容,有2个抉择:1)应用云存储EVS(给节点挂载云存储)。 2)扩容本地盘(节点自带本地存储的VM)。 因为云存储(EVS)的带宽切实太低了,350MB/s。一个节点咱们能同时跑30多个容器,带宽齐全满足不了。最终抉择应用 i3类型的VM。这种VM自带本地存储。并且将8块NVMe盘,组成Raid0,带宽还能x8。 对象存储写入失败容器执行持续纷纷失败。 容器往对象存储写入失败处理过程,总结版: 不间接写入,而是先写到本地,而后cp过来。将一般对象桶,改为反对文件语义的并行文件桶。具体版: 查看日志发现,脚本在生成新的影像时,往存储中写入时出错: 咱们整集群是500核的规模,同时运行的容器数量大略在250个(每个2u2g)。这么多的容器同时往1个对象存储桶外面并发追加写入。这个应该是导致该IO问题的起因。 对象存储协定s3fs,自身并不适宜大文件的追加写入。因为它对文件的操作都是整体的,即便你往一个文件追加写入1字节,也会导致整个文件从新写一遍。 最终这里改为:先往本地生成指标影像文件,而后脚本的最初,再拷贝到对象存储上。相当于减少一个长期存储直达一下。 在长期直达存储抉择中,2种本地存储都试过: 1)块存储带宽太低,350MB/s影响整体作业速度。2)能够抉择带本地存储的VM,多块本地存储组成Raid阵列,带宽速度都杠杠滴。 同时,华为云在对象存储协定上也有一个扩大,使其反对追加写入这种的POSIX语义,称为并行文件桶。后续将一般的对象桶,都改为了文件语义桶。以此来撑持大规模的并发追加写入文件的操作。 K8s计算节点挂了So,持续跑工作。然而这容器作业,执行又纷纷失败鸟~ 计算节点挂掉,定位梳理后,总结版: 计算节点挂掉,是因为好久没上报K8s心跳了。没上报心跳,是因为kubelet(K8s节点的agent)过得不太好(死掉了)。是因为Kubelet的资源被容器抢光了(因为不想容器常常oom kill,并未设置limit限度)为了爱护kubelet,所有容器全都设置好limit。具体版,间接从各类奇葩乱象等问题动手: 容器启动失败,报超时谬误。 而后,什么PVC共享存储挂载失败: 或者,又有些容器无奈失常完结(删不掉)。 查问节点Kubelet日志,能够看到充斥了各种超时谬误: 啊,这么多的底层容器超时,一开始感觉的Docker的Daemon过程挂了,通过重启Docker服务来试图修复问题。 前面持续定位发现,K8s集群显示,好多计算节点Unavailable了(节点都死掉啦)。 持续剖析节点不可用(Unavailable),能够发现是Kubelet良久没有给Master上报心跳了,所以Master认为节点挂了。阐明不仅仅是Docker的Daemon受影响,节点的Kubelet也有受影响。 那什么状况会导致Kubelet,Docker这些主机过程都不失常呢?这个就要提到Kubernetes在调度容器时,所设计的Request和Limit这2个概念了。 Request是K8s用来调度容器到闲暇计算节点上的。而Limit则会传递给Docker用于限度容器资源下限(触发下限容易被oom killer 杀掉)。后期咱们为了避免作业被杀死,仅为容器设置了Request,没有设置Limit。也就是每个容器理论能够超出申请的资源量,去抢占额定的主机资源。大量容器并发时,主机资源会受影响。 ...

August 18, 2021 · 1 min · jiezi

关于ai开发:AI开发者十问10分钟了解AI开发的基本过程

摘要:从AI开发模型、框架、工具,到晋升开发效率的学习方法,为AI开发者逐个解答。本文分享自华为云社区《10分钟理解AI开发的根本过程》,作者:简略保持。 1、AI开发到底在开发什么?一个硬件开发者的工作成绩是一个布满集成电路的服务器,开机就能够运行某种软件。一个挪动端开发者的工作成绩能够是一个手机APP,包含了大量二进制数据,可被麒麟芯片间接运行。一个AI开发者的工作成绩则是一个模型,模型实质上是一个函数:f(图片) = "How are you"f(猫图片) = "Cat"无论这个函数有如许简单,有多少个变量或者参数,AI开发都是试图找出这个函数的表达式。 2、AI模型(函数)是怎么开发进去的?AI模型实质是一个函数,想要找到这个函数精确的的表达式,仅凭逻辑是无奈推导进去的,而是训练进去的,咱们喂给机器目前已有的数据,机器就会从这些数据里去找出一个最能满足(专业术语称为拟合)这些数据的函数,当有新的数据须要预测的时候,机器就能够通过这个函数去预测出这个新数据对应的后果是什么。 对于一个具备某种智能能力而言,个别具备以下因素:数据+算法+模型,开发的过程,就是一直地用数据和算法使得模型越来越迫近真实情况,留神是迫近而非推导,这个过程称为训练。 3、AI模型的训练过程是怎么样的?咱们来用一个可能辨别猫和狗图片的模型来帮忙了解训练的过程:“数据”就是咱们须要筹备大量标注过是“猫”还是“狗”的图片;“算法”指的是构建模型时咱们打算用浅层的网络还是深层的,如果是深层的话咱们要用多少层,每层有多少神经元、性能是什么等等,也就是网络架构的设计,相当于咱们确定了咱们的预测函数应该大抵构造是什么样的。 咱们用Y=f(W,X,b)来示意这一函数,X是已有的用来训练的数据(猫和狗的图片),Y是已有的图片数据的标签(该图片是猫还是狗), W和b是什么意思呢?一开始,咱们的确不晓得,这两个参数是须要机器学习后本人找进去的,找的过程也就是训练的过程。 “模型”指的咱们把数据带入到算法中进行训练,机器就会去一直地学习,当机器找到最优W和b后,咱们就说这个模型是训练胜利了,这个时候咱们的函数Y=f(W,X,b)就齐全确定下来了 而后咱们就能够在已有的数据集外给模型一张新的猫或狗的图片,那模型就能通过函数Y=f(W,X,b)算进去这张图的标签到底是猫还是狗,这就是推理。 简略总结下:不论是最简略的线性回归模型、还是较简单的领有一亿个参数的深度神经网络模型,实质都是寻找一个可能良好拟合目前已有数据的函数Y=f(W,X,b),并且咱们心愿这个函数在新的未知数据上也可能体现良好。 4、AI为什么要强调大量数据?因为只有数据量足够大,模型才可能学习到足够多且精确的辨别猫和狗的特色,能力在辨别猫狗这个工作上,体现出足够高的准确性;当然数据量不大的状况下,咱们也能够训练模型,不过在新数据集上预测进去的后果往往就会差很多。 假如辨认猫的模型要十分精确,就须要各种光照条件、各种背景、各种花色的猫的照片,不仅要有波斯猫,还要有加菲猫,直到模型蕴含了咱们能想到的各种猫的特色,一个人脸识别模型,大概须要几百万张照片,能力达到可用,驰名的Imagenet数据集,大概蕴含了1400万张图片,极大中央便了开发者。 5、在AI开发过程中一个好的开发工具能够帮忙开发者做什么?假如没有一个现成的开发平台,首先你须要学会罕用的AI开发语言python,python是整个过程并不耗精力的环节,其次你须要学习传统机器学习和深度学习相干算法,这块算是破费最多精力和工夫的环节,而后尽可能去了解和推导算法,而后用python代码去实现算法再训练模型,代码能力很重要,不然你的模型都建不起来。 而后你发现了一个开发框架,华为MindSpore或者谷歌Tensorflow,你会发现并不需要那么高的数学门槛,不是说要深刻理解算法能力更好训练出好模型,模型损失函数优化办法MindSpore/Tensorflow都内置好了,而且只须要简略的调用就好了,如果说MindSpore/Tensorflow是能够把一个模型代码量大大减少的框架,那么Keras就是让模型代码量能够少到惊人的框架,例如下面的猫狗分类器,15行代码就能够搞定,几十行代码就把一个领有着卷积层、池化层和全连贯层的较高级优化办法的深度学习网络架构写进去。 一个开发框架就像安卓框架为手机APP开发者提供的很多根底性能,如果没有这个框架,一个简略的给好友发送图片的性能,你须要间接和操作系统的各个底层功能模块打交道了。 6、AI开发,有了开发框架就够了吗?当然不是,一个开发框架,只是帮开发者做了一些开发者没必要实现的局部,或者实现起来代价太大的局部,一个残缺的AI开发过程,从筹备数据、数据预处理、数据标注、抉择算法、训练、调参、部署,这和一个一般的APP开发的过程差不多。如同生产一辆汽车,一个自动化、高科技的总装车间是必不可少的,但冲压、涂装车间也制约着汽车的生产效率,那么制约AI开发效率最头痛的是什么,请看下一个问题。AI开发过程中最大的艰难是什么? 7、AI开发过程中最大的艰难是什么?要筹备大量的数据,后面曾经提过,更可怕的是数据标注,据统计,数据处理和标注环节大概占整个开发周期的70%。所谓标注,就是给数据打标签,通知机器一张图片到底是猫还是狗,标注是一件在AI开发者看来技术含量非常低的工作,曾经属于劳动密集型产业,业界有大量的第三方公司,专门从事数据标注工作。以主动驾驶为例,车头上的摄像机在实时拍摄车前的所有画面,主动驾驶标注的过程要标注前车、障碍物、行人、信号灯、指示牌、批示线等等,这个过程如果齐全依赖人工标注,主动驾驶将永远难以商用。要重复迭代训练,训练并不是欲速不达,要重复批改各种参数,使得模型的准确度逐渐晋升,这个过程,目前须要丰盛的教训,如果没有短缺的算力,训练一次,期待三天,而后调参,再期待三天,如果要迭代20次,这个过程是很耗费人的意志。所以,即便不思考老本因素,算力也是制约AI遍及最大的问题。8、怎么解决AI开发者的问题?正如开发一个office软件,不可能麻烦到用记事本敲代码,你须要一个像visual studio一样的集成开发环境,须要一个像Git一样的代码管理工具,同理,开发一个AI模型,你也须要一个集成开发环境,而且须要一个版本管理工具。 提供给开发者代码编辑环境、语法查看、编译器等性能,一个AI的开发平台,同样也要能帮开发者标注数据、创立模型训练作业、部署模型等性能,有了开发平台,开发平台要帮忙开发者把所有苦活累活都干完,让开发者聚焦在最外围的代码和算法上。 当然,要提供给开发者易获取、性能强、价格低的算力,进步模型训练的迭代速度。 9、有没有更快地晋升AI开发速度的方法?当然有。从根本上晋升开发效率,开掘到最实质,只有两个方法:重用和自动化,否则只能一行一行代码干起。 开发一个APP,能够从最根本的代码写起,能够复用开发者共享的开发包、函数等,华为云开源镜像站有大量的java开发包,就是这个意思,也能够复用一个残缺的APP,批改下界面配色,就变成了本人的APP,这是复用。要保障APP的品质,能够手工测试,也能够用自动化测试工具。如果这些都不想做,能够也能够用一个现成的工具,用可视化的办法生成一个APP,当然APP的格调只能从工具已有的模板中选取。开发者始终在试图用各种方法,升高开发的工作量。 AI开发也是一样的。能够找现成的数据集、找现成的标注好的数据集,现成的算法和模型,用主动部署工具将模型部署到端边云。当然,也可用主动学习性能,只有提供原始数据,由零碎帮忙开发者实现模型构建、算法抉择和主动训练,开发者能够间接看到后果。最简略的方法,就是寻找一个曾经训练好的模型,在软件中间接调用。 基于此,一个好的AI开发平台,要从各个维度去晋升开发效率,这些性能往往都是很多小细节,算力强、训练快,只是实现了必须的最根本的性能。 10、华为将提供什么开发工具给开发者?ModelArts,一个AI开发平台 ,用于AI模型开发HiLens,一个视觉AI利用开发平台,用于AI利用开发,利用外面的模型由ModelArts提供。以上两款产品以云服务的形式在华为云EI提供服务。 Atlas 200 developer kit(开发板)是ModelArts 的线下开发套件。 点击关注,第一工夫理解华为云陈腐技术~

July 27, 2021 · 1 min · jiezi

关于ai开发:面试官说一下Jena推理

摘要:本文介绍了Jena的推理子系统,并构建了一个简略的RDF图。基于该RDF图,咱们搭建了一个Jena推理引擎,并进行自动化推理。本文分享自华为云社区《常识推理之基于jena的常识推理(三)》,作者:北纬30度 。 Jena推理子系统旨在容许将一系列推理引擎或推理器插入Jena。这些引擎用于派生从一些根本RDF以及任何可选的本体信息中取得RDF断言,以及与推理器关联的公理和规定。此机制的主要用途是反对应用RDFS和OWL等语言,这些语言容许从实例数据和类形容中推断出额定的事实。该机制的设计非常通用,它包含一个通用规定引擎,可用于许多RDF解决或转换工作。 应用程序通常通过应用ModelFactory将数据集与某个推理器关联以创立新模型来拜访推理机。对创立的模型的查问不仅将返回原始数据中存在的语句,而且还将返回应用推理器实现的规定或其余推理机制从数据中导出的其余语句。 可用的推理 Jena散布中包含许多预约义的推理: 传递推理器:提供存储和遍历类和属性情的反对。这仅实现了rdfs:subPropertyOf和rdfs:subClassOf的传递和反身属性。 RDFS规定推理器:实现RDFS要求的可配置子集。 OWL、OWL Mini、OWL微推理器:一组有用但不残缺的OWL/Full language的OWL/Lite子集的实现。 通用规定推理器:基于规定的推理器,反对用户定义的规定。反对正向链接、表反向链接和混合执行策略。 构建RDF图jena的 org.apache.jena.rdf.model包用于创立和操作RDF图的类和接口。其中ModelFactory提供了创立规范RDF Model的办法。 上面的例子展现了如何构建一个RDF图 Model onlineModel = ModelFactory.createDefaultModel(); String prefix = "http://www.example.org/mingjiao#"; Resource mingjiao = onlineModel.createResource(prefix + "mingjiao"); Resource zhangwuji = onlineModel.createResource(prefix + "zhangwuji"); Resource weifuwang = onlineModel.createResource(prefix + "weifuwang"); Resource baimeiyingwang = onlineModel.createResource(prefix + "baimeiyingwang"); Property zhizhang = onlineModel.createProperty(prefix + "zhizhang"); Property leader = onlineModel.createProperty(prefix + "leader"); Property shuyu = onlineModel.createProperty(prefix + "shuyu"); onlineModel.add(zhangwuji, zhizhang, mingjiao); onlineModel.add(zhangwuji, shuyu, mingjiao); onlineModel.add(weifuwang, leader, zhangwuji); PrintUtil.registerPrefix("", prefix); StmtIterator i = onlineModel.listStatements(null, null, (RDFNode)null); System.out.println("推理前"); while (i.hasNext()) { System.out.println('-' + PrintUtil.print(i.nextStatement())); }output:-(:baimeiyingwang :leader :zhangwuji)-(:zhangwuji :zhizhang :mingjiao)-(:weifuwang :leader :zhangwuji)首先,通过ModelFactory创立规范RDF Model。 ...

July 26, 2021 · 1 min · jiezi

关于ai开发:AI运动阿里体育端智能最佳实践

简介: 过来一年,阿里体育技术团队在端智能方面一直摸索,特地在静止衰弱场景下实现了实际落地和业务赋能,这就是AI静止我的项目。AI静止我的项目践行静止数字化的理念,为静止人口的上翻提供了重要撑持,迈出了阿里体育端智能静止畛域的第一步,为用户带来了更加乏味的新鲜玩法。上线以来,我的项目受到了宽泛关注。 作者 | 其声起源 | 阿里技术公众号 一 背景过来一年,阿里体育技术团队在端智能方面一直摸索,特地地,在静止衰弱场景下实现了实际落地和业务赋能,这就是AI静止我的项目。AI静止我的项目践行静止数字化的理念,为静止人口的上翻提供了重要撑持,迈出了阿里体育端智能静止畛域的第一步,为用户带来了更加乏味的新鲜玩法。上线以来,我的项目受到了宽泛关注。 2020年因新冠疫情,传统的线下静止受到限制,居家静止逐步成为新趋势。基于阿里巴巴弱小的技术积淀,阿里体育团队适应线上静止的迫切需要,开发出基于AI辨认的智能静止,为用户提供了简便、好玩的新型居家静止形式。只需一部手机和3-4平米的场地,就能够发展AI静止。静止时,用户关上乐能源APP,将手机固定在场地一侧,适当设置手机角度,依据利用的主动语音提醒调整身材与手机间隔,直到人体齐全位于辨认框内,即可开始静止。 二 端智能实际通过⼀年的摸索和欠缺,从验证DEMO到囊括多种动作、反对能力迁徙的AI静止智能平台,阿⾥体育建设了系统化的客户端静止智能体系。端智能静止体系基于阿里深度推理引擎在手机端进行推理,辨认⼈体姿势和动作,剖析人体姿势、静止轨迹、动作角度等,给出实时反馈并进行动作纠正,通过能力的模块化组合,现已反对十多种静止动作和数十种玩法,实现了静止与AI的有机整合,让用户的线上静止变得上手简略而又充斥趣味。 三 技术支持端智能静止的根本技术思路是使用MNN推理引擎进行推理和姿势辨认。即 实时检测图像及视频中的人体轮廓,定位人体14个要害骨骼点,包含头、肩、脚等重点关节部位。基于这些关键点信息,连点成线、连线造成动作,能够剖析人体姿势、动作角度和静止轨迹。通过动作姿势匹配,检测用户静止动作,实现动作的计时与计数。同时,实时检测剖析动作标准化水平,给出状态反馈,纠正用户动作,实现互动,进步交互体验。传统静止形式下,用户在静止时能够及时失去现场辅助人员(教练员、考官或亲友)的实时揭示和帮忙。端智能静止形式下,用户在做动作时只能与手机利用进行交互。交互的能力和辨认程度会受到推理模型能力、静止场景复杂度、静止匹配辨认算法等一系列因素的影响。在端智能静止能力的摸索和落地过程中,会遇到一些新的问题或者难题,如人机方位匹配、骨骼点辨认丢点、点误辨认、二维失真、用户挪动、手机晃动、场景噪声等。这些问题不一一赘述,仅选取几个有代表性的问题进行分享: 动作的有效性判断及要害算法设计,以进步动作匹配精度,这是智能静止能力的根底。在保障辨认成果的前提下,采取有效措施,升高挪动终端的资源耗费,以晋升用户体验,次要体现是费电和发热。采取更加灵便的形式,加重挪动端测试的人力和工夫耗费,进步开发和测试效率,为团队的交付保障提供无力撑持。晋升辨认精度 智能静止带给用户的最直观、最根底的感触就是动作计数准确性。如果动作辨认计数不准,用户应用APP的积极性就会打消,参与性就不高。为此,咱们要首先解决计数准不准的问题。 智能静止计数的基本原理是,把一个残缺动作分解成若干个小步骤,而后对每个步骤触发辨认和判断,全副步骤遍历后,对整个动作进行有效性确认。如果无效,计数加1;反之就反复上述过程。简言之,智能静止辨认与计数是一个状态机。将一个静止动作离散化,形象成N个状态机,{s(0),s(1),s(2),...,s(n-1)},状态机依照肯定的程序顺次进行检测,全副检测到象征用户实现了该动作,对计数加1;若某个状态未被检测到,触发对应反馈信息,重置状态机进入新的循环。每一个状态机对应着肯定的触发条件,通过实时骨骼点坐标与状态的循环匹配性检测,获取一个动作匹配后果。 不难看出,动作辨认精度与动作匹配算法严密相干,算法匹配成果好,辨认精度就越高。为进步动作辨认精度,能够选取影响匹配算法的因素作为切入点和突破口,骨骼点、状态机、匹配等。相应的解决办法为: 进步骨骼点稳定性,确保状态匹配后果精度。抉择骨骼点稳固、易辨认、具备代表性的动作作为状态机。帧率要可能笼罩一个动作的所有状态机。上面将举例进行阐明。 骨骼点辨认准确度对动作匹配有着重要影响。如下图所示:测试对象左手臂骨骼点辨认呈现谬误。如果径直进行匹配,显然会失去谬误的后果。针对这种状况,该当利用好用户的历史动作信息,在动作匹配算法上对动作匹配进行纠正。 还有一种状况,用户曾经实现某种动作的全副动作,如下图中的开合跳,因为采样帧率低,无奈捕捉和辨认全副开合跳静止过程中的全副姿势,造成某个状态匹配不胜利,最终导致开合跳动作匹配谬误。对于低帧率问题,可从模型和输出源两个方面着手。对于模型来说,在不影响动作辨认精度状况下,采纳精简模型,缩小推理耗时。对不同的终端设备,采纳不同分辨率的输出源,升高原始数据处理操作耗时。 升高性能耗费 受物理条件影响,手机端算力和存储空间无限。此外,深度学习推理自身蕴含大量的运算,资源耗费大。如果间接在端上进行深度学习推理,再思考上手机端本身业务(如摄像头、录制视频、动画成果)的资源耗费,CPU和内存开销就显著增长,直观体现是手机发热显著,电量耗费很快。智能静止在端智能上落地时,要特地思考升高性能耗费,这对于晋升用户体验来说至关重要。 升高整体性能耗费,要追根溯源,从升高单帧耗费处着手。单帧解决能够划分为三个阶段:别离是推理前、推理和推理后。 这三个阶段别离起着不同的作用。推理前阶段次要实现格局转换,将摄像头获取的流数据转换为推理须要的数据格式,如YUV格局、RGBA格局。推理阶段次要实现计算输入骨骼点坐标。对输出的帧数据,通过推理引擎,执行一系列算法,输入推理后果,如姿势辨认是将输出图片的RGBA数据转换成骨骼点坐标数据。推理后阶段次要实现展现,进行渲染操作和业务相干操作,如UI展现、动画成果展现。 相应地,可对上述三个阶段别离进行优化。其中,推理过程中的优化由阿里深度推理引擎MNN负责,这里不作探讨。对于推理前阶段的数据转换,应缩小不必要的两头转换环节,间接将摄像头流数据转换成为须要的格局。如推理应用RGBA裸数据,就间接将摄像头流数据转换为RGBA格局。对于推理后阶段,应依据承载的平台抉择适合的渲染计划,升高渲染耗费。对于iOS平台,可间接采纳Metal进行渲染提效。 进步测试效率 AI智能静止是阿里体育团队在体育数字化上的一次大胆尝试。在利用开发特地是测试环节中,投入相当的人力、设施及工夫,不断完善利用性能、优化利用性能、晋升用户体验。此外,AI静止辨认的成果测试受环境因素的影响较大,如光线、背景、间隔、人物在摄像头中的成像大小等。这就对测试形式提出了考验。 以传统测试计划为例:个别是真人、实地、实时动作,测试人员手动记录后果再预先剖析,如下图所示。 不难想象,AI智能静止所运行的手机有着不同的品牌、型号、零碎版本和性能参数,AI智能静止的用户可能处于不同的应用环境,若采纳传统的测试形式,对不同因素进行测试笼罩,对测试人员、测试工夫提出了很大的挑战,测试的一致性与精度也难以保障。具体起因如下: 人工成本较高:一次测试需多名同学配合,耗时耗力。测试环境较繁多:无奈应答线上简单多样的环境。测试后果量化难。无奈对模型的精度、算法的效率、动动匹配准确度、精度晋升度、性能耗费等量化评估。问题定位难。预先剖析排查,无奈复现定位线上客诉问题。传统的测试方法难以为继,为克服上述艰难,阿里体育技术团队开发了一套AI静止主动测试工具,专门用于解决AI智能我的项目测试难题,实现了线上问题的快捷定位与回归,并对模型算法精度实现量化评估。 主动测试工具的解决思路是:批量解析视频集,模仿实在场景,获取骨骼点数据,进行业务后果测试,主动生成测试报告。具体技术计划如下图所示: 采纳新的测试工具后,显著地升高了人工成本、进步了测试效率。具体测试成果如下: 须要留神的是,测试工具的成果与测试样本的数量相干,样本越丰盛,测试精度越好。 四 业务后果阿里体育智能静止现已反对数十种静止动作,开发出丰盛的AI训练课程,同时通过静止能力的模块化组合,反对将来一直拓展新的动作。 自AI智能静止诞生以来,乐能源APP陆续上线了直臂开合跳、俯卧撑等上肢动作,臀桥、深蹲等下肢动作以及跳绳、开合跳等全身动作等多种静止模式,使得用户能够不受工夫和场地限度,随时随地和敌人一起参加到AI静止,晋升了APP的用户吸引力和趣味性。此外,AI训练课程翻新引进明星资源,推动全年52周每周7天不间断的“明星陪练”课,以明星带动用户养成静止习惯、高兴静止、爱上静止。阿里体育团队也将一直地依据用户须要打造更多的静止玩法,丰盛产品性能,造成阿里体育端智能的独特业务品牌和翻新产品特色。 原文链接本文为阿里云原创内容,未经容许不得转载。

July 16, 2021 · 1 min · jiezi

关于ai开发:AI插件推荐

1)AI插件举荐2)VideoPlayer在Android上播放视频黑屏3)Renderer.GetPropertyBlock问题4)RectMask2D问题 这是第257篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AIQ:咱们新我的项目有些AI,想用一些插件来实现,不知大佬们有没有什么AI插件举荐?据我所知有Behavior Designer ,Playmaker ,Bolt 这些,求科普几款性能和性能都不错的,谢谢。 A1:举荐 NodeCanvas。性能亮点:● 三个可齐全切换的图形模块供你抉择。● 具备所有预期业余性能的时尚且直观的可视化节点编辑器。(全副撤销/重做、放大/放大、迷你地图、多选、复制、复制/粘贴、JSON 导入/导出、群组和正文等)● 图形、GameObject和全局黑板变量,以创立可重复使用和以智能体为核心的参数行为。● 具备实例或动态属性和字段的数据绑定变量。● 应用UNET的网络同步变量(Network Sync Variable)。(因为现已弃用UNET,所以会将其替换为新的网络解决方案)● 预制件可笼罩的变量。● 主动转换不同的变量数据类型。● 反对所有变量类型开箱即用。● 跨所有数量的智能体的可重复使用行为图。● 所有三种图形模块之间的无缝子图形嵌套。(行为子树、子状态机、子对话树)● 残缺的子图变量参数化和贴图。● 模块化动作和条件工作设计。● 条件反馈行为树评估。● 有条件和基于栈的FSM过渡。● 丰富多彩和内容翔实的运行时可视化调试。● 节点/工作浏览器,用以搜寻、珍藏和浏览内置文档。● 首选类型配置器,以依据我的项目需要定制与类型相干的菜单。● 图形迷你地图,以轻松浏览图形。● 图形控制台,单击鼠标即可主动定位故障节点。● 图形浏览器,用以搜寻和查找图中的节点、工作和参数。● 图形重构器,以批量重构缺失的节点、工作和反射援用。● 实时运行时编辑,以更疾速地实现设计指标。● 通过优化的反射工作,以主动集成现有的代码 API。● 内置事件零碎,以在图形中沟通和传输数据。● 清晰且记录欠缺的 API,以扩大 NodeCanvas 框架并创立本人的动作、条件、节点,甚至全新的图形模块。● 对象和属性绘制器,以所有可能的形式自定义查看器。● 与大量第三方资源集成。● 与FlowCanvas flowScripts无缝集成。● 用户敌对,轻量级,无需设置。● 性能稳固,初始化后零调配,异步图加载。● 反对所有平台开箱即用。● 蕴含全副C#源代码。 具体链接如下:https://assetstore.unity.com/... Behaviac也不错,惋惜TX不怎么保护了:https://github.com/Tencent/be... 感激郑骁@UWA问答社区提供了答复 A2:搬运一位大佬的举荐:Baracuda。https://github.com/Unity-Tech...感激芭妮妮@UWA问答社区提供了答复 A3:搬运一个对于游戏AI框架抉择的帖子:《What A.I technique is most suited to my game, FSM, BT, GOAP》 附一个AI相干Blog:AI分享站http://www.aisharing.com/sitemap ...

July 7, 2021 · 1 min · jiezi

关于ai开发:AI框架中图层IR的分析

摘要:本文重点剖析一下AI框架对IR有什么非凡的需要、业界有什么样的计划以及MindSpore的一些思考。本文分享自华为云社区《MindSpore技术专栏 | AI框架中图层IR的剖析》,原文作者:元气满满的少女月 。 IR(Intermediate Representation即两头示意)是程序编译过程中,源代码与指标代码之间翻译的中介,IR的设计对编译器来说十分要害,好的IR要思考从源代码到指标代码编译的齐备性、编译优化的易用性和性能。而AI框架实质的作用又是什么呢?AI框架实质的作用在于把一个把用户的模型表白翻译到可执行的代码,而后进行高效执行(训练和推理),其中从用户的模型表白(例如深度神经网络)到最初可执行的代码就是个编译器的行为,这个编译器也有一个IR,它的设计对AI框架的齐备性/灵活性/易用性/性能都起到至关重要的作用。 本文重点剖析一下AI框架对IR有什么非凡的需要、业界有什么样的计划以及MindSpore的一些思考。首先带大家理解下通用的编译器IR的分类以及各自特点。 业界IR的介绍一、IR依据其组织构造[1],能够分为:Linear IR(线性IR)、Graphical IR(图IR)、Hybrid IR(混合IR),其中 Linear IR(线性IR):相似某些抽象机的伪代码,对应的算法通过迭代来遍历简略的线性操作序列 Hybrid IR(混合IR):联合了图IR和线性IR的因素。一种常见的混合IR应用底层的线性IR来示意无循环代码块,应用图IR来示意这些块之间的控制流 Graphical IR(图IR):将编译过程的常识/信息保留在图中,对应的算法通过对图中的对象(节点、边、列表和树)操作来形容 线性IR的一个例子是堆栈机代码(Stack-Machine Code),它是一种单地址代码,假设操作数存在一个栈中。大多数操作从栈取得操作数,并将其后果推入栈中。例如:表达式 b-a*3对应的堆栈机代码如下: push 3push amultiplypush asubstractLLVM IR是一个典型的混合IR,它蕴含了两个档次(CFG+BB): 顶层是控制流图(Control Flow Graph,简写为CFG),来示意基本块(Basic Block,简写为BB)间的控制流。CFG的每个节点(Node)为一个基本块,基本块b1和b2之间有一条边(Edge):b1->b2,如果控制流可能从基本块b1的最初一条指令流向基本块b2的第一条指令 底层是基本块,在基本块中,每条指令是以SSA(Static Single Assignment)模式出现,这些指令形成一个指令线性列表 Sea of Nodes IR(by Cliff Click)是一种典型的图IR[2],在这种IR中,简化了CFG图中BB+SSA指令的两层构造,去除了BB,剩下只蕴含指令的一层构造。它通过引入了非凡的REGION、IF、PROJECTION指令,将BB块中的全序指令放松为显式的数据依赖和管制依赖,并且对管制依赖和数据依赖采纳雷同的示意形式和解决形式,这样就简化了IR的剖析和变换。如下为一个简略的IR示例: 在这个示例中,方框为图的节点,示意SSA指令,箭头为图的边;实心箭头示意管制依赖;空心箭头示意数据依赖。从这个示例中能够看到此IR中显式的蕴含了use-def依赖,不须要进行额定的计算。 基于此IR中显式的use-def信息,能够不便的实现两类优化:Parse time优化(Pessimistic)全局优化(Optimistic) 在Parse的时候,因为还没有程序的全副信息,所以只可做部分的优化,如窥孔优化(例:常量折叠,Identity-function)。通过设计适合的类及继承体系,能够应用简略的算法实现peephole优化: 对于全局优化,比方Sparse Conditional Constant Propagation(SCCP),也能够很简略的实现;首先是基于图中显式的use-def计算出def-use chains,而后能够很容易的实现SCCPSea of Nodes IR提供了一种十分重要的思路:将依赖信息显式的示意在图IR中。FIRM IR中连续了这个思路 二、从罕用编程语言的角度来剖析IR,咱们又能够看到IR的模式分为了两个不同的营垒:一类是命令式编程语言的编译器IR,另外一类是函数编程语言的编译器IR命令式编程语言的编译器IR以SSA为根本的组成模式,这里就不在赘述了,上面重点介绍一下函数式编程语言的IR,在函数式编程语言的IR中,CPS或者ANF是其根本的组成模式1. Continuation-passing style(CPS)直译为:间断传递格调CPS 示意这样一种模式:一个函数 f 除了它本身的参数外,总是有一个额定的参数continuationcontinuation也是一个函数,当f实现了本人的返回值计算之后,不是返回,而是将此返回值作为continuation的参数,调用continuation。所以CPS模式的函数从模式上看它不会return,当它要return 的时候会将所有的参数传递给continuation,让continuation持续去执行。比方: def foo(x):return x+1转换为CPS模式,k就是一个continuation: def foo(x,k):k(x+1)直观上看,函数不“return”,而是“continue”CPS的长处是让如下的信息显式化:过程返回(调用一个continuation),两头值(具备显式的名称),求值程序,尾调用(采纳雷同的continuation调用一个过程)比方如下的一段python代码,求小于n的所有素数的积。 def prodprimes(n): if n == 1: return 1 if isprime(n): return n * prodprimes(n - 1)return prodprimes(n - 1)当采纳CPS模式示意时: ...

June 30, 2021 · 4 min · jiezi

关于ai开发:THORMindSpore-自研高阶优化器源码分析和实践应用

摘要:这篇文章跟大家分享下THOR的实际利用。THOR算法的局部内容以后曾经在MindSpore中开源本文分享自华为云社区《MindSpore 自研高阶优化器源码剖析和实际利用》,原文作者:HWCloudAI 。 这篇文章跟大家分享下THOR的实际利用。THOR算法的局部内容以后曾经在MindSpore中开源,源码地位: https://gitee.com/mindspore/mindspore/blob/master/mindspore/nn/optim/thor.py MindSpore中应用THOR训练网络非常简单,上面用四行代码先来带大家看一下怎么应用。 from mindspore.nn.optim import THOR #援用二阶优化器#创立网络net = Net() #调用优化器opt = THOR(net, lr, Tensor(damping), config.momentum, config.weight_decay, config.loss_scale, config.batch_size, split_indices=split_indices) #减少计算图晋升性能model = ConvertModelUtils().convert_to_thor_model(model=model, network=net, loss_fn=loss, optimizer=opt, loss_scale_manager=loss_scale, metrics={'acc'}, amp_level="O2", keep_batchnorm_fp32=False, frequency=config.frequency) #训练网络model.train(config.epoch_size, dataset, callbacks=cb, sink_size=dataset.get_dataset_size(), dataset_sink_mode=True)导入二阶优化器THOR所须要的包第一行代码惯例创立网络第二行代码定义咱们应用的优化器THOR第三行代码是为了减少计算图从而使THOR达到更优性能第四行代码训练网络咱们再具体开展介绍下。首先导入MindSpore所需的二阶优化器的包,位于 mindspore.nn.optim 而后创立你所需的网络;接着定义THOR优化器,传入网络信息和THOR所需的超参信息(如学习率,正则化项系数等); 再调用 convert_to_thor_model函数,该函数是通过减少计算图使THOR达到更优性能,什么意思呢,自身网络运行的时候是一张计算图,THOR中会应用过期的二阶信息,通过额定减少一张计算图,两张计算图别离执行更新二阶矩阵和不更新二阶矩阵的操作从而达到更优性能(PS. MindSpore反对动动态图,在这里为了更好的性能应用的是动态图模式,对这块内容比拟感兴趣的同学,能够点这个链接:https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/white_paper/MindSpore_white_paper.pdf); 最初,调用model.train就能够开始训练啦。简略介绍了下怎么应用,接下来咱们来看下它的源码。 源码剖析init 函数用于THOR的初始化,须要传入THOR所需的超参和网络结构,THOR反对GPU和Ascend,别离为class THOR_GPU(Optimizer)和 class THOR_Ascend(Optimizer),这两个类之间的次要差异是算子不同。上面咱们以 class THOR_Ascend(Optimizer)为例,来剖析一下。 class THOR_Ascend(Optimizer): def __init__(self, net, learning_rate, damping, momentum, weight_decay=0.0, loss_scale=1.0, batch_size=32, decay_filter=lambda x: x.name not in [], split_indices=None): params = filter(lambda x: x.requires_grad, net.get_parameters()) super(THOR_Ascend, self).__init__(learning_rate, params, weight_decay, loss_scale) if isinstance(momentum, float) and momentum < 0.0: raise ValueError("momentum should be at least 0.0, but got momentum {}".format(momentum)) self.momentum = Parameter(Tensor(momentum, mstype.float32), name="momentum") self.params = self.parameters self.moments = self.params.clone(prefix="moments", init='zeros') self.hyper_map = C.HyperMap() self.opt = P.ApplyMomentum() self.net = net self.matrix_A_cov = ParameterTuple(filter(lambda x: 'matrix_A' in x.name, net.get_parameters())) self.matrix_G_cov = ParameterTuple(filter(lambda x: 'matrix_G' in x.name, net.get_parameters())) ...MindSpore中所有优化器都继承了 class Optimizer,该基类中定义了一些根本函数(如获取学习率,梯度缩放等)。THOR初始化时将传进去的超参定义为类属性不便调用,并且定义了后续计算会应用到的算子。 ...

June 26, 2021 · 4 min · jiezi

关于ai开发:应对全场景AI框架部署挑战MindSpore四招让你躺平

摘要:所谓全场景AI,是指能够将深度学习技术疾速利用在云边端不同场景下的硬件设施上,包含云服务器、挪动终端以及IoT设施等等,高效运行并能无效协同。本文分享自华为云社区《AI框架的挑战与MindSpore的解决思路》,原文作者:HWCloudAI 。 全场景对立AI框架的挑战所谓全场景AI,是指能够将深度学习技术疾速利用在云边端不同场景下的硬件设施上,包含云服务器、挪动终端以及IoT设施等等,高效运行并能无效协同。对于框架而言,波及三大挑战:疾速部署、高效运行、端云协同。 疾速部署如何将训练好的模型疾速地部署到云服务器、挪动终端以及各种IoT设施上进行推理甚至增量训练? 云服务器上推理通常以Service的形式进行部署,训练好的模型间接通过近程接口调用(gRPC/REST)推送到云服务器上,用户调用云推理服务接口进行推理。对于挪动终端和IoT设施,因为硬件资源限度,云侧的模型和推理运行框架体积太大,无奈间接部署,因而模型的压缩和运行框架的轻量化成为挪动终端和IoT设施上部署的要害。 面向挪动终端和IoT设施轻量化的挑战,提供独立的轻量化的端侧AI框架是比拟好的解决方案,同时这样的轻量化框架可能还不止一种状态,比方相似于智能手机这些富终端和相似耳环这些瘦终端面临的挑战就不一样,富终端个别存储空间还是比拟富余的,有肯定的算力;瘦终端的条件则要刻薄的多,底噪要求管制在百K级别,这样你就不能放一个运行时进去,同时还要思考给AI开发者一个通用的解决方案。 有了轻量化的端侧框架以及好的模型压缩转换技术是否就能够实现疾速部署的目标?其实还有问题,因为如果咱们端侧的架构与云侧的架构是拆散的、实现是不统一的,如模型的IR不同、算子的定义不同、推理的API接口不同,那很可能导致云侧训练的模型无奈顺利的转换到端侧去执行,云侧的推理代码无奈在端偏重用。 个别框架的从云侧训练模型到端侧部署的流程如下: 这种形式目前存在一些问题: 第一个问题:两套模型定义很难保持一致,比方云侧和端侧的算子常常会呈现一方缺失的问题,导致模型转换失败。第二个问题:云和端都须要的性能会反复开发,并可能有不统一,比方为了晋升推理性能而进行的fusion优化须要端云两边都做一遍,数据处理的不统一导致精度问题等。第三个问题:云侧训练好的模型在端侧进行在线训练须要绝对简单的转换。对于拆散的端云框架的不统一问题,是否能够通过如ONNX这样的规范去解决?很难,起因在于,AI产业的疾速倒退,新的算子类型疾速涌现,规范实际上很难跟得上,所以解决的路径还是应该着落在AI框架上。 高效运行全场景的高效运行,合成下来就是高效的算子、高效的运行时以及高效的模型,实现异构硬件的最大算力,晋升AI算法的运行性能和能效比。 算子的性能,须要从算法和底层指令优化多个层面进行优化。比方卷积,Winograd算法相比于Im2Col+GEMM,在很多经典卷积神经网络上性能就有很好的性能晋升。 然而,并不是所有的场景下Winograd的算法都优于Im2Col+GEMM。在上面的图中,当shape为224x224x3x64时,Winograd的性能反而有所好转。因而,在不同条件下抉择最优的算法对性能至关重要。 算法层面的优化,更多的是通过缩小运行时的计算次数(乘法)来晋升性能,而指令层面的优化则是为了更充沛的利用硬件的算力。对于CPU硬件,影响指令执行速度的关键因素包含了L1/L2缓存的命中率以及指令的流水,通用的优化办法有: 抉择正当数据排布,如NHWC、NC4HW4等等寄存器的正当调配,将寄存器依照用处,能够划分为feature map寄存器、权重寄存器和输入寄存器,寄存器的正当调配能够缩小数据加载的次数。数据的预存取,通过prefetch/preload等指令,能够提前将数据读到cache中。指令重排,尽量减少指令的pipeline stall。向量化计算,应用SIMD指令,如ARM NEON指令,X86 SSE/AVX指令等。这些优化须要对硬件架构有深刻的理解。 端侧运行时的性能次要面临异构和异步并行的挑战,从模型角度看,大部分模型在推理的时候看上去是串行执行的,不过如果把算子外部关上,变成细粒度的kernel,整体执行流还是一个dataflow的图,存在不少异步并行的机会,同时端侧存在大量的异构设施,如果一个模型在执行的时候应用多种类型的设施,两头也存在不同的流水线。 模型的性能,次要还是靠离线的优化和tuning,这一块业界也曾经许多实际了,总的思路次要是规则化的交融pass和离线的算子tuning联合。 端云协同端云协同次要波及三块:云侧训练-端侧推理、云侧训练-端侧增量训练-端侧推理、云/端的联邦学习 云侧训练-端侧推理,重点须要解决怎么生成最适宜端侧的模型,包含模型压缩和自适应模型生成。模型压缩技术咱们后面曾经做了介绍。对于神经网络主动搜寻(NAS),通常被用来生成满足肯定限度条件(例如,微控制器上极致的内存限度)的模型,NAS技术最大的问题在于如何缩短搜寻模型的工夫。 云侧训练-端侧增量训练,重点须要解决云和端的模型高效转换的问题,这个后面章节曾经介绍。 联邦学习,目前业界次要有两个技术流派,一个是横向联邦学习,数据上进行聚合,典型的利用场景是,挪动设施上的隐衷爱护问题,像广告等场景须要建设数百万挪动设施之间的联邦模型,防止用户隐衷数据上传到数据中心。第二个是纵向联邦学习,维度上进行聚合,比拟看重跨机构跨组织大数据单干场景,尤其是银行金融场景的数据安全和隐衷爱护问题。 挪动设施隐衷爱护的架构 跨机构跨组织大数据单干架构 联邦学习在技术上还有许多挑战,比方跨设施的零碎异构以及算法迭代过程中的通信,将会影响最终联邦聚合的效率和精度;联邦学习的过程中的模型加密办法,因为即便通过权重也能够揣测出局部隐衷信息,以及客户端的投毒攻打、反抗样本等;另外一个挑战次要是架构上的,目前联邦学习还没有一个对立的架构,同时反对横向联邦学习和纵向联邦学习。 MindSpore全场景对立架构的解决方案端云对立内核MindSpore在框架的设计上进行了分层设计,将端云共用的数据结构和模块解耦进去,在满足端侧轻量化的同时,放弃了端云架构的一致性,真正实现一次训练无缝部署、端云训练共模型。 【对立IR】MindSpore core的对立IR,保障了端云模型/算子定义的一致性,使得云侧训练的模型能够无缝的部署在端侧。同时,对于端侧训练,能够和云侧应用统一的IR进行模型的重训。 对立IR定义了模型的逻辑构造和算子的属性,并且与模型的长久化是解耦的。开源我的项目中用于长久化数据的形式,应用最为宽泛的,就是protobuffer和flatbuffer。两者相比,protobuffer性能更为弱小,应用也更加的灵便,然而相应的,也更加的重量级。flatbuffer更加的轻,反序列化的速度也更快。MindSpore将对立IR的逻辑数据长久化成不同的物理模式,云侧长久化成protobuffer格局,端侧长久化成flatbuffer,兼顾了数据的一致性与部署的轻量化。 【公共pass】为了晋升性能,训练好的模型在执行推理前,须要提前做一些优化伎俩,这些优化包含了交融、常量折叠、数据排布的调整等等。对于端云共享的优化,同样也是蕴含在MindSpore core模块中,只不过对于云侧推理,这些优化是在线推理时去执行的,而对于挪动终端这些优化在执行推理前离线实现。 【对立接口】MindSpore设计了提供端云对立的C++接口。对立的C++接口的用法尽量与Python接口放弃了统一,升高了学习老本。通过对立接口,用户能够应用一套代码在不同的硬件上进行推理。 轻量化技术【MindSpore for micro】相比于挪动终端,IoT设施MCU芯片资源更加的无限,因而,如何在IoT设施上部署深度学习模型将更具备挑战。 下面的表中,右边示意了云、手机、MCU上内存和存储的大小,左边示意了ResNet-50、MobileNet-V2、int8量化的MobileNetV2占用的存储和内存。 针对IoT设施,MindSpore设计了MindSpore for micro的计划。 部署在云服务器和挪动终端上的推理框架,通过模型解释的形式来进行推理,这样的形式能够反对多个模型以及跨硬件平台,然而须要额定的运行时内存(MCU中最低廉的资源)来存储元信息(例如模型构造参数)。MindSpore for micro的CodeGen形式,将模型中的算子序列从运行时卸载到编译时,并且仅生成将模型执行的代码。它不仅防止了运行时解释的工夫,而且还开释了内存使用量,以容许更大的模型运行。这样生成的二进制大小很轻,因而具备很高的存储效率。 MindSpore for micro的个性将会在1.2的版本中开源。 【量化】MindSpore自适应混合低比特量化技术:依据模型构造和指标压缩率主动搜寻出对应层量化bit数,无需量化专家深度参加。量化因子可训练,在低比特量化场景下可极大晋升训练效率和缩小量化损失。在图像分类/指标检测模型上验证压缩8~10倍场景下,精度优于以后业界量化算法。 MindSpore训练后量化技术:训练后量化相较于量化重训具备两个显著劣势,一是无需大量训练数据集,二是无需从新训练,离线疾速转换。MindSpore采纳pipeline组合量化办法,一阶段采纳惯例线性量化伎俩对权重和激活值进行量化,二阶段对量化误差进行剖析,利用统计学办法对量化模型进行校对,弥补因量化带来的精度损失。 Pipeline 组合量化 高效运行时【端云对立运行时】为了可能为端云的训练、推理提供对立的并行运行框架,MindSpore设计了基于Actor模型的端云对立运行时。 AI训练或者推理,最终都是执行一个DAG计算图,图中每个节点都是一个op,每条边都是一个(或一组)tensor。上面的图中,右边是actor模型的示意图,左边是一个AI计算工作示意图。 咱们将一个op定义为一个actor,actor之间传递tensor。在actor模型中,message是无状态的且不复用的,但在AI计算工作中,为了提高效率,tensor通常会被复用。为了解决这个问题,MindRT中引入了tensor manager来对立治理tensor,所有op通过tensor manager获取tensor。 Tensor Manager反对tensor的援用计数和内存治理。端云对立运行时将在MindSpore 1.2/1.3版本中开源。 【软硬协同】MindSpore原生与端侧的NPU芯片深度联合,最大水平的施展了专有芯片的性能劣势。 【算子优化】在手机CPU上,MindSpore反对了多种卷积算法:Sliding Window、Im2Col+GEMM、Strassen、Winograd、Indirect Convolution、FFT等。如何在不同的条件下抉择最优的卷积算法,通常有3种做法: 基于教训的人工设置通过数学建模的Cost Model通过机器学习算法模型,应用已有数据集对其进行离线训练,最终失去一个牢靠的卷积算子选择器目前,MindSpore反对了2和3两种形式来进行最优卷积算法的抉择。 算法的抉择,除了思考性能,还须要思考特定场景下的内存限度。例如,对于IoT场景的硬件设施,如果抉择最为常见的Im2Col+GEMM算法,计算过程须要将输出和卷积核在内存中拉平,占内存较大。MindSpore针对这种场景,抉择占用内存较少的Indirect Convolution算法。 联邦学习MindSpore的联邦学习办法,同时反对cross-device(ToC)和cross-silo(ToB)两种场景,在数据不出域的条件下,实现多方联结建模,以帮忙企业应用提效降本,助力不同行业智慧降级。在安全性方面,MindSpore提供多种模型加密形式,能够实用于大规模无状态的终端设备,包含差分隐衷、机密共享、平安聚合等,用户可自定义安全等级。 理解完MindSpore的AI框架的几大劣势,连忙【点击链接】并【立刻报名】,即可在 ModelArts 平台学习到一个经典案例把握基于MindSpore的深度学习! ...

June 11, 2021 · 1 min · jiezi

关于ai开发:AI-事件驱动场景-Serverless-实践

简介: 事件驱动是指事件在继续事务管理过程中,进行决策的一种策略。能够通过调动可用资源执行相干工作,从而解决一直呈现的问题。艰深地说是当用户触发应用行为时对用户行为的响应。在 Serverless 场景下,事件驱动完满合乎其设计初衷之一:按需付费。 作者 | 李鹏(元毅)起源 | Serverless 公众号 一、事件驱动框架:Knative Eventing事件驱动是指事件在继续事务管理过程中,进行决策的一种策略。能够通过调动可用资源执行相干工作,从而解决一直呈现的问题。艰深地说是当用户触发应用行为时对用户行为的响应。在 Serverless 场景下,事件驱动完满合乎其设计初衷之一:按需付费。 Knative 模型 图:Knative 模型 Knative 次要包含两大部分:一是用于工作负载的 Serving,包含版本治理、灰度流量、主动弹性;二是 Eventing(事件驱动框架)。 外围玩家 Google;IBM;Pivotal;RedHat;SAP。友商相干产品 Google CloudRun;IBM;Pivotal Function Service(PFC);OpenShift。事件驱动框架:Eventing Knative 的 Eventing 提供了一个残缺的事件模型,不便接入各个内部零碎的事件。事件接入当前,通过 Cloud Event 规范在外部流转,联合 Broker-Trigger 模型进行事件处理。 从上图能够看到,Eventing 中蕴含三局部内容: 事件源Broker-Trigger:事件驱动模型,这个模型在晚期 16 年的版本开始呈现,其原理是 Trigger 订阅 Broker 信息并过滤,最初将事件发送到对应的服务进行生产。音讯零碎:在 Eventing 中每个 Broker 上面对应一个音讯的零碎,来承载对事件的整个流转。目前社区反对的音讯零碎包含 Kafka、NATS、Rocket MQ、Rabbit MQ 等。要害个性:事件规定 事件规定的外围是 Broker-Trigger 模型,它蕴含以下个性: Trigger 的 filter 的作用是对 Event 进行内容过滤;反对对 Event 的 Attribute 以及 Data 的内容进行过滤;反对 Common Expression Language(CEL)表达式过滤;反对通过 SourceAndType(事件源类型)进行过滤。二、事件驱动引擎-事件源事件源介绍Knative 社区中提供了丰盛的事件源接入,包含 Kafka、Github,也反对接入音讯云产品的一些事件,比方 MNS、RocketMQ 等。 ...

April 1, 2021 · 1 min · jiezi

关于ai开发:揭开KPI异常检测顶级AI模型面纱

摘要:2020GDE寰球开发者大赛-KPI异样检测告一段落,来自深圳福田莲花街道的“原从入门到精通”有幸获得了 总榜TOP1的问题,在这里跟大家分享深圳福田莲花街道在本次较量的解决方案。 背景介绍 核心网在挪动运营商网络中占据无足轻重的位置,其异样往往会导致呼叫失败、网络提早等现网故障,对全网的服务质量带来重大的负面影响,多则影响十数万用户,并引发大面积投诉[1]。因而须要疾速及时地发现核心网的异样危险,在影响扩充之前及时打消故障。KPI是一类可能反映网络性能与设施运行状态的指标,本赛题提供某运营商核心网的KPI实在数据,数据模式为KPI工夫序列,采样距离为1小时,选手须要应用[2019-08-01,2019-09-23)的数据进行建模,应用训练好的模型对将来7天的数据进行预测,辨认将来一周KPI序列中的异样点。 评估指标: 本赛题采纳F1作为评估指标,具体计算公式如下: P = TP/(TP+FP) R = TP/(TP+FN) F1 = 2PR/(P+R) 数据摸索 数据**有20个不同的KPI,不同的KPI物理意义不同,代表了不同的核心网指标,因为赛题须要对将来7天的数据进行预测,因而对于建模样本也进行周级别的散布查看。从Fig1中能够显著看到训练集中前三周的异样率显著低于后续几周。进一步剖析能够发现尽管赛题提供了[2019-08-01,2019-09-23)的全副数据,但2019-08-15之前所有20个KPI均毫无异样,第一个异样点是从2019-08-15 02:00:00开始呈现的(Fig2),因而揣测8.15前的数据分布不同于后续样本,或8.15之前存在标注异样的问题。试验中剔除8.15之前的样本建模成果也优于保留该时间段样本,进一步验证了该揣测。 摘要:2020GDE寰球开发者大赛-KPI异样检测告一段落,来自深圳福田莲花街道的“原从入门到精通”有幸获得了 总榜TOP1的问题,在这里跟大家分享深圳福田莲花街道在本次较量的解决方案。 背景介绍 核心网在挪动运营商网络中占据无足轻重的位置,其异样往往会导致呼叫失败、网络提早等现网故障,对全网的服务质量带来重大的负面影响,多则影响十数万用户,并引发大面积投诉[1]。因而须要疾速及时地发现核心网的异样危险,在影响扩充之前及时打消故障。KPI是一类可能反映网络性能与设施运行状态的指标,本赛题提供某运营商核心网的KPI实在数据,数据模式为KPI工夫序列,采样距离为1小时,选手须要应用2019-08-01,2019-09-23)的数据进行建模,应用训练好的模[源码交易型对将来7天的数据进行预测,辨认将来一周KPI序列中的异样点。 评估指标: 本赛题采纳F1作为评估指标,具体计算公式如下: P = TP/(TP+FP) R = TP/(TP+FN) F1 = 2PR/(P+R) 数据摸索 数据**有20个不同的KPI,不同的KPI物理意义不同,代表了不同的核心网指标,因为赛题须要对将来7天的数据进行预测,因而对于建模样本也进行周级别的散布查看。从Fig1中能够显著看到训练集中前三周的异样率显著低于后续几周。进一步剖析能够发现尽管赛题提供了[2019-08-01,2019-09-23)的全副数据,但2019-08-15之前所有20个KPI均毫无异样,第一个异样点是从2019-08-15 02:00:00开始呈现的(Fig2),因而揣测8.15前的数据分布不同于后续样本,或8.15之前存在标注异样的问题。试验中剔除8.15之前的样本建模成果也优于保留该时间段样本,进一步验证了该揣测。 背景介绍 核心网在挪动运营商网络中占据无足轻重的位置,其异样往往会导致呼叫失败、网络提早等现网故障,对全网的服务质量带来重大的负面影响,多则影响十数万用户,并引发大面积投诉[1]。因而须要疾速及时地发现核心网的异样危险,在影响扩充之前及时打消故障。KPI是一类可能反映网络性能与设施运行状态的指标,本赛题提供某运营商核心网的KPI实在数据,数据模式为KPI工夫序列,采样距离为1小时,选手须要应用[2019-08-01,2019-09-23)的数据进行建模,应用训练好的模型对将来7天的数据进行预测,辨认将来一周KPI序列中的异样点。 评估指标: 本赛题采纳F1作为评估指标,具体计算公式如下: P = TP/(TP+FP) R = TP/(TP+FN) F1 = 2PR/(P+R) 数据摸索 数据**有20个不同的KPI,不同的KPI物理意义不同,代表了不同的核心网指标,因为赛题须要对将来7天的数据进行预测,因而对于建模样本也进行周级别的散布查看。从Fig1中能够显著看到训练集中前三周的异样率显著低于后续几周。进一步剖析能够发现尽管赛题提供了[2019-08-01,2019-09-23)的全副数据,但2019-08-15之前所有20个KPI均毫无异样,第一个异样点是从2019-08-15 02:00:00开始呈现的(Fig2),因而揣测8.15前的数据分布不同于后续样本,或8.15之前存在标注异样的问题。试验中剔除8.15之前的样本建模成果也优于保留该时间段样本,进一步验证了该揣测。

January 31, 2021 · 1 min · jiezi

中文预训练模型ERNIE20模型下载及安装

2019年7月,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型, 它利用百度海量数据和飞桨(PaddlePaddle)多机多卡高效训练优势,通过深度神经网络与多任务学习等技术,持续学习海量数据和知识。基于该框架的艾尼(ERNIE)预训练模型,已累计学习10亿多知识,包括词法、句法、语义等多个维度的自然语言知识,有很强的通用语义表示能力,适用于各种NLP应用场景,效果提升明显,使用高效、便捷。 本篇内容教大家如何下载和使用! 一、预训练模型下载ERNIE 2.0 英文 Base 模型https://ernie.bj.bcebos.com/E...包含预训练模型参数、词典 vocab.txt、模型配置 ernie_config.jsonERNIE 2.0 英文 Large 模型https://ernie.bj.bcebos.com/E...包含预训练模型参数、词典 vocab.txt、模型配置 ernie_config.json 二、数据下载中文数据:https://ernie.bj.bcebos.com/t... 英文数据:由于数据集协议问题,在这里无法直接提供英文数据集。GLUE 的数据下载方式请参考GLUE 主页(https://gluebenchmark.com/tas... GLUE 提供的数据下载代码(https://gist.github.com/W4nga... )。假设所有数据集下载放置的路径为$GLUE_DATA,将数据下载完毕后,执行sh ./script/en_glue/preprocess/cvt.sh $GLUE_DATA将完成所有数据的格式转换,默认转换后的数据会输出到文件夹./glue_data_processed/。 三、PaddlePaddle安装本项目依赖于 Paddle Fluid 1.5,请参考安装指南(https://www.paddlepaddle.org.... )进行安装。【重要】安装后,需要及时的将 CUDA、cuDNN、NCCL2 等动态库路径加入到环境变量 LD_LIBRARY_PATH 之中,否则训练过程中会报相关的库错误。具体的paddlepaddle配置细节请查阅:https://www.paddlepaddle.org.... 如果您想了解更多的 Paddle 的相关信息,例如针对实际问题建模、搭建自己网络等,这里有更多的来自官方的文档供您参考:• 基本概念 :介绍了 Fluid 的基本使用概念• 准备数据 :介绍使用 Fluid 训练网络时,数据的支持类型及传输方法• 配置简单的网络: 介绍如何针对问题建模,并利用 Fluid 中相关算子搭建网络• 训练神经网络:介绍如何使用 Fluid 进行单机训练、多机训练、以及保存和载入模型变量• 模型评估与调试:介绍在 Fluid 下进行模型评估和调试的方法ERNIE的其他依赖列在requirements.txt文件中,使用以下命令安装 pip install -r requirements.txt 划重点!查看ERNIE模型使用的完整内容和教程,请点击下方链接,建议Star收藏到个人主页,方便后续查看。GitHub:https://github.com/PaddlePadd... 版本迭代、最新进展都会在GitHub第一时间发布,欢迎持续关注! 也邀请大家加入ERNIE官方技术交流QQ群:760439550,可在群内交流技术问题,会有ERNIE的研发同学为大家及时答疑解惑。

November 5, 2019 · 1 min · jiezi

企业AI人工智能化的4个趋势我们现处何方又将去往何处

作者 | Daniel Newman编译 | 张大笔茹人工智能比传统的工业自动化和数据处理更牛吗? 答案是肯定的!现在一些诸如图像识别、自然语言处理等AI基本功能已经发展成熟,随着研究的不断深入,AI将来一定会变得越来越强大,能实现的功能也越来越多。 根据麦肯锡预计,到2030年GDP的增长中将会有13万亿美元是来自AI,AI会影响到零售、旅游、交通、物流、医疗、制造业等各个方面,吴恩达也呼吁,企业要设立CAIO(首席人工智能官)。 那现在的人工智能在企业的应用现状如何呢?将来会有怎样的发展?近日,福布斯的一份报道总结了人工智能在企业的四个应用方面和发展趋势,快跟文摘菌一起看看吧。 趋势1:AI必然会超越传统分析 大多数公司已经开始使用一些常见的人工智能功能,而且用户们也基本满意。其中包括个性化定制(个性化广告、电子邮件、自动文本等)和精准营销(您在Spotify,Netflix或亚马逊购物卡等应用上看到的那些推荐)以及其他的营销技术,现在广泛使用的功能是适用于任何规模的企业的。 许多技术也比较成熟了:其中最重要的是机器人流程自动化(RPA)。RPA是AI的初级成果,它即智能又简单。RPA侧重于自动化一个流程,而不是整个企业的垂直流程。 RPA虽然为公司节省了大量的时间和金钱,但尚未达到一定规模。有许多公司最近才刚开始使用RPA技术,而积累一定用户的公司已经开始着手开始进一步流程优化了。 现在既然许多公司已经掌握了基础知识,早期尝到甜头的公司就会想走得更远。他们越来越多地关注AI和ML驱动的预测分析,即企业从数据(特别是实时数据)中提取更多的有价值的信息,甚至利用这些信息做出决策。对知识图谱的理解也更加深入,人工智能可以根据大量数据分析出我们从未想到过的结果。 趋势2:企业使用AI还是会有一定门槛 事实上,目前企业完成人工智能项目还是有难度的。许多公司的项目要么超期,要么需要花很多时间来建立相应的系统,Pactera技术公司最近的一份报告反映了Gartner之前报道的问题:85%的企业AI项目无法如期交付。 Dimensional Research最近发布的另一份报告显示,在人工智能和机器学习方面,每10家企业就有8个表示这他们的AI项目是停滞不前的,而96%的人表示他们在数据质量、数据分类和建模的置信度上遇到了问题。即使像IBM,Uber和亚马逊这样的高科技巨头也不得不在面临巨大的挑战时放弃一些数百万美元的大项目。 这时候是否还要坚持下去呢?其实大可不必!目前对于在AI项目中什么该做,什么不该做已经有足够的总结经验了。一些常见的误区有:起始目标不明确,太多数据(或不当使用数据),使用错误算法,交付成果的周期过长(应该在工作过程中实时检查,保持平衡)。 趋势3:交互性和人性化更强 随着强化学习领域技术的重大进步,人工智能能够通过完成特定目标获得反馈,AI开始变得有“意识”起来。它开始以一种类似人类的但奇怪的方式思考,这也意味着它也有能力开始工作了。人工智能似乎已经到了无限趋近人类的三岔口。 AI正在朝着能够流畅地与人类对话这个目标迈进,初创公司和技术领导者都在争夺聊天机器人,它们不仅能回答问题,而且还具有先进的推理功能。谷歌,微软,亚马逊和IBM都想在会话式人工智能方面取得进步,让AI学会人性化的沟通,就是说人工智能可以根据场景的变化灵活应变。 会话式人工智能的实现需要有力的后端支撑—比如说更强大的硬件。这使得像英特尔这样的公司开始研发用专用推理芯片,以及开发他们声称可以加快计算机深度学习推理过程的DL boost技术。GPU也是竞争越来越激烈,传统上专注于训练的GPU也变得越来越有推断能力,上周NVIDIA公布了一项会话式AI,展示了GPU如何通过推理,实现延迟更短、更自然、更人性化的对话体验。 趋势4:道德问题始终会是个问号 随着人工智能确实变得更加人性化,企业也开始意识到使用,如果AI使用不当会产生严重后果,不仅仅是失业问题,AI算法会是在“不经意间”建立的,且是有偏见的。例如,白人男性写的用于招募的AI软件可能“意外地”选择白人男性作为高度匹配的应聘特征,或者在人脸识别上更多的关注白人。 特别是像IBM这样的公司,他们不仅使用人工智招聘,还用它评价员工的工作表现。你会信任一个机器人来评判你的工作表现吗?来决定你是否应该加薪?这公平吗? 未来,会有更多的与AI相关的道德规范出台。例如,甲骨文建立了一个道德委员会来讨论公平性、问责制和算法的透明度等问题。 IBM也正在研究“可解释的AI”,Microsoft制定了使用聊天机器人责任的指导原则(例如,公司应始终提醒客户他们正在与机器人而不是人进行通信,并提醒他们注意限制)。 由于担心隐私泄露的道德问题,有的城市停止使用人工智能程序面部识别功能,亚马逊也因为同样的原因叫停了员工监控跟踪AI。 人们开始明白虽然人工智能力量强大,现在相互提取或处理的数据类型是没有限制的。但我们必须回答的问题是:应该这样做吗? 展望未来,公司应制定合理的人工智能的发展路线,并且建立例行审计制度来确保他们的人工智能在管理员的掌控之下。这个过程也许会伴随着无休止的辩论:它在哪些方面进行了优化?是否会取代人类?如何对其进行监管以及道德风控等。人工智能的未来令人兴奋,与此同时,这或许也是一个疯狂的旅程。 但是有一点是确定的,那就是人工智能时代已经到来! 进入小程序,解锁更多精彩内容和专业资讯!

September 10, 2019 · 1 min · jiezi

人工智能98都认错图像识别AI遇上对抗性图像竟变瞎子

作者 | James Vincent来源 | 数据与算法之美在视觉方面,AI和人类的差距有多大?来自UC Berkeley等高校的研究人员创建了一个包含7500个“自然对抗实例”的数据集,在测试了许多机器视觉系统后,发现AI的准确率下降了90%!在某些情况下,软件只能识别2%-3%的图像。这样的AI若用在自动驾驶汽车上,后果不敢想象! 近几年来,计算机视觉有了很大的改善,但仍然有可能犯严重的错误。犯错如此之多,以至于有一个研究领域致力于研究AI经常误认的图片,称为“对抗性图像”。可以把它们看作计算机的光学错觉,当你看到树上有一只猫时,人工智能看到了一只松鼠。 ▲AI把爬上树的猫误认为松鼠 研究这些图像是很有必要的。当我们把机器视觉系统放在AI安全摄像头和自动驾驶汽车等新技术的核心位置时,我们相信计算机和我们看到的世界是一样的。而对抗性图像证明并非如此。 对抗性图像利用机器学习系统中的弱点 但是,尽管这个领域的很多关注点都集中在那些专门设计用来愚弄AI的图片上(比如谷歌的算法把3D打印的乌龟误认为是一把枪),但这些迷惑性图像也会自然的出现。这类图像更令人担忧,因为它表明,即便不是我们特意制作的,视觉系统也会犯错。 ▲谷歌AI误认为这只乌龟是枪 为了证明这一点,来自加州大学伯克利分校、华盛顿大学和芝加哥大学的一组研究人员创建了一个包含7500个“自然对抗实例”(natural adversarial examples)的数据集,他们在这些数据上测试了许多机器视觉系统,发现它们的准确率下降了90%,在某些情况下,软件只能识别2%-3%的图像。 下面就是一些“自然对抗实例”数据集的例子: ▲AI眼中是“沉船”,其实是虫子爬在枯叶上 ▲AI眼中是“火炬” ▲AI眼中是“瓢虫” ▲AI眼中是“日晷” ▲AI眼中是“棒球运动员” ▲AI眼中是“人开卡丁车” 数据有望帮助培养更强大的视觉系统 在论文中,研究人员称这些数据有望帮助培养更强大的视觉系统。他们解释说,这些图像利用了“深层缺陷”,这些缺陷源于该软件“过度依赖颜色,纹理和背景线索”来识别它所看到的东西。 例如,在下面的图像中,AI错误地将左侧的图片当作钉子,这可能是因为图片的木纹背景。在右边的图像中,它们只注意到蜂鸟饲养器,但却错过了没有真正的蜂鸟存在的事实。 下面的四张蜻蜓照片,AI在颜色和纹理上进行分析后,从左到右依次会识别为臭鼬、香蕉、海狮和手套。我们从每张图片中都可以看出AI为什么会犯错误。 AI系统会犯这些错误并不是新闻了。多年来,研究人员一直警告说,利用深度学习创建的视觉系统是“浅薄”和“脆弱”的,它们不会像人一样灵活地理解世界上的一些几乎相同的细微差别。 这些AI系统在成千上万的示例图像上进行了训练,但我们通常不知道图片中的哪些确切元素是AI用于做出判断的。 一些研究表明,考虑到整体形状和内容,算法不是从整体上看图像,而是专注于特定的纹理和细节。本次数据集中给出的结果似乎支持这种解释,例如,在明亮的表面上显示清晰阴影的图片,会被错误地标识为日晷。 AI视觉系统真的没救了? 但这是否意味着这些机器视觉系统没得救了?完全不是。一般这些系统所犯的错误都是小错,比如将排水盖识别为沙井,将货车误认为豪华轿车等。 虽然研究人员说这些“自然对抗性的例子”会骗过各种各样的视觉系统,但这并不意味着可以骗过所有系统。许多机器视觉系统非常专业,比如用于识别医学扫描图像中的疾病的那些专门系统。虽然这些系统有着自己的缺点,可能无法理解这个世界和人类,但这并不影响它们发现并诊断癌症。 机器视觉系统有时可能会很快且有瑕疵,但通常都会产生结果。这样的研究暴露了机器成像研究中的盲点和空白,我们下一步的任务就是如何填补这些盲点了。

August 7, 2019 · 1 min · jiezi

imageAI图像识别并用python搭建本地服务

imageai是一套开源免费的,可以用于图像智能识别的python应用包,使用门槛不高,基本上按照官方文档去写就可以简单实现利用已经训练好的模型识别图像中的物体。imageai图像预检目前实现了四种模型的算法支持,分别是SqueezeNet,ResNet,InceptionV3 和 DenseNet。不同的包对应的训练模型大小不一致,精度也不一致。 SqueezeNet(文件大小:4.82 MB,预测时间最短,精准度适中)ResNet50 by Microsoft Research (文件大小:98 MB,预测时间较快,精准度高)InceptionV3 by Google Brain team (文件大小:91.6 MB,预测时间慢,精度更高)DenseNet121 by Facebook AI Research (文件大小:31.6 MB,预测时间较慢,精度最高)imageai不仅可以用于图像识别,还可以进行图形对象检测,视频对象预测和跟踪,自定义训练模型等。对于机器学习不够深入的人员非常友好,可以几行代码实现一个AI应用。 更多深入的内容可以查看原文 下面,简单了解一下如何在python本地服务中搭建一个图像识别应用。 安装imageAI的依赖imageAI的依赖python(>=3.5.1)tensorflow(>=1.4.0)Numpy(>=1.13.1)SciPy(>=0.19.1)openCvpillowmatplotlibh5pykeras 若安装好了pip3 可以直接运行 pip3 install tensorflow numpy scipy opencv-python pillow matplotlib h5py keras imageai imageAI的训练模型imageAI支持使用在ImageNet-1000数据集上训练的4种不同的机器学习算法,也支持在CoCo数据集集上训练的对象检测。 图像预检需要下载一个训练模型。 这里就直接使用facebookAI的训练模型DenseNet121。 废话不多说,上代码: from imageai.Prediction import ImagePredictionimport os,jsonexecution_path = os.getcwd() # 当前命令行执行路径prediction = ImagePrediction() # 获取这个图像预测实例prediction.setModelTypeAsDenseNet() # facebook AI,此处要根据下一步加载的模型文件来确立对应的model类型,其他还有setModelTypeAsSqueezeNet(普通) setModelTypeAsResNet(微软模型) setModelTypeAsInceptionV3(谷歌模型),训练识别精确度依次提升,facebook最准确prediction.setModelPath(os.path.join(execution_path, "DenseNet-BC-121-32.h5")) # 加载模型文件,就是刚刚下载好的那个prediction.loadModel(prediction_speed="fast") # 速度调节,如果配置这个则需要使用精确度较高的模型,否则会出现识别率下降的问题predictions, probabilities =prediction.predictImage(os.path.join(execution_path, "test.jpg"), result_count=6) # 对应的图像识别路径,以及相应的返回结果数量predictionDict = {}for eachPrediction, eachProbability in zip(predictions, probabilities): predictionDict[eachPrediction] = eachProbabilityres = json.dumps(predictionDict)print(res) # 输出结果虽然这里设置了"fast",但其实对于单核来说运行速度仍然比较慢,如果你的运行服务器是多核的,可以试试并行计算,把多个核都用起来,效率会有不少提升。代码对应行都有相应注释,看一下打印结果: ...

July 8, 2019 · 2 min · jiezi

深度学习架构师养成第二季开启百度黄埔学院又开学

今年年初,百度联合“深度学习技术及应用国家工程实验室”成立黄埔学院,旨在为各行各业培养第一批“首席AI架构师”。6月16日,黄埔学院第一期来自国家卫星气象中心、中油瑞飞、中信银行、神思电子、广东电网、广东长隆集团、中国联通软件研究院、华为、爱奇艺等的28名学员毕业,其中10位优秀学员在7月3日Create2019百度AI开发者大会百度大脑论坛上,获得了由百度首席技术官王海峰颁发的奖杯。 此外,黄埔学院第一期的6位优秀学员还在百度AI开发者大会展区就各自毕业答辩设计项目进行了路演。该路演现场邀请了AI行业相关架构师、技术类KOL、媒体和投资人等众多业内人士,共同对首批“首席AI架构师”进行“成果检阅”。在其展示的案例中,从银行大堂场景到工业安全检测场景,再到个性化推荐场景等,所有案例都致力于解决企业实际问题。 百度的“黄埔学院”就是为培育深度学习高端人才,解决企业应用AI技术缺乏总架构师的难题而设立的。此次招募二期学员,将继续面向所有企业的关键技术岗位或技术管理岗位人员,为各个企业培养“首席AI架构师”。入选学员将参与到为期6个月、共4次面对面的北京免费进修课中。由百度研究院的科学家和资深技术工程师作为导师,针对性讲授深度学习技术和应用知识,手把手的帮助学员把深度学习技术结合自身业务需求实现落地。据了解,百度飞桨是目前唯一一个开源开放、功能完备的深度学习框架。在深度学习推动着人工智能走向工业大生产当下,深度学习框架上承模型开发和应用,下接基础芯片硬件,让开发者的工作更加快速便利,在中间发挥着“操作系统”的作用。可以说,深度学习框架正是AI时代的“操作系统”,它让生产力得到了极大的解放,并直接推动了产业智能化的快速升级。 此前,吴甜在一期学员的毕业典礼上曾指出:“黄埔学院希望能切实帮助企业储备既能分析业务问题,又掌握模型算法,还能操刀落地应用,深谙算法与工程的紧密结合的企业创新型人才。”7月3日百度大脑论坛,她继续说道:“ 对于第一期学员来说是一次课程的句号,但对中国深度学习的应用实践来讲,这是一个新的起点。第二期我们将更加聚焦深度学习与产业实践的结合,也欢迎更多企业加入其中。“ 7月3日至8月3日招募35席,具体指路官网了解。

July 4, 2019 · 1 min · jiezi

用深度学习魔法为你的照片转换风格附源码

——深度学习在艺术方面的进展作者:George Seif翻译:疯狂的技术宅原文:https://towardsdatascience.co...未经允许严禁转载图像背景中的风格转移是指将一个图像的“风格”转移到另一个图像的过程,同时保持第二图像中的“内容”。 例如,最上边的照片是“内容”图像。我们要将中间照片中的“风格”(“风格”图像)应用于内容图像。也就是说我们希望把中间的图像中大都市的夜晚氛围反映在最终图像上,得到的结果是最下边的照片! 这项技术源自的原始研究论文:https://arxiv.org/pdf/1703.07... Adobe 的一项最具开创性的研究就来自于此。他们称之为深度照片风格转移(DPST)。 如何转换照片的风格为了正确执行从一张照片到另一张照片的样式转换,Adobe 团队制定了他们的 DPST 的目标:“将参考的风格转移到输入的图片上,同时保持结果的真实感” 这里的关键部分是保持输出的“真实感”属性。对于上面的内容照片,我们不希望任何建筑物发生任何变化。只是希望它看起来像是在夜间拍摄的同一位置的照片。 在该研究发表之前,也出现了许多风格转移算法,但是这些算法扭曲了原始图像的内容。在当时的 Neural Style Transfer 技术的输出结果中,常见的问题就是直线变成了波浪线并且改变了物体的形状。 这是完全可以接受的。许多算法都是为艺术风格转移而设计的,所以往往会存在一些失真! 失真的风格转移图像 (来源:https://github.com/yusuketomo...) 但是当前的目标是创建依然逼真的图像 —— 就好像它们是由真实世界的相机拍摄的一样。 作者为实现这一点主要做了两件事情:(1)损失函数中的照片写实正则化项(2)内容图像的语义分割,用于指导。 照片写实正则化设想一下应该怎样在图像中直观地保持照片的写实。我们希望原始图像的线条和形状保持不变。颜色和灯光可能会改变,但是一个人应该看起来还像一个人,树还是树,狗仍然像狗等。 基于这种直观的想法,作者实现的正则化约束迫使像素从输入到输出的转换在颜色空间中是局部仿射的。根据定义,仿射变换在将输入映射到输出时必须保持点、直线和平面的形状不变。 有了这个限制,直线永远不会产生波动,我们的输出中不会出现任何奇怪的形状变化! 分段指导除了保证图像不失真外,我们还希望能够确保样式图像中各种“事物”的样式是被正确转移的。 想象一下,如果你的风格图像显示出美丽的橙色日落,就像下面这张照片一样: 来源:https://pixabay.com/illustrat... 图像的大部分是红橙色的,如果将这个风格转移到城市的照片上,那么所有的建筑都会变红!这可不是我们想要的 —— 更真实的转移应该是使大多数建筑物非常暗(接近黑色),只有天空才会有日落和水的颜色。 深度图像风格转换算法使用应用于内容图像的语义分割的结果来引导风格转移。当算法能够准确地知道哪些像素属于前景和背景时,可以更真实地转换风格。天空的像素将始终转移到天空像素,背景像素会转移到背景像素等等。 转换风格的代码你可以从GitHub下载 Photo Realistic Style Transfer 的存储库: git clone https://github.com/GeorgeSeif/DeepPhotoStyle_pytorch.git它运行所需的只是 Pytorch 的最新版本。下载完成后,进入文件夹并使用下载脚本下载语义分段模型: cd DeepPhotoStyle_pytorchsh download_seg_model.sh现在可以运行代码了! 下载样式图像和内容图像 —— 你可以选择任何图像!根据我的经验,城市和风景往往效果最佳。最后像这样运行代码: python main.py --style_image path_style_image --content_image path_content_image该算法将迭代地改进样式传递结果,因此你等待得实践越久效果就越好!默认情况下它被设置为迭代 3000 次,但如果你觉得更多的迭代次数能够改善结果,可以增加该数字。 试着亲自去运行代码,这非常有趣! 欢迎扫码关注公众号:硬核智能

June 18, 2019 · 1 min · jiezi

BERT和ERNIE谁更强这里有一份4大场景的细致评测

BERT和ERNIE,NLP领域近来最受关注的2大模型究竟怎么样?刚刚有人实测比拼了一下,结果在中文语言环境下,结果令人意外又惊喜。具体详情究竟如何?不妨一起围观下这篇技术评测。 写在前面随着2018年ELMo、BERT等模型的发布,NLP领域终于进入了“大力出奇迹”的时代。采用大规模语料上进行无监督预训练的深层模型,在下游任务数据上微调一下,即可达到很好的效果。曾经需要反复调参、精心设计结构的任务,现在只需简单地使用更大的预训练数据、更深层的模型便可解决。 随后在2019年上半年,百度的开源深度学习平台PaddlePaddle发布了知识增强的预训练模型ERNIE,ERNIE通过海量数据建模词、实体及实体关系。相较于BERT学习原始语言信号,ERNIE直接对先验语义知识单元进行建模,增强了模型语义表示能力。 简单来说,百度ERNIE采用的Masked Language Model是一种带有先验知识Mask机制。可以在下图中看到,如果采用BERT随机mask,则根据后缀“龙江”即可轻易预测出“黑”字。引入了词、实体mask之后,“黑龙江”作为一个整体被mask掉了,因此模型不得不从更长距离的依赖(“冰雪文化名城”)中学习相关性。 除此之外,百度ERNIE还引入了DLM(对话语言模型)任务,通过这种方式来学习相同回复对应的query之间的语义相似性。实验证明DLM的引入对LCQMC(文本相似度计算)系列任务带来了较大的帮助。最终ERNIE采用多源训练数据,利用高性能分布式深度学习平台PaddlePaddle完成预训练。 亲测到底百度ERNIE模型所引入训练机制有没有起到作用,只有实践了以后才知道。为此,我亲自跑了BERT和ERNIE两个模型,在下面的几个场景中得到了预测结果。 2.1 完形填空完形填空任务与预训练时ERNIE引入的知识先验Mask LM任务十分相似。从下图的比较中我们可以看到,ERNIE对实体词的建模更加清晰,对实体名词的预测比BERT更准确。例如BERT答案“周家人”融合了相似词语“周润发”和“家人”结果不够清晰;“市关村”不是一个已知实体;“菜菜”的词边界是不完整的。ERNIE的答案则能够准确命中空缺实体。 2.2 NER (命名实体识别)在同样为token粒度的NER任务中,知识先验Mask LM也带来了显著的效果。对比MSRA-NER数据集上的F1 score表现,ERNIE与BERT分别为93.8%、92.6%。在PaddleNLP的LAC数据集上,ERNIE也取得了更好的成绩,测试集F1为92.0%,比BERT的结果90.3%提升了1.7%。分析二者在MSRA-NER测试数据中二者的预测结果。可以观察到: 1.)ERNIE对实体理解更加准确:“汉白玉”不是实体类型分类错误; 2.)ERNIE对实体边界的建模更加清晰:“美国法律所”词边界不完整,而“北大”、“清华”分别是两个机构。 Case对比:摘自MSRA-NER数据测试集中的三段句子。B_LOC/I_LOC为地点实体的标签,B_ORG/L_ORG为机构实体的标签,O为无实体类别标签。下表分别展现了 ERNIE、BERT模型在每个字上的标注结果。 2.3 相似度ERNIE在训练中引入的DLM能有效地提升模型对文本相似度的建模能力。因此,我们比较文本相似度任务LCQMC数据集上二者的表现。从下表的预测结果可以看出,ERNIE学习到了中文复杂的语序变化。最终ERNIE与BERT在该任务数据的预测准确率为87.4%、87.0%. 2.4 分类 最后,比较应用最广泛的情感分类任务。经过预训练的ERNIE能够捕捉更加细微的语义区别,这些句子通常含有较委婉的表达方式。下面展示了PaddleNLP情感分类测试集上ERNIE与BERT的打分表现:在句式“不是很…”中含有转折关系,ERNIE能够很好理解这种关系,将结果预测为“消极”。在ChnSentiCorp情感分类测试集上finetune后ERNIE的预测准确率为95.4%,高于BERT的准确率(94.3%)。 从以上数据我们可以看到,ERNIE在大部分任务上都有不俗的表现。尤其是在序列标注、完形填空等词粒度任务上,ERNIE的表现尤为突出,不输给Google的BERT。

June 17, 2019 · 1 min · jiezi

1小时玩转OCR实战

在日常生活工作中,我们难免会遇到一些问题,比如自己辛辛苦苦写完的资料,好不容易打印出来却发现源文件丢了。难的收集了一些名片,却要很麻烦的一个一个录入信息。快递公司的业务越来越好,但每天却需要花费很多时间登记录入运单,效率非常的低。 那么,有没有什么技术能帮助我们解决这些难题呢?有的,那就是OCR文字识别技术。 什么是OCR? OCR 是实时高效的定位与识别图片中的所有文字信息,返回文字框位置与文字内容。支持多场景、任意版面下整 图文字的识别,以及中英文、字母、数字的识别。通俗的来说,就是将图片上的文字内容,智能识别成为可编辑的文本,例如: OCR的技术原理是什么? OCR本质是图像识别。其原理也和其他的图像识别问题基本一样。包含两大关键技术:文本检测和文字识别。先将图像中的特征的提取并检测目标区域,之后对目标区域的的字符进行分割和分类。 以深度学习兴起的时间为分割点,直至近五年之前,业界最为广泛使用的仍然是传统的OCR识别技术框架,而随着深度学习的崛起,基于这一技术的OCR识别框架以另外一种新的思路迅速突破了原有的技术瓶颈(如文字定位、二值化和文字分割等),并已在工业界得到广泛应用。 首先文本定位,接着进行倾斜文本矫正,之后分割出单字后,并对单字识别,最后基于统计模型(如隐马尔科夫链,HMM)进行语义纠错。 OCR技术的难点是什么? 复杂背景、艺术字体、低分辨率、非均匀光照、图像退化、字符形变、多语言混合、文本行复杂版式、检测框字符残缺,等等。 如何克服这些难点的? 从几个方面入手。一是使用场景,另一方面是从技术上的改进腾讯优图实验室在文本检测技术方进行了深度优化,提出了Compact Inception,通过设计合理的网络结构来提升各尺度的文字检测/提取能力。同时引入RNN多层自适应网络和Refinement结构来提升检测完整性和准确性。 腾讯云OCR目前支持什么功能? 基于腾讯优图实验室世界领先的深度学习技术,目前我们已支持: 身份证识别,银行卡识别,名片识别,营业执照识别,行驶证驾驶证识别,车牌号识别,通用印刷体识别,手写体识别。 通用印刷体的技术难点,使用场景 大家都知道身份证识别可广泛应用在金融行业中,有用户的身份认证中,可以减少用户的信息输入,提升效率,提高用户体验,营业执照的识别完全省去了手工录入的繁琐,还可以为企业省去大量的人力资源成本,这些场景大家都已经比较熟悉。 对于通用印刷体,腾讯优图实验室自主设计一整套全方位多尺度文字识别引擎,可攻破模糊,散焦,透视,文字部分遮挡的问题,识别准确率高达90%以上,处于业界领先水平。使用场景广泛,例如对任意版面上图像的文字识别,可广泛应用在印刷文档、广告图、医疗、物流等行业中的识别。 对于通用印刷体有没有什么好的例子? 例如这个广告,内容多字体,中英文与数字混合,背景也比较随意。咱们的OCR通过透视矫正、去模糊等,能大幅还原图像真实度,极大提升算法的鲁棒性。 再例如识别文字密集,行间距小,透视畸变等的海报。人工识别需要不仅耗费时间,肉眼也比较难识别。但腾讯云OCR 设计了小而精的特征提取网络,配合先进的预处理技术,识别准确率高达93%以上。 有时候也会遇到识别率不理想的情况,如何可以提高识别准确率? 首先会确认下当前的场景,造成准确度不高的原因。评估可提高的空间设计,之后做出相应的修改,列入预处理等等。 关于腾讯云手写体识别方面的案例 腾讯是国内首家将手写体识别应用在复杂场景下的服务商,数字识别准确率高达90%以上,单字识别速度在15ms以内,复杂汉字准确率超过80%。 腾讯云手写体OCR已运用到的运单识别场景,解决了物流行业每日快递单人工输入工作量极大且极易出错,非常低效等问题。 运单识别与传统人工识别的区别 如果传统人工识别按照3min/单,1000单需要6.25个人/天,保证运单时效则需要耗费大量人力,考虑人力成本则影响运单及时性,成本和服务难两全。 我们的运单识别速度可以达到毫秒级/单,并支持24小时识别服务 ,业务增长时只需要投入计算用服务器资源即可,弹性较大。 与传统识别相比,不仅成本可以降低,提高准确性,还可以保护用户的隐私泄露风险。 腾讯云OCR在行业中落地案例 新版手Q就用到了咱们的技术,在扫一扫、聊天窗口和空间图片大图预览共三个入口上支持了提取图片中文字的功能。 方便用户阅读、编辑、保存图片上的文字,从而可以对提取出的文字进行翻译、搜索。在多种场景下可以极大提升用户对图片上文字的阅读和记录效率。 企业微信中的名片识也用到了咱们OCR技术。用户只需拍照或选择名片图片,就能准确快速地识别出名片中的文字,并自动提取为对应的字段,极大简化了名片录入流程,也避免了手动录入过程可能出现的错误。 福利时间:腾讯云大学6月10日(周一)晚19:00-20:30邀请到大数据与人工智能产品中心大咖,开设免费线上直播课程,现场讲解API落地使用!讲师将会在直播课程中为大家解答疑惑。 适合人群: 0-3岁开发者OCR与人脸核身使用者人脸识别从业者对人脸识别感兴趣的小伙伴非开发者0基础不要紧,现场手把手教学,一小时你能收获的不止有实战指导,更有鹅厂大咖的经验分享! 大咖讲师: 腾讯云AI视觉产品项目经理 张诚 课程内容:1、 腾讯云OCR文字识别产品简介2、 OCR通用印刷体识别动手实验室3、 腾讯云慧眼·人脸核身产品简介4、 人脸核身H5动手实验室 如何观看课程?扫描下方海报二维码即可预约课程,开播前15分钟将短信通知! 重要提示:提前关注微信【学习君】,入群还可以领取更多鹅厂内部技术资料

June 5, 2019 · 1 min · jiezi

让AI简单且强大深度学习引擎OneFlow技术实践

本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的《让AI简单且强大:深度学习引擎OneFlow背后的技术实践》实录。 北京一流科技有限公司将自动编排并行模式、静态调度、流式执行等创新性技术相融合,构建成一套自动支持数据并行、模型并行及流水并行等多种模式的分布式深度学习框架,降低了分布式训练门槛、极大的提高了硬件使用率。该框架已经成功帮助众多头部互联网公司及人工智能企业提升了大模型训练效率,节约了硬件运营和使用成本,达到了降本增效的效果。一流科技是一家为企业客户提供面向大规模大计算大模型等深度学习框架的人工智能领域科技创新公司。 分享者袁进辉是北京一流科技有限公司创始人,任首席科学家。2008年7月在清华大学计算机系获得工学博士学位,获得清华大学优秀博士学位论文奖。2013年加入微软亚洲研究院从事大规模机器学习平台的研发工作。2014年发明了当时世界上最快的主题模型训练算法和系统LightLDA,只用数十台服务器即可完成以前数千台服务器才能实现的大规模主题模型,该技术成功应用于微软在线广告系统,被当时主管研究的全球副总裁周以真称为“年度最好成果”。2015年至2016年底,专注于搭建基于异构集群的深度学习平台,项目荣获微软亚洲研究院院长特别奖 (top 1%)。2017年创立北京一流科技有限公司,致力于打造分布式深度学习平台的事实工业标准。 编者按:2018年11月30日-12月3日,第七届全球软件案例研究峰会在北京国家会议中心盛大开幕,现场解读2018年「壹佰案例榜单」。本文为北京一流科技有限公司首席科学家袁进辉(老师木)分享的《让AI简单且强大:深度学习引擎OneFlow背后的技术实践》案例实录。 提纲: 研发OneFlow的动机OneFlow技术突破总结01研发OneFlow的动机 软件OneFlow简介 业界有人工智能浪潮的三驾马车之说,即数据、算法、算力。具体到算力,业界更多关注的是硬件,譬如GPU,甚至是TPU之类的AI专用芯片。但是,人们发现,有了更快的加速器之后,制约大规模分布式训练算力的瓶颈是软件。怎么帮助数据科学家和研究员们更轻松的把各种算法在底层硬件上跑起来,而且充分释放底层硬件的潜力,正是软件框架需要解决的问题。目前,已有的开源深度学习框架对数据并行场景解决的比较好,但遇到模型越来越大的场景就没有好办法。用户或者束手无策,或者只能付出极大成本基于开源框架做深度定制开发来满足需求。OneFlow团队的目标是研发一个通用框架自动解决这些问题,让那些没有框架研发能力的团队也能够享受分布式GPU集群带来的效率,这是我们历时两年多研发一套全新深度学习框架的初衷。 背后的动机:计算力是深度学习发展的最重要的推动力。 案例:2015 Microsoft Resnet 2016 Baidu Deep Speech 2 2017 Google NMT 2015年微软研究院发明的ResNet需要的计算量是7乘以10的18次方次计算(ExaFlops)。当然,可以推算一下用一颗24核的CPU来计算,大概需要多久能完成这些计算,也可以推算用几千个核心的GPU来算需要多长时间。可能是需要几个月或几个星期的时间。除了计算量在增长,模型大小也在增长,ResNet 这种CNN模型通常是几千万参数,需要几百兆字节的存储空间,百度研发的Deep Speech模型到了三亿参数的规模,然后Google的机器翻译模型NMT,已经到了几十亿参数,整个模型在一块GPU上已经放不下了。这种情况,数据并行无济于事,需要模型并行或流水并行来解决大模型的分布式训练问题。很不幸,目前还没有开源框架支持这些需求,一些大公司通过内部定制的系统来支持这种需求。 今年上半年Facebook发布了一个研究结果,收集35亿张弱标注图片,使用几百块GPU,经过接近一个月的时间,训练了一个用于图片分类的卷积神经网络模型,它能做到什么效果呢?能提高6个百分点的准确率。这是非常了不得的成绩,算法基本上没什么变化,仅仅是通过采用更多的数据和计算就能把top-1的准确率提高了这么多。要知道,对于一个商业价值很高的场景,提高0.5个百分点可能是一个团队一年的KPI。 九月份Google发表了BigGAN模型,研究人员通过提高图片的分辨率来训练更大的GAN模型,CNN中间的activation和反向gradient会非常多,当然计算量也会大的非常多,基于TPU集群来完成训练。这个手段同样获得了比以前的GAN模型好的多的效果。 上个月,Google又发表了BERT模型,相当于一种大的多的transformer模型,在16个TPU上训练了4天,然后基于这个语言模型作为主干网络去解决各种常见的自然语言处理任务,发现在各任务上全面超越了以前的方法。很不幸,目前还没有出现在GPU集群上从零开始训练BERT-Large模型的办法,如果想在自己的业务里应用BERT,只能去下载Google预训练好的模型,然后做少量微调来使用。这倒不是资源不足的问题,即使是已经搭建了大规模的GPU集群的客户也无能为力,有钱也解决不了。 深度学习经过这几年的爆发式发展,特别引人注目的算法层面的创新越来越少了,今年比较吸引眼球的进步都来自于计算力,也就是人们常说的“大力出奇迹”的方式。怎么才能让更多的企业用户能享受到算力提升的红利,帮助算法科学家完成更多的KPI, 这是OneFlow非常关心的问题。常言道,工欲善其事必先利其器,框架在深度学习研究和落地的过程中就扮演了“工具”的角色,好的工具能大大加速人工智能研发的效率,甚至可能成为行业竞争的决胜法宝。从BigGAN和BERT等例子也可以看出来,当一家公司掌握了其他人不掌握的工具时,就可以引领算法研究的潮流,反过来,当一家公司的基础设施跟不上的时候,也就没办法做前沿探索,即使是做研究也只能跟在Google后面,因此称深度学习框架是人工智能制高点的战略武器一点不为过。 基于纯硬件的解决思路 案例:Nvidia DGX-2 IBM Power9 Server英伟达通过销售GPU成为这一波AI计算力红利的最大受益者,英伟达除了把单个设备做的越来越快,也做了服务器架构方面的诸多创新,出品了一系列超级计算盒子,每个盒子里面可以集成8个或者是16个计算力非常强的GPU(譬如DGX-1是P100,今年推出的DGX-2是V100),更特别的是,这些GPU之间使用了非常高速的互联,能够实现GPU之间点对点150GB以上的传输带宽,比常见的PCIe带宽要高一个数量级。这种设计使得DGX服务器能够使得16块GPU一起工作时几乎像一个单体芯片那样输出超强算力。 当然还有比DGX更特别的服务器,比如说IBM出的Power9 Server,它的独特之处在于他的CPU使用了不同于Intel x86 CPU的架构,而且支持CPU和GPU之间NV Link互连,意味着CPU和GPU之间的数据传输也能够做到150GB以上的带宽。目前世界排名第一的超级计算机Summit就使用了类似Power9 Server的架构。 基于这么强的硬件就能解决计算力的问题吗? IBM和Nvidia一起搭建了世界上最强的超级计算机Summit,一共用了2万多块V100 GPU,还使用了最先进的互联技术(NVLink, Infiniband),要说最强的硬件,除了TPU Cluster,应该没有更好的了,这是不是就够了呢?IBM首席科学家在今年的ASPLOS(计算机体系结构顶级会议)上做了一个特邀报告,主题是“只有很强的硬件,没有很好的软件还是不能解决扩展问题”。现在国内拥有几千块GPU乃至上万块GPU的头部公司不在少数,但基于开源框架能训练BERT-Large模型吗?不行,这也印证了软件框架瓶颈的问题:购买了很多的硬件,但用不起来,或者说不能很好的用起来。 理念:纵向扩展与横向扩展 纵向扩展 纵向扩展是通过把单个设备或者是单个机器做的越来越强,或通过编译器优化的手段让作业在一个设备上或者是一个机器内部把硬件性能发挥到极致来满足现在日益增长的计算需求。硬件从多核架构CPU发展到众核架构GPU,GPU从P100到V100, 为了追求更高的效率,甚至研发FPGA或ASIC芯片来获得更高算力。当前最知名的AI芯片是Google的TPU,寒武纪,华为,阿里,百度等本土公司也在研发AI芯片。AI芯片的主要问题是有物理限制(譬如制程,功耗,同步时钟等等约束),人们不能生产出计算力任意大的芯片。也有人把这个现象称为硅基扩展瓶颈(Silicon Scaling)。除了提高单个芯片的吞吐率,英伟达的DGX也是纵向扩展的例子,DGX通过在一个机器内部高速互联手段实现芯片之间点对点极高的传输带宽,从而使得多芯片间协作起来更加高效。 横向扩展 如果纵向扩展仍不能满足需求,人们继续把多台服务器通过高速以太网或Infiniband连接起来组成集群来实现更高算力。如果能投入多少硬件资源,就得到多少计算力,那计算力瓶颈就迎刃而解了。理想很丰满,现实很骨感。一方面,芯片间互联带宽要比片内数据访问带宽低一到两个数量级,在芯片间搬运数据成为瓶颈,另一方面,编写在多芯片上高效运行的软件非常挑战,以深度学习为例,神经网络的结构不同,效率最高的并行方式(逻辑任务向物理计算单元的映射)也不同。在集群上实现线性加速比纵向扩展更有想象空间,但实现难度更大。一个理想的横向扩展方案,不管底层实际使用了多少松散耦合在一起的芯片,在上层用户眼里就像在一个专门为当前任务打造的巨大单体芯片一样,编程简单而且任务运行时能把底层每一个独立的芯片都利用充分。要实现这个目的,必须依靠软件框架。 逻辑任务到物理拓扑之间的最优映射复杂多变 给定一个特定的神经网络模型和一批计算资源,从任务到设备之间的映射有多种方式,但不同的映射方案运行效率不同。哪种方案最优既取决于作业本身的特性,也取决于底层硬件的拓扑。神经网络由很多局部计算(通常称为kernel)搭建组成,每一个局部计算是采用数据并行,还是模型并行取决于这个局部任务的计算传输比。现在业界讨论比较多的卷积运算参数量很小,但中间结果量大,所以最划算的方法是对数据进行切分,不同的设备处理不同的数据,在设备之间偶尔进行参数同步,这种数据并行方法基本上是一个已经被解决的问题。还有一些运算,中间计算结果相对于参数量更少,就适合模型并行。还有一些网络参数量很大或中间计算结果都很大,可能采用流水并行(也就是接力的形式)是最优的。模型并行和流水并行中通信的数据路由要比数据并行复杂,同时,怎么重叠计算和传输从而提高设备利用率也非常挑战,现有开源框架对这些更复杂的并行模式的支持还比较初级。 ...

April 24, 2019 · 1 min · jiezi

AI如何改变智能城市物联网?

AI如何改变智能城市物联网?来源 | 愿码(ChainDesk.CN)内容编辑愿码Slogan | 连接每个程序员的故事网站 | http://chaindesk.cn愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。官方公众号 | 愿码 | 愿码服务号 | 区块链部落免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码本文阅读时长:10min根据techopedia的说法, 智能城市是一个利用信息和通信技术提高城市服务(如能源和交通)质量和性能,从而降低资源消耗、浪费和总体成本的城市。Deakin和 AI Waer列出了有助于定义智慧城市的四个因素:在城市基础设施中使用各种电子和数字技术利用信息和通信技术(ICT)改变生活和工作环境将ICT嵌入政府系统实施将人员和ICT结合在一起的实践和政策,以促进创新并增强他们提供的知识因此,一个智能城市将是一个不仅拥有信息通信技术而且还以对居民产生积极影响的方式使用技术的城市。人工智能(AI)与物联网一起,有可能解决城市人口过多带来的主要挑战,他们可以帮助解决交通管理,医疗保健,能源危机和许多其他问题。物联网数据和人工智能技术可以改善居住在智慧城市的公民和企业的生活。智能城市及其AI-powered-IoT(人工智能物联网)用例智能城市拥有大量用于人工智能的物联网技术的用例,从保持更健康的环境到增强公共交通和安全。在下图中,您可以看到智能城市的一些用例:智能交通管理人工智能和物联网可以实施智能交通解决方案,以确保智能城市的居民尽可能安全,高效地从城市的一个点到另一个点。洛杉矶是世界上最拥挤的城市之一,已经实施了智能交通解决方案来控制交通流量。它安装了路面传感器和闭路电视摄像机,可将有关交通流量的实时更新发送到中央交通管理系统。分析来自传感器和摄像机的数据馈送,并通知用户拥塞和交通信号故障。2018年7月,该市在每个交叉口进一步安装了先进的交通控制器(ATC)柜。启用车辆到基础设施(V2I通信和5G连接,这使他们能够与具有红绿灯信息功能的汽车进行通信,例如奥迪A4或Q7。嵌入传感器的自动车辆的发布可以提供车辆的位置和速度,他们可以直接与智能交通信号灯通信,防止拥堵。此外,使用历史数据,可预测未来流量并用于防止任何可能的拥塞。智能停车生活在城市中的任何人都能感受到寻找停车位的困难,特别是在假日期间。智能停车可以缓解这个问题。通过将路面传感器嵌入停车位的地面,智能停车解决方案可以确定停车位是空闲还是占用,并创建实时停车地图。Adelaide市于2018年2月安装了智能停车系统,他们还推出了移动应用程序:Park Adelaide,它将为用户提供准确和实时的停车信息。该应用程序可以为用户提供远程定位,支付甚至延长停车会话的能力。智能停车系统旨在改善交通流量,减少交通拥堵并减少碳排放。在三藩市交通局(SAFTA)实施SFpark智能泊车系统。他们使用无线传感器来检测计量空间中的实时停车位占用情况。SFpark于2013年推出,平日温室气体排放量减少了25%,交通量下降,司机的搜索时间减少了50%。在伦敦,威斯敏斯特Westminster市还在2014年与Machina Research合作建立了智能停车系统。 早些时候,司机不得不平均等待12分钟,导致拥堵和污染,但自智能停车系统安装以来,没有必要等待,司机可以使用手机找到可用的停车位。其他用例包括智能废物管理,智能警务,智能照明和智能治理。人工智能可以为智能城市中的物联网适应做些什么?建立一个智能城市不是一天的业务,也不是一个人或组织的工作。它需要许多战略合作伙伴,领导者甚至公民的合作。智能社区可以做些什么呢?为我们提供职业或创业机会的领域是什么?任何物联网平台都必须满足以下要求:用于收集数据的智能物品网络(传感器,相机,执行器等)现场(云)网关,可以从低功耗物联网设备收集数据,存储并将其安全地转发到云端流式数据处理器,用于聚合大量数据流并将其分发到数据湖和控制应用程序用于存储所有原始数据的数据湖,甚至是那些看似没有价值的数据可以清理和构建收集数据的数据仓库用于分析和可视化传感器收集的数据的工具基于长期数据分析自动化城市服务的AI算法和技术, 并找到提高控制应用程序性能的方法控制向IoT执行器发送命令的应用程序用于连接智能物品和公民的用户应用程序除此之外,还会出现有关安全和隐私的问题,服务提供商必须确保这些智能服务不会对公民的健康构成任何威胁。服务本身应易于使用,以便公民可以采用。如你所见,这提供了一系列工作机会,特别是AI工程师。需要处理物联网生成的数据,并且要真正从中受益,我们需要超越监控和基本分析。将需要AI工具来识别传感器数据中的模式和隐藏的相关性。使用ML/AI工具分析历史传感器数据有助于识别趋势并基于它们创建预测模型。然后,这些模型可以由向IoT设备的执行器发送命令的控制应用程序使用。构建智能城市的过程将是一个迭代过程,每次迭代都会增加更多的处理和分析。现在让我们来看一下AI供电的物联网解决方案的例子。使用旧金山犯罪数据检测犯罪旧金山市也有一个开放数据门户网站,提供来自不同部门的数据。在本节中,我们采用数据集提供来自旧金山所有社区的犯罪报告约12年(从2003年1月至2015年5月),并训练模型以预测发生的犯罪类别。有39个谨慎的犯罪类别,因此它是一个多类别的分类问题。我们将使用Apache的PySpark并使用其易于使用的文本处理功能来处理此数据集。所以第一步是创建一个 Spark会话:第一步是导入必要的模块并创建 Spark会话:from pyspark.ml.classification import LogisticRegression as LRfrom pyspark.ml.feature import RegexTokenizer as RTfrom pyspark.ml.feature import StopWordsRemover as SWRfrom pyspark.ml.feature import CountVectorizerfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssemblerfrom pyspark.ml import Pipelinefrom pyspark.sql.functions import colfrom pyspark.sql import SparkSessionspark = SparkSession.builder .appName(“Crime Category Prediction”) .config(“spark.executor.memory”, “70g”) .config(“spark.driver.memory”, “50g”) .config(“spark.memory.offHeap.enabled”,True) .config(“spark.memory.offHeap.size”,“16g”) .getOrCreate()我们加载csv文件中可用的数据集:data = spark.read.format(“csv”). \ options(header=“true”, inferschema=“true”). \ load(“sf_crime_dataset.csv”)data.columns数据包含九列:[Dates,Category,Descript,DayOfWeek,PdDistrict,Resolution,Address, X,Y]我们只需要Category和Descript字段来训练和测试数据集:drop_data = [‘Dates’, ‘DayOfWeek’, ‘PdDistrict’, ‘Resolution’, ‘Address’, ‘X’, ‘Y’]data = data.select([column for column in data.columns if column not in drop_data])data.show(5)现在我们拥有的数据集有文本数据,因此我们需要执行文本处理。三个重要的文本处理步骤是:标记数据,删除停用词并将单词向量化为向量。我们将使用RegexTokenizer将使用正则表达式将句子标记为单词列表,因为标点符号或特殊字符不会添加任何含义,我们只保留包含字母数字内容的单词。有一些词语the会在文本中非常常见,但不会为语境添加任何含义。使用内置类删除这些单词(也称为停用单词)StopWordsRemover。使用标准停用词[“http”,“https”,“amp”,“rt”,“t”,“c”,“the”]。最后使用了 CountVectorizer,将单词转换为数字向量(要素)。这些数字特征将用作训练模型的输入。数据的输出是Category列,但它也是36个不同类别的文本,因此,我们需要将其转换为一个热编码向量:PySpark StringIndexer可以很容易地使用它。将所有这些转换添加到我们的数据中Pipeline:# regular expression tokenizerre_Tokenizer = RT(inputCol=“Descript”, outputCol=“words”, pattern="\W")# stop wordsstop_words = [“http”,“https”,“amp”,“rt”,“t”,“c”,“the”] stop_words_remover = SWR(inputCol=“words”, outputCol=“filtered”).setStopWords(stop_words)# bag of words countcount_vectors = CountVectorizer(inputCol=“filtered”,outputCol=“features”, vocabSize=10000, minDF=5)#One hot encoding the labellabel_string_Idx = StringIndexer(inputCol = “Category”, outputCol = “label”)# Create the pipelinepipeline = Pipeline(stages=[re_Tokenizer, stop_words_remover,count_vectors, label_string_Idx])# Fit the pipeline to data.pipeline_fit = pipeline.fit(data)dataset = pipeline_fit.transform(data)dataset.show(5)现在,数据准备就绪,我们将其分为训练和测试数据集:# Split the data randomly into training and test data sets.(trainingData, testData) = dataset.randomSplit([0.7, 0.3], seed = 100)print(“Training Dataset Size: " + str(trainingData.count()))print(“Test Dataset Size: " + str(testData.count()))让我们为它拟合一个简单的逻辑回归模型。在测试数据集上,它提供97%的准确性。# Build the modellogistic_regrssor = LR(maxIter=20, regParam=0.3, elasticNetParam=0)# Train model with Training Datamodel = logistic_regrssor.fit(trainingData)# Make predictions on Test Datapredictions = model.transform(testData)# evaluate the model on test data setevaluator = MulticlassClassificationEvaluator(predictionCol=“prediction”)evaluator.evaluate(predictions)人工智能正在改变城市运营,交付和维护公共设施的方式,从照明和交通到连接和医疗服务。但是,选择不能有效协同工作或与其他城市服务相结合的技术可能会妨碍采用。要让城市真正受益于智能城市提供的潜力,需要改变思维方式。当局应该更长时间地规划并跨越多个部门。巴塞罗那市是一个典型的例子,物联网系统的实施创造了约47,000个就业机会,节省了4250万欧元的水费,并通过智能停车每年额外增加了3650万欧元。我们可以很容易地看到,城市可以从利用人工智能的物联网解决方案的技术进步中获益匪浅。基于人工智能的物联网解决方案可以帮助连接城市,管理多个基础设施和公共服务。在本文中,我们研究了从智能照明和道路交通到连接公共交通和废物管理的智能城市的用例。同时学会了使用有助于对旧金山12年期间犯罪报告中的数据进行分类的工具。如果你还想学习到更多的干货及实战案例,记得关注“愿码”公众号! ...

April 4, 2019 · 1 min · jiezi

百度人脸识别

序言本学期的android实验,打算做一款关于小应用,其中打算使用人脸识别技术,所以找到了百度AI,免费的开放API,为我的实验带来了极大的便利。创建百度AI应用要使用百度AI的接口,首先我们要注册一个账号,然后创建应用:然后表单填写,勾选你想使用的接口。我这里就默认了。最后创建好后,你会得到这样的一组信息:这在后面我们调用接口的时候回用到。好了,接下来,我们就开始API的使用。人脸识别首先,我们要清楚大概的过程,要进行人脸的识别,首先要先获取人脸的信息,也就是人脸检测。我们先检测出人脸的相关信息,然后才能进行比对,就是人脸对比。所以我们需要使用两个接口人脸检测和人脸对比。(相关的说明文档,我在本文最后会给出链接。)获取token在调用百度的API之前,首先需要获取到token。这里不得不给百度点个赞,示例代码有各种语言,共不同需求的开发者使用这里我是用的是java。 /** * 获取权限token * @return 返回token / @Override public String getAuth() { // 官网获取的 API Key String clientId = “API key”; // 官网获取的 Secret Key String clientSecret = “Secret Key”; return getAuth(clientId, clientSecret); } /* * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * @param apiKey - 百度云官网获取的 API Key * @param secretKey - 百度云官网获取的 Secret Key * @return assess_token / @Override public String getAuth(String apiKey, String secretKey) { // 获取token地址 String authHost = “https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + “grant_type=client_credentials” // 2. 官网获取的 API Key + “&client_id=” + apiKey // 3. 官网获取的 Secret Key + “&client_secret=” + secretKey; // 请求API,获取token JSONObject jsonObject = restTemplate.getForObject(getAccessTokenUrl, JSONObject.class); if (jsonObject != null) { return jsonObject.getString(“access_token”); } return null; }官方给的实例代码很完善,在使用时只需要替换自己的API key和Secret Key就行了。这里我根据自己的编程习惯,进行了一点改动。使用restTemplate进行第三方请求。人脸检测接下来,我们就可以根据获取的token进行人脸检测。 /* * 人脸检测 * @return 返回检测信息 / @Override public String detect() { // 请求url String url = “https://aip.baidubce.com/rest/2.0/face/v3/detect"; try { Map<String, Object> map = new HashMap<>(); map.put(“image”, “027d8308a2ec665acb1bdf63e513bcb9”); map.put(“face_field”, “faceshape,facetype”); map.put(“image_type”, “face_token”); String param = GsonUtils.toJson(map); // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。 String accessToken = this.getAuth(); String result = HttpUtil.post(url, accessToken, “application/json”, param); System.out.println(result); return result; } catch (Exception e) { e.printStackTrace(); } return null; }上面使用的HttpUtil和GsonUtils请到官网中自行下载。在图片的参数处,我们使用了face_token,这是我之前请求过一次得到的,每张图片多次请求,都会得到一个唯一的face_token。但是实际情况下,我们大多数是不知道face_token的,这里只是为了简短代码。他还支持URL和base64的图片格式,但是有时限于网络原因,使用URL方式可能会很慢,所以,在实际的请求中,建议选择base64的方式检查图片。最后返回的信息如下:人脸对比人脸对比,可以用在身份认证。比如我们使用人脸登录的时候就可以使用。现在我们使用两张照片进行比对: /* * 图片比对 * @return 对比结果 */ @Override public String match() { // 请求url String url = “https://aip.baidubce.com/rest/2.0/face/v3/match"; try { byte[] bytes1 = FileUtil.readFileByBytes(“src/main/resources/static/test.jpg”); byte[] bytes2 = FileUtil.readFileByBytes(“src/main/resources/static/test1.jpg”); String image1 = Base64Util.encode(bytes1); String image2 = Base64Util.encode(bytes2); List<Map<String, Object>> images = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put(“image”, image1); map1.put(“image_type”, “BASE64”); map1.put(“face_type”, “LIVE”); map1.put(“quality_control”, “LOW”); map1.put(“liveness_control”, “NORMAL”); Map<String, Object> map2 = new HashMap<>(); map2.put(“image”, image2); map2.put(“image_type”, “BASE64”); map2.put(“face_type”, “LIVE”); map2.put(“quality_control”, “LOW”); map2.put(“liveness_control”, “NORMAL”); images.add(map1); images.add(map2); String param = GsonUtils.toJson(images); // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。 String accessToken = this.getAuth(); String result = HttpUtil.post(url, accessToken, “application/json”, param); System.out.println(result); return result; } catch (Exception e) { e.printStackTrace(); } return null; }我们的请求参数中,后面的三个是对照片的限制:然后获取的结果类似如下:具体含义请参照官方文档。总结本文只是实现了对两张照片的比对,但是实际的情况,很多时候会用到人脸采集,但是笔者在这里注册不了企业信息,所以就只能做个低配版的了:将动态采集变成静态图片比对。官方文档:https://ai.baidu.com/docs#/Fa… ...

March 28, 2019 · 2 min · jiezi

AI繁荣下的隐忧——Google Tensorflow安全风险剖析

本文由云+社区发表作者:[ Tencent Blade Team ] Cradmin我们身处一个巨变的时代,各种新技术层出不穷,人工智能作为一个诞生于上世纪50年代的概念,近两年出现井喷式发展,得到各行各业的追捧,这背后来自于各种力量的推动,诸如深度学习算法的突破、硬件计算能力的提升、不断增长的大数据分析需求等。从2017年的迅猛发展,到2018年的持续火爆,国内外各个巨头公司如腾讯、阿里、百度、Google、微软、Facebook等均开始在人工智能领域投下重兵,毫无疑问,这一技术未来将会深度参与我们的生活并让我们的生活产生巨大改变:人工智能时代来了!面对一项新技术/新趋势的发展,作为安全研究人员该关注到什么?没错,每一个新技术的诞生及应用都会伴随有安全风险,安全研究人员要在风暴来临之前做到未雨绸缪。Blade Team作为关注行业前瞻安全问题的研究团队,自然要对AI技术进行安全预研。一个典型的人工智能系统大致由3部分组成:算法模型,AI支撑系统(训练/运行算法的软件基础设施)和业务逻辑及系统。比如一个人脸识别系统基本架构如下:图1:典型人脸识别系统架构从安全视角来看,我们可以得出3个潜在的攻击面:AI算法安全:算法模型是一个AI系统的核心,也是目前AI安全攻防对抗的焦点。具体来讲,目前AI算法安全的主要风险在于对抗样本(adversarial examples)攻击,即通过输入恶意样本来欺骗AI算法,最终使AI系统输出非预期的结果,目前已发展出诸如生成对抗网络(GAN)这种技术[0],以AI对抗AI,在这个领域学术界和工业界已有大量研究成果,大家可Google了解。AI支撑系统安全:AI算法模型的运行和训练都需要一套软件系统来支撑,为了提高计算效率和降低门槛,各大厂商开发了机器学习框架,本文的主角Google Tensorflow就属于这一层,类比于计算机系统中的OS层,可以想象到这里如果出现安全问题,影响如何?而这类框架的安全性目前并没有得到足够的关注。业务逻辑系统:上层业务逻辑及相关系统,与传统业务和运维安全风险差别不大,不再赘述。经过近几年的发展,各种机器学习框架不断涌现出来,各有特色,其中不乏大厂的身影,我们选取了三款使用量较大的框架作为研究对象:Tensorflow[1]:由Google开发,面向开源社区,功能强大,易用性高,早期性能稍差,但在Google强大的工程能力下,已有明显改观,从使用量上看,目前是机器学习框架里面的TOP 1。Caffe[2]:2013年由UC Berkely的贾扬清博士开发,在学术界使用极其广泛,卷积神经网络的实现简洁高效,但因历史架构问题,不够灵活。目前贾教主已就职Facebook,并在Facebook的大力支持下,推出了Caffe2,解决Caffe时代留下的问题(编辑注:发布本文时,已有消息称贾教主已经加盟阿里硅谷研究院,可见巨头对AI人才的渴求)。Torch[3]:Facebook内部广泛使用的一款机器学习框架,灵活性和速度都不错,唯一不足是默认采用Lua语言作为API接口,初学者会有些不习惯,当然目前也支持了Python。图2 业界流行机器学习框架简要对比以Tensorflow为例,我们先来看一下它的基本架构:图3 Tensorflow基本架构[4]由上图大致可以看出,除了核心的机器学习算法逻辑外(Kernel implementations),Tensorflow还有大量的支撑配套系统,这无疑增加了软件系统的复杂性。我们继续沿用上一节的思路,首先详细分析下Tensorflow的攻击面。这里也插个题外话,分享下个人的一些研究习惯,一般在接触到一个新领域,笔者习惯通读大量资料,对该领域的基本原理和架构有个相对深入的了解,必要时结合代码粗读,对目标系统进行详细的攻击面分析,确定从哪个薄弱点入手,然后才是看个人喜好进行代码审计或Fuzzing,发现安全漏洞。在笔者看来,安全研究前期的调研工作必不可少,一方面帮你确定相对正确的研究目标,不走过多弯路,另一方面对功能和原理的深入理解,有助于找到一些更深层次的安全问题。通过对Tensorflow功能和架构的了解,笔者大致把攻击面分为以下几类:*输入文件解析逻辑:包括对训练和推断时用到的图片、视频、音频等类型文件的解析处理模型处理逻辑:模型文件的解析和模型运行机制机器学习算法逻辑:机器学习算法实现逻辑**分布式部署及扩展功能:包括Tensorflow分布式集群功能,性能优化XLA Compiler,自定义函数扩展功能等。*详细可参考下图,这是当时基于Tensorflow 1.4版本的分析,有兴趣的读者可以自行分析添加。在随后的审计中,我们在多个攻击面中发现了安全问题,其中一个最严重的风险存在于Tensorflow的模型处理机制。图4 Tensorflow攻击面分析 我们先来了解下Tensorflow的模型机制。顾名思义,Tensor是Tensorflow中的基本数据类型(或者说数据容器),flow表示dataflow,Tensorflow用数据流图(dataflow graph)来表示一个计算模型,图中的结点(node)表示计算操作(operation),图中的边(edge)表示数据输入和输出,当我们设计了一个机器学习模型,在Tensorflow中会以一张数据流图来表示,最终算法模型会以图的形式在Tensorflow运行时(runtime)下执行,完成我们需要的运算。可以参考Tensorflow官网的一个示例。图5 Tensorflow的数据流图[5]机器学习模型训练中经常会出现这样的场景:1) 需要中断当前训练过程,保存模型,以备下次从中断处继续训练2) 把训练好的模型保存,分享给他人进一步调优或直接使用Tensorflow提供了两种种模型持久化机制,可以把算法模型保存为文件:tf.train.Saver和tf.saved_model。两组API在把模型持久化为文件时,结构上有些差异,tf.train.Saver适合临时保存被中断的训练模型,被保存的模型称为一个checkpoint,tf.saved_model更适合保存完整的模型提供在线服务。tf.train.Saver保存的模型文件如下:savermodel.meta是模型的元数据,也就是数据流图的描述文件,采用特定的二进制格式,savermodel.data-xxx保存着模型中各个变量的值。再来看下tf.saved_model保存的模型文件:saved_model.pbtxt保存着表示算法模型的图结构,可以指定保存为protobuf文本格式或二进制格式,但通常情况下出于空间效率考虑,默认采用二进制形式保存,variables目录中保存模型中变量的值。可以看到,不管哪种方式,都需要保存关键的数据流图的结构,打开saved_model.pbtxt,仔细看下我们关心的数据流图:可以比较直观的看到图的结构,比如Add是操作类型,输入是参数x和y,输出是z,不难得出是一个简单的加法计算z=x+y;Tensorflow API提供了大量的操作类型,来满足各种计算需求。图6 Tensorflow Python API[6]看到这里,大家可有什么想法?没错,既然算法模型是以图的形式在Tensorflow中执行,从图的角度看,我们能否在不影响图的正常流程的情况下,插入一些额外的操作(结点)呢?进一步,如果这些操作是恶意的呢?从上一节的分析,我们发现了一个让人略感兴奋的攻击思路,在一个正常的Tensorflow模型文件中插入可控的恶意操作,如何做到呢?需要满足两个条件:1)在数据流图中插入恶意操作后,不影响模型的正常功能,也就是说模型的使用者从黑盒角度是没有感知的;2)插入的操作能够完成“有害”动作,如代码执行等。先看下第二个条件,最直接的“有害”动作,一般可关注执行命令或文件操作类等,而Tensorflow也确实提供了功能强大的本地操作API,诸如tf.read_file, tf.write_file, tf.load_op_library, tf.load_library等。看这几个API名字大概就知其义,最终我们选择使用前2个读写文件的API来完成PoC,其他API的想象空间读者可自行发掘。在验证过程中,笔者发现这里其实有个限制,只能寻找Tensorflow内置的API操作,也叫做kernel ops,如果是外部python库实现的API函数,是不会插入到最终的图模型中,也就无法用于这个攻击场景。满足第一个条件,并没有想象的那么简单,笔者当时也颇费了一翻周折。我们以一个简单的线性回归模型y=x+1为例,x为输入变量,y为输出结果,用Tensorflow的python API实现如下:读写文件类的操作显然与线性回归计算无关,不能直接作为模型的输入或输出依赖来执行;如果直接执行这个操作呢?图7 tf.write_file API文档[7]从tf.write_file API文档可以看到,返回值是一个operation,可以被Tensorflow直接执行,但问题是这个执行如何被触发呢?在Tensorflow中模型的执行以run一个session开始,这里当用户正常使用线性回归模型时,session.run(y)即可得到y的结果,如果要执行写文件的动作,那就要用户去执行类似session.run(tf.write_file)这样的操作,显然不正常。在几乎翻遍了Tensorflow的API文档后,笔者找到了这样一个特性:图8 tf.control_dependencies API文档[8]简单来说,要执行control_dependencies这个context中的操作,必须要先计算control_inputs里面的操作,慢着,这种依赖性不正是我们想要的么?来看看这段python代码:这个success_write函数返回了一个常量1,但在control_dependencies的影响下,返回1之前必须先执行tf.write_file操作!这个常量1正好作为模型y=x+1的输入,漏洞利用的第一个条件也满足了。最后还有一个小问题,完成临门一脚,能够读写本地文件了,能干什么“坏事”呢?在Linux下可以在crontab中写入后门自动执行,不过可能权限不够,笔者这里用了另外一种思路,在Linux下读取当前用户home目录,然后在bashrc文件中写入反连后门,等用户下次启动shell时自动执行后门,当然还有其他利用思路,就留给读者来思考了。值得注意的是,利用代码中这些操作都需要用Tensorflow内置的API来完成,不然不会插入到图模型中。把上面的动作串起来,关键的PoC代码如下:当用户使用这个训练好的线性回归模型时,一般使用以下代码:运行效果如下:模型使用者得到了线性回归预期的结果4(x=3, y=4),一切正常,但其实嵌入在模型中的反连后门已悄然执行,被攻击者成功控制了电脑。图9 Tensorflow模型中反连后门被执行在完成这个PoC后,我们仔细思考下利用场景,在Tensorflow中共享训练好的机器学习模型给他人使用是非常常见的方式,Tensorflow官方也在GitHub上提供了大量的模型供研究人员使用[9],我们设想了这样一个大规模攻击场景,在GitHub上公布一些常用的机器学习模型,在模型中插入后门代码,然后静待结果。回顾一下,这个安全问题产生的根本原因在于Tensorflow环境中模型是一个具有可执行属性的载体,而Tensorflow对其中的敏感操作又没有做任何限制;同时在一般用户甚至AI研究人员的认知中,模型文件是被视作不具有执行属性的数据文件,更加强了这种攻击的隐蔽性。我们把这个问题报告给Google后,经过多轮沟通,Google Tensorflow团队最终不认为该问题是安全漏洞,但认为是个高危安全风险,并专门发布了一篇关于Tensorflow安全的文章[10],理由大致是Tensorflow模型应该被视作可执行程序,用户有责任知道执行不明模型的风险,并给出了相应的安全建议。在对Tensorflow其他攻击面的分析中,我们尝试了人工审计代码和Fuzzing的方法,又发现了多个安全漏洞,大部分属于传统的内存破坏型漏洞,涉及Tensorflow的图片解析处理、模型文件解析、XLA compiler等功能,并且漏洞代码都属于Tensorflow框架本身,也从侧面反映了Tensorflow在代码安全上并没有做更多的工作。下面是Tensorflow发布的安全公告及致谢[11],目前为止共7个安全漏洞,均为Tencent Blade Team发现,其中5个为笔者发现。在研究过程中,我们也注意到业界的一些类似研究,如360安全团队对多款机器学习框架用到的第三方库进行了安全审计,发现存在大量安全问题[12],其中多为传统二进制漏洞类型。回顾整个漏洞报告和处理流程,可谓一波三折。最初上报漏洞时,我们发现除了GitHub上的issue,Tensorflow似乎没有其他的漏洞上报渠道,出于风险考虑,我们觉得发现的安全问题在修复之前不适合在GitHub上直接公开,最后在Google Groups发帖询问,有一个自称是Tensorflow开发负责人的老外回复,可以把安全问题单发给他,开始笔者还怀疑老外是不是骗子,事后证明这个人确实是Tensorflow团队开发负责人。经过持续近5个月、几十封邮件的沟通,除了漏洞修复之外,最终我们也推动Google Tensorflow团队建立了基本的漏洞响应和处理流程。1)Tensorflow在GitHub上就安全问题作了特别说明Using Tensorflow Securely[10],包括安全漏洞认定范围,上报方法(邮件报告给security@tensorflow.org),漏洞处理流程等;图10 Tensorflow安全漏洞处理流程2)发布安全公告,包括漏洞详情和致谢信息[11];3)在Tensoflow官网(tensorflow.org)增加一项内容Security[13],并链接至GitHub安全公告,引导用户对安全问题的重视。针对我们发现的模型机制安全风险,Google在Using Tensorflow Securely这篇安全公告中做了专门说明[10],给出了相应的安全措施:1)提高用户安全意识,把Tensorflow模型视作可执行程序,这里其实是一个用户观念的转变;2)建议用户在沙箱环境中执行外部不可信的模型文件,如nsjail沙箱;3)在我们的建议下,Tensorflow在一个模型命令行工具中增加了扫描功能(tensorflow/python/tools/saved_model_cli.py),可以列出模型中的可疑操作,供用户判断。可以看出,Tensorflow团队认为这个安全风险的解决主要在用户,而不是Tensorflow框架本身。我们也在Blade Team的官方网站上对这个风险进行了安全预警,并命名为“Columbus”[14]。上文提到的其他内存破坏型漏洞,Tensorflow已在后续版本中修复,可参考安全公告[11]。AI安全将走向何方?我们相信AI算法安全的对抗将会持续升级,同时作为背后生产力主角的基础设施软件安全理应受到应有的关注,笔者希望这个小小的研究能抛砖引玉(实际上我们的研究结果也引起了一些专家和媒体的关注),期待更多安全研究者投身于此,一起为更安全的未来努力。[0] https://en.wikipedia.org/wiki...[1] https://www.tensorflow.org/[2] http://caffe.berkeleyvision.org/[3] http://torch.ch/[4] https://www.tensorflow.org/gu...[5] https://www.tensorflow.org/gu...[6] https://www.tensorflow.org/ve...[7] https://www.tensorflow.org/ve...[8] https://www.tensorflow.org/ve...[9] https://github.com/tensorflow...[10] https://github.com/tensorflow...[11] https://github.com/tensorflow...[12] https://arxiv.org/pdf/1711.11...[13] https://www.tensorflow.org/co...[14] https://blade.tencent.com/col…此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

March 19, 2019 · 1 min · jiezi

深度神经网络原理与实践

理论基础什么是神经网络我们知道深度学习是机器学习的一个分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支,它在 wikipedia 上的解释如下:深度神经网络(Deep Neural Networks, DNN)是一种判别模型,具备至少一个隐层的神经网络,可以使用反向传播算法进行训练。权重更新可以使用下式进行随机梯度下降法求解。首先我们可以知道,深度神经网络是一种判别模型。意思就是已知变量 x ,通过判别模型可以推算出 y。比如机器学习中常用到的案例,通过手写数字,模型推断出手写的是数字几。深度神经网络中的“深度”指的是一系列连续的表示层,数据模型中包含了多少层,这就被称为模型的“深度”。通过这些层我们可以对数据进行高层的抽象。如下图所示,深度神级网络由一个输入层,多个(至少一个)隐层,以及一个输出层构成,而且输入层与输出层的数量不一定是对等的。每一层都有若干个神经元,神经元之间有连接权重。还是上面的案例,识别手写数字,手写的数字要怎么转成输入呢?既然是手写,那么肯定是一张图片,图片由多个像素点组成,这些像素点可以构成一个输入,经过多层神经网络,输出10个数字,这个10个数字就代表了数字 0 ~ 9 的概率。神经元如何输入输出神经网络中的每个神经元都可以看成是一个简单的线性函数,下面我们构造一个简单的三层的神经网络来看看。如上图所示,n1 可以表示为:$$n_1 = w_{1,1}x_1 + w_{2,1}x_2 + w_{3,1}x_3 + b$$其中 w_{1,1} 表示神经元之间的权重,b 为一个常量,作为函数的偏移量。较小的权重可以弱化某个神经元对下一个神经元造成的影响,而较大的权重将放大信号。假设 w_{1,1} 为 0.1,w_{3,1} 为 0.7,那么 x3 对 n1 的影响要大于 x1。你可能会问,为什么每个神经元要与其他所有层的神经元相互连接?这里主要由两个原因:完全连接的形式相对容易的编写成计算机指令。在神经网络训练的过程中会弱化实际上不需要的连接(也就是某些连接权重会慢慢趋近于 0)。实际上通过计算得到 n1 后,其实不能立马用于后面的计算,还需要经过一个激活函数(一般为 sigmod 函数)。 其作用主要是引入非线性因素。如果神级网络中只有上面那种线性函数,无论有多少层,结果始终是线性的。实际案例为了方便计算,我们构造一个只有两层的神经网络,演示一下具体的计算过程。先通过线性函数求得一个 x 值,再把 x 值带入激活函数,得到 y1 的值。$$x = w_{1,1}x_1 + w_{2,1}x_2 = (1.0 * 0.9) + (0.5 * 0.3) = 1.05$$$$y_1 = 1 / (1 + e ^{-x}) = 1 / (1 + 0.3499) = 0.7408$$矩阵乘法其实上面的计算过程,很容易通过矩阵乘法的方式表示。矩阵这个东西,说简单点就是一个表格,或者一个二维数组。如下图所示,就是一个典型的矩阵。那么矩阵的乘法可以表示为:矩阵的乘法通常被成为点乘或者内积。如果我们将矩阵内的数字换成我们神经网络的输入和权重,你会发现原来前面的计算如此简单。获得点积后,只需要代入到激活函数,就能获得输出了。通过矩阵计算过程可以表示为:$$X_{hidden} = W_{input_hidden} · I_{input}O_{hidden} = sigmoid(X_{hidden})$$实际案例下面通过矩阵来表示一个三层神经网络的计算过程。上图只给出了输入层到隐层的计算过程,感兴趣可以自己手动计算下,隐层到输出层的计算过程。隐层到输出层的权重矩阵如下:反向传播进过一轮神经网络计算得到输出值,通常与我们实际想要的值是不一致的,这个时候我们会得到一个误差值(误差值就是训练数据给出的正确答案与实际输出值之间的差值)。但是这个误差是多个节点共同作用的结果,我们到底该用何种方式来更新各个连接的权重呢?这个时候我们就需要通过反向传播的方式,求出各个节点的误差值。下面我们代入具体值,进行一次计算。上图中可以看到 e_1 的误差值主要由 w_{1,1} 和 w_{2,1} 造成,那么其误差应当分散到两个连接上,可以按照两个连接的权重对误差 e_1 进行分割。$$e_1 * \frac{w_{1,1}}{w_{1,1} + w_{2,1}} = 0.8 * \frac{2}{2 + 3} = 0.32e_1 * \frac{w_{2,1}}{w_{1,1} + w_{2,1}} = 0.8 * \frac{3}{2 + 3} = 0.48$$同理对误差 e_2 进行分割,然后把两个连接处的误差值相加,就能得到输出点的前馈节点的误差值。然后在按照之前的方法将这个误差传播到前面的层,直到所有节点都能得到自己的误差值,这种方式被成为反向传播。使用矩阵乘法进行反向传播误差上面如此繁琐的操作,我们也可以通过矩阵的方式进行简化。这个矩阵中还是有麻烦的分数需要处理,那么我们能不能大胆一点,将分母直接做归一化的处理。这么做我们仅仅只是改变了反馈误差的大小,其误差依旧是按照比例来计算的。仔细观察会发现,与我们之前计算每层的输出值的矩阵点击很像,只是权重矩阵进行翻转,右上方的元素变成了左下方的元素,我们可以称其为转置矩阵,记为 w^T 。反向传播误差的矩阵可以简单表示为:$$error_{hidden} = W^{T}{hidden_output} · error{output}$$梯度下降在每个点都得到误差后,我们该按照何种方式来更新权重呢?这个时候就要使用到机器学习中常用的方式:梯度下级。更多细节可以参考我之前写的博客:梯度下降与线性回归通过不停的训练,我们就能改进神经网络,其本质就是不断地改变权重的大小,减小神经网络输出的误差值。最后就能够得到一个多层神经网络的模型,通过输入进行有效的预测。实战环境准备首先需要安装 python3 ,直接去 python 官网安装,尽量安装最新版,不推荐安装 python2 。安装好 python 环境之后,然后安装 virtualenv 以及相关依赖。# 升级 pip 到最新版本pip3 install –upgrade pip# 安装 virtualenv ,用于配置虚拟环境pip3 install –user –upgrade virtualenv正常情况下,当我们在使用 pip 进行包安装的时候,都是安装的全局包,相当于npm install -g。假如现在有两个项目,项目 A 依赖 simplejson@2 ,项目 B 依赖 simplejson@3,这样我们在一台机器上开发显得有些手足无措。这个时候 virtualenv 就能大展身手了,virtualenv 可以创建一个独立的 python 运行环境,也就是一个沙箱,你甚至可以在 virtualenv 创建的虚拟环境中使用与当前系统不同的 python 版本。# 配置虚拟环境cd /mlvirtualenv env# 启动虚拟环境# linuxsource env/bin/activate# windows./env/Scripts/activate启动后,如下(env) 在虚拟环境下安装所有模块依赖。# 安装模块和依赖(env) pip3 install –upgrade jupyter matplotlib numpy scipyjupyter:基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。numpy:数组计算扩展的包,支持高维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。scipy:基于numpy的扩展包,它增加的功能包括数值积分、最优化、统计和一些专用函数。matplotlib:基于numpy的扩展包,提供了丰富的数据绘图工具,主要用于绘制一些统计图形。scikit-learn:开源的Python机器学习库,它基于Numpy和Scipy,提供了大量用于数据挖掘和分析的工具,包括数据预处理、交叉验证、算法与可视化算法等一系列接口。启动 jupyterjupyter notebookjupyter 会在8888端口起一个服务,并自动打开浏览器。通过右上角的new,你就能创建一个项目了。创建项目后,我们很方便的在该页面上进行 python 代码的运行与输出。准备数据MNIST 是由美国的高中生和美国人口调查局的职员手写数字(0 ~ 9)图片。接下来要做的事情就是让我们的程序学习这些图片的信息,能够识别出输入的图片所代表的数字含义,这听上去好像有点难度,不着急,我们一步步来。这里准备了 MNIST 的训练数据,其中 train_100 为训练数据集,test_10 为测试数据集。在机器学习的过程中,我们一般会将数据集切分成两个,分别为训练集合测试集,一般 80% 的数据进行训练,保留 20% 用于测试。这里因为是 hello world 操作,我们只用 100 个数据进行训练,真实情况下,这种数据量是远远不够的。mnist_train_100.csvmnist_test_10.csv如果想用完整的数据进行训练,可以下载这个 csv 文件。https://pjreddie.com/media/files/mnist_train.csv观察数据下载数据后,将 csv (逗号分隔值文件格式)文件放入到 datasets 文件夹,然后使用 python 进行文件的读取。data_file = open(“datasets/mnist_train_100.csv”, ‘r’)data_list = data_file.readlines() # readlines方法用于读取文件的所有行,并返回一个数组data_file.close()len(data_list) # 数组长度为100打印第一行文本,看看数据的格式是怎么样的print(data_list[0])len(data_list[0].split(’,’)) # 使用 , 进行分割,将字符串转换为数组可以看到一行数据一共有 785 个数据,第一列表示这个手写数的真实值(这个值在机器学习中称为标签),后面的 784 个数据表示一个 28 * 28 的尺寸的像素值,流行的图像处理软件通常用8位表示一个像素,这样总共有256个灰度等级(像素值在0255 间),每个等级代表不同的亮度。下面我们导入 numpy 库,对数据进行处理,values[1:] 取出数组的第一位到最后并生成一个新的数组,使用 numpy.asfarray 将数组转为一个浮点类型的 ndarray,然后每一项除以 255 在乘以 9,将每个数字转为 0 ~ 9 的个位数,使用 astype(int) 把每个数再转为 int 类型,最后 reshape((28,28) 可以把数组转为 28 * 28 的二维数组。如果想了解更多 numpy 的资料,可以查看它的文档。import numpy as npvalues = data_list[3].split(’,’)image_array = (np.asfarray(values[1:]) / 255 * 9).astype(int).reshape(28,28)这样看不够直观,接下来使用 matplotlib ,将像素点一个个画出来。import matplotlib.pyplot%matplotlib inlinematplotlib.pyplot.imshow( np.asfarray(values[1:]).reshape(28,28), cmap=‘Greys’, interpolation=‘None’)搭建神经网络我们简单勾勒出神经网络的大概样子,至少需要三个函数:初始化函数——设定输入层、隐藏层、输出层节点的数量,随机生成的权重。训练——学习给定的训练样本,调整权重。查询——给定输入,获取预测结果。框架代码如下:# 引入依赖库import numpy as npimport scipy.specialimport matplotlib.pyplot# 神经网络类定义class neuralNetwork: # 初始化神经网络 def init(): pass # 训练神经网络 def train(): pass # 查询神经网络 def query(): pass初始化神经网络接下来让我们进行第一步操作,初始化一个神经网络。 # 初始化神经网络 def init(self, inputnodes, hiddennodes, outputnodes, learningrate): # 设置输入层、隐藏层、输出层节点的数量 self.inodes = inputnodes self.hnodes = hiddennodes self.onodes = outputnodes # 连接权重,随机生成输入层到隐藏层和隐藏层到输出层的权重 self.wih = np.random.rand(self.hnodes, self.inodes) - 0.5 self.who = np.random.rand(self.onodes, self.hnodes) - 0.5 # 学习率 self.lr = learningrate # 将激活函数设置为 sigmoid 函数 self.activation_function = lambda x: scipy.special.expit(x) pass生成权重生成连接权重使用 numpy 函数库,该库支持大维度数组以及矩阵的运算,通过numpy.random.rand(x, y)可以快速生成一个 x * y 的矩阵,每个数字都是一个 0 ~ 1 的随机数。因为导入库的时候使用了 import numpy as np 命令,所有代码中可以用 np 来代替 numpy。上面就是通过 numpy.random.rand 方法生成一个 3 * 3 矩阵的案例。减去0.5是为了保证生成的权重所有权重都能维持在 -0.5 ~ 0.5 之间的一个随机值。激活函数scipy.special 模块中包含了大量的函数库,利用 scipy.special 库可以很方便快捷的构造出一个激活函数:activation_function = lambda x: scipy.special.expit(x)查询神经网络 # 查询神经网络 def query(self, inputs_list): # 将输入的数组转化为一个二维数组 inputs = np.array(inputs_list, ndmin=2).T # 计算输入数据与权重的点积 hidden_inputs = np.dot(self.wih, inputs) # 经过激活函数的到隐藏层数据 hidden_outputs = self.activation_function(hidden_inputs) # 计算隐藏层数据与权重的点积 final_inputs = np.dot(self.who, hidden_outputs) # 最终到达输出层的数据 final_outputs = self.activation_function(final_inputs) return final_outputs查询神经网络的操作很简单,只需要使用 numpy 的 dot 方法对两个矩阵求点积即可。这里有一个知识点,就是关于 numpy 的数据类型,通过 numpy.array 方法能够将 python 中的数组转为一个 N 维数组对象 Ndarray,该方法第二个参数就是表示转化后的维度。上图是一个普通数组 [1, 2, 3] 使用该方法转变成二维数组,返回 [[1, 2, 3]]。该方法还有个属性 T,本质是调用 numpy 的 transpose 方法,对数组进行轴对换,如下图所示。通过转置我们就能得到一个合适的输入矩阵了。训练神经网络 # 训练神经网络 def train(self, inputs_list, targets_list): # 将输入数据与目标数据转为二维数组 inputs = np.array(inputs_list, ndmin=2).T targets = np.array(targets_list, ndmin=2).T # 通过矩阵点积和激活函数得到隐藏层的输出 hidden_inputs = np.dot(self.wih, inputs) hidden_outputs = self.activation_function(hidden_inputs) # 通过矩阵点积和激活函数得到最终输出 final_inputs = np.dot(self.who, hidden_outputs) final_outputs = self.activation_function(final_inputs) # 获取目标值与实际值的差值 output_errors = targets - final_outputs # 反向传播差值 hidden_errors = np.dot(self.who.T, output_errors) # 通过梯度下降法更新隐藏层到输出层的权重 self.who += self.lr * np.dot( (output_errors * final_outputs * (1.0 - final_outputs)), np.transpose(hidden_outputs) ) # 通过梯度下降法更新输入层到隐藏层的权重 self.wih += self.lr * np.dot( (hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), np.transpose(inputs) ) pass训练神经网络前半部分与查询类似,中间会将得到的差值通过求矩阵点积的方式进行反向传播,最后就是使用梯度下级的方法修正权重。其中 self.lr 为梯度下降的学习率,这个值是限制梯度方向的速率,我们需要经常调整这个值来达到模型的最优解。进行训练# 设置每一层的节点数量input_nodes = 784hidden_nodes = 100output_nodes = 10# 学习率learning_rate = 0.1# 创建神经网络模型n = neuralNetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)# 加载训练数据training_data_file = open(“datasets/mnist_train_100.csv”, ‘r’)training_data_list = training_data_file.readlines()training_data_file.close()# 训练神经网络# epochs 表示训练次数epochs = 10for e in range(epochs): # 遍历所有数据进行训练 for record in training_data_list: # 数据通过 ‘,’ 分割,变成一个数组 all_values = record.split(’,’) # 分离出图片的像素点到一个单独数组 inputs = (np.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01 # 创建目标输出值(数字 0~9 出现的概率,默认全部为 0.01) targets = np.zeros(output_nodes) + 0.01 # all_values[0] 表示手写数字的真实值,将该数字的概率设为 0.99 targets[int(all_values[0])] = 0.99 n.train(inputs, targets) pass pass# 训练完毕print(‘done’)验证训练结果# 加载测试数据test_data_file = open(“datasets/mnist_test_10.csv”, ‘r’)test_data_list = test_data_file.readlines()test_data_file.close()# 测试神经网络# 记录所有的训练值,正确存 1 ,错误存 0 。scorecard = []# 遍历所有数据进行测试for record in test_data_list: # 数据通过 ‘,’ 分割,变成一个数组 all_values = record.split(’,’) # 第一个数字为正确答案 correct_label = int(all_values[0]) # 取出测试的输入数据 inputs = (np.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01 # 查询神经网络 outputs = n.query(inputs) # 取出概率最大的数字,表示输出 label = np.argmax(outputs) # 打印出真实值与查询值 print(‘act: ‘, label, ’ pre: ‘, correct_label) if (label == correct_label): # 神经网络查询结果与真实值匹配,记录数组存入 1 scorecard.append(1) else: # 神经网络查询结果与真实值不匹配,记录数组存入 0 scorecard.append(0) pass pass # 计算训练的成功率scorecard_array = np.asarray(scorecard)print(“performance = “, scorecard_array.sum() / scorecard_array.size)完整代码要查看完整代码可以访问我的 github: deep_neural_network总结到这里整个深度神级网络的模型原理与实践已经全部进行完毕了,虽然有些部分概念讲解并不是那么仔细,但是你还可以通过搜索其他资料了解更多。感谢《Python神经网络编程》这本书,因为它才有了这个博客,如果感兴趣你也可以买来看看,这本书真的用很简单的语言描述了复杂的数学计算。人工智能现在确实是一个非常火热的阶段,希望感兴趣的同学们多多尝试,但是也不要一昧的追新,忘记了自己本来的优势。最后附上原文链接:深度神经网络原理与实践 ...

March 18, 2019 · 4 min · jiezi

24分钟让AI跑起飞车类游戏

本文由云+社区发表作者:WeTest小编WeTest 导读本文主要介绍如何让AI在24分钟内学会玩飞车类游戏。我们使用Distributed PPO训练AI,在短时间内可以取得不错的训练效果。本方法的特点:纯游戏图像作为输入不使用游戏内部接口可靠的强化学习方法简单易行的并行训练1. PPO简介PPO(Proximal Policy Optimization)是OpenAI在2016年NIPS上提出的一个基于Actor-Critic框架的强化学习方法。该方法主要的创新点是在更新Actor时借鉴了TRPO,确保在每次优化策略时,在一个可信任的范围内进行,从而保证策略可以单调改进。在2017年,DeepMind提出了Distributed PPO,将PPO进行类似于A3C的分布式部署,提高了训练速度。之后,OpenAI又优化了PPO中的代理损失函数,提高了PPO的训练效果。本文不介绍PPO的算法细节,想学习的同学可以参考以下三篇论文:【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.2. 图像识别2.1 游戏状态识别游戏状态识别是识别每一局游戏关卡的开始状态和结束状态。在飞车类游戏中,开始状态和结束状态的标志如图1所示。因为红色框中的标志位置都固定,因此我们使用模板匹配的方法来识别这些游戏状态。1.jpg图1 游戏状态标志从开始状态到结束状态之间的图像是游戏关卡内的图像,此时进行强化学习的训练过程。当识别到结束状态后,暂停训练过程。结束状态之后的图像都是UI图像,我们使用UI自动化的方案,识别不同的UI,点击相应的按钮再次进入游戏关卡,开始下一轮的训练过程,如图2所示。2.png图2 游戏流程2.3 游戏图像识别我们对游戏关卡中的图像识别了速度的数值,作为强化学习中计算激励(Reward)的依据,如图3所示。速度识别包括三个步骤:第一步,图像分割,将每一位数字从识别区域中分割出来。第二步,数字识别,用卷积神经网络或者模板匹配识别每一位图像中的数字类别。第三步,数字拼接,根据图像分割的位置,将识别的数字拼接起来。3.jpg图3 图像各个区域示意图3. AI设计3.1 网络结构我们使用的网络结构如图4所示。输入为游戏图像中小地图的图像,Actor输出当前时刻需要执行的动作,Critic输出当前时刻运行状态的评价。AlexNet使用从输入层到全连接层之前的结构,包含5个卷积层和3个池化层。Actor和Critic都有两个全连接层,神经元数量分别为1024和512。Actor输出层使用softmax激活函数,有三个神经元,输出动作策略。Critic输出层不使用激活函数,只有一个神经元,输出评价数值。4.jpg图4 网络结构示意图3.2 输入处理我们将小地图图像的尺寸变为121X121,输入到AlexNet网络后,在第三个池化层可以获得2304维的特征向量(57622=2304)。将这个特征向量作为Actor和Critic的输入。我们使用在ImageNet上训练后的AlexNet提取图像特征,并且在强化学习的过程中没有更新AlexNet的网络参数。3.3 动作设计我们目前在设计飞车类游戏动作时,使用离散的动作,包括三种动作:左转、右转和NO Action。每种动作的持续时间为80ms,即模拟触屏的点击时间为80ms。这样的动作设计方式比较简单,便于AI快速地训练出效果。如果将动作修改为连续的动作,就可以将漂移添加到动作中,让AI学习左转、右转、漂移和NO Action的执行时刻和执行时长。3.4 激励计算如果将游戏的胜负作为激励来训练AI,势必会花费相当长的时间。在本文中,我们根据游戏图像中的速度数值,计算当前时刻的激励。假定当前时刻的速度为Vp,前一时刻的速度为Vq,那么激励R按照以下方式计算:If Vp ≥ Vq , R = 0.25X(Vp - Vq)If Vp < Vq , R = -0.25X(Vq - Vp)If Vp > 250 , R = R + 5.0If Vp < 50 , R = R - 5.0这样的激励计算方式可以使AI减少撞墙的概率,并且鼓励AI寻找加速点。4. 训练环境4.1 硬件我们搭建了一个简单的分布式强化学习环境,可以提高采样效率和训练速度,硬件部署方式如图5所示。5.jpg图5 硬件部署方式主要包含以下硬件:1)3部相同分辨率的手机,用于生成数据和执行动作。2)2台带有显卡的电脑,一台电脑Proxy用于收集数据、图像识别以及特征提取,另一台电脑Server用于训练AI。3)1个交换机,连接两台电脑,用于交换数据。4.2 软件Ubuntu 14.04 + TensorFlow 1.2 + Cuda 7.05. 分布式部署我们使用的分布式部署方式如图6所示。6.jpg图6 分布式部署方式在Proxy端设置三个proxy进程,分别与三部手机相连接。在Server端设置一个master进程和三个worker线程。master进程和三个worker线程通过内存交换网络参数。master进程主要用于保存最新的网络参数。三个proxy进程分别和三个worker线程通过交换机传输数据。proxy进程有6个功能:1)从手机接收图像数据;2)识别当前游戏状态;3)识别速度计算激励;4)利用AlexNet提取图像特征;5)发送图像特征和激励到worker线程,等待worker线程返回动作;6)发送动作到手机;worker线程有5个功能:1)从proxy进程接收图像特征和激励;2)从master进程拷贝最新的网络参数;3)将Actor输出的动作发送到proxy进程;4)利用PPO更新网络参数;5)将更新后的网络参数传输到master进程;6. 实验6.1 参数设置PPO的训练参数很多,这里介绍几个重要参数的设置:1)学习速率:Actor和Critic的学习率都设置为1e-52)优化器:Adam优化器3)Batch Size: 204)采样帧率:10帧/秒5)更新次数:15次6)激励折扣率:0.96.2 AI效果视频链接:https://v.qq.com/x/page/q1356…6.3 数据分析表1和表2分别对比了不同并行数量和不同输入数据情况下AI跑完赛道和取得名次的训练数据。最快的训练过程是在并行数量为3和输入数据为小地图的情况下,利用PPO训练24分钟就可以让AI跑完赛道,训练7.5小时就可以让AI取得第一名(和内置AI比赛)。并且在减少一部手机采样的情况下,也可以达到相同的训练效果,只是训练过程耗时更长一点。另外,如果将输入数据从小地图换成全图,AI的训练难度会有一定程度的增加,不一定能达到相同的训练效果。表1 AI跑完赛道的数据对比输入数据 并行数量 训练时间 训练次数 训练局数全图 2 100分钟 4200次 78局小地图 2 40分钟 1700次 32局全图 3 78分钟 3900次 72局小地图 3 24分钟 1400次 25局表2 AI取得名次的数据对比输入数据 并行数量 训练时间 训练次数 训练局数 名次小地图 2 9小时 19000次 354局 1全图 3 60小时 98000次 1800局 4-6小地图 3 7.5小时 17800次 343局 1如7展示了利用PPO训练AI过程中激励的趋势图,曲线上每一个点表示一局累计的总激励。训练开始时,AI经常撞墙,总激励为负值。随着训练次数的增加,总激励快速增长,AI撞墙的几率很快降低。当训练到1400多次时,总激励值超过400,此时AI刚好可以跑完赛道。之后的训练过程,总激励的趋势是缓慢增长,AI开始寻找更好的动作策略。7.jpg图7 AI训练过程中激励的趋势图7. 总结本文介绍了如何使用Distributed PPO在24分钟内让AI玩飞车类游戏。当前的方法有一定训练效果,但是也存在很多不足。目前,我们想到以下几个改进点,以后会逐一验证:1)将AlexNet替换为其他卷积神经网络,如VGG、Inception-V3等等,提高特征提取的表达能力。2)提高并行数量,添加更多手机和电脑,提高采样速度和计算速度。3)增加Batch Size,使用较长的时间序列数据训练AI。4)将离散动作替换为连续动作,增加漂移的学习。5)多个关卡同时训练,提高AI的泛化能力。参考文献:【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.【4】https://morvanzhou.github.io/…此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

March 15, 2019 · 2 min · jiezi

Pyro概率编程语言成为LF DL最新的项目

由Uber贡献,Pyro实现灵活和富有表现力的深度概率建模旧金山 - 2019年2月21日 - LF DL(LF Deep Learning Foundation,LF深度学习基金会),一个支持和永续人工智能(AI)、机器学习(ML)和深度学习(DL)开源创新的Linux基金会,宣布由Uber创办的Pyro项目是其最新的孵化项目。Pyro构建于PyTorch框架之上,是一个深度概率编程框架,有助于大规模探索AI模型,使深度学习模型开发和测试更快、更无缝。继去年12月的Horovod宣布之后,这是LF DL从Uber投票的第二个项目。除了哈佛大学、麻省理工学院、斯坦福大学、牛津大学、剑桥大学和The Broad Institute之外,Pyro还被西门子、IBM和Uber等大公司以及Noodle.AI等初创公司所采用。在Uber,Pyro解决了一系列问题,包括传感器融合、时间序列预测、广告活动优化和数据增强,以便深入了解图像。Pyro是第五个加入LF DL的项目,LF DL提供财务和智力资源、基础设施、营销、研究、创意服务和活动支持。这种丰富的中立环境促进了其项目的快速发展,包括Acumos AI、Angel项目、EDL项目和Horovod,鼓励其他贡献者以及开源社区的更广泛合作。“LF DL基金会很高兴欢迎Pyro加入我们的项目系列。今天宣布Uber对该项目的贡献使我们更接近建立人工智能、机器学习和深度学习的综合生态系统的目标。”LF DL执行董事Ibrahim Haddad说。“我们期待帮助社区发展,为Pyro做出贡献并进一步改进预测和其他能力。”Pyro的设计考虑了四个关键原则:通用:Pyro可以表示任何可计算的概率分布。可扩展:Pyro可以轻松扩展到大型数据集。最小化:Pyro是通过一小部分功能强大,可组合的抽象实现的。灵活:Pyro的目标是在你需要时实现自动化,在你需要时进行控制。“Pyro最初是在Uber AI Labs创建的,旨在帮助工业界和学术界的AI从业者更快、更无缝地进行深度概率编程。”Uber AI Labs负责人Zoubin Ghahramani说。“通过将Pyro纳入LF DL项目组合,我们希望为全球研究人员提供更多机会,并使深度学习和贝叶斯(Bayesian )建模更易于获取。”Pyro加入了现有的LF DL项目:Acumos,一个平台和开源框架,可以轻松构建、共享和部署AI应用程序;Angel ML,一个灵活而强大的参数服务器,适用于大规模机器学习;EDL,一个弹性深度学习框架,旨在帮助云服务提供商使用深度学习框架构建集群云服务;Horovod,一个跨多个机器的分布式培训框架。KubeCon + CloudNativeCon和Open Source Summit大会日期:会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日KubeCon + CloudNativeCon和Open Source Summit赞助方案KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国KubeCon + CloudNativeCon和Open Source Summit购票窗口,立即购票!

March 1, 2019 · 1 min · jiezi

您有一份免费的机器学习课程待领取!

本文由云+社区发表作者:腾讯云学院人人都能上手的机器学习免费实战课程!帮助开发者搭建体系化的机器学习知识框架,熟悉主流机器学习算法,介绍利用机器学习平台完成实际场景下的模型搭建和模型评估的精选实战课程!快扫码报名吧~此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

February 28, 2019 · 1 min · jiezi

人人都可以做深度学习应用:入门篇

本文由云+社区发表作者:徐汉彬一、人工智能和新科技革命2017年围棋界发生了一件比较重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现在我们人类的面前。围棋曾经一度被称为“人类智慧的堡垒”,如今,这座堡垒也随之成为过去。从2016年三月份AlphaGo击败李世石开始,AI全面进入我们大众的视野,对于它的讨论变得更为火热起来,整个业界普遍认为,它很可能带来下一次科技革命,并且,在未来可预见的10多年里,深刻得改变我们的生活。其实,AI除了可以做我们熟知的人脸、语音等识别之外,它可以做蛮多有趣的事情。例如,让AI学习大量古诗之后写古诗,并且可以写出质量非常不错的古诗。又或者,将两部设计造型不同的汽车进行融合,形成全新一种设计风格的新汽车造型。还有,之前大家在朋友圈里可能看过的,将相片转换成对应的艺术风格的画作。当前,人工智能已经在图像、语音等多个领域的技术上,取得了全面的突破。与此同时,另外一个问题随之而来,如果这一轮的AI浪潮真的将会掀起新的科技革命,那么在可预见的未来,我们整个互联网都将发生翻天覆地的变化,深刻影响我们的生活。那么作为普通业务开发工程师的我,又应该以何种态度和方式应对这场时代洪流的冲击呢?在回答这个问题之前,我们先一起看看上一轮由计算机信息技术引领的科技革命中,过去30多年中国程序员的角色变化:通过上图可以简总结:编程技术在不断地发展并且走向普及,从最开始掌握在科学家和专家学者手中的技能,逐渐发展为一门大众技能。换而言之,我们公司内很多资深的工程师,如果带着今天对编程和计算机的理解和理念回到1980年,那么他无疑就是那个时代的计算机专家。如果这一轮AI浪潮真的会带来新的一轮科技革命,那么我们相信,它也会遵循类似的发展轨迹,逐步发展和走向普及。如果基于这个理解,或许,我们可以通过积极学习,争取成为第一代AI工程师。二、深度学习技术这一轮AI的技术突破,主要源于深度学习技术,而关于AI和深度学习的发展历史我们这里不重复讲述,可自行查阅。我用了一个多月的业务时间,去了解和学习了深度学习技术,在这里,我尝试以一名业务开发工程师的视角,以尽量容易让大家理解的方式一起探讨下深度学习的原理,尽管,受限于我个人的技术水平和掌握程度,未必完全准确。1. 人的智能和神经元人类智能最重要的部分是大脑,大脑虽然复杂,它的组成单元却是相对简单的,大脑皮层以及整个神经系统,是由神经元细胞组成的。而一个神经元细胞,由树突和轴突组成,它们分别代表输入和输出。连在细胞膜上的分叉结构叫树突,是输入,那根长长的“尾巴”叫轴突,是输出。神经元输出的有电信号和化学信号,最主要的是沿着轴突细胞膜表面传播的一个电脉冲。忽略掉各种细节,神经元,就是一个积累了足够的输入,就产生一次输出(兴奋)的相对简单的装置。树突和轴突都有大量的分支,轴突的末端通常连接到其他细胞的树突上,连接点上是一个叫“突触”的结构。一个神经元的输出通过突触传递给成千上万个下游的神经元,神经元可以调整突触的结合强度,并且,有的突触是促进下游细胞的兴奋,有的是则是抑制。一个神经元有成千上万个上游神经元,积累它们的输入,产生输出。人脑有1000亿个神经元,1000万亿个突触,它们组成人脑中庞大的神经网络,最终产生的结果即是人的智能。2. 人工神经元和神经网络一个神经元的结构相对来说是比较简单的,于是,科学家们就思考,我们的AI是否可以从中获得借鉴?神经元接受激励,输出一个响应的方式,同计算机中的输入输出非常类似,看起来简直就是量身定做的,刚好可以用一个函数来模拟。通过借鉴和参考神经元的机制,科学家们模拟出了人工神经元和人工神经网络。当然,通过上述这个抽象的描述和图,比较难让大家理解它的机制和原理。我们以“房屋价格测算”作为例子,一起来看看:一套房子的价格,会受到很多因素的影响,例如地段、朝向、房龄、面积、银行利率等等,这些因素如果细分,可能会有几十个。一般在深度学习模型里,这些影响结果的因素我们称之为特征。我们先假设一种极端的场景,例如影响价格的特征只有一种,就是房子面积。于是我们收集一批相关的数据,例如,50平米50万、93平米95万等一系列样本数据,如果将这些样本数据放到而为坐标里看,则如下图:然后,正如我们前面所说的,我们尝试用一个“函数”去拟合这个输入(面积x)和输出(价格y),简而言之,我们就是要通过一条直线或者曲线将这些点“拟合”起来。假设情况也比较极端,这些点刚好可以用一条“直线”拟合(真实情况通常不会是直线),如下图:那么我们的函数是一个一次元方程f(x) = ax +b,当然,如果是曲线的话,我们得到的将是多次元方程。我们获得这个f(x) = ax +b的函数之后,接下来就可以做房价“预测”,例如,我们可以计算一个我们从未看见的面积案例81.5平方米,它究竟是多少钱?这个新的样本案例,可以通过直线找到对应的点(黄色的点),如图下:粗略的理解,上面就是AI的概括性的运作方式。这一切似乎显得过于简单了?当然不会,因为,我们前面提到,影响房价其实远不止一个特征,而是有几十个,这样问题就比较复杂了,接下来,这里则要继续介绍深度学习模型的训练方式。这部分内容相对复杂一点,我尽量以业务工程师的视角来做一个粗略而简单的阐述。3. 深度学习模型的训练方式当有好几十个特征共同影响价格的时候,自然就会涉及权重分配的问题,例如有一些对房价是主要正权重的,例如地段、面积等,也有一些是负权重的,例如房龄等。(1)初始化权重计算那么,第一个步其实是给这些特征加一个权重值,但是,最开始我们根本不知道这些权重值是多少?怎么办呢?不管那么多了,先给它们随机赋值吧。随机赋值,最终计算出来的估算房价肯定是不准确的,例如,它可能将价值100万的房子,计算成了10万。(2)损失函数因为现在模型的估值和实际估值差距比较大,于是,我们需要引入一个评估“不准确”程度的衡量角色,也就是损失(loss)函数,它是衡量模型估算值和真实值差距的标准,损失函数越小,则模型的估算值和真实值的察觉越小,而我们的根本目的,就是降低这个损失函数。让刚刚的房子特征的模型估算值,逼近100万的估算结果。(3)模型调整通过梯度下降和反向传播,计算出朝着降低损失函数的方向调整权重参数。举一个不恰当的比喻,我们给面积增加一些权重,然后给房子朝向减少一些权重(实际计算方式,并非针对单个个例特征的调整),然后损失函数就变小了。(4)循环迭代调整了模型的权重之后,就可以又重新取一批新的样本数据,重复前面的步骤,经过几十万次甚至更多的训练次数,最终估算模型的估算值逼近了真实值结果,这个模型的则是我们要的“函数”。为了让大家更容易理解和直观,采用的例子比较粗略,并且讲述深度学习模型的训练过程,中间省略了比较多的细节。讲完了原理,那么我们就开始讲讲如何学习和搭建demo。三、深度学习环境搭建在2个月前,人工智能对我来说,只是一个高大上的概念。但是,经过一个多月的业余时间的认真学习,我发现还是能够学到一些东西,并且跑一些demo和应用出来的。1. 学习的提前准备(1)部分数学内容的复习,高中数学、概率、线性代数等部分内容。(累计花费了10个小时,挑了关键的点看了下,其实还是不太够,只能让自己看公式的时候,相对没有那么懵)(2)Python基础语法学习。(花费了3个小时左右,我以前从未写过Python,因为后面Google的TensorFlow框架的使用是基于Python的)(3)Google的TensorFlow深度学习开源框架。(花费了10多个小时去看)数学基础好或者前期先不关注原理的同学,数学部分不看也可以开始做,全凭个人选择。2. Google的TensorFlow开源深度学习框架深度学习框架,我们可以粗略的理解为是一个“数学函数”集合和AI训练学习的执行框架。通过它,我们能够更好的将AI的模型运行和维护起来。深度学习的框架有各种各样的版本(Caffe、Torch、Theano等等),我只接触了Google的TensorFlow,因此,后面的内容都是基于TensorFlow展开的,它的详细介绍这里不展开讲述,建议直接进入官网查看。非常令人庆幸的是TensorFlow比较早就有中文社区了,尽管里面的内容有一点老,搭建环境方面有一些坑,但是已经属于为数不多的中文文档了,大家且看且珍惜。TensorFlow 的中文社区TensorFlow 的英文社区3. TensorFlow环境搭建环境搭建本身并不复杂,主要解决相关的依赖。但是,基础库的依赖可以带来很多问题,因此,建议尽量一步到位,会简单很多。(1)操作系统我搭建环境使用的机器是腾讯云上的机器,软件环境如下:操作系统:CentOS 7.2 64位(GCC 4.8.5)因为这个框架依赖于python2.7和glibc 2.17。比较旧的版本的CentOS一般都是python2.6以及版本比较低的glibc,会产生比较的多基础库依赖问题。而且,glibc作为Linux的底层库,牵一发动全身,直接对它升级是比较复杂,很可能会带来更多的环境异常问题。(2)软件环境我目前安装的Python版本是python-2.7.5,建议可以采用yum install python的方式安装相关的原来软件。然后,再安装 python内的组件包管理器pip,安装好pip之后,接下来的其他软件的安装就相对比较简单了。例如安装TensorFlow,可通过如下一句命令完成(它会自动帮忙解决一些库依赖问题):pip install -U tensorflow这里需要特别注意的是,不要按照TensorFlow的中文社区的指引去安装,因为它会安装一个非常老的版本(0.5.0),用这个版本跑很多demo都会遇到问题的。而实际上,目前通过上述提供的命令安装,是tensorflow (1.0.0)的版本了。Python(2.7.5)下的其他需要安装的关键组件:tensorflow (0.12.1),深度学习的核心框架image (1.5.5),图像处理相关,部分例子会用到PIL (1.1.7),图像处理相关,部分例子会用到除此之后,当然还有另外的一些依赖组件,通过pip list命令可以查看我们安装的python组件:appdirs (1.4.0)backports.ssl-match-hostname (3.4.0.2)chardet (2.2.1)configobj (4.7.2)decorator (3.4.0)Django (1.10.4)funcsigs (1.0.2)image (1.5.5)iniparse (0.4)kitchen (1.1.1)langtable (0.0.31)mock (2.0.0)numpy (1.12.0)packaging (16.8)pbr (1.10.0)perf (0.1)PIL (1.1.7)Pillow (3.4.2)pip (9.0.1)protobuf (3.2.0)pycurl (7.19.0)pygobject (3.14.0)pygpgme (0.3)pyliblzma (0.5.3)pyparsing (2.1.10)python-augeas (0.5.0)python-dmidecode (3.10.13)pyudev (0.15)pyxattr (0.5.1)setuptools (34.2.0)six (1.10.0)slip (0.4.0)slip.dbus (0.4.0)tensorflow (1.0.0)urlgrabber (3.10)wheel (0.29.0)yum-langpacks (0.4.2)yum-metadata-parser (1.1.4)按照上述提供的来搭建系统,可以规避不少的环境问题。搭建环境的过程中,我遇到不少问题。例如:在跑官方的例子时的某个报错,AttributeError: ‘module’ object has no attribute ‘gfile’,就是因为安装的TensorFlow的版本比较老,缺少gfile模块导致的。而且,还有各种各样的。(不要问我是怎么知道的,说多了都是泪啊~)更详细的安装说明:Installing TensorFlow on Ubuntu(3)TensorFlow环境测试运行测试是否安装成功,可以采用官方的提供的一个短小的例子,demo生成了一些三维数据, 然后用一个平面拟合它们(官网的例子采用的初始化变量的函数是initialize_all_variables,该函数在新版本里已经被废弃了):#!/usr/bin/python#coding=utf-8import tensorflow as tfimport numpy as np# 使用 NumPy 生成假数据(phony data), 总共 100 个点.x_data = np.float32(np.random.rand(2, 100)) # 随机输入y_data = np.dot([0.100, 0.200], x_data) + 0.300# 构造一个线性模型# b = tf.Variable(tf.zeros([1]))W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))y = tf.matmul(W, x_data) + b# 最小化方差loss = tf.reduce_mean(tf.square(y - y_data))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)# 初始化变量,旧函数(initialize_all_variables)已经被废弃,替换为新函数init = tf.global_variables_initializer()# 启动图 (graph)sess = tf.Session()sess.run(init)# 拟合平面for step in xrange(0, 201): sess.run(train) if step % 20 == 0: print step, sess.run(W), sess.run(b)# 得到最佳拟合结果 W: [[0.100 0.200]], b: [0.300]运行的结果类似如下:经过200次的训练,模型的参数逐渐逼近最佳拟合的结果(W: [[0.100 0.200]], b: [0.300]),另外,我们也可以从代码的“风格”中,了解到框架样本训练的基本运行方式。虽然,官方的教程后续会涉及越来越多更复杂的例子,但从整体上看,也是类似的模式。步骤划分准备数据:获得有标签的样本数据(带标签的训练数据称为有监督学习);设置模型:先构建好需要使用的训练模型,可供选择的机器学习方法其实也挺多的,换而言之就是一堆数学函数的集合; 损失函数和优化方式:衡量模型计算结果和真实标签值的差距;真实训练运算:训练之前构造好的模型,让程序通过循环训练和学习,获得最终我们需要的结果“参数”;验证结果:采用之前模型没有训练过的测试集数据,去验证模型的准确率。其中,TensorFlow为了基于python实现高效的数学计算,通常会使用到一些基础的函数库,例如Numpy(采用外部底层语言实现),但是,从外部计算切回到python也是存在开销的,尤其是在几万几十万次的训练过程。因此,Tensorflow不单独地运行单一的函数计算,而是先用图描述一系列可交互的计算操作流程,然后全部一次性提交到外部运行(在其他机器学习的库里,也是类似的实现)。所以,上述流程图中,蓝色部分都只是设置了“计算操作流程”,而绿色部分开始才是真正的提交数据给到底层库进行实际运算,而且,每次训练一般是批量执行一批数据的。此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

January 21, 2019 · 1 min · jiezi

浅谈AI视频技术超分辨率

泛娱乐应用成为主流,社交与互动性强是共性,而具备这些特性的产品往往都集中在直播、短视频、图片分享社区等社交化娱乐产品,而在这些产品背后的黑科技持续成为关注重点,网易云信在网易MCtalk 泛娱乐创新峰会上重点介绍了超越像素的AI视频黑科技“超分”。超分辨率(Super-Resolution)通过硬件或软件方法提高原有图像的分辨率,通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像过程就是超分辨率重建,可以通过人工智能深度学习将低分辨率视频重建成高分辨率视频模糊图像、视频瞬间变高清,为移动端为用户带来极致视频体验。什么是超分辨率广义的超分辨率 (SR, Super Resolution) 是指一类用于提升图像分辨率的技术。这类技术已经存在了很长一段时间,应用也非常广泛。事实上,每当我们需要以不同于原始分辨率的尺寸来显示或存储图像时,就已经使用了SR,只不过使用的是其中最为简单的那类算法而已。随着图像处理理论的发展,以及机器学习的普及和更高性能的处理器的出现,各类更优秀的SR算法陆续出现。现在我们提及SR时,往往是特指依靠机器学习来实现的图像放大算法。下文提到SR时也均特指这类算法。它能够提供远超于传统图像放大算法的图像质量。当然,运算量也要高得多。图1. 将原始图像缩小3倍后分别使用Bicubic (一种传统图像放大算法) 和SRCNN (一种基于CNN的图像放大算法) 进行放大[1]。超分辨率理论描述SR算法本质上和传统图像放大算法没什么不同,都是利用已有的图像信息去预测需要的像素点。只不过传统算法的预测模型非常简单,可以通过人工设计的方式实现。例如双线性插值,就是利用目标像素周围的四个点来做预测,离目标位置越近的点权重越大,通过一个简单的公式就能得到结果: f(x,y)=f(0,0)(1-x)(1-y)+f(1,0)x(1-y)+f(0,1)(1-x)y+f(1,1)xy图2. 双线性插值,通过Q11~Q22这四个点预测点P而现代SR算法为了得到更精确的预测结果,其预测模型则复杂了很多。一般有多个卷积层和激活层,会利用到目标像素周围很大一片区域的图像信息,包含成千上万个模型参数,纯靠人工设计是不现实的。所以人们才会依靠机器学习的方式来决定参数。这种做法还附带有不少好处。例如你无需对图像处理有深厚的理解就可以训练模型,再比如你可以根据自己的应用场景调整训练集,从而得到更适合你的预测模型。下图是一个简单的例子,来自经典的超分算法SRCNN[1]。模型基于卷积神经网络,以原始图像为输入,先是用廉价的上采样算法将分辨率提升到期望的大小, 然后经过3层分别为9x9x128,3x3x64,5x5的卷积运算,得到超分输出。图3. SRCNN网络结构这几年每届超分竞赛都会出现不少值得借鉴的新理论和新实现,SR的效果上限被不断提高。介绍这些算法的文章有很多,感兴趣的读者可以自行搜索。什么时候用超分辨率虽然视觉效果很好,但SR在使用上有几方面限制需要我们注意。其中最重要的就是性能这个硬性指标。即便是极为简单的SR算法,其运算量也是传统放大算法的上千倍,能否满足应用的性能需求是需要经过测试和优化的。另外,目前的SR算法主要分两个流派,一派的目标是尽可能地还原信息,另一派则允许在不影响视觉体验的前提下对内容进行一些修改。我们需要根据应用场景来选择不同的算法。如果在对图像还原度要求较高的场合下使用了不适当的SR算法,可能带来不好的后果。图4. 上图左侧为SRGAN模型[2]放大4倍生成的图片,可以看到首饰的纹理被大幅修改。还有一点,目前的SR算法大都针对自然图像。对于一些特殊的图像,例如因为缩小而失真的文字,直接使用SR算法去放大的效果实际测试下来并不理想。图5. 直接使用SR并不能较好地还原失真的文字超分辨率的优势基于深度学习的超分技术能较好的恢复图像细节. 在视频发送源可能因为种种客观限制, 无法提供高分辨率的视频. 比如摄像头采集能力不足, 网络带宽不足,源端处理能力不足等, 在这些情形下, 如果云端或者接收端的处理能力满足要求, 可以借助超分技术, 对于视频质量做恢复, 呈现给用户高质量的视频. 所以超分技术为在恶劣的客观条件下的视频应用提供了高质量呈现的可能, 是传统的应用借助人工智能技术提升使用体验的一种典型落地场景.网易云信在超分辨率的实践网易云信提供了点播直播和实时音视频等技术能力。 支持的终端包括Windows PC, MAC, iPhone, iPad, Android手机, 机顶盒, 智能手表等可穿戴设备。其中可穿戴设备, 机顶盒等终端的成本控制比较严格, 通常CPU处理能力相对较弱, 无法支持高清, 甚至标清的视频规格, 但是作为这些终端的使用者, 它们依然希望看到高清或标清的视频质量, 接收的终端可能是PC或者性能较好的手机, 平板电脑等设备,他们自己可能有能力提供优秀的计算资源。在这种场景下, 网易云信可以在接收的终端上通过超分辨率技术, 恢复视频质量,极大地提升了移动端用户的体验。如果接收的终端本身运算能力不足以支撑深度学习, 但是有能力处理高清视频的解码, 网易云信依然可以在云端对低分辨率的视频进行处理, 采用包括超分在内的技术,对质量恢复后,将高质量的视频提供到接收终端。尤其针对弱网情况,云信将在云端或者接收终端通过超分技术对质量进行补偿, 为用户呈现超高质量视频。云信通过人工智能深度学习将低分辨率视频重建成高分辨率视频模糊图像、视频瞬间变高清,为移动端为用户带来极致视频体验。[1] C. Dong, C. C. Loy, K. He, and X. Tang. Learning a deep convolutional network for image super-resolution. In European Conference on Computer Vision (ECCV), pages 184–199. Springer,2014.[2] Ledig C, Theis L,Huszar F, et al. Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network[J]. 2016:105-114.想要阅读更多技术干货、行业洞察,欢迎关注网易云信博客。了解网易云信,来自网易核心架构的通信与视频云服务。 ...

January 21, 2019 · 1 min · jiezi

SAP人工智能服务Recast.AI的一个简单例子

关于这个例子的完整介绍,请参考公众号 “汪子熙”的两篇文章:SAP C/4HANA与人工智能和增强现实(AR)技术结合的又一个创新案例和使用Recast.AI创建具有人工智能的聊天机器人:本文介绍如何用Java代码同recast.AI网站上创建好的模型交互。我创建了一个名为get-product-infomation的机器学习模型,用"Add an expression"下面的这么多句子去喂这个模型:一会测试时,我会用这个句子进行测试 " I am looking for some materials", 所以先记下来。如果任意输入一句话,recast.AI识别出来意图为get-product-infomation, 我希望AI自动返回一些句子,这些句子定义在recast.AI模型的Actions标签页下面:比如这个Actions模型的意思是,从Sure, what type of product are you going to produce?和Cool, what products do you want to produce?里随机挑选一句返回。下图右半部份是recast.AI的测试控制台。下面是用Java代码方式消费这个人工智能模型的例子:public class RecastAIService {private final static String RECAST_AI_URL = “https://api.recast.ai/build/v1/dialog";private final static String DEVELOPER_TOKEN = “Token feb6b413a1a8cf8efdd53f48ba1d4”;public Answer dialog(final String content, final String conversationId) throws ClientProtocolException, IOException{CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost postRequest = new HttpPost(RECAST_AI_URL);postRequest.addHeader(“Authorization”, DEVELOPER_TOKEN);postRequest.addHeader(“Content-Type”, “application/json”);String body = “{“message”: {“content”:”"+ content+ “”,“type”:“text”}, “conversation_id”: “"+ conversationId+””}";HttpEntity entity = new StringEntity(body);postRequest.setEntity(entity);HttpResponse response = httpClient.execute(postRequest);if(response.getStatusLine().getStatusCode() == 200){String result = EntityUtils.toString(response.getEntity());JSONObject resultJsonObj = JSON.parseObject(result);JSONObject results = (JSONObject) resultJsonObj.get(“results”);JSONArray messages = results.getJSONArray(“messages”);JSONObject nlp = (JSONObject) results.get(“nlp”);JSONArray intents = nlp.getJSONArray(“intents”);Answer answer = new Answer();if (null != messages && messages.size() > 0){JSONObject messageJson = messages.getJSONObject(0);answer.setContent(messageJson.getString(“content”));}if (null != intents && intents.size() > 0){JSONObject intentJson = intents.getJSONObject(0);answer.setIntent(intentJson.getString(“slug”));}return answer;}logger.debug(“Failed to access recastai. The response code is” + response.getStatusLine().getStatusCode());return null;}测试代码:传入I am looking for some materials,recast.AI解析出这个句子的意图有99%的可能性是get-product-information:Java代码返回的句子也确实是recast.AI模型里维护的回复之一:要获取更多Jerry的原创文章,请关注公众号"汪子熙": ...

January 15, 2019 · 1 min · jiezi

你们不曾想过的人工智能黑暗面

机器学习是现在大家都打了鸡血想用或者在用的技术。但是,你以为只有好人能用它吗?Too young too simple!接下来,我将揭秘AI技术黑暗的一面——犯罪份子和人工智能的孽缘。当计算科学发展的不够完善,还没能解决启发式问题的时候,很多安全问题都是利用规则来解决的,这些规则都是“死”的。那时候没人觉得计算机能够破解密码、读出来验证码内容或者掌握马路交通的规律。但是现在,人工智能发展极快,老掉牙的基于规则的安全保障系统轻而易举的就被AI秒成渣。验证码和AI的不解情缘当我们上网的时候,最烦的就是验证码,它老是来让你填。这是计算机在确定你却是是个“大活人”,而不是一个程序在恶意攻击访问它。这样做是因为咱们人类用户通过鼠标键盘访问某个网站或资源的这个操作,计算机都能用一段程序来同样做到。比如说,当你连续三次在登陆Facebook的时候输错密码,网站肯定会跳出来一个验证码来确定你是个活人而不是恶意暴力破解密码的程序(当然了,我会首先想到梯子被踹了)。Facebook还有很多公司的服务器都是这种安全措施,而这种安全措施都是用验证码的,比如常见的验证码长成这样:多年以来,验证码都能有效的区分恶意攻击代码还有人类用户。但是现在聪明AI时代到来了,验证码在它面前仿佛就是送分题。CNN(卷积神经网络)就是一个很简单的技术来破解验证码,只要你能给他大量的验证码学习数据集。每张验证码都有一个特定的目标,识别文字或者识别物体之类的。但是,这些问题在CNN面前都将形同虚设。上述说的只是一个简单的栗子,没太多的技术术语,只要知道简单的神经网络的原理就能看懂。既然验证码的保护都不起作用了,暴力破解的威胁就更可怕了。你也许会说,我看到过更难的那种验证码,就是从一堆图片里找出个公交车或者找出路牌儿之类的那种(你肯定没少上Youtube!) 。但其实,它们对于AI来说也不难,你肯定听说过谷歌大法的目标检测有多伟大,虽然谷歌仅仅把它作为搜索引擎的一个基础功能来用。GAN和密码的那些事注:GAN = Generative Adversarial Networks,读音:干!翻译是对抗生成网络。咱们的密码一般不会设的特别奇怪,长这样的毕竟是少类: 5f2#V0”P?oz3(几乎就是异类了)。差不多咱们的密码都长成这样:kronebourg1664,名字加数字大小写什么好记还好输入。当然了,也有少部分不怕死的这么设密码:password(肯定老被盗)。对于猜到第一种密码,我天,太难了,不论是对人脑来说还是对一块GTX 1080 GPU来说都太难猜中了(GTX 1080是一块英伟达家的GPU,不只是能用来玩游戏,现在更多人用来跑深度学习工程)。但是其他的密码嘛,相对来说就容易一些了。所以我们怎么猜这些密码呢?最简单的方法就是翻一本厚厚的字典,然后将每个单词都当成密码去试。这种情况下如果你也就能猜中用“password”当密码的童鞋了。什么?你真的拿“password”当密码?哥们儿,英语不错呀,你怎么不试试拼音“mima”当密码?赶紧换一个靠谱的吧……现在,来点高科技的,用AI来猜你的密码。你以为AI还会翻字典?当然不是,神经网络会自己产生一大堆密码候选项。我们就用这堆候选来攻破你的密码。很玄幻?读一读PassGAN这篇文章吧,下面这个图讲了这堆候选项是怎么产生的。PassGAN:A Deep Learning Approach for Password Guessing的arxiv链接是:https://arxiv.org/abs/1709.00440就算你对神经网络很熟,这篇论文可能看起来也不是那么轻松。 这不是简单的通过输入来预测结果,它是先从数据里面学习数据的特点,然后让生成器生成一些具有类似特点的样本出来的特殊网络结构。专业上叫Generative Adversarial Network(对抗生成网络,一般简写成GAN,提出GAN的就是那个写深度学习花书的大神古德菲洛)。GAN里面包括了两个神经网络,一个生成器和一个检查器。检查器用于检验输入的数据是否合理,生成器用于来回折腾演化自己让生成的数据能在检查器眼皮子底下蒙混过关。译者注:这里有个链接,我觉得可以不加,因为就是在一个门户里搜了一下神经网络关键词的结果,毫无营养……然后那个啥,GAN的解释我没用原文,因为太枯燥了怕别人看不懂,我就结合自己的认识写了一个,如果翻译的不好的话再联系我翻译这句。为了使用PassGAN,我们要有一个不知道哪儿来的真实的密码数据集(也许是某东某讯某度泄漏的?)。从这个数据集里起码能知道人们真正使用的数据集大概长成什么样。一般就是有一些大写字母,一些日期,一些随机的数字,一些名字之类的。然后呢,我们要用到一个噪声产生器,就是生成一些随机数用的。噪声产生器和密码数据集就是咱们神经网络模型的输入了。网络的输出就是二分类值,也就是说在有监督训练的时候,网络模型会被告诉说这个密码是真实的还是假的。在每次神经网络前向传递的时候,网络的输出都会跟真实的标签值进行比较,然后带着这个误差值反向传递回去迭代修改网络的权重。生成器也会跟着模型的训练而成长,因为随着网络模型变化,生成器根据噪声所产生的结果也越接近真实的密码。当生成器训练完毕之后,之后我们再输入一个噪声,网络就能输出一个特别真实的密码。所以我们只要让PassGAN运行几个小时,就能得到一堆密码候选项了。AI和网络钓鱼的那些事儿钓鱼是很常见的黑客技术。你肯定收到过一些看着不太对劲的邮件,自称是银行、移动联通或者微博的人。然后邮件里面还给你一个链接,跳到一个能让你中毒的网页。想做这样一个钓鱼邮件,你只要照着Facebook或者什么其他大公司的邮件样式外观和语言仿造一封即可。然后又见里面说你的软件得更新,或者点开看看这里有什么惊喜,或者让你填写登陆信息等。简单粗暴还老套。不论你写了什么,结果都会被发送到不法分子的服务器上。先不说这个,AI是怎么跟钓鱼勾搭上的?机器学习里面有个利器叫爬虫,它能通过爬取目标网站的各种信息来改进钓鱼技术。通过爬虫保存下来的数据,黑客们能够学习到这些网站的外观,还有文字书写的风格,然后据此产出大量的假邮件然后大规模发送。但是有邮件不知道往哪儿发也是个问题。所以聪明的黑客还能通过前面咱们说的GAN技术来猜测邮件地址,这就增加了让人上当的机会。有的童鞋可能说了,现在我们用的邮箱里面都有反钓鱼的安全措施~安全的很。但悲剧的是,现在的机器学习已经知道怎么产生能够通过钓鱼检查的钓鱼邮件了!训练集是这样婶儿的,一大堆邮件,一些邮件是被反钓鱼拦住的,还有一些是能成功发送的。然后我们就能据此训练处一个神经网络模型,来知道钓鱼算法是怎么检测的。在不久的将来,钓鱼邮件也许都是这种反钓鱼巨网下的“漏网之鱼”。详情请戳这篇DeepPhish论文:https://albahnsen.com/wp-cont…咳咳,总结一下好消息是,目前只有三种被AI攻克的安全领域。坏消息是,还有巨多的场景正面临着AI黑客的威胁,比如诈骗广告等。但是我相信AI在合法的领域中应用所带来的好处要远大于不法之徒将它们用于作恶上的坏处。其实,挺讽刺的,现在有很多将人工智能用于侦破犯罪活动的案例,从街头的巡查到网络诈骗都有所设计。最后总结一下:1.如果你觉的自己的密码能让GAN给猜到的话,赶紧换个密码吧,比如xiaobeizuimei就很不错(因为没人直面的觉得小北最美,所以GAN学不到这个信息)。2.别点开不知道谁发给你的链接,除非你十分确定发邮件的人没问题;3.千万别用AI做恶呀!为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,让AI越来越普及。可以加我v:bbbl12138,Q:2115331823当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以有有效资源还是很有必要的。

January 11, 2019 · 1 min · jiezi

机器学习 面试常见问题&答案 ①

给定卷积神经网络输入,卷积核大小,padding,步长,求输出的shape?各个激活函数的优缺点Sigmod优点输出值0-1(很重大的优点)其余的和其他众多激活函数比起来,感觉没有什么优点,方便入门理解缺点容易梯度消失x的可变值区域太小,极其容易陷入级值的状况(-0.9~0.9)指数exp计算复杂Tanh优点和sigmod比起来,是零均值化处理。(零均值化可以加快模型的收敛)缺点和sigmod一样的缺点Relu优点计算复杂度低(只有一个if>0判断,大于0则激活值为1),部分区域线性递增,没有幂运算与指数运算缺点x小于0时无法产生激活值训练到后期可能权重参数更新太大Leakly ReLu优点相对于relu来说,激活值必然可以产生缺点Relu的其他缺点一概继承下来了ELU优点相对于Leaky relu来说,激活值更平滑缺点其他的Leaky relu的缺点一并继承下来了。如何选择激活函数?Relu-小心设置learningrate(因为x>0的情况下,导数均为1),最好是设置一个比较小的值。不要使用sigmod(缺点太多,计算复杂)如何初始化CNN?(理论)不要全部把超参数设置为0(单层网络可以)容易梯度消失如何初始化CNN?(实践)Xavier-tanh(不太适合relu)fan_in输出通道数Fan_out输出通道数代码Np.randon.rand(fan_in,fan_out)/np.sqrt(fan_in/2)如何分析初始化参数结果好坏?查看初始化后各层的激活值分布是否在固定的,稳定的,同一个区间的均匀分布比较好的初始化结果均值为0,方差为0.02如tanh,relu函数什么叫梯度消失,梯度爆炸当网络层数过多时,前面层由于求导过程乘积运算,出现weight与bias变得异常大与异常小的情况左下角的内容清楚的说明了梯度爆炸和梯度消失的场景BN是什么,为什么能提高收敛速度批归一化是什么?标准化处理,特征缩放的一个方式,将数据规整到一定范围内。如上图所示,BN步骤主要分为4步:求每一个训练批次数据的均值求每一个训练批次数据的方差使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中是为了避免除数为0时所使用的微小正数。尺度变换和偏移:将xixi乘以调整数值大小,再加上增加偏移后得到yiyi,这里的是尺度因子,是平移因子。这一步是BN的精髓,由于归一化后的xixi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:,。 和是在训练时网络自己学习得到的。为什么能提高收敛速度?解决internal covariate shift问题。特征没有消失,而是归一到一定范围内,加快学习速度因为最终都是映射到归一化范围内,所以前一层的权重调整对后一层的影响程度都会降低,不用重新适应新的分布,从而让模型学的更快,避免完全从头学习TipsBN不用于输入层和输出层(经验论)BN(实践)每次batch传入时都做BN各个优化器的优缺点优化器分两种固定学习率的优化算法SGD随机梯度下降优点只随机采样一个样本来计算梯度,加快学习效率,并且避免了普通GD一次性参数更新的坏处(导致模型无法收敛)缺点选择合适的学习率较为困难Momentum动量优点动量梯度下降,动力火车,惯性火车,这一次梯度下降的值,会影响下一次梯度下降的值,相对于简单的梯度下降来说,Momentum动量带有延续性相对于简单的梯度下降来说,减少梯度震荡缺点和SGD一样,选择合适的学习率较为困难自适应学习率的优化算法Adagrad优点更新参数时,会针对原梯度值乘上一个变量,即其所有梯度历史平均值总和的平方根(如上图)这样在训练初期,分母较小,学习率较大,学习比较快,后期时,学习会逐渐减慢缺点从训练开始就积累梯度方差会导致有效学习率过早和过量的减小只能解决凸问题,当应用于非凸函数训练神经网络时,学习可能会到达一个局部是凸碗的区域RMSProp优点能够解决凸问题由累计平方梯度变成和平均梯度缺点缺少Momentum动量元素Adam(结合了动量和RMSProp,通用方案)结合了Momentum和RMSProp的优点手画一下LSTM梯度裁剪介绍一下残差网络ResNet 基于VGG没解决深层网络下出现性能[梯度消失,导致学不到东西]与效率下降[反向传播运算成本大]的问题,优化出来的一个新的神经网络结构,如图所示,两条路一起走,最终线性激活输入值f(x)+x,然后将f(x)+x传递给激活函数[假设为relu]。那么在反向传播的时候,后面层的梯度更加“无损”的直接传递到前面层,前面层的参数因此也能继续更新。为什么残差网络会有效果?□ 先验证明《深层网络效果会比浅层网络好》只要有理想的训练方式,更深的网络肯定会比较浅的网络效果要好。证明过程也很简单:假设在一种网络A的后面添加几层形成新的网络B,如果增加的层级只是对A的输出做了个恒等映射(identity mapping),即A的输出经过新增的层级变成B的输出后没有发生变化,这样网络A和网络B的错误率就是相等的,也就证明了加深后的网络不会比加深前的网络效果差。当层数比较多时,容易导致模型学不到东西,甚至出现反效果,然而deep layers又确实是能使模型效果变好的,所以出现残差网络。效率不影响,层数增加,可以低成本高效率的学到更多非线性的特征。解决梯度弥漫问题如上所说,关键点在于反向传播的时候,梯度可以沿着shortcut无损进行回传,避免梯度弥漫问题。解决模型退化问题避免了过渡训练后,导致模型准确率反而降低的情况。paper中称为degration。经过实验后发现确实能解决这个问题。本人对于这个问题的确切原因并不清楚,但是猜测这个原因很可能是由于梯度消失以及众多其他原因所造成的。Q:既然说中间层是不必要的,那么为什么不直接把这些层去掉呢?可事实上,ResNet的结果比浅层网络的结果好的多,这应该怎么解释呢?加入中间层主要是为了说明会产生退化的效果。 ResNet效果好是因为解决了退化问题,,梯度爆炸/梯度弥散,调节了网络结构,简化了反向传播求导运算的流程。这和砍掉深一点的层是不一样的思想风格转换的原理图像风格转换由风格特征与内容特征共同计算得出风格特征风格的抽象度(越往后层,加入了越多内容的元素,更加具像)内容特征内容的相似度(越往后层,加入了越多风格的元素,和原图越不像)## 怎么解决过拟合简化模型正则化(包含dropout)数据增强集成学习早停减少特征数或使用较少的特征组合## 怎么解决欠拟合增加特征数或者使用较多的特征组合减小正则权重增加模型复杂度使用boosting集成学习如何提高学习算法性能的指导方针->低可拟合偏差更大的模型,更深的层更好的优化器方案探索更合适的超参数->低方差找寻更多的数据正则化,dropout对抗神经网络探索更合适的超参数->清晰的正交化方案……思路逻辑清晰的调试数据预处理一般步骤有哪些?指定原始数据的文件列表 -> 创建文件列表队列 ->从文件中读取数据 -> 数据预处理 -> 整理成batch作为神经网络输入如何用指标和方案去评判一个优秀的模型?train/Validation/Test 准确率/召回率方差偏差CNN模型加速与压缩汇总1. 合理设计模型2. 权值剪枝(编程稀疏矩阵)3. 权值量化(聚类)4. 二值化(BWN,XNorNet)5. 霍夫曼编码6. 奇异值分解(projection层)7. 1x1卷积的恰当使用减少通道量8. 卷积分解为deepwise Conv和pointwiseConv可大幅度减小计算量和参数量1/(Dk^2)9. Group Conv(可节省1/g计算量)10. Channel Shuffle11. 蒸馏法12. 低秩分解13. 模型裁剪# 怎么选择超参数神经网路中的超参数主要包括1. 学习率 ,2. 正则化参数 ,3. 神经网络的层数 L4. 每一个隐层中神经元的个数 j5. 学习的回合数Epoch6. 小批量数据 minibatch 的大小由神经网络的机理进行选择7. 输出神经元的编码方式8. 代价函数的选择9. 权重初始化的方法10. 神经元激活函数的种类11 . 宽泛策略的核心在于简化和监控12. 参加训练模型数据的规模如文章你已看懂,点个「喜欢」即可。如若错误以及不清晰的地方,随时提出。欢迎扫一扫上面二维码加入我的个人微信号进行技术交流。

January 8, 2019 · 1 min · jiezi

GBDT 算法:原理篇

本文由云+社区发表GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎。 这里简单介绍一下 GBDT 算法的原理,后续再写一个实战篇。1、决策树的分类决策树分为两大类,分类树和回归树。分类树用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面;回归树用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;两者的区别:分类树的结果不能进行加减运算,晴天 晴天没有实际意义;回归树的结果是预测一个数值,可以进行加减运算,例如 20 岁 3 岁=23 岁。GBDT 中的决策树是回归树,预测结果是一个数值,在点击率预测方面常用 GBDT,例如用户点击某个内容的概率。2、GBDT 概念GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升决策树。要理解 GBDT,首先就要理解这个 B(Boosting)。Boosting 是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。Boosting 方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。通俗地说,就是"三个臭皮匠顶个诸葛亮"的道理。基于梯度提升算法的学习器叫做 GBM(Gradient Boosting Machine)。理论上,GBM 可以选择各种不同的学习算法作为基学习器。GBDT 实际上是 GBM 的一种情况。为什么梯度提升方法倾向于选择决策树作为基学习器呢?(也就是 GB 为什么要和 DT 结合,形成 GBDT) 决策树可以认为是 if-then 规则的集合,易于理解,可解释性强,预测速度快。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征。不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。至于抑制单颗决策树的复杂度的方法有很多,比如限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量、吸收 bagging 的思想对训练样本采样(subsample),在学习单颗决策树时只使用一部分训练样本、借鉴随机森林的思路在学习单颗决策树时只采样一部分特征、在目标函数中添加正则项惩罚复杂的树结构等。演示例子:考虑一个简单的例子来演示 GBDT 算法原理。下面是一个二分类问题,1 表示可以考虑的相亲对象,0 表示不考虑的相亲对象。特征维度有 3 个维度,分别对象 身高,金钱,颜值对应这个例子,训练结果是 perfect 的,全部正确, 特征权重可以看出,对应这个例子训练结果颜值的重要度最大,看一下训练得到的树。Tree 0:Tree 1:3、原理推导3.1 目标函数监督学习的关键概念:模型(model)、参数(parameters)、目标函数(objective function)模型就是所要学习的条件概率分布或者决策函数,它决定了在给定特征向量时如何预测出目标。参数就是我们要从数据中学习得到的内容。模型通常是由一个参数向量决定的函数。目标函数通常定义为如下形式: 其中,L 是损失函数,用来衡量模型拟合训练数据的好坏程度;称之为正则项,用来衡量学习到的模型的复杂度。对正则项的优化鼓励算法学习到较简单的模型,简单模型一般在测试样本上的预测结果比较稳定、方差较小(奥坎姆剃刀原则)。也就是说,优化损失函数尽量使模型走出欠拟合的状态,优化正则项尽量使模型避免过拟合。3.2 加法模型GBDT 算法可以看成是由 K 棵树组成的加法模型:如何来学习加法模型呢?解这一优化问题,可以用前向分布算法(forward stagewise algorithm)。因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为 Boosting。具体地,我们从一个常量预测开始,每次学习一个新的函数,过程如下:在第 t 步,这个时候目标函数可以写为:举例说明,假设损失函数为平方损失(square loss),则目标函数为:其中,称之为残差(residual)。因此,使用平方损失函数时,GBDT 算法的每一步在生成决策树时只需要拟合前面的模型的残差。3.3 泰勒公式定义:泰勒公式简单的理解,就是函数某个点的取值可以用参考点取值和 n+1 阶导数的来表示,而且这个公式是有规律的比较好记。根据泰勒公式把函数在点处二阶展开,可得到如下等式:则等式(1) 可转化为:假设损失函数为平方损失函数,把对应的一阶导数和二阶导数代入等式(4) 即得等式(2)。由于函数中的常量在函数最小化的过程中不起作用,因此我们可以从等式(4) 中移除掉常量项,得:3.4 GBDT 算法一颗生成好的决策树,假设其叶子节点个数为,决策树的复杂度可以由正则项来定义,即决策树模型的复杂度由生成的树的叶子节点数量和叶子节点对应的值向量的 L2 范数决定。定义集合为所有被划分到叶子节点的训练样本的集合。等式(5) 可以根据树的叶子节点重新组织为 T 个独立的二次函数的和:定义,则等式(6) 可写为:因为一元二次函数最小值处,一阶导数等于 0:此时,目标函数的值为综上,为了便于理解,单颗决策树的学习过程可以大致描述为: 1. 枚举所有可能的树结构 q 2. 用等式(8) 为每个 q 计算其对应的分数 Obj,分数越小说明对应的树结构越好 3. 根据上一步的结果,找到最佳的树结构,用等式(7) 为树的每个叶子节点计算预测值然而,可能的树结构数量是无穷的,所以实际上我们不可能枚举所有可能的树结构。通常情况下,我们采用贪心策略来生成决策树的每个节点。1. 从深度为 0 的树开始,对每个叶节点枚举所有的可用特征 2. 针对每个特征,把属于该节点的训练样本根据该特征值升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的最大收益(采用最佳分裂点时的收益) 3. 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个新的叶节点,并为每个新节点关联对应的样本集 4. 回到第 1 步,递归执行到满足特定条件为止3.5 收益的计算如何计算每次分裂的收益呢?假设当前节点记为 C,分裂之后左孩子节点记为 L,右孩子节点记为 R,则该分裂获得的收益定义为当前节点的目标函数值减去左右两个孩子节点的目标函数值之和:根据等式(8) 可得:其中,项表示因为增加了树的复杂性(该分裂增加了一个叶子节点)带来的惩罚。最后,总结一下 GBDT 的学习算法:算法每次迭代生成一颗新的决策树 ;在每次迭代开始之前,计算损失函数在每个训练样本点的一阶导数和二阶导数 ;通过贪心策略生成新的决策树,通过等式(7) 计算每个叶节点对应的预测值把新生成的决策树添加到模型中:保持简单易经中说道"易则易知,简则易从",就是越是简易的东西,越是容易被理解和得到执行。很多机器学习模型都会尽量让学习到的模型尽量简单,尽量减少参数,越是简单的模型,通用性越好,也是这个道理。Xgboost 和 GBDT 的区别:GBDT:GBDT 它的非线性变换比较多,表达能力强,而且不需要做复杂的特征工程和特征变换。GBDT 的缺点也很明显,Boost 是一个串行过程,不好并行化,而且计算复杂度高,同时不太适合高维稀疏特征;传统 GBDT 在优化时只用到一阶导数信息。Xgboost:它有以下几个优良的特性:显示的把树模型复杂度作为正则项加到优化目标中。公式推导中用到了二阶导数,用了二阶泰勒展开。(GBDT 用牛顿法貌似也是二阶信息)实现了分裂点寻找近似算法。利用了特征的稀疏性。数据事先排序并且以 block 形式存储,有利于并行计算。基于分布式通信框架 rabit,可以运行在 MPI 和 yarn 上。(最新已经不基于 rabit 了)实现做了面向体系结构的优化,针对 cache 和内存做了性能优化。此文已由作者授权腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

January 3, 2019 · 1 min · jiezi

小程序--人脸识别功能(百度ai)

文档中心:https://ai.baidu.com/docs#/Begin/a2bbf4b2接入流程1. 按照文档获取AppID、API Key、Secret Key,进行Access Token(用户身份验证和授权的凭证)的生成const getBaiduToken = function () { return new Promise((resolve, reject) => { //自行获取APIKey、SecretKey const apiKey = APIKey; const secKey = SecretKey; const tokenUrl = https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&amp;client_id=${apiKey}&amp;client_secret=${secKey}; wx.request({ url: tokenUrl, method: ‘POST’, dataType: “json”, header: { ‘content-type’: ‘application/json; charset=UTF-8’ }, success: function (res) { resolve(res); }, fail: function (res) { wx.hideLoading(); wx.showToast({ title: ‘网络错误,请重试!’, icon: ’none’, duration: 2000 }) reject(res); }, complete: function (res) { resolve(res); } }) })}2. 选择人脸识别–>人脸检测,人脸识别接口分为V2和V3两个版本,确认在百度云后台获得的是V2还是v3版本接口权限。//封装识别方法const getImgIdentify = function(tokenUrl, data){ return new Promise((resolve, reject) => { const detectUrl = https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=${tokenUrl}; wx.request({ url: detectUrl, data: data, method: ‘POST’, dataType: “json”, header: { ‘content-type’: ‘Content-Type:application/json; charset=UTF-8’ }, success: function (res) { resolve(res); }, fail: function (res) { wx.hideLoading(); wx.showToast({ title: ‘网络错误,请重试!’, icon: ’none’, duration: 2000 }) reject(res); }, complete: function (res) { resolve(res); } }) })}3. 调用识别方法getBaiduToken().then((res) => { let token = res.data.access_token; let data = { “image”: self.data.img, “image_type”:“URL”, “face_field”:“ge,beauty,expression,face_shape,gender,glasses,landmark,race,quality,eye_status,emotion,face_type” } util.getImgIdentify(token, data).then((res)=>{ //百度接口返回的结果 let score = parseInt(res.data.result.face_list[0].beauty); self.setData({ score: score, }) })})4. 结果如下:哼~一点都不准原文地址:https://github.com/liujianxi/… ...

December 22, 2018 · 1 min · jiezi

美团大脑:知识图谱的建模方法及其应用

作为人工智能时代最重要的知识表示方式之一,知识图谱能够打破不同场景下的数据隔离,为搜索、推荐、问答、解释与决策等应用提供基础支撑。美团大脑围绕吃喝玩乐等多种场景,构建了生活娱乐领域超大规模的知识图谱,为用户和商家建立起全方位的链接。我们美团希望能够通过对应用场景下的用户偏好和商家定位进行更为深度的理解,进而为大众提供更好的智能化服务,帮大家吃得更好,生活更好。近日,美团 AI 平台部 NLP 中心负责人、大众点评搜索智能中心负责人王仲远博士受邀在 AI 科技大本营做了一期线上分享,为大家讲解了美团大脑的设计思路、构建过程、目前面临的挑战,以及在美团点评中的具体应用与实践,其内容整理如下:知识图谱的重要性近年来,人工智能正在快速地改变人们的生活,可以看到各家科技公司都纷纷推出人工智能产品或者系统,比如说在 2016 年,谷歌推出的 AlphaGo ,一问世便横扫整个围棋界,完胜了人类冠军。又比如亚马逊推出的 Amazon Go 无人超市,用户只需下载一个 App,走进这家超市,就可以直接拿走商品,无需排队结账便可离开,这是人工智能时代的“新零售”体验。又比如微软推出的 Skype Translator,它能够帮助使用不同语言的人群进行实时的、无障碍的交流。再比如说苹果推出的 Siri 智能助理,它让每一个用苹果手机的用户都能够非常便捷地完成各项任务。所有这些人工智能产品的出现都依赖于背后各个领域技术突飞猛进的进展,包括机器学习、计算机视觉、语音识别、自然语言处理等等。作为全球领先的生活服务电子商务平台,美团点评在人工智能领域也在积极地进行布局。今年 2 月份,AI 平台部 NLP 中心正式成立,我们的愿景是用人工智能帮大家吃得更好,生活更好。语言是人类智慧的结晶,而自然语言处理是人工智能中最为困难的问题之一,其核心是让机器能像人类一样理解和使用语言。我们希望在不久的将来,当用户发表一条评价的时候,能够让机器阅读这条评价,充分理解用户的喜怒哀乐。当用户进入大众点评的一个商家页面时,面对成千上万条用户评论,我们希望机器能够代替用户快速地阅读这些评论,总结商家的情况,供用户进行参考。未来,当用户有任何餐饮、娱乐方面的决策需求的时候,美团点评能够提供人工智能助理服务,帮助用户快速的进行决策。所有这一切,都依赖于人工智能背后两大技术驱动力:深度学习和知识图谱。我们可以将这两个技术进行一个简单的比较:我们将深度学习归纳为隐性的模型,它通常是面向某一个具体任务,比如说下围棋、识别猫、人脸识别、语音识别等等。通常而言,在很多任务上它能够取得非常优秀的结果,同时它也有非常多的局限性,比如说它需要海量的训练数据,以及非常强大的计算能力,难以进行任务上的迁移,而且可解释性比较差。另一方面,知识图谱是人工智能的另外一大技术驱动力,它能够广泛地适用于不同的任务。相比深度学习,知识图谱中的知识可以沉淀,可解释性非常强,类似于人类的思考。我们可以通过上面的例子,来观察深度学习技术和人类是如何识别猫的,以及它们的过程有哪些区别。2012 年,Google X 实验室宣布使用深度学习技术,让机器成功识别了图片中的猫。它们使用了 1000 台服务器,16000 个处理器,连接成一个 10 亿节点的人工智能大脑。这个系统阅读了 1000 万张从 YouTube 上抽取的图片,最终成功识别出这个图片中有没有猫。我们再来看看人类是如何做的。对于一个 3 岁的小朋友,我们只需要给他看几张猫的图片,他就能够很快识别出不同图片中的猫,而这背后其实就是大脑对于这些知识的推理。2011 年,Science 上有一篇非常出名的论文叫《How to Grow a Mind》。这篇论文的作者来自于 MIT、CMU、UC Berkeley、Stanford 等美国名校的教授。在这篇论文里,最重要的一个结论就是:如果我们的思维能够跳出给定的数据,那么必须有 Another Source Of Information 来 Make Up The Difference。这里的知识语言是什么?对于人类来讲,其实就是我们从小到大接受的学校教育,报纸上、电视上看到的信息,通过社交媒体,通过与其他人交流,不断积累起来的知识。近年来,不管是学术界还是工业界都纷纷构建自家的知识图谱,有面向全领域的知识图谱,也有面向垂直领域的知识图谱。其实早在文艺复兴时期,培根就提出了“知识就是力量”,在当今人工智能时代,各大科技公司更是纷纷提出:知识图谱就是人工智能的基础。 全球的互联网公司都在积极布局知识图谱。早在 2010 年微软就开始构建知识图谱,包括 Satori 和 Probase。2012 年,Google 正式发布了 Google Knowledge Graph,现在规模已经达到 700 亿左右。目前微软和 Google 拥有全世界最大的通用知识图谱,Facebook 拥有全世界最大的社交知识图谱,而阿里巴巴和亚马逊则分别构建了商品知识图谱。如果按照人类理解问题和回答问题这一过程来进行区分,我们可以将知识图谱分成两类。我们来看这样一个例子,如果用户看到这样一个问题,“Who was the U.S. President when the Angels won the World Series?”相信所有的用户都能够理解这个问题,也就是当 Angels 队赢了 World Series 的时候,谁是美国的总统?这是一个问题理解的过程,它所需要的知识通常我们称之为 Common Sense Knowledge(常识性知识)。另外一方面,很多网友可能回答不出这个问题,因为它需要另外一个百科全书式的知识。因此,我们将知识图谱分成两大类,一类叫 Common Sense Knowledge Graph(常识知识图谱),另外一类叫 Encyclopedia Knowledge Graph(百科全书知识图谱)。这两类知识图谱有很明显的区别。针对 Common Sense Knowledge Graph,通常而言,我们会挖掘这些词之间的 Linguistic Knowledge;对于 Encyclopedia Knowledge Graph,我们通常会在乎它的 Entities 和这些 Entities 之间的 Facts。对于 Common Sense Knowledge Graph,一般而言我们比较在乎的 Relation 包括 isA Relation、isPropertyOf Relation。对于 Encyclopedia Knowledge Graph,通常我们会预定义一些谓词,比如说 DayOfbirth、LocatedIn、SpouseOf 等等。对于 Common Sense Knowledge Graph 通常带有一定的概率,但是 Encyclopedia Knowledge Graph 通常就是“非黑即白”,那么构建这种知识图谱时,我们在乎的就是 Precision(准确率)。Common Sense Knowledge Graph 比较有代表性的工作包括 WordNet、KnowItAll、NELL 以及 Microsoft Concept Graph。而 Encyclopedia Knowledge Graph 则有 Freepase、Yago、Google Knowledge Graph 以及正在构建中的“美团大脑”。这里跟大家介绍两个代表性工作:1)Common Sense Knowledge Graph:Probase;2)Encyclopedia Knowledge Graph:美团大脑。常识性知识图谱(Common Sense Knowledge Graph)Microsoft Concept Graph 于 2016 年 11 月正式发布,但是它早在 2010 年就已经开始进行研究,是一个非常大的图谱。在这个图谱里面有上百万个 Nodes(节点),这些 Nodes 有Concepts(概念),比如说 Spanish Artists(西班牙艺术家);有 Entities(实体),比如说 Picasso(毕加索);有 Attributes(属性),比如 Birthday(生日);有 Verbs(动词),有 Adjectives(形容词),比如说 Eat、Sweet。也有很多很多的边,最重要的边,是这种 isA 边,比如说 Picasso,还有 isPropertyOf 边。对于其他的 Relation,我们会统称为 Co-occurance。这是我们在微软亚洲研究院期间对 Common Sense Knowledge Graph 的 Research Roadmap(研究路线图)。当我们构建出 Common Sense Knowledge Graph 之后,重要的是在上面构建各种各样的模型。我们提出了一些模型叫 Conceptualization(概念化模型),它能够支持 Term Similarity、Short Text Similarity 以及 Head-Modifier Detection,最终支持各种应用,比如 NER、文本标注、Ads、Query Recommendation、Text Understanding 等等。到底什么是 Short Text Understanding?常识怎么用在 Text Understanding 中?下面我们可以看一些具体的例子:当大家看到上面中间的文本时,相信所有人都能够认出这应该是一个日期,但是大家没办法知道这个日期代表什么含义。但如果我们再多给一些上下文信息,比如 Picasso、Spanish等等,大家对这个日期就会有一些常识性的推理。我们会猜测这个日期很可能是 Picasso 的出生日期,或者是去世日期,这就是常识。比如说当我们给定 China 和 India 这两个 Entity 的时候,我们的大脑就会做出一些常识性的推理,我们会认为这两个 Entity 在描述 Country。如果再多给一个 Entity:Brazil,这时候我们通常会想到 Emerging Market。如果再加上 Russia,大家可能就会想到“金砖四国”或者“金砖五国”。所有这一切就是常识性的推理。再比如,当我们看到 Engineer 和 Apple 的时候,我们会对 Apple 做一些推理,认为它就是一个 IT Company,但是如果再多给一些上下文信息,在这个句子里面由于 eating 的出现,我相信大家的大脑也会一样地做出常识推理,认为这个 Apple 不再是代表 Company,而是代表 Fruit。所以,这就是我们提出来的 Conceptualization Model,它是一个 Explicit Representation。我们希望它能够将 Text,尤其是 Short Text,映射到 Millions Concepts,这样的 Representation 能够比较容易让用户进行理解,同时能够应用到不同场景当中。在这一页 PPT 中,我们展示了 Conceptualization 的结果。当输入是 Pear 和 Apple 的时候,那么我们会将这个 Apple 映射到 Fruit。但是如果是 iPad Apple 的时候,我们会将它映射到 Company,同时大家注意这并不是唯一的结果,我们实际上是会被映射到一个 Concept Vector。这个 Concept Vector 有多大?它是百万级维度的 Vector,同时也是一个非常 Sparse 的一个 Vector。 通过这样的一个 Conceptualization Model,我们能够解决什么样的文本理解问题?我们可以看这样一个例子。比如说给定一个非常短的一个文本 Python,它只是一个 Single Instance,那么我们会希望将它映射到至少两大类的 Concept 上,一种可能是 Programming Language,另外一种是 Snake。当它有一些 Context,比如说 Python Tutorial 的时候,那么这个时候 Python 指的应该是 Programming Language,如果当它有其他的 Adjective、Verb,比如有 Dangerous 时,这时候我们就会将 Python 理解为 Snake。同时如果在一个文本里面包含了多个的 Entity,比如说 DNN Tool、Python,那么我们希望能够检测出在这个文本里面哪一个是比较重要的 Entity,哪一个是用来做限制的 Entity。下面我们将简单地介绍一下,具体应该怎么去做。当我们在 Google 里搜一个 Single Instance 的时候,通常在右侧会出现这个 Knowledge Panel。对于 Microsoft 这样一个 Instance,我们可以看到这个红色框所框出来的 Concept,Microsoft 指向的是 Technology Company,这背后是怎么实现的? 我们可以看到,Microsoft 实际上会指向非常非常多的 Concept,比如说 Company,Software Company,Technology Leader 等等。我们将它映射到哪一个 Concept 上最合适?如果将它映射到 Company 这个 Concept 上,很显然它是对的,但是我们却没办法将 Microsoft 和 KFC、BMW 这样其他类型的产品区分开来。另外一方面,如果我们将 Microsoft 映射到 Largest Desktop OS Vendor 上,那么这是一个非常 Specific 的 Concept,这样也不太好,为什么?因为这个 Concept 太 Specific,太 Detail,它可能只包含了 Microsoft 这样一个 Entity,那么它就失去了 Concept 的这种抽象能力。所以我们希望将 Microsoft 映射到一个既不是特别 General(抽象),又不是一个特别 Specific(具体)的 Concept 上。在语言学上,我们将这种映射称之为 Basic-level,我们将整个映射过程命名为 Basic-level Conceptualization。我们提出了一种计算 Basic-level Conceptualization 的方法,其实它非常简单而且非常有效。就是将两种的 Typicality 做了一些融合,同时我们也证明了它们跟 PMI 和 Commute Time 之间的一些关联。并且在一个大规模的数据集上,我们通过 Precision 和 NDCG 对它们进行了评价。最后证明,我们所提出来的 Scoring 方法,它在 NDCG 和 Precision 上都能达到比较好的结果。最重要的是,它在理论上是能够对 Basic-Level 进行很好的解释。下面我们来看一下,当 Instance 有了一些 Context 之后,我们应该怎么去进行处理。我们通过一个例子,来简单地解释一下这背后最主要的思想。比如说 iPad、Apple,其中 iPad 基本上是没有歧异的,它会映射到 Device、Product。但是对于 Apple 而言,它可能会映射到至少两类的 Concept 上,比如说 Fruit、Company。那么我们怎么用 iPad 对 Apple 做消歧呢?方法其实也挺直观的。我们会通过大量的统计去发现像 iPad 这样的 Entity,通常会跟 Company、Product 共同出现。比如说 iPad 有可能会跟三星共同出现,有可能会跟 Google 共同出现,那么我们就发现它会经常跟 Brand、Company、Product共同出现。于是我们就利用新挖掘出来的 Knowledge 对 Apple 做消歧,这就是背后最主要的思想。除了刚才这样一个 General Context 以外,在很多时候这些 Text 可能还会包含很多一些特殊的类型,比如说 Verb、Adjective。具体而言,我们希望在看到 Watch Harry Potter 时,能够知道 Harry Potter 是 Movie,当我们看到 Read Harry Potter 时,能够知道 Harry Potter 是 Book。同样的,Harry Potter 还有可能是一个角色名称,或者是一个游戏名称。那么我们来看一看应该怎样去解决这样一件事情。当我们看到 Watch Harry Potter 时,我们首先要知道,Harry Potter 有可能是一本 Book,也有可能是一部 Movie。我们可以算出一个先验概率,这通常要通过大规模的统计。同时我们要知道,Watch 它有可能是一个名词,同时它也有可能是一个动词,并且我们还需要去挖掘,当 Watch 作为动词的时候,它和 Movie 有非常紧密的关联。所以我们本质上是要去做一些概率上的推理,不仅要将条件概率做非常细粒度的分解,最后还要做概率计算。通过概率计算的方法,我们实际上就可以构建出一个非常大的离线知识图谱,那么我们在这个上面,就可以有很多的 Term,以及它们所属的一些 Type,以及不同 Term 之间的一些关联。当我们用这样一个非常大的离线知识图谱来做 Text Understanding 的时候,我们可以首先将这个 Text 进行分割处理,在分割之后,我们实际上是可以从这个非常大的离线知识图谱中截取出它的一个子图。最后我们使用了 Random Walk With Restart 的模型,来对这样一个在线的 Subgraph 进行分类。我们再来看一下,如果一个文本里包含了 Multiple Entities,要怎样处理?我们需要做知识挖掘,怎么做?首先我们可以得到非常多的 Query Log,然后我们也可以去预定一些 Pattern,通过这种 Pattern 的定义,可以抽取出非常多 Entity 之间 Head 和 Modifier 这样的 Relation,那么在接下来我们可以将这些 Entity 映射到 Concept 上,之后得到一个 Pattern。在这个过程之中,我们要将 Entity 映射到 Concept 上,那么这就是前面所提到的 Conceptualization。我们希望之后的映射不能太 General,避免 Concept Pattern 冲突。但是它也不能太 Specific,因为如果太 Specific,可能就会缺少表达能力。最坏的情况,它有可能就会退化到 Entity Level,而 Entity 至少都是百万的规模,那么整个 Concept Patterns 就有可能变成百万乘以百万的级别,显然是不可用的。所以我们就用到了前面介绍的 Basic-Level Conceptualization 的方法,将它映射到一个既不是特别 General,也不是特别 Specific 的 Concept 上。大家可以看一下我们能够挖掘出来的一些 Top 的 Concept Patterns,比如说 Game 和 Platform,就是一个 Concept 和一个 Pattern。它有什么用?举一个具体的例子,当用户在搜 Angry Birds、iOS 的时候,我们就可以知道用户想找的是 Angry Birds 这款游戏,而 iOS 是用来限制这款游戏的一个 Platform。苹果公司每年都会推出新版本的 iOS,那么我们挖掘出这样的 Concept Pattern 之后,不管苹果出到 iOS 15或者 iOS 16,那么我们只需要将它们映射到 Platform,那么我们的 Concept Patterns 就仍然有效,这样可以很容易地进行知识扩展。所以 Common Sense Knowledge Mining 以及 Conceptualization Modeling,可以用在很多的应用上,它可以用来算 Short Text Similarity,可以用来做 Classification、Clustering,也可以用来做广告的 Semantic Match、Q/A System、Chatbot 等等。美团大脑——百科全书式知识图谱(Encyclopedia Knowledge Graph)在介绍完 Common Sense Knowledge Graph 之后,给大家介绍一下 Encyclopedia Knowledge Graph。这是美团的知识图谱项目——美团大脑。美团大脑是什么?美团大脑是我们正在构建中的一个全球最大的餐饮娱乐知识图谱。我们希望能够充分地挖掘关联美团点评各个业务场景里的公开数据,比如说我们有累计 40 亿的用户评价,超过 10 万条个性化标签,遍布全球的 3000 多万商户以及超过 1.4 亿的店菜,我们还定义了 20 级细粒度的情感分析。我们希望能够充分挖掘出这些元素之间的关联,构建出一个知识的“大脑”,用它来提供更加智能的生活服务。我们简单地介绍一下美团大脑是如何进行构建的。我们会使用 Language Model(统计语言模型)、Topic Model(主题生成模型) 以及 Deep Learning Model(深度学习模型) 等各种模型,希望能够做到商家标签的挖掘,菜品标签的挖掘和情感分析的挖掘等等。为了挖掘商户标签,首先我们要让机器去阅读评论。我们使用了无监督和有监督的深度学习模型。无监督模型我们主要用了LDA,它的特点是成本比较低,无需标注的数据。当然,它准确性会比较不可控,同时对挖掘出来的标签我们还需要进行人工的筛选。至于有监督的深度学习模型,那么我们用了 LSTM,它的特点是需要比较大量的标注数据。通过这两种模型挖掘出来的标签,我们会再加上知识图谱里面的一些推理,最终构建出商户的标签。 如果这个商户有很多的评价,都是围绕着宝宝椅、带娃吃饭、儿童套餐等话题,那么我们就可以得出很多关于这个商户的标签。比如说我们可以知道它是一个亲子餐厅,它的环境比较别致,服务也比较热情。下面介绍一下我们如何对菜品进行标签的挖掘?我们使用了 Bi-LSTM 以及 CRF 模型。比如说从这个评论里面我们就可以抽取出这样的 Entity,再通过与其他的一些菜谱网站做一些关联,我们就可以得到它的食材、烹饪方法、口味等信息,这样我们就为每一个店菜挖掘出了非常丰富的口味标签、食材标签等各种各样的标签。下面再简单介绍一下,我们如何进行评论数据的情感挖掘。我们用的是 CNN+LSTM 的模型,对于每一个用户的评价我们都能够分析出他的一些情感的倾向。同时我们也正在做细粒度的情感分析,我们希望能够通过用户短短的评价,分析出他在不同的维度,比如说交通、环境、卫生、菜品、口味等方面的不同的情感分析的结果。值得一提的是,这种细粒度的情感分析结果,目前在全世界范围内都没有很好的解决办法,但是美团大脑已经迈出了非常重要的一步。下面介绍一下我们的知识图谱是如何进行落地的。目前业界知识图谱已经有非常多的成熟应用,比如搜索、推荐、问答机器人、智能助理,包括在穿戴设备、反欺诈、临床决策上都有非常好的应用。同时业界也有很多的探索,包括智能商业模式、智能市场洞察、智能会员体系等等。如何用知识图谱来改进我们的搜索?如果大家现在打开大众点评,搜索某一个菜品时,比如说麻辣小龙虾,其实我们的机器是已经帮大家提前阅读了所有的评价,然后分析出提供这道菜品的商家,我们还会根据用户评论的情感分析结果来改进这些搜索排序。此外,我们也将它用在商圈的个性化推荐。当大家打开大众点评时,如果你现在位于某一个商场或者商圈,那么大家很快就能够看到这个商场或者商圈的页面入口。当用户进入这个商场和商户页面时,通过知识图谱,我们就能够提供“千人千面”的个性化排序和个性化推荐。在这背后其实使用了一个“水波”的深度学习模型,关于这个深度学习模型更详细的介绍,大家可以参见我们在 CIKM 上的一篇论文。所有的这一切,其实还有很多的技术突破等待我们去解决。比如整个美团大脑的知识图谱在百亿的量级,这也是世界上最大的餐饮娱乐知识图谱,为了支撑这个知识图谱,我们需要去研究千亿级别的图存储和计算引擎技术。我们也正在搭建一个超大规模的 GPU 集群,来支持海量数据的深度学习算法。未来,当所有的这些技术都成熟之后,我们还希望能够为所有用户提供“智慧餐厅”和“智能助理”的体验。文章转载自 AI 科技大本营(rgznai100),部分内容有修正。作者简介仲远,博士,美团点评高级研究员、高级总监,美团 AI 平台部 NLP 中心负责人、大众点评搜索智能中心负责人。加入美团点评前,担任美国 Facebook 公司 Research Scientist,负责 Facebook 产品级 NLP Service。在 Facebook 之前,担任微软亚洲研究院的主管研究员,负责微软研究院知识图谱项目和对话机器人项目。多年来专注于自然语言处理、知识图谱及其在文本理解方面的研究,在国际顶级学术会议如 VLDB、ICDE、IJCAI、CIKM 等发表论文30余篇,获得 ICDE 2015 最佳论文奖,并是 ACL 2016 Tutorial “Understanding Short Texts”的主讲人,出版学术专著3部,获得美国专利5项。在 NLP 和 KG 研究领域及实际产品系统中均有丰富经验,研究领域包括:自然语言处理、知识图谱、深度学习、数据挖掘等。招聘信息美团点评 NLP 团队招聘各类算法人才,Base 北京上海均可。NLP 中心使命是打造世界一流的自然语言处理核心技术和服务能力,依托 NLP(自然语言处理)、Deep Learning(深度学习)、Knowledge Graph(知识图谱)等技术,处理美团点评海量文本数据,打通餐饮、旅行、休闲娱乐等各个场景数据,构建美团点评知识图谱,搭建通用 NLP Service,为美团点评各项业务提供智能的文本语义理解服务。我们的团队既注重AI技术的落地,也开展中长期的NLP及知识图谱基础研究。目前项目及业务包括美团点评知识图谱、智能客服、语音语义搜索、文章评论语义理解、美团点评智能助理等。真正助力于“帮大家吃得更好,生活更好”企业使命的实现,优化用户的生活体验,改善和提升消费者的生活品质。欢迎各位朋友推荐或自荐至 hr.ai@meituan.com。算法岗:NLP算法工程师/专家/研究员 、知识图谱算法工程师/专家/研究员工程岗:C++/Java研发专家/工程师 、AI平台研发工程师/专家产品岗:AI产品经理/专家(NLP、数据方向) ...

November 2, 2018 · 4 min · jiezi