Netflix开源面向稀疏数据优化的轻量级神经网络库Vectorflow

简介: 在Netflix公司,我们的机器学习科学家在多个不同的领域处理着各种各样的问题:从根据你的爱好来定制电视和推荐电影,到优化编码算法。我们有一小部分问题涉及到处理极其稀疏的数据;手头问题的总维度数很容易就能达到数千万个特征,即使每次要看的可能只是少数的非零项。

1.png

介绍

随着过去几年来深度学习库和软件创新的蓬勃发展,研究机器学习是一个激动人心的时刻。大多数机器学习的库都是从相当专业的计算代码演变而来的,这些计算代码一般用于解决大密集度问题,例如为稀疏模型提供边缘支持的基于神经网络的图像分类通用框架。

在Netflix公司,我们的机器学习科学家在多个不同的领域处理着各种各样的问题:从根据你的爱好来定制电视和推荐电影,到优化编码算法。我们有一小部分问题涉及到处理极其稀疏的数据;手头问题的总维度数很容易就能达到数千万个特征,即使每次要看的可能只是少数的非零项。对于这些情况,我们认为需要有一个经过专门优化的轻量级的库,这个库用于在单一设备、多核环境下对稀疏数据进行浅层前馈神经网络的训练。我们想要一些小巧而又易用的工具,所以我们构建了Vectorflow,它是目前机器学习科学家使用的众多工具之一。

设计注意事项

  • 敏捷性。我们希望数据科学家能够在完全自主的情况下轻松地运行和迭代他们的模型。所以我们用D语言写了Vectorflow。D语言是一种并不难学的现代系统语言,它具备快速的编译器和函数编程功能,为初学者提供了类似Python的使用体验,但在运行时通常具有多个数量级的性能提升,同时让经验丰富的开发人员能够利用其优秀的模板引擎、编译时功能和低级别特性(C接口、内联汇编器、手动内存管理、自动向量化等等)。Vectorflow没有任何第三方的依赖,从而简化了其部署。它提供了一个基于回调的API,可轻松接入自定义的损失函数来进行训练。
  • 稀疏感知。在设计稀疏数据库与浅层架构库的过程中,运行时瓶颈往往是在IO方面:例如,与大密集度矩阵上的卷积层不同,其运行每一行的操作极少。Vectorflow能够尽可能地避免在正向与反向传递过程中的内存复制或分配操作。矩阵向量操作同时拥有稀疏与密集两种实现方式,其中密集型是SIMD向量化的。Vectorflow还提供了一种在处理稀疏输出梯度时进行稀疏反向传递的方式。
  • IO未知。如果是IO绑定,那么根据定义,训练器的运行速度由IO层的速度决定。Vectorflow对底层数据模式的要求非常宽松(仅需提供一个具有“features”属性的行迭代器),以便可以根据数据源编写高效的数据适配器,以及在使用同一编程语言的时候避免任何预处理或数据转换步骤。这样,你就能根据数据来移动代码,而不是根据代码移动数据。
  • 单一设备。分布式系统难以调试,而且还会引入固定成本,例如作业调度。基于新型机器学习技术的分布式优化则更加困难。因此,我们基于单机设置建立了一个高效的解决方案,以此来降低了建模的迭代时间,并且不会牺牲中小规模任务(1亿行)的可扩展性。我们选择使用Hogwild的通用异步SGD解算器作为免锁定方案,以使得在没有通信成本的情况下将负载分散到各个不同的内核上。只要数据足够稀疏,这就适用于大多数的线性或浅层网络模型。由于从用户的角度来看,所有的一切都运行在非分布式的环境下,这样就避免了在算法分布方面花过多的精力。

应用程序

在项目启动后的几个月里,我们看到了很多基于该库的用例,同时也有多个研究项目及生产系统开始利用Vectorflow进行因果推论、生存回归、密度估算和推荐排名算法。事实上,我们正在使用 Vectorflow对Netflix主页的部分用户体验进行测试。Vectorflow也被包含在Netflix机器学习从业者所使用的基础实例内的默认工具箱中。

