教師あり学習のための標準最適化ベースのパラダイム#
トレーニングデータ ( i = 1 , . . . , n ) \left( i = 1, ..., n \right) ( i = 1 , ... , n )
X i X_i X i : 入力、共変量;
Y i Y_i Y i : 出力、ラベル
モデル f θ ( ⋅ ) , θ ⇐ パラメータ f_\theta{ \left( \cdot \right) },\theta\Leftarrow パラメータ f θ ( ⋅ ) , θ ⇐ パラメータ
経験的リスク最小化によるトレーニング#
θ ^ = arg min θ 1 n ∑ i = 1 n l t r a i n ( y i , f θ ( x i ) ) \hat{ \theta } = \mathop{\arg\min}\limits_{ \theta } \frac{1}{n} \sum\limits_{i=1}^n l_{train}\left( y_i, f_\theta\left( x_i \right) \right) θ ^ = θ arg min n 1 i = 1 ∑ n l t r ain ( y i , f θ ( x i ) ) :
データから学習できるθ ^ \hat{\theta} θ ^ を選ぶ、それは何かを最小化する
l ( y , y ^ ) は実数を返す l\left( y, \hat{y} \right) \text{ は実数を返す } l ( y , y ^ ) は実数を返す : l l l はy y y とy ^ \hat{y} y ^ の予測を比較する損失であり、常に実数(ベクトルまたは数値の可能性があるトレーニングデータ間の差)を返し、それを最小化できる
真の目標は見えないX X X に対する実世界のパフォーマンス#
数学的代理:
∃ P ( X , Y ) \exists{ P\left(X, Y\right) } ∃ P ( X , Y ) : 確率分布を仮定
損失l ( Y , f θ ( X ) ) l\left( Y, f_\theta\left( X \right) \right) l ( Y , f θ ( X ) ) の低いE X , Y E_{X, Y} E X , Y (X X X とY Y Y に対する期待値)が欲しい
複雑さ#
P ( X , Y ) P\left( X, Y \right) P ( X , Y ) にアクセスできない
私たちは見たことのないものに対して平均的にうまくやりたい、平均がある程度意味を持ち、何らかの基礎的な分布が存在すると仮定するが、それを知らない
解決策:
( X t e s t , i , Y t e s t , i ) i = 1 n t e s t \left( X_{test, i}, Y_{test, i} \right)_{ i = 1 }^{ n_{test} } ( X t es t , i , Y t es t , i ) i = 1 n t es t : 保留データのテストセットを収集
テストエラー = 1 n t e s t ∑ i = 1 n t e s t l ( y t e s t , i , f θ ( x t e s t , i ) ) \text{テストエラー} = \frac{1}{n_{test}} \sum\limits_{i=1}^{n_{test}} l\left( y_{test, i}, f_{\theta}\left( x_{test, i} \right) \right) テストエラー = n t es t 1 i = 1 ∑ n t es t l ( y t es t , i , f θ ( x t es t , i ) )
私たちはこのテストセットを収集し、実世界で見られることを期待するものの忠実な表現であり、実世界が確率分布が行うようなことに従うことを望んでいるので、平均化とサンプリングが実際に起こることに対する予測力を与えることを期待している。
何をすべきかわからない、これをどうやってやるかは知っているので、これをやるだけだ
私たちが気にする損失l t r u e ( ⋅ , ⋅ ) l_{true}\left( \cdot, \cdot \right) l t r u e ( ⋅ , ⋅ ) は最適化器と互換性がない
あなたはこれをやりたい、これは何かを回避してこの引数が何であるかを計算する必要がある。これは何かのアルゴリズムであり、彼らはこの作業をしなければならない、そのアルゴリズムは特定のことが起こる場合にのみ機能するかもしれない。あなたが気にする損失がそれが必要なことをさせないかもしれない。
あなたは実際には微分不可能な損失を気にしている、それはあなたの問題にとって実際に関連するからだ。しかし、あなたの最小化器は導関数を使用するので、機能しないと言うだろう。
解決策:
l t r a i n ( ⋅ , ⋅ ) l_{train} \left( \cdot, \cdot \right) l t r ain ( ⋅ , ⋅ ) : 私たちが扱える代理損失を使用する。
古典的な例:
y ∈ { 猫 , 犬 } y \in \lbrace \text{猫}, \text{犬} \rbrace y ∈ { 猫 , 犬 } , l t r u e l_{true} l t r u e : ハミング損失
y → R y \rightarrow \mathbf{R} y → R でトレーニングデータがマッピングされる:
Copy { 猫 → − 1 犬 → + 1 \begin{equation}
\left\{
\begin{array}{lr}
猫 \rightarrow -1 & \\
犬 \rightarrow +1 &
\end{array}
\right.
\end{equation} { 猫 → − 1 犬 → + 1
l t r a i n l_{train} l t r ain : 二乗誤差
テストエラーを評価する際、l t r u e l_{true} l t r u e を使用する。
テストエラーを評価する目的は、実世界のデータでどれだけうまくやれるかを把握することだ。これはすでに最適化された特定のモデルに対する評価であり、テストエラーに対して最適化は行われない。
知っておくべき例:
バイナリ分類:ロジスティック損失、ヒンジ損失
マルチクラス分類:クロスエントロピー損失
余談:
1 n ∑ i = 1 n l t r u e ( y i , f θ ^ ( x i ) ) \frac{1}{n} \sum\limits_{i=1}^{n} l_{true} \left( y_{i}, f_{\hat{\theta}} \left( x_{i} \right) \right) n 1 i = 1 ∑ n l t r u e ( y i , f θ ^ ( x i ) ) トレーニングセットでの評価は、1 n ∑ i = 1 n l t r a i n ( y i , f θ ( x i ) ) \frac{1}{n} \sum\limits_{i=1}^n l_{train} \left( y_i, f_{\theta} \left( x_{i} \right) \right) n 1 i = 1 ∑ n l t r ain ( y i , f θ ( x i ) ) とは異なる
この対象は、実際に作業するすべての人にとってデバッグに関するものである。
私たちはこれを使用して、実際にトレーニング損失を最適化することが、私たちが実際に気にしていることに対して合理的なことをしているかどうかを理解し、実際にどれだけうまくやっているかを確認したい。もし成長があったなら、もっと言葉を追加するつもりだ。もしあなたが最適化するように言ったことと、あなたが向かっているものとの間にひどい不一致があったなら、何かが間違っているかもしれない。
1 n t e s t ∑ i = 1 n t e s t l ( y t e s t , i , f θ ( x t e s t , i ) ) \frac{1}{n_{test}} \sum\limits_{i=1}^{n_{test}} l\left( y_{test,i}, f_{\theta}\left( x_{test,i} \right) \right) n t es t 1 i = 1 ∑ n t es t l ( y t es t , i , f θ ( x t es t , i ) )
あなたはこれが実際にどのように機能するかの忠実な測定であることを望んでいるが、この人を見て「おっと、これは変更すべきだった」と言った場合、再度見直すことになるかもしれない。その場合、あなたは最適化ループを実行しているかもしれない、あなたが最適化器として実際にこの保留データを見ていて、このデータはもはや保留されていない。保留されていないため、実際に物事がどれだけうまく機能するかを信頼できないかもしれない。(過剰適合の現象に関する視点のようなもの)
1 n ∑ i = 1 n l t r a i n ( y i , f θ ( x i ) ) \frac{1}{n} \sum\limits_{i=1}^{n} l_{train} \left( y_{i}, f_{\theta} \left( x_{i} \right) \right) n 1 i = 1 ∑ n l t r ain ( y i , f θ ( x i ) ) に対してはそのような配慮はない、なぜならあなたはすでにこのデータを使用してどれだけうまくやっているかを評価しているからだ。あなたの最適化アルゴリズムは常にそれを見ているという意味で。したがって、他の見方を選ぶかどうかは、コストがかからない。
あなたは代理損失で最適化器を実行し、θ ^ \hat{\theta} θ ^ に対して「クレイジー」な値を得たり、非常に悪いテストパフォーマンスを得たりする。(過剰適合の現象に関する別の視点)
解決策:
トレーニング中に明示的な回帰を追加: θ ^ = arg min θ ( 1 n ∑ i = 1 n l t r a i n ( y i , f θ ( x i ) ) ) + R λ ( θ ) \hat{\theta} = \mathop{\arg\min}\limits_{\theta} \left( \frac{1}{n} \sum\limits_{i=1}^{n} l_{train} \left( y_{i}, f_{\theta} \left( x_{i} \right) \right) \right) + R_{\lambda} \left( \theta \right) θ ^ = θ arg min ( n 1 i = 1 ∑ n l t r ain ( y i , f θ ( x i ) ) ) + R λ ( θ ) , 例えばリッジ回帰: R ( θ ) = λ ∥ θ ∥ 2 R\left( \theta \right) = \lambda\| \theta \|^2 R ( θ ) = λ ∥ θ ∥ 2
注意:もう一つのパラメータλ \lambda λ を追加した。どうやって選ぶか?
ネイティブハイパーパラメータ: θ ^ = arg min θ , λ ≥ 0 ( ) \hat{\theta} = \mathop{\arg\min}\limits_{\theta, \lambda^{\geq0}} \left( \frac{}{} \right) θ ^ = θ , λ ≥ 0 arg min ( )
パラメータを「通常のパラメータθ \theta θ とハイパーパラメータλ \lambda λ 」に分ける
「ハイパーパラメータは、最適化器がそれを使って作業させると、クレイジーになるパラメータであるため、分離する必要がある」
追加データ(バリデーションセット)を保持し、それを使用してハイパーパラメータを最適化する
>
> > バリデーションセットを使用してハイパーパラメータ最適化を行うとき、パラメータを見つけるために行っている引数に対して使用したものとは異なる種類の最適化器を使用しているかもしれない。したがって、ディープラーニングの文脈では、この設定を行うために常に何らかの勾配降下の変種を使用することになる。しかし、ハイパーパラメータ設定では、ブルートフォースグリッドサーチや、多腕バンディットに関連するアイデアを用いた検索など、他の技術を使用するかもしれない。ゼロ次最適化アルゴリズムに関連するアイデアを使用することもできるし、ハイパーパラメータ検索のために勾配ベースのアプローチを使用することもできる。
すべての解決策:
さらなる複雑さ#
最適化器には独自のパラメータがあるかもしれない。例えば、学習率
一般的に、最適化器には独自の調整可能なノブがあるかもしれない。そして、実際には、ディープラーニングを行おうとする誰かとして、どの最適化器を使用するかの離散的な選択がある。
あなたは二つの微妙に異なる視点を見る。
最も基本的な / 根本的な最適化アプローチ:勾配降下法
勾配降下法は、改善を行い、次に局所的に行う反復最適化アプローチである。
あなたが気にするのは、あなたの損失が現在いるパラメータの近傍でどのように振る舞うかだけである。
したがって、損失の局所的な近傍を見てみる。
θ t + 1 = θ t + η ( − ∇ θ L t r a i n , θ ) , L t r a i n , θ = 1 n ∑ i = 1 n l t r a i n ( y i , f θ ( x i ) ) + R ( ⋅ ) \theta_{t+1} = \theta_{t} + \eta \left( - \nabla_{\theta} L_{train, \theta} \right), L_{train, \theta} = \frac{1}{n} \sum\limits_{i=1}^{n} l_{train} \left( y_{i}, f_{\theta} \left( x_{i} \right) \right) + R \left( \cdot \right) θ t + 1 = θ t + η ( − ∇ θ L t r ain , θ ) , L t r ain , θ = n 1 i = 1 ∑ n l t r ain ( y i , f θ ( x i ) ) + R ( ⋅ )
これは離散時間動的システムである
η ← "ステップサイズ"/"学習率" \eta \leftarrow \text{ "ステップサイズ"/"学習率" } η ← " ステップサイズ "/" 学習率 " , このη \eta η はこのシステムの安定性を制御する
η \eta η が大きすぎると、動的が不安定になる(振動する)
η \eta η が小さすぎると、収束するのに時間がかかりすぎる
L t r a i n ( θ + + Δ θ ) ≈ L t r a i n ( θ + ) + ∂ ∂ θ L t r a i n ⏟ "行" ⌋ θ + Δ θ L_{train} \left( \theta_{+} + \Delta\theta \right) \approx L_{train} \left( \theta_{+} \right) + \underbrace{\frac{\partial}{\partial\theta} L_{train}}_{\text{"行"}} \rfloor_{\theta_{+}} \Delta\theta L t r ain ( θ + + Δ θ ) ≈ L t r ain ( θ + ) + " 行 " ∂ θ ∂ L t r ain ⌋ θ + Δ θ
この「行」の転置は勾配と呼ばれる