Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >「深度解析」AI训练之数据缓存

「深度解析」AI训练之数据缓存

作者头像
焱融科技
修改于 2020-07-03 09:49:32
修改于 2020-07-03 09:49:32
1.4K0
举报
文章被收录于专栏:焱融科技焱融科技

深度学习或者AI的出现,改变了我们以往的解决问题的编程方式,不再是代码上直观的表达。

举一个简单的例子,我们如何识别一个数字(图片)是数字9呢?非常直观的方法就是上面有一小圆圈,下面有一个竖线。但是如果写的倾斜了一些呢?如果上面的圈没有闭合呢?如果竖线弯曲了呢?感觉我们日常的程序判断(switch)无法收敛,我们只能用一种能够自我演进的方式来认识这个“看起来像9”的数字,而这也正是我们大脑的学习行为,我们第一个看到这个数字的时候,被告知这是9,那么图片就有了一个标签;下次再看到类似的,还是属于标签9,见多识广,最后见到一个也许写得更加不像的我们也能够识别出是9,这个过程正是由我们大脑中的上千亿的神经细胞长时间的学习结果。

人类大脑的真正运行方式,依旧是神秘所在,但从这个过程中我们发展出了神经网络算法,可以从已有的知识中进行学习。勤能补拙,既然算法不如人脑,就通过学习大量的资料来加快学习的进程。MNIST 数据有 60,000张手写数字图片,ImageNet 数据有接近1500万张图片,Youtube-8M的视频数据有数TB,Google的 Open Image dataset, 仅仅是在 Open Images Challenge中使用的数据集就达到了18TB。

AI中有三大核心:算法,算力,数据(存储)。算法自有成熟的框架,由数学科学家去解决;计算能力由CPU甚至GPU去解决。面对如此大量的数据,一台机器的内存、硬盘去承载基本不太可能,而对于CPU/GPU计算能力强悍的组件,频繁的去远端获取数据等待IO又是资源的浪费。有没有既能满足数据距离计算近、又能承载大量数据的方案呢?缓存是银弹!后面的主要篇幅从论文解析的角度来逐步阐述,论文来自Fast20 Quiver: An Informed Storage Cache for Deep Learning

后续的讨论中,有个比较重要的概念,就是mini-batch, 如果没有实战的经历过,不是很容易理解这个概念。

深度学习的优化算法,本质就是梯度下降。每次的参数更新有两种方式。

第一种,遍历全部数据集计算一次损失函数,然后计算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有的样本数据遍历一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent(BGD),批梯度下降。

另一种,每训练一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近波动,达不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。

用一个示意图表示如下:

蓝色:为 batch 梯度下降,即 mini batch size = m,紫色:为 stochastic 梯度下降,即 mini batch size = 1,绿色:为 mini batch 梯度下降,即 1 < mini batch size < m。
蓝色:为 batch 梯度下降,即 mini batch size = m,紫色:为 stochastic 梯度下降,即 mini batch size = 1,绿色:为 mini batch 梯度下降,即 1 < mini batch size < m。

以下图为例,执行了3轮训练(epoch),每轮里面定义mini-bach size=5, 其中数据集为1-20个数字,我们看到通过torch.DataLoader, 每次获得了5个数据(batch x)。

01 深度学习训练的基本知识

深度学习训练任务(Deep Learning Training DLT)会将训练数据作为输入,从千丝万缕的线索中通过学习并得到一个输出模型来代表训练数据。

为了实现训练,DLT会使用一个较小的随机样本(mini-batch,通常是32到512个),并利用SGD来慢慢的学习各种参数进而提高准确率。

训练数据:通常我们可以认为是一个列表,列表中的每一个元素都是一个二元组<input,label>, input可能是一张图片或者一段语音,而label则代表着input的语义,而这也正是深度学习网络所需要学习的并能够正确区分input的目标。例如ImageNet的全部数据集大概有150万张图片,每张图片在200KB左右。

