Angel深度学习框架中的层结构详解
angel 项目地址: https://gitcode.com/gh_mirrors/ang/angel
引言
在深度学习框架中,层(Layer)是最基础的构建模块。作为腾讯开源的分布式机器学习框架,Angel提供了丰富的层类型来支持各种深度学习模型的构建。本文将全面解析Angel框架中的层结构体系,帮助开发者深入理解其设计原理和使用方法。
层的分类体系
Angel框架中的层按照拓扑结构可以分为三大类:
-
边缘节点(Verge):只有输入或输出的层
- 输入层:如SimpleInputLayer、Embedding
- 损失层:如SimpleLossLayer、SoftmaxLossLayer
-
线性层(Linear):有且仅有一个输入与一个输出的层
- 全连接层(FCLayer)
- 特征交叉层:BiInnerCross、BiInnerSumCross等
-
连接层(Join):有两个或多个输入,一个输出的层
- ConcatLayer、SumPooling、MulPooling等
输入层详解
SimpleInputLayer
SimpleInputLayer是Angel中最基础的输入层,具有以下特点:
- 输入支持:同时支持稠密和稀疏输入
- 参数存储:
- 稠密输入:参数连续存储在数组中,使用BLAS库计算
- 稀疏输入:参数用RowBasedMatrix存储,使用Angel内部数学库计算
- 配置参数:
- outputDim:输出维度
- transFunc:传输函数
- optimizer:优化器
数学表达式为:f(x) = transfunc(xw + bias)
典型JSON配置示例:
{
"name": "wide",
"type": "Simpleinputlayer",
"outputdim": 10,
"transfunc": "identity",
"optimizer": "adam"
}
Embedding层
Embedding层是深度学习中的常见组件,特点如下:
-
参数说明:
- outputDim:lookup的输出维度
- numFactors:Embedding向量的维数
-
工作原理:
- 查表:根据索引查找对应列
- 计算组装:对非one-hot数据进行加权计算
-
数据处理:
- 对于one-hot编码:(1,5,40)→(v₁,v₅,v₄₀)
- 对于浮点数值:(1:0.3,5:0.7)→(0.3v₁,0.7v₅)
典型JSON配置示例:
{
"name": "embedding",
"type": "Embedding",
"numfactors": 8,
"outputdim": 104,
"optimizer": {
"type": "momentum",
"momentum": 0.9,
"reg2": 0.01
}
}
线性层详解
全连接层(FCLayer)
FCLayer是深度神经网络的核心组件:
- 数学表达:f(x) = transfunc(xw + bias)
- 与输入层区别:输入是另一个Layer而非原始数据
- 参数存储:使用稠密方式,BLAS计算
- 多层简化配置:支持多个FCLayer的堆叠简化配置
多层简化配置示例:
{
"name": "fclayer",
"type": "FCLayer",
"outputdims": [100,100,1],
"transfuncs": ["relu","relu","identity"],
"inputlayer": "embedding"
}
特征交叉层
Angel提供了多种特征交叉层:
-
BiInnerSumCross:
- 计算方式:两两内积后求和
- 输出维度:1
- 无训练参数
-
BiInnerCross:
- 计算方式:两两内积
- 输出维度:C(k,2)
- 无训练参数
-
BiInteractionCross:
- 计算方式:两两对应元素积后求和
- 输出维度:与输入向量相同
连接层详解
ConcatLayer
功能:将多个输入层拼接成Dense矩阵
示例配置:
{
"name": "concatlayer",
"type": "ConcatLayer",
"outputdim": 182,
"inputlayers": ["embedding","biInnerCross"]
}
池化层
- SumPooling:对应元素相加
- MulPooling:对应元素相乘
- DotPooling:对应元素相乘后按行相加
损失层
位于网络最上层,用于计算损失:
{
"name": "simplelosslayer",
"type": "Simplelosslayer",
"lossfunc": "logloss",
"inputlayer": "sumPooling"
}
最佳实践建议
-
输入层选择:
- 稠密数据优先使用SimpleInputLayer
- 稀疏高维数据使用Embedding
-
特征交叉:
- FM类模型使用BiInnerSumCross
- PNN类模型使用BiInnerCross
- NFM类模型使用BiInteractionCross
-
参数配置:
- 多层FCLayer推荐使用简化配置
- Embedding层注意numFactors设置
-
性能优化:
- 稠密计算优先使用BLAS加速
- 稀疏数据注意维度设置
总结
Angel框架提供了丰富的层类型来支持各种深度学习模型的构建。通过合理组合不同类型的层,开发者可以构建从简单的全连接网络到复杂的特征交叉模型。理解每类层的特点和适用场景,有助于在实际应用中做出更好的设计选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考