例如,我们基于Netflix在营销工作当中遇到的一项宣传问题对该库的性能进行了调查。在这个案例中,我们要用生存指数分布执行加权最大似然估计。要实现这个目标,需要向Vectorflow传递出以下自定义的回调函数:

2.png

利用此回调进行训练,我们可以轻松比较这三种模型:

  • 模型 1:基于小型稀疏特征的线性模型(需要学习约 500 个参数)
  • 模型 2:基于大型稀疏特征的线性模型(需要学习 100 万个参数)
  • 模型 3:基于稀疏特征的浅层神经网络(需要学习 1000 万个参数),训练数据量翻倍

5.png

3.png

这里的数据源是存储在S3上的一个Hive表,其中的列式数据格式是Parquet。另外,我们通过将该数据流传入c4.4xlarge实例并构建内存内训练集的方式进行直接训练。结果如下所示:

4.png

解压缩和特征编码都是在单线程上实现的,因此这还有改进的空间,但根据其端到端的运行时来看,并不需要使用针对中等规模稀疏数据集和浅层架构的分布式解决方案。请注意,训练时间与数据的稀疏度以及行数存在线性关系。阻止线性可扩展性的一个原因是,当多个异步SGD线程的权重相同时,CPU存储器内在结构创建的缓存将会无效,因此如果模型参数访问模式不够稀疏的话,会破坏Hogwild的理论结果(详细内容请参见这篇文章)。

未来的工作

接下来,除了简单线性、多项式或者前馈架构之外,我们计划进一步开发更加专业的层以扩大拓扑支持能力,并在维持Vectorflow项目“极简”设计理念的前提下探索新的并行策略。

文章原标题《Introducing Vectorflow》,作者:Benoît Rostykus, Netflix Technology,译者:夏天,审校:主题曲哥哥。

文章为简译,更为详细的内容,请查看原文

相关文章
|
1月前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
1月前
|
机器学习/深度学习 安全 算法
利用机器学习优化网络安全防御机制
【2月更文挑战第23天】 在数字化时代,网络安全已成为维护信息完整性、保障用户隐私的关键挑战。随着攻击手段的日益复杂化,传统的防御策略逐渐显得力不从心。本文通过引入机器学习技术,探索其在网络安全防御中的应用及优化路径。首先,概述了当前网络安全面临的主要威胁和机器学习的基本概念;其次,分析了机器学习在识别恶意行为、自动化响应等方面的潜力;最后,提出了一个基于机器学习的网络安全防御框架,并通过案例分析展示了其有效性。本研究旨在为网络安全领域提供一种创新的防御思路,以适应不断演变的网络威胁。
31 2
|
2月前
|
机器学习/深度学习
YOLOv5改进 | 主干篇 | 轻量级网络ShuffleNetV1(附代码+修改教程)
YOLOv5改进 | 主干篇 | 轻量级网络ShuffleNetV1(附代码+修改教程)
45 1
|
1月前
|
数据采集 JavaScript 前端开发
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库
|
14天前
|
数据采集 大数据 数据安全/隐私保护
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
本文探讨了使用Perl和RobotRules库在遵循robots.txt规则下抓取小红书数据的方法。通过分析小红书的robots.txt文件,配合亿牛云爬虫代理隐藏真实IP,以及实现多线程抓取,提高了数据采集效率。示例代码展示了如何创建一个尊重网站规则的数据下载器,并强调了代理IP稳定性和抓取频率控制的重要性。
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
|
2月前
|
机器学习/深度学习 测试技术 Ruby
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
128 2
|
5天前
|
监控 负载均衡 算法
《计算机网络简易速速上手小册》第6章:网络性能优化(2024 最新版)
《计算机网络简易速速上手小册》第6章:网络性能优化(2024 最新版)
42 3
|
12天前
|
JSON Kubernetes 网络架构
Kubernetes CNI 网络模型及常见开源组件
【4月更文挑战第13天】目前主流的容器网络模型是CoreOS 公司推出的 Container Network Interface(CNI)模型
|
12天前
|
存储 缓存 自动驾驶
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
20天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。

热门文章

最新文章