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

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

どこ：

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

この損失関数は、同様のペアの表現が近くに近くにあることを促進します（つまり、Dは小さい）。一方、近くの異なるペアの表現を罰します（つまり、Dは大きいがマージン未満）。
この損失を最適化するために、確率的勾配降下などの勾配ベースの最適化方法を使用して、ニューラルネットワークのパラメーターを更新できます。アイデアは、時間の経過とともに、ネットワークによって生成される表現は、類似のサンプルと異なるサンプルを分離するのがますます良くなり、異なるクラスを区別するモデルの能力が向上するということです。
In contrastive learning, "pulling" and "pushing" refer to adjusting the representations (the sequence of numbers I mentioned earlier) produced by the neural network, so that similar samples are close to each other and dissimilar samples are far apart in the representation space.
This is achieved using a loss function, which compares the representations of each pair of samples and calculates a score that measures how close or far apart they are. The goal is to minimize this score for similar pairs and maximize it for dissimilar pairs.
The mathematical details can vary, but a common approach is to use the contrastive loss, which is calculated as:

Loss = (1 - y) * d^2 + y * max(margin - d, 0)^2

where:

    - d is the Euclidean distance between the representations of the two samples
    - y is a binary label indicating whether the two samples are similar (y = 1) or dissimilar (y = 0)
    - margin is a hyperparameter that sets the minimum acceptable distance between representations of dissimilar pairs

This loss function encourages the representations of similar pairs to be close together (i.e., d is small), while penalizing representations of dissimilar pairs that are too close (i.e., d is large but less than margin).
To optimize this loss, we can use any gradient-based optimization method, such as stochastic gradient descent, to update the parameters of the neural network. The idea is that over time, the representations produced by the network will become increasingly good at separating similar and dissimilar samples, which will improve the model's ability to discriminate between different classes.