Siamese Network 是一种神经网络的框架,而不是具体的某种网络,Siamese Network用于评估两个输入样本的相似度。网络的框架如下图所示
Siamese Network有两个结构相同,且共享权值的子网络。分别接收两个输入X1与X2,将其转换为向量Gw(X1)与Gw(X2),再通过某种距离度量的方式计算两个输出向量的距离Ew。
训练Siamese Network采用的训练样本是一个tuple (X1,X2,y),标签y=0表示X1与X2属于不同类型(不相似、不重复、根据应用场景而定)。y=1则表示X1与X2属于相同类型(相似)。
LOSS函数的设计应该是
- 当两个输入样本不相似(y=0)时,距离Ew越大,损失越小,即关于Ew的单调递减函数。
- 当两个输入样本相似(y=1)时,距离Ew越大,损失越大,即关于Ew的单调递增函数。
用L+(X1,X2)表示y=1时的LOSS, L−(X1,X2)表示y=0时的LOSS,则LOSS函数可以写成如下形式
Lw(X1,X2)=(1−y)L−(X1,X2)+yL+(X1,X2)
Siamese Network的基本架构、输入、输出以及LOSS函数的设计原则如上文.
LSTM Siamese Network总结起来就是
- 将Siamese Network中的Encoder换成BILSTM
- 将距离的计算改成余弦距离
- 修改相应的LOSS函数
这个设计上还是有一些可以改进的,比如在BILSTM输出后,加一个attention,而不是直接average每个时刻的输出,这样可以更好的表征输入的文本。
损失函数:
I'm so cute. Please give me money.
- 本文链接:https://wentianhao.github.io/2020/04/02/%E6%96%87%E6%9C%AC%E7%9B%B8%E4%BC%BC%E5%BA%A6%E5%88%86%E6%9E%90/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。