background
- 現在参加しているコンペにて、以下の2点が疑問に上がったのでその備忘録
- Optimizerとcriterionって何だっけ?
- コンペに合わせた損失関数ってどれだ?
Optimizerとcriterion
とりあえず困った時のGemini
PyTorchにおける**Criterion(損失関数)とOptimizer(最適化アルゴリズム)は、機械学習の「学習」というプロセスにおいて、いわば「採点係」と「指導係」**のような役割を分担しています。
それぞれの具体的な役割と、学習の流れの中での立ち位置を解説します。
1. Criterion (損失関数 / 採点係)
Criterionの役割は、**「モデルの予測がどれくらい間違っているかを数値化すること」**です。
役割: モデルが出力した予測値と、実際の正解(ラベル)を比較し、その「差(誤差)」を計算します。
数学的意義: この誤差を Loss(損失) と呼びます。学習の目的は、このLossを限りなくゼロに近づけることです。
代表的な関数:
nn.MSELoss: 回帰問題用(平均二乗誤差)
nn.CrossEntropyLoss: 分類問題用(交差エントロピー誤差)
2. Optimizer (最適化アルゴリズム / 指導係)
Optimizerの役割は、**「誤差(Loss)を減らすために、モデルのパラメータをどう修正するか決めること」**です。
役割: Criterionが算出した誤差をもとに、モデル内の重み(Weight)やバイアスを更新します。
数学的意義: 勾配(Gradient)と呼ばれる「どの方向にパラメータを動かせば誤差が減るか」という情報を使い、効率的にパラメータを調整します。
代表的なアルゴリズム:
optim.SGD: 基本的な確率的勾配降下法
optim.Adam: 勾配の動きを学習率に合わせて調整する、現在最も主流な手法
- ナールホド。"「採点係」と「指導係」"って表現とてもわかりやすいな。
- optimizerってoptim.Adamばかり使っているけど、他にあるのかな?
- criterionの最適化はイメージしやすいけど、"optimizerの最適化"ってあるのかな?
上記の疑問もどこかで解消したいなと思いつつ、今回は次に進む。
コンペに合わせた損失関数
- 基本的には回帰問題なのだが、評価が少し特殊(コンペ自体はこちら)
Plan1: 評価にMAPEが含まれているので、nn.L1lossやnn.SmoothL1Lossのような評価関数を用いる
nn.MSELossだと値が大きいデータの誤差を小さくしようとしてしまうが、今回の評価関数は / targetを行なって「値の大きさに対する比率」を重視している。
Plan2: 微分可能性に注意しながら、自作の関数を作成して使用する
Next Action
stackingで使用する予定なので、まずはPlan1を試した上でstackingに追加し、効果が見込めそうならPlan2を実行してさらに完成度を上げていく