摘要:
众所周知,Python中的列表和numpy数组都支持用begin: end语法来表示[begin, end)区间的的切片索引。numpy数组还支持用列表和numpy数组来表示切片索引,而列表则不支持。Pytorch的torch.utils.data.Dataset数据集支持单元素索引,但不支持切片。 阅读全文
摘要:
SSGD算法由于通信比较频繁,在通信与计算比较大时(不同节点位于不同的地理位置),难以取得理想的加速效果。模型平均方法(MA)中,每个工作节点会根据本地数据对本地模型进行多轮的迭代更新,直到本地模型收敛说本地迭代轮数超过一个预设的阈值,再进行一次全局的模型平均,并以此均值做为最新的全局模型继续训练。但是MA算法通常会带来精度损失,实践中需要仔细调整参数设置,或者通过增加数据块粒度的动量来获取更好的效果。EASGD方法则不强求全局模型的一致性,而是为每个工作节点保持了独立的探索能力。 阅读全文
摘要:
其中,SSGD算法每次依据来自 𝐾个不同的工作节点上的样本的梯度来更新模型,设每个工作节点上的小批量大小为 𝑏,则该算法等价于批量大小为 𝑏𝐾 的小批量随机梯度下降法。尽管梯度的计算可以被分摊到个计算节点上,然而梯度下降的迭代是串行的。每轮迭代中,Spark会执行同步屏障(synchronization barrier)来确保在各worker开始下一轮迭代前w已被更新完毕。如果存在掉队者(stragglers),其它worker就会空闲(idle)等待,直到下一轮迭代。 阅读全文
摘要:
对于更复杂的模型(比如神经网络)和更复杂的优化方法(比如二阶方法),确定性优化方法的计算量会更大。那么如何解决这个问题呢?统计方法能给我们很大的帮助。虽然大数据的数据量和数据维度都很大,但我们可以通过对样本和维度进行随机采样来得到对更新量的有效估计或者替代。相应地,从确定性优化算法出发,我们可以开发出各种随机优化算法,如随机梯度下降法、随机坐标下降法、随机方差缩减梯度法、随机(拟)牛顿法等。注意,对于随机优化算法而言,收敛性分析与确定性算法不同,需要针对算法中的随机采样取期望。 阅读全文
摘要:
我们在上一篇博客中主要介绍了单机数值优化中一些经典的一阶确定性算法,本篇文章我们将会介绍二阶确定性算法和对偶方法。牛顿法的基本思想是将目标函数在当前迭代点处进行二阶泰勒展开,然后最小化这个近似目标函数。如果该海森矩阵是正定的,则问题的最优值在特定处取到,牛顿法将其做为下一时刻的状态。 阅读全文
摘要:
我们在上一篇博客中介绍了数值优化算法的历史发展、分类及其收敛性/复杂度分析基础。本篇博客我们重点关注一阶确定性优化算法及其收敛性分析。梯度下降法的基本思想是:最小化目标函数在当前迭代点处的一阶泰勒展开,从而近似地优化目标函数本身。具体地,对函数 𝑓:ℝ𝑛→ℝ ,将其在第 t 轮迭代点 𝑤𝑡处求解最小化问题。梯度下降法有两个局限,一是只适用于无约束优化问题,二是只适用于梯度存在的目标函数。投影次梯度法可以解决梯度下降法的这两个局限性。 阅读全文
摘要:
不同的优化算法采用不同的方法对目标函数进行优化,以寻找最优预测模型。其中最重要的两个特性就是收敛速率和复杂度。优化算法最初都是确定性的,不过近年来随着机器学习中数据规模的不断增大,优化问题复杂度不断增高,原来越多的优化算法发展出了随机版本和并行化版本。依据算法在优化过程中所利用的是一阶导数信息还是二阶导数信息,还可把优化算法分为一阶方法和二阶方法。 阅读全文
摘要:
目前对图算法进行并行化的主要思想是将大图切分为多个子图,然后将这些子图分布到不同的机器上进行并行计算,在必要时进行跨机器通信同步计算得出结果。学术界和工业界提出了多种将大图切分为子图的划分方法,主要包括两种,边划分(Edge Cut)和点划分(Vertex Cut)。总而言之,边划分将节点分布到不同机器中(可能划分不平衡),而点划分将边分布到不同机器中(划分较为平衡)。接下来我们使用的算法为边划分。我们下面的算法是简化版,没有处理悬挂节点的问题。 阅读全文
摘要:
逻辑回归的目标函数常采用梯度下降法求解,该算法的并行化可以采用Map-Reduce架构。先将第𝑡t轮迭代的权重广播到各worker,各worker计算一个局部梯度(map过程),然后再将每个节点的梯度聚合(reduce过程),最终对参数进行更新。在Spark中每个task对应一个分区,决定了计算的并行度。在Spark的实现过程中,map阶段各task运行map()函数对每个样本(𝑥𝑖,𝑦𝑖)计算梯度𝑔𝑖, 然后对每个样本对应的梯度运行进行本地聚合,以减少后面的数据传输量。 阅读全文
摘要:
我们在上一篇博客中学习了如何用Hadoop-MapReduce实现单词计数,现在我们来看如何用Spark来实现同样的功能。Spark框架也是MapReduce-like模型,采用“分治-聚合”策略来对数据分布进行分布并行处理。不过该框架相比Hadoop-MapReduce,具有以下两个特点:对大数据处理框架的输入/输出,中间数据进行建模,将这些数据抽象为统一的数据结构命名为弹性分布式数据集。 阅读全文