为了能够以随机方式访问训练数据,DLT框架会使用索引序列来遍历数据。假设训练数据有100万个文件,那么会维护一个包含每一个文件索引的列表,并对它进行随机的排列,随后根据mini-batch的数据量向后端存储获得数据,当全部的数据都完整遍历训练一次,一个epoch完成。对于下一个epoch, 再次对索引进行随机排列,重复上面的过程。一个典型的DLT任务会运行很多轮训练,例如50-200。

数据转换:从存储获得原始数据会被DLT框架进行转换,例如彩色图片变成黑白图片,同时将图片转换为像素数矩阵等等。当然这部分工作通常由CPU来完成。

多任务:因为DLT任务是一个试错的过程,所以实际运行过程中,用户总是会使用不同的参数来同时运行不同的任务,所有的这些任务都会访问相同的完整数据集,不同的就是以不同的随机顺序来进行访问。

02 深度学习的IO特点

我们从DLT任务I/O访问的角度看来列举一下它的主要特点:

可共享性:在DLT训练任务中,无论是一个训练任务自身,还是多个训练任务之间,都存在很大程度的I/O重叠性。在一个任务内,它会针对同一个数据集进行多次的遍历(例如多个epoch),所以如果能够在第一个epoch的时候就对数据进行缓存,会大幅提升后续训练的效率。更重要的是,这种共享性甚至可以扩展到多任务之间,例如针对同一份训练数据集,配置不同的参数,利用同一个训练模型运行多个不同的任务。这些任务可能运行在不同的机器上,但是访问的都是相同的底层数据集。

随机访问:由于数据的可共享性,这使得DLT具有非常的缓存友好性,但只有在全部数据能够被完整缓存的情况下才有效果,否则,DLT随机访问数据的方式又使得部分数据缓存很容易被穿透。例如只能够缓存20%的数据,那么这些数据马上就会被后续的随机访问刷掉。

部分数据缓存对于DLT来说很重要,因为训练数据通常已经足够大,并且会越来越多,例如前文提到过即使只是ImageNet这样的百万级规模的数据集,总体也已经达到了数TB的大小。

可替换性:从I/O的角度来说,一个训练任务(epoch)主要关注以下两点即可:a)每一个训练数据必须且仅被访问一次;b)而对于每次的mini-batch,必须是随机的序列。有趣的是,一组数据的精确顺序并不会对训练任务的准确或者精确性产生影响,这就意味着I/O是可以被替换的。对于特定若干文件的访问,DTL任务可以替换为一组其他的随机的且没有被访问过的数据。从缓存的角度来说,这是一个独特的特性来提升缓存的命中率,即使缓存只能承载20%的数据,也可以在访问一个不存在于缓存中的数据,通过替换的方式返回一个存在的内容,同时并没有破坏随机以及唯一性的训练要求。

可预测性:因为每一个mini-batch的运行时间,可以事先获得,这样就可以用于评估一个训练任务对I/O性能的敏感性,进而可以进行策略调整以能够使那么I/O敏感的任务从缓存获益。

03 缓存的设计

总结起来深度学习的特点:

  1. 需要的数据量大
  2. 多台机器多个训练并行
  3. 每个训练要运行多次
  4. 在每次训练中,所有的数据需要遍历一遍
  5. 针对不同的训练参数,以及在不同的机器上运行的训练任务,数据集相对保持固定

针对以上的特点,当我们考虑缓存的时候,不禁会有如下的疑问:缓存毕竟容量有限,穿透如何处理?缓存的过期置换策略是如何的?当不同的用户访问不同的数据,安全性如何保证?等等。

Quiver、分布式缓存,通过与DLT框架深度整合,缓存客户端集成到训练任务的IO过程中,进而为缓存服务端提供更多的策略信息。

系统结构

公有云虚拟机环境举例,每一个GPU VM带有一个本地SSD硬盘,每一个DLT job会运行在自己的容器内,这样即使是多用户运行,也是在一个隔离的环境内。

