• Angel中的损失函数
    • 1. Angel中的损失函数
    • 2. Angel中Loss的实现
    • 3. Loss Function的Json
      • 3.1 无参数的损失函数
      • 3.2 参数的损失函数

    Angel中的损失函数

    1. Angel中的损失函数

    Angel中有丰富的损失函数, 可分为两类

    • 分类损失函数
    • 回归损失函数

    分类损失函数如下表所示:

    名称 表达式 描述
    CrossEntoryLoss Angel中的损失函数 - 图1}) 用于分类, 逻辑回归是一种特例, 也可以用于多分类Softmax, 它要求输入是概率Angel中的损失函数 - 图2), 而不是Angel中的损失函数 - 图3)
    LogLoss Angel中的损失函数 - 图4})}) 用于分类, 是逻辑回归的损失函数, 可以看成是CrossEntoryLoss函数的一种特列, 用Sigmoid的方式具体化了Angel中的损失函数 - 图5)
    SoftmaxLoss Angel中的损失函数 - 图6\log\frac{x^{x_i}}{\sum_je^{x_j}}) 它是CrossEntoryLoss的特殊形式, 用Softmax的方式具体化了Angel中的损失函数 - 图7)
    HingeLoss Angel中的损失函数 - 图8)}) SVM的损失函数

    用图形化表示如下:

    分类损失函数

    回归损失函数如下表所示

    名称 表达式 描述
    L2Loss ![](http://latex.codecogs.com/png.latex?\ y-f(x)\ _2^2) 用于回归, 是最小二乘回归的损失函数
    HuberLoss Angel中的损失函数 - 图10-\frac{\delta}{2}),&abs(x)>\delta\\\frac{1}{2}x^2,&abs(x)\le\delta\end{array}\right.) 用于回归, 它在0附近用二次函数, 在其它地方用一次函数, 解决了绝对值函数在0附近不可导的问题, 用Huber损失得到的模型较为橹棒

    用图形化表示如下:

    回归损失函数

    2. Angel中Loss的实现

    Angel中的损失函数都实现了LossFunc Trait, 如下:

    1. trait LossFunc extends Serializable {
    2. def calLoss(modelOut: Matrix, graph: AngelGraph): Double
    3. def loss(pred: Double, label: Double): Double
    4. def calGrad(modelOut: Matrix, graph: AngelGraph): Matrix
    5. def predict(modelOut: Matrix): Matrix
    6. }

    可见, angel中的loss的不仅有计算loss的功能, 还有计算梯度, 预测两项功能. 正是由于在Loss中实现了梯度计算, 才使反向传导有了起点. 在LossLayer中计算梯度就是直接调用lossFunc的calGrad, 如下:

    1. override def calGradOutput(): Matrix = {
    2. val start = System.currentTimeMillis()
    3. status match {
    4. gradOutput = lossFunc.calGrad(output, graph)
    5. status = STATUS.Backward
    6. case _ =>
    7. }
    8. val end = System.currentTimeMillis()
    9. gradOutput
    10. }

    另外一项功能是预测, 在LossLayer中计算预测值就是直接调用lossFunc的predict, 如下:

    1. override def predict(): Matrix = {
    2. status match {
    3. case STATUS.Null =>
    4. calOutput()
    5. case _ =>
    6. }
    7. lossFunc.predict(output)
    8. }

    3. Loss Function的Json

    3.1 无参数的损失函数

    除了huberloss外, 其它的lossfunc匀为无参数的损失函数, 有两种表达方式, 如下

    1. "lossfunc": "logloss"
    2. "lossfunc": {
    3. "type": "logloss"
    4. }

    3.2 参数的损失函数

    只有huberloss, 具体如下:

    1. "lossfunc": {
    2. "type": "huberloss",
    3. "delta": 0.1
    4. }