引っ張って動作する方法がわかりませんでした。私たちは何を引っ張ったり押したりしていますか？そして、コードや数学の観点からどのように機能しますか？
対照的な学習では、「プル」と「プッシュ」は、ニューラルネットワークによって生成された表現（前述の数値のシーケンス）を調整することを指し、同様のサンプルが互いに近く、表現空間では異なるサンプルがはるかに離れています。。
これは、サンプルの各ペアの表現を比較し、それらがどれだけ近いか離れているかを測定するスコアを計算する損失関数を使用して達成されます。目標は、同様のペアのこのスコアを最小化し、異なるペアに対して最大化することです。
数学的な詳細は異なる場合がありますが、一般的なアプローチは対照的な損失を使用することです。これは次のように計算されます。

loss =（1 -y） * d^2 + y * max（margin -d、0）^2

どこ：

    -Dは、2つのサンプルの表現間のユークリッド距離です
    -yは、2つのサンプルが類似しているか（y = 1）か異なる（y = 0）かを示すバイナリラベルです
     - マージンは、異なるペアの表現間の最小許容距離を設定するハイパーパラメーターです

この損失関数は、同様のペアの表現が近くに近くにあることを促進します（つまり、Dは小さい）。一方、近くの異なるペアの表現を罰します（つまり、Dは大きいがマージン未満）。
この損失を最適化するために、確率的勾配降下などの勾配ベースの最適化方法を使用して、ニューラルネットワークのパラメーターを更新できます。アイデアは、時間の経過とともに、ネットワークによって生成される表現は、類似のサンプルと異なるサンプルを分離するのがますます良くなり、異なるクラスを区別するモデルの能力が向上するということです。