每个用户的数据存储在各自账号的云存储内,这样保证了隐私以及访问权限。通过分布式缓存,即使训练任务由于调度等原因在各个宿主之间切换,缓存数据依旧是能够提高训练效率。

数据安全

Quiver的设计是一个共享式的分布缓存,无论是不同的任务,还是不同的用户之间,在共享的模式下如何保证数据的安全就是一个重要因素。Quiver保证了用户只能看到他有权限访问的数据,但这样似乎又与缓存的重用产生了冲突。如果针对某一个数据集,例如ImageNet, 两个不同用户分别在各自的存储账号内各自保存了一份,那么逻辑上来讲,缓存要分别为每个用户各自缓存一份。这将导致缓存的效率降低,Quiver通过内容寻址(content-addressed)的方式来解决重用与隔离的问题。

内容寻址缓存

对于缓存,基本的行为就是通过一个<key, value>的映射关系,在我们通过key查询时,能够快速的返回所对应的value。在Quiver中,缓存并不是利用文件名以及偏移量在作为缓存的关键字,而是利用缓存内容的hashes。缓存内容的粒度是由具体的DLT任务决定的,可能是一张图片,无论是对它的插入还是寻址,都以它的hash(例如SHA1)来唯一定位。用hash来定位的好处是对于一个相同内容的文件,不管它来自于何处以及文件名是否相同,在缓存中都仅需要保留一份即可,这样也就能够达到即使在不同的用户之间也能够共享目的。

同时为了保证数据的隔离性,Quiver利用摘要索引来访问训练数据,对于每一份数据,摘要索引将包含<content_hash: file_location>, 因此,在多用户拥有相同内容的数据集时,因为数据是存在在各自的存储系统内,每个用户将拥有不同的file_location,但是所有的content_hash是相同的。

缓存服务器

利用本地SSD作为介质的KV存储,通过一致性Hash的方式将key space分布在多个缓存服务器上。

缓存管理(Cache Manager)

由于Quiver是分布式缓存,那么针对所有的缓存服务器,缓存的插入、清理需要一个协调者Cache manager。

Cache manager同时会评估每一个计算任务从缓存的受益情况,主要通过让缓存服务器针对训练任务所需要的若干mini-batch数据做cache misses, 然后与其他的缓存命中的训练人耗时机型对比,进而对缓存进行优先级调整。

缓存客户端

缓存客户端作为训练任务的一部分,通过干预DLT框架,例如PyTorch等的接口层来访问训练数据。在PyTorch中,DataSet会用来遍历所有的训练数据,并且内部维护一个随机的文件索引列表,其中Next的接口就可以用来获得下一个mini-batch数据。Quiver通过调整这个接口,利用一个摘要文件,当上层访问一组文件时,它会先对缓存进行数据的访问。

客户端会将训练任务的一些信息反馈给Cache Manager,例如每一个mini-batch的训练时间,Cache Manager可以据此来优化缓存的策略。

替换命中率

在常规的缓存中,如果一个mini-batch包含了512个文件,那么Dataset会提供512个文件索引用来从后端存储获得文件内容,如果这其中只有部分缓存命中,那么将依然存在远程的I/O操作。在Quiver中,会从Cache中加载更多的(例如10倍的mini-batch数量)数据,而只要其中有512个数据能够被命中,那么就返回给上层训练任务,这样训练任务就不会被Cache miss阻塞。同时Quiver会标记Cache miss的数据为pending状态,周而复始,直到数据被遍历了一遍,这时将重头来过仅仅去关注之前pending的数据。

假设目前只有10%的数据在缓存中,为了简单起见,我们可以认为就是连续的原始数据的10%, 因为DLT任务会随机的查找数据,所以每一个长度为k的mini-batch序列,缓存的命中率应该为k/10, 因此如果我们查找一个长度为10*k的序列,那么正好能够命中获得mini-batch所需要的数据。当下一轮查找pending数据的时候,另外的10%的数据可能已经在缓存中了,这也意味着能够1/9的命中率。需要注意的是,在多个任务的训练中,这依旧适用,因此多个训练任务尽管每个都访问随机的训练数据,从整体来看,他们可以做到以全缓存命中的方式来运行。

