一、TripletLoss
如上图所示,triplet是一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机选取一个和Anchor (记为x_a)属于同一类的样本和不同类的样本,这两个样本对应的称为Positive (记为x_p)和Negative (记为x_n),由此构成一个(Anchor,Positive,Negative)三元组。
有了上面的triplet的概念, triplet loss就好理解了。针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为:f(xia),f(xip),f(xin)f(x_{i}^{a}),f(x_{i}^{p}), f(x_{i}^{n})f(xia),f(xip),f(xin)。triplet loss的目的就是通过学习,让x_a和x_p特征表达之间的距离尽可能小,而x_a和x_n的特征表达之间的距离尽可能大,并且满足以下公式:∣∣f(xia)−f(xip)∣∣22+α<∣∣f(xia)−f(xin)∣∣22||f(x_{i}^{a})-f(x_{i}^{p})||_{2}^{2}+\alpha<||f(x_{i}^{a})-f(x_{i}^{n})||_{2}^{2}∣∣f(xia)−f(xip)∣∣22+α<∣∣f(xia)−f(xin)∣∣22
对应的目标函数也就很清楚了:
∑iN[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+\sum_{i}^{N}[||f(x_{i}^{a})-f(x_{i}^{p})||_{2}^{2}-||f(x_{i}^{a})-f(x_{i}^{n})||_{2}^{2}+\alpha]_{+}i∑