Siamese network 孪生神经网络--一个简单神奇的结构(入门)
https://zhuanlan.zhihu.com/p/35040994
对上面的博客的添加笔记版
https://www.cnblogs.com/Lee-yl/p/10113386.html
对上面网友的笔记的部分解读:
5、Siamese network 的损失函数:
Softmax当然是一种好的选择,但不一定是最优选择,即使是在分类问题中。【分类问题用交叉熵】
传统的siamese network使用Contrastive Loss【对比损失函数】。
对比损失函数如下:
- 其中Dw被定义为姐妹孪生网络的输出之间的欧氏距离。Dw欧式距离公式如下:
- 其中Gw是其中一个姐妹网络的输出。X1和X2是输入数据对。
- Y值为1或0。如果模型预测输入是相似的,那么Y的值为0,否则Y为1。
- max()是表示0和m-Dw之间较大值的函数。
- m是大于0的边际价值(margin value)。有一个边际价值表示超出该边际价值的不同对不会造成损失。这是有道理的,因为你只希望基于实际不相似对来优化网络,但网络认为是相当相似的。
我们可以这样理解,Dw是两个网络输出的差值,当输入的数据不相似,Y=0,那么损失函数只看左边,右边为零。网络之间的差值即是loss,然后调整网络权重。当输入数据相似,Y=1,损失函数看右边,左边为零。然后看到这个max{0,m-Dw}^2,损失值只会是正数,如果相似的数据的差值很大,就是你设定m=5,然后Dw为100,相似的图片之间的差别太大,但不应让网络因为相似数据的巨大差别而调整网络权重,学习差异。这个m边际价值在这里的作用就是忽略相似图片的巨大差异。
这里多说一句,siamese可以用来降维,因为最后他的输出是二维的,这样直接把维度降下来了。下图中左右两个网络输出都是一个Gw,两个值。
来自:https://blog.youkuaiyun.com/qq1483661204/article/details/79039702