训练准确性

由于上述的I/O可替换性,我们有理由怀疑最终训练结果的准确性。这里借用原文的数据来说明。

04 缓存的管理

在之前的描述中,当只有部分数据被缓存时,Quiver会在一个epoch的训练过程中,再次遍历文件索引。为了能在这后续的遍历中获得更好的命中率,另一部分数据必须被pre-fetch到缓存中。

Quiver通过缓存整个数据集的2个chunks来解决这个问题。首先数据集的摘要索引文件会被分成固定数据的chunks,例如每个chunk包含10%的数据,同时每个chunk代表着striped partition。例如我们定义数据集中连续的10%为一个partition, 每个partition被分成10个stripe units. 这样每个chunk将包含所有的partition中的一个unit。这样当训练任务操作第一个chunk的过程中,第二个chunk将被加载到缓存中,所以当部分训练任务完成第一次遍历开始第二次的时候,数据已经在缓存内,训练任务以递进的方式运行。

这里面潜在的一个问题就是什么时候将第一个chunk置换出去。如果置换太快,部分任务还没有完成将导致缓存失效,如果保留太长时间,那么第三个chunk将无法加载进来。在Quiver中,当第二个chunk被加载到缓存后,第一个chunk会被标记为可以清除,同时新的任务可以从第二个chunk中获得命中的数据。原有的任务依旧利用第一个chunk来运行,当所有的任务都已经遍历了第一个chunk数据,这部分数据才会真的从缓存中清除,同时第三部分数据将开始加载。

在上述的过程中,如果某一个训练任务相比于其他的要慢很多,那么将导致前一个chunk迟迟不能释放,通常来说,在同一个训练模型的多个任务中,每个任务的训练时间基本是相同的,但无法避免在多个不同的训练模型训练同一个数据集的场景。不过如果一个任务明显的耗时很长,那么将意味着每一个mini-batch在GPU上的训练时间都很长,也就是它对I/O的性能没那么敏感,所以缓存的不命中并不会影响多少这个训练的效率,因此 Quiver会设定一个临界值来强制第一个chunk失效并清除。

05 缓存效果

论文作者通过如下的配置环境来进行效果的对比,从实际数据来看,训练性能确实有较大的提高。

Timeline of Mini-batches

吞吐提升

06 结论

