Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

full batch

论文https://dl.acm.org/doi/10.14778/3538598.3538614的背景知识部分介绍的

简而言之:每轮epoch:在所有训练数据上计算得到loss关于权重的梯度,更新权重

image-20240226155244564

image-20240226155333829

image-20240226155357009

第一处便签:(4)来自:把(3)代入(2),然后对(2)求导的感觉

第二处便签:如果是多层的GNN,前向计算要前向走这么多层,反向传播也是,权重更新的地方更多一些

mini batch

论文https://dl.acm.org/doi/10.1145/3292500.3330925的背景知识部分和算法motivation部分介绍的

原理/过程

简而言之:每轮epoch:对每个mini-batch(一个mini-batch是一部分训练数据),在mini-batch上计算得到loss关于权重的梯度,更新权重

先介绍full batch SGD

image-20240227174044225

the final embedding is: (A帽’替换成A’)

image-20240227190033285

image-20240227174106710

image-20240227174121971

存在的问题

简而言之:一个mini-batch中顶点要更新embedding,其需要其多跳邻居的embedding,这些邻居不一定都在这个mini-batch中,但是我们又需要的话那它们也要一起随着层次深入更新embedding(意思是,比如当前mini-batch在计算第k层,需要邻居的k-1层的embedding,因此邻居的embedding也得跟着更新,确保其现在是k-1层的embedding),

而对于full batch来讲,batch是全体顶点,batch中顶点更新embedding需要的多跳邻居都在这个batch中,本来就是在随着岑歌词深入更新embedding的,相较于mini-batch来讲不会有重复计算

image-20240227181438474

image-20240227181452350

image-20240227181525041

第一处便签:因为从大的稀疏图中随机采样选取出一个mini-batch,这个mini-batch中的顶点之间的邻居重合可能非常少

第二处便签:共L层,每层都是全图每个顶点更新一下embedding,所以每层是O(N)次embedding计算

image-20240227181611120

第一处便签:这样相较于full-neighborhood,embedding利用率就更低了,因为不同顶点需要的neighborhood间重合的可能性更低了
(不过这个方法也不是没有意义,neighborhood的大小毕竟是小了的,更新一个node embedding的开销比full neighborhood要小)

第二处便签:每层把全图所有顶点的embedding存下来(每个mini-batch可以来访问这个存储),这样在下一层对每个mini-batch更新embedding时,对于需要的、但是不在当前mini-batch中的邻居的embedding就可以从存储中读取,而不用这个mini-batch中从第0层开始一直计算了,
不过这要求每层都同步,所有mini-batch完成当前层后才能进入下一层

image-20240227181911107

【TODO】这个表格我没有每一项都去推导为啥

评论