• DNN
    • 1. Json定义网络
      • 1.1 输入层的定义
      • 1.2 FCLayer的定义
      • 1.3 损失层的定义
    • 2. 数据相关参数的定义
    • 3. 定义模型相关参数
    • 4. 定义训练参数
    • 5. 将所有配置放在一起
    • 6. 提效脚本

    DNN

    DNN是每个深度学习平台第一个要支持的算法. Angel作为一个深度学习平台, 并没有内置DNN的实现, 但它提供了一种方法让用户实现自已的深度学习算法. 事实上, DeepFM, PNN, NFM, Deep and Wide等算法匀可用本文所述的方法实现.

    DNN

    Angel提供了用Json配置算法的功能, 同时也提供了用Json定义算法的功能. 下面以DNN的实现为例说明.

    1. Json定义网络

    1.1 输入层的定义

    1. {
    2. "name": "denseinputlayer",
    3. "type": "simpleinputlayer",
    4. "outputdim": 500,
    5. "transfunc": "relu",
    6. "optimizer": "ftrl"
    7. },

    这里用一个DenseInputLayer作为输入层, 输出维度为500, 用Relu作为传递函数. 为了其它层能引用它, 给输入层命名为”denseinputlayer”.

    需要特别指出的是, Angel允许网络的不同部分使用不同的优化器, 这里指定DenseInputLayer使用FTRL优化器(关于优化器, 请参考Angel中的优化器)

    1.2 FCLayer的定义

    1. {
    2. "name": "fclayer",
    3. "type": "FCLayer",
    4. "outputdims": [
    5. 100,
    6. 1
    7. ],
    8. "transfuncs": [
    9. "relu",
    10. "identity"
    11. ],
    12. "inputlayer": "denseinputlayer"
    13. },

    有两个FCLayer:

    • 第一个FCLayer
      • 名称为”fclayer_0”
      • 输出维度为100
      • 传递函数为”Relu”
    • 第二个FCLayer
      • 名称为”fclayer”
      • 输出维度为1
      • 传递函数为”identity”

    从上可以看出, FCLayer使用了简约的书写方式, 请参考Json的定义. 简约方式的inputlayer为第一个FCLayer的输入, 简约方式的name为最后一个FCLayer的name. 中间的Layer命名方式是”fclayer_x”, 表示FCLayer的编号, 从0开始.

    另外, 简约形式的FCLayer的输入是上层”denseinputlayer”的输出.

    注: FCLayer没有指定optimizer, 则它会使用默认的optimizer, 即Momentum.

    1.3 损失层的定义

    1. {
    2. "name": "simplelosslayer",
    3. "type": "simplelosslayer",
    4. "lossfunc": "logloss",
    5. "inputlayer": "fclayer"
    6. }

    损失的类型是SimpleLossLayer, 损失函数为”logloss”, 输入层是”fclayer”

    2. 数据相关参数的定义

    1. "data": {
    2. "format": "libsvm",
    3. "indexrange": 300,
    4. "validateratio": 0.2,
    5. "posnegratio": 0.1
    6. },

    详细参数的意义请参考Json的定义. 这里只列出了如下几个参数:

    • format: 输入数据的格式
    • indexrange: 特征维度
    • validateratio: 验证集的比例
    • posnegratio: 打开采样, 并设置正负样本的比例

    3. 定义模型相关参数

    1. "model": {
    2. "modeltype": "T_DOUBLE_SPARSE",
    3. "modelsize": 300
    4. },

    详细参数的意义请参考Json的定义. 这里只列出几个参数:

    • 模型类型: T_DOUBLE_SPARSE
    • 模型大小: 模型的实际大小(有效特征的个数)

    4. 定义训练参数

    1. "train": {
    2. "epoch": 30,
    3. "numupdateperepoch": 10,
    4. "lr": 0.1,
    5. "decayclass": "WarmRestarts",
    6. "decaybeta": 0.001
    7. },

    详细参数的意义请参考Json的定义. 这里只列出几个参数:

    • epoch: 训练轮数
    • lr: 学习率
    • decayclass: 学习率衰减系类
    • decayalpha: 学习率衰减参数
    • decaybeta: 学习率衰减参数

    5. 将所有配置放在一起

    1. {
    2. "data": {
    3. "format": "libsvm",
    4. "indexrange": 300,
    5. "validateratio": 0.2,
    6. "posnegratio": 0.1
    7. },
    8. "model": {
    9. "modeltype": "T_DOUBLE_SPARSE",
    10. "modelsize": 300
    11. },
    12. "train": {
    13. "epoch": 30,
    14. "lr": 0.1,
    15. "decayclass": "WarmRestarts",
    16. "decaybeta": 0.001
    17. },
    18. "default_optimizer": "momentum",
    19. "layers": [
    20. {
    21. "name": "simpleinputlayer",
    22. "type": "simpleinputlayer",
    23. "outputdim": 500,
    24. "transfunc": "relu"
    25. },
    26. {
    27. "name": "fclayer",
    28. "type": "FCLayer",
    29. "outputdims": [
    30. 100,
    31. 1
    32. ],
    33. "transfuncs": [
    34. "relu",
    35. "identity"
    36. ],
    37. "inputlayer": "denseinputlayer"
    38. },
    39. {
    40. "name": "simplelosslayer",
    41. "type": "simplelosslayer",
    42. "lossfunc": "logloss",
    43. "inputlayer": "fclayer"
    44. }
    45. ]
    46. }

    6. 提效脚本

    1. runner="com.tencent.angel.ml.core.graphsubmit.GraphRunner"
    2. modelClass="com.tencent.angel.ml.core.graphsubmit.GraphModel"
    3. $ANGEL_HOME/bin/angel-submit \
    4. --angel.job.name DeepFM \
    5. --action.type train \
    6. --angel.app.submit.class $runner \
    7. --ml.model.class.name $modelClass \
    8. --angel.train.data.path $input_path \
    9. --angel.workergroup.number $workerNumber \
    10. --angel.worker.memory.gb $workerMemory \
    11. --angel.ps.number $PSNumber \
    12. --angel.ps.memory.gb $PSMemory \
    13. --angel.task.data.storage.level $storageLevel \
    14. --angel.task.memorystorage.max.gb $taskMemory

    注: 与其它算法的不同在于模型类使用的是:“com.tencent.angel.ml.core.graphsubmit.GraphModel”

    所有用Json定义的算法匀用这个模型类.