zoukankan      html  css  js  c++  java
  • 神经网络模型拆分

    神经网络模型拆分

    针对神经网络的模型并行方法有:横向按层划分、纵向跨层划分和模型随机划分

    横向按层划分

    将神经网络每两层间的连边参数、激活函数值和误差传播值存储于一个工作结点。前馈时,每一个节点要先向前一个结点索要一层的数据,经过自身的计算后,再把数据存到自身的末层上,供下一层发出索要数据的申请。后馈时,每个结点要先向后一层发出申请,索要后一层传下来的误差,经过训练后将误差保存在自身结点的首层,供前一个结点索要误差值。

    纵向跨层划分

    把每一层的参数均等地划成若干份,每个结点存一份,相当于每个结点存了一整个神经网络。每个结点除了存自己那一部分神经元的数据以外,还要存指向该神经元的边。当训练或推导时,若需要其他神经元的值(推导时),则需要向其他节点发出索要数据的申请;若需要将误差传给其他神经元(训练时),则需要向其他节点发出写入误差的申请。

    模型随机划分

    每个结点存一个骨架网络,各个工作结点互相通信的时候,会随机传输一些属于非骨架网络的神经元参数,从而起到探索原网络全局拓扑结构的作用。骨架网络的选择是周期性更新的,对全局拓扑结构的探索也是动态的。
    对于模型随机拆分的方式见下方论文
    A Multi-Agent System for Communication-Efficient Distributed Deep Learning
    对于骨架网络的选择:
    整个神经网络保存在一个服务器上,首先服务器会先选出一个骨架网络。对于神经元的选择,每一层选择(a-b)%个神经元,所有神经元按照其所发出的边上值的绝对值的和,贪心选出前(a-b)%个,再对每一个结点随机选择所有神经元的b%个神经元(这些神经元不属于之前所选的那些),这些被选中的神经元及其相应的边共同构成了每一个结点的骨架网络。每一个节点上的骨架网络做训练后,会得到误差值。对一个结点而言,所有误差值,会先选出|边值|+|误差值|最大的前(a-b)%个误差值,再随机选择b%不属于他们的误差值,传回服务器。服务器将所有结点的误差值汇总,做更新。

  • 相关阅读:
    面试题八 二进制中 1 的个数
    面试题七 斐波那契数列
    面试题六 用两个栈实现队列
    第 3 章 第 2 题 求级数问题 递归法实现
    第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现
    第 2 章 第 10 题 测量电灯泡体积问题
    第 2 章 第 9 题 顺序 & 二分搜索效率分析问题
    带缓冲的IO( 标准IO库 )
    Linux 中权限控制实例
    Linux 中权限的再讨论( 下 )
  • 原文地址:https://www.cnblogs.com/JamesDYX/p/10085746.html
Copyright © 2011-2022 走看看