t_wの輪郭

Feedlyでフォローするボタン
関数損失
損失関数の微分あれコサイン類似度からなる損失関数の微分ベクトルの大きさを1.0に近づける勾配正則化とかかっこいい名前してるけど、これって損失関数を問題に特化させていじくってるだけでは???正則化で人の過学習を緩和infoNCE loss
$$ L = (\sum^{N}_{i=1}(X_i^2) - 1)^2 $$
$$ \frac{\partial L}{\partial X_i} = \frac{\partial (\sum^{N}_{i=1} (X_i^2) - 1)^2}{\partial X_i} $$
$$ = \frac{\partial (\sum^{N}_{i=1}(X_i^2) - 1)^2 }{\partial (\sum^{N}_{i=1}(X_i^2) - 1)} \frac{\partial (\sum^{N}_{i=1}(X_i^2) - 1)}{\partial X_i} $$
$$ = 2(\sum^{N}_{i=1}(X_i^2) - 1) (2 X_i) $$
$$ = 4X_i( \sum^{N}_{i=1}(X_i^2) - 1 ) $$

数値微分と結果が一致することを確認できた


コサイン類似度: \( cos(X, Y) = \frac{\sum_{i=1}^{N}(X_i Y_i)}{\sqrt{\sum_{i=1}^{N}(X_i^2)} \sqrt{\sum_{i=1}^{N}(Y_i^2)}} \)

目標とする類似度: \(t\)

コサイン類似度からなる損失関数: \( L(X, Y, t) = (t- cos(X, Y))^2 \)

より

コサイン類似度からなる損失関数を\(X_i\)について偏微分した式

$$ \frac{\partial L(X, Y, t)}{\partial X_i} = \frac{\partial(t-cos(X,Y))^2}{\partial X_i} = \frac{\partial(t-cos(X,Y))^2}{\partial (t-cos(X,Y))} \frac{\partial(t-cos(X,Y))}{\partial cos(X,Y)} \frac{\partial cos(X,Y)}{\partial X_i} $$

を求める。


$$ \frac{\partial(t-cos(X,Y))^2}{\partial (t-cos(X,Y))} = 2(t-cos(X,Y))$$
$$ \frac{\partial(t-cos(X,Y))}{\partial cos(X,Y)} = -1 $$
$$ \frac{\partial cos(X,Y)}{\partial X_i} = \frac{\partial \frac{\sum_{i=1}^{N}(X_i Y_i)}{\sqrt{\sum_{i=1}^{N}(X_i^2)} \sqrt{\sum_{i=1}^{N}(Y_i^2)}}}{\partial X_i} $$
$$ = \frac{\partial (\sum_{i=1}^{N}(X_i Y_i) ({\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}}})}{\partial X_i} $$
$$ = \frac{\partial (\sum_{i=1}^{N}(X_i Y_i))}{\partial X_i} (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} + \sum_{i=1}^{N}(X_i Y_i) \frac{\partial ((\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}})}{\partial X_i} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} $$
$$ = Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} + \sum_{i=1}^{N}(X_i Y_i) \frac{\partial (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}}}{\partial (\sum_{i=1}^{N}(X_i^2))} \frac{\partial (\sum_{i=1}^{N}(X_i^2))}{\partial X_i} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} $$
$$ = Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} + \sum_{i=1}^{N}(X_i Y_i) (-\frac{1}{2} (\sum_{i=1}^{N}(X_i^2))^{-\frac{3}{2}} 2X_i) (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} $$
$$ = Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} - X_i \sum_{i=1}^{N}(X_i Y_i) (\sum_{i=1}^{N}(X_i^2))^{-\frac{3}{2}} (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} $$
$$ = (\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} (Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} - X_i \sum_{i=1}^{N}(X_i Y_i) (\sum_{i=1}^{N}(X_i^2))^{-\frac{3}{2}}) $$

より

$$ \frac{\partial L(X, Y, t)}{\partial X_i} = 2(t-cos(X,Y)) (-1) ((\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} (Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} - X_i \sum_{i=1}^{N}(X_i Y_i) (\sum_{i=1}^{N}(X_i^2))^{-\frac{3}{2}}) $$
$$ = -2(t-cos(X,Y)) ((\sum_{i=1}^{N}(Y_i^2))^{-\frac{1}{2}} (Y_i (\sum_{i=1}^{N}(X_i^2))^{-\frac{1}{2}} - X_i \sum_{i=1}^{N}(X_i Y_i) (\sum_{i=1}^{N}(X_i^2))^{-\frac{3}{2}}) $$

あれ

2023/9/6 2:26:00

学習に用いる損失関数はL2ノルムつかっちゃうのが一般的だし、計算が早いし、単純だしなんだけど、なんか痒い。
最終的に出力の評価はコサイン類似度つかうから、コサイン類似度から損失関数作ってぶちこもうぜとなってる。

いまいまは損失関数にL2ノルムつかってみてるけど、ちょっと学習率を強めにすると、パラメーターが発散しちゃってうまく学習できてない。
発散しないようにいい感じ™️の正則化項をもうけてやるのが現実解なんだろうなぁ……