深度学习场景中,更多的注意力放在了提高计算以及网络的性能上,而对于存储,则是利用现有的方案来解决,例如提前手动将数据加载到离GPU较近的SSD上。论文作者通过Quiver,提供了自动化的手段来消除存储的瓶颈。当然无法避免对训练框架的侵入性,但也正是因为如此,Quiver才能感知到训练I/O的特点,进而达到即使缓存只能承载部分数据也可以大幅调高缓存利用率的效果。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
这个开源神器,让你更懂你的 GPU!
深度推荐模型(DLRMs)已经成为深度学习在互联网公司应用的最重要技术场景,如各平台的视频推荐、购物搜索、广告推送等流量变现业务,极大改善了用户体验和业务商业价值。但海量的用户和业务数据,频繁地迭代更新需求,以及高昂的训练成本,都对 DLRM 训练提出了严峻挑战。
GitHubDaily
2022/11/01
9510
这个开源神器,让你更懂你的 GPU!
【玩转腾讯云】深度学习之《深度学习入门》学习笔记(四)神经网络的学习
最近学习吴恩达《Machine Learning》课程以及《深度学习入门:基于Python的理论与实现》书,一些东西总结了下。现就后者学习进行笔记总结。本文是本书的学习笔记(四)神经网络的学习。
ZNing
2020/05/05
1.4K0
干货 | 如何理解深度学习分布式训练中的large batch size与learning rate的关系?
问题详情: 在深度学习进行分布式训练时,常常采用同步数据并行的方式,也就是采用大的batch size进行训练,但large batch一般较于小的baseline的batch size性能更差,请问如何理解调试learning rate能使large batch达到small batch同样的收敛精度和速度? 回答: 最近在进行多GPU分布式训练时,也遇到了large batch与learning rate的理解调试问题,相比baseline的batch size,多机同步并行(之前有答案是介绍同步并行的
AI科技评论
2018/03/14
2.9K0
干货 | 如何理解深度学习分布式训练中的large batch size与learning rate的关系?
【DL碎片2】神经网络中的优化算法
从【DL笔记1】到【DL笔记N】以及【DL碎片】系列,是我学习深度学习一路上的点点滴滴的记录,是从Coursera网课、各大博客、论文的学习以及自己的实践中总结而来。从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现自己的小而有趣的想法......我相信,一路看下来,我们可以感受到深度学习的无穷的乐趣,并有兴趣和激情继续钻研学习。 正所谓 Learning by teaching,写下一篇篇笔记的同时,我也收获了更多深刻的体会,希望大家可以和我一同进步,共同享受AI无穷的乐趣。
beyondGuo
2018/10/25
3990
【DL碎片2】神经网络中的优化算法
AI智算中心,大模型训练背后的网络流量“奥秘”
前言:自2017年起,AI模型的规模每半年翻一番,从初代Transformer的6500万增长到GPT-4的1.76万亿,预计下一代大语言模型将达到10万亿规模。另一方面,用于模型训练的数据量持续增长,如C4数据集,原始数据量累计超过9.5PB,每月新增200-300TB,目前经过清洗加工后的数据集大小约38.5 TB,训练样本数364.6M。进一步,随着多模态大模型的兴起,训练数据从单一的文本过渡到图像和视频乃至3D点云,数据规模将是文本数据的1万倍以上。
星融元Asterfusion
2024/07/24
4540
AI智算中心,大模型训练背后的网络流量“奥秘”
深度学习模型训练全流程!
本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。
Datawhale
2020/06/16
4.6K0
Tensorflow实战(2)-三个基本概念Epoch, Batch, Iteration
深度神经网络的优化都是基本都是基于梯度下降的,梯度下降的过程就是寻找函数值下降速度最快的方向,沿着该方向迭代,快速到达局部最优解的过程。
YoungTimes
2022/04/28
6490
Tensorflow实战(2)-三个基本概念Epoch, Batch, Iteration
视频+案例,玩转LightGBM
LightGBM在Higgs数据集上LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,并且准确率也有提升。 Xgboost已经十分完美了,为什么还要追求速度更快、内存使用更小的模型? 对GBDT算法进行改进和提升的技术细节是什么? 一、提出LightGBM的动机 常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。 而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。 LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
机器学习AI算法工程
2019/10/28
9020
刷新纪录 | 74.7 秒训练完 ImageNet!2048 GPU 暴力出奇迹
在过去两年中,深度学习的速度加速了 30 倍。但是人们还是对 “快速执行机器学习算法” 有着强烈的需求。
小小詹同学
2019/05/05
7690
刷新纪录 | 74.7 秒训练完 ImageNet!2048 GPU 暴力出奇迹
使用大batch优化深度学习:训练BERT仅需76分钟 | ICLR 2020
在海量数据集上训练大型深度神经网络,是非常具有挑战性的。最近,有许多研究均使用大batch随机优化方法来解决此问题。在该研究领域中,目前最杰出的算法是LARS,它通过采用分层自适应学习率,可以在几分钟内在ImageNet上训练ResNet。但是,对于像BERT这样的注意力模型,LARS的表现很差,这说明它的性能提升在不同任务之间并不一致。在本文中,作者首先研究了一种有原则性的分层适应策略,这样就可以使用大的mini-batch来加速深度神经网络的训练。
AI科技大本营
2020/04/14
1.4K0
使用大batch优化深度学习:训练BERT仅需76分钟 | ICLR 2020
如何借助 JuiceFS 为 AI 模型训练提速 7 倍
海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储、管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情。不论是单机训练还是分布式训练,I/O 的性能都会显著影响整体 pipeline 的效率,甚至是最终的模型质量。
Juicedata
2021/12/10
8410
如何借助 JuiceFS 为 AI 模型训练提速 7 倍
视频数据训练太慢?试试UT-Austin&FAIR提出的多重网格训练,加速4.5倍,还能提点!
训练深度视频模型比训练其对应图像模型慢一个数量级。训练慢导致研究周期长,阻碍了视频理解研究的进展。按照训练图像模型的标准做法,视频模型训练使用了固定的mini-batch形状,即固定数量的片段,帧和空间大小。
CV君
2022/01/20
1K0
视频数据训练太慢?试试UT-Austin&FAIR提出的多重网格训练,加速4.5倍,还能提点!
二阶优化!训练ImageNet仅需35个Epoch
随着神经网络的尺寸和训练数据的持续增长,人们对分布式计算的需求也逐渐增大。在深度学习中实现分布式并行的常用方式是使用数据并行方法,其中数据被分配进不同进程中,而模型在这些进程中重复。当每个模型的 mini-batch 大小保持不变,以增加计算/通信比时,整个系统上的 mini-batch 大小会随着进程数量成比例增长。
机器之心
2018/12/21
1.1K0
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
里面对 BGD,SGD,MBGD,Adagrad,Adadelta,RMSprop,Adam 进行了比较, 今天对其中的 mini-batch 梯度下降 作进一步详解。
杨熹
2018/08/03
1.6K0
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
如何借助分布式存储 JuiceFS 加速 AI 模型训练
传统的机器学习模型,数据集比较小,模型的算法也比较简单,使用单机存储,或者本地硬盘就足够了,像 JuiceFS 这样的分布式存储并不是必需品。
Juicedata
2023/05/01
7590
如何借助分布式存储 JuiceFS 加速 AI 模型训练
深度学习教程 | 神经网络优化算法
本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。
ShowMeAI
2022/04/14
6500
深度学习教程 | 神经网络优化算法
技术角 | 深度学习之《深度学习入门》学习笔记(四)神经网络的学习(下)
最近学习吴恩达《Machine Learning》课程以及《深度学习入门:基于Python的理论与实现》书,一些东西总结了下。现就后者学习进行笔记总结。本文是本书的学习笔记(四)神经网络的学习的下半部分。
ZNing
2020/05/13
1K0
技术角 | 深度学习之《深度学习入门》学习笔记(四)神经网络的学习(下)
深度学习性能提升的诀窍
原文: How To Improve Deep Learning Performance 作者: Jason Brownlee 翻译: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 克服过拟合和提高泛化能力的20条技巧和诀窍 你是如何提升深度学习模型的效果? 这是我经常被问到的一个问题。 有时候也会换一种问法: 我该如何提高模型的准确率呢? ……或者反过来问: 如果我的网络模型效果不好,我该怎么办? 通常我的回答是“具体原因我不清
用户1737318
2018/06/06
6230
深度学习:梯度下降算法改进
深度学习难以在大数据领域发挥最大效果的一个原因是,在巨大的数据集基础上进行训练速度很慢。而优化算法能够帮助我们快速训练模型,提高计算效率。接下来我么就去看有哪些方法能够解决我们刚才遇到的问题或者类似的问题
Lansonli
2021/10/09
4190
神经网络,激活函数,反向传播
目录 1. 深度学习有哪些应用 2. 什么是神经网络 2.1 什么是感知器 2.2 神经网络的结构 2.3 为什么神经网络具有非线性切分能力 3. 神经网络的计算过程 3.1 计算过程 3.2 随机初
大数据技术与机器学习
2019/11/20
7850
推荐阅读
相关推荐
这个开源神器,让你更懂你的 GPU!
更多 >
LV.1
北京焱融科技有限公司
加入讨论
的问答专区 >
1高级工程师擅长3个领域
    领券
    社区富文本编辑器全新改版!诚邀体验~
    全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    查看详情【社区公告】 技术创作特训营有奖征文