2017年12月4日月曜日

Loss functionのあれこれ

semantic segmentationのloss functionで完全に迷子になったので復習.

回帰用

  1. torch.nn.L1Loss()

    これで学習すると重みがsparseになりやすいことが知られている.
  2. torch.nn.MSELoss

分類用

個のクラスに分類する.

  1. torch.nn.CrossEntropyLoss
    NLLとsoftmaxを合成したloss.
    minibatch として,その元次元のベクトルで,成分がクラスに分類されるスコアであるとする.スコアはによって確率に変換される.
    が分類されるべきクラス,に分類される確率とすると,

    pytorchでは,入力は
    input: のtensor. 行は.
    target: のtensor,

  2. torch.nn.NLLLoss
    Cross Entropy Lossとほとんど同じ. softmaxを噛ませるか噛ませないか.

  3. torch.nn.PoissonNLLLoss

  4. torch.nn.NLLLoss2d
    NLLLossの画像版で,inputのピクセルごとにNLLLossを計算する.
    input: のtensor. とりあえずmini-batchの次元は無視するとして,成分に対応する要素をとすると,
    がinputのピクセルがクラスに属するスコアであって,をそれが属すべき真のクラスとすると

    targetはというtensorで,成分は,

  5. torch.nn.KLDivLoss
    KL-divergenceによるloss. inputは確率分布だから,総和は1になる.

  6. torch.nn.BCELoss, binary cross entropy criterion

    不安定なので,BCEWithLogitsLossが提案されている.

  7. BCEWithLogitsLoss

    auto-encoderに使われるらしい. が必ず成立するようにする.

Semantic segmentationでは複雑なloss functionを自分で書いて実装することになる・・・