4-1 One-Shot 学习

One-Shot 学习( One-shot learning)

人脸识别所面临的一个挑战就是你需要解决一次学习问题,这意味着在大多数人脸识别应用中,你需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。所以在一次学习问题中,只能通过一个样本进行学习,以能够认出同一个人。大多数人脸识别系统都需要解决这个问题,因为在你的数据库中每个雇员或者组员可能都只有一张照片。

有一种办法是,将人的照片放进卷积神经网络中,使用 softmax 单元来输出 4 种,或者说 5 种标签,分别对应这 4 个人,或者 4 个都不是,所以 softmax 里我们会有 5 种输出。但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。

而且,假如有新人加入你的团队,你现在将会有 5 个组员需要识别,所以输出就变成了6 种,这时你要重新训练你的神经网络吗?这听起来实在不像一个好办法。

所以要让人脸识别能够做到一次学习,为了能有更好的效果,你现在要做的应该是学习Similarity 函数。详细地说,你想要神经网络学习这样一个用d表示的函数:

$d(img1,img2) = \deg ree\;of\;difference\;between\;images$

它以两张图片作为输入,然后输出这两张图片的差异值。如果你放进同一个人的两张照片,你希望它能输出一个很小的值,如果放进两个长相差别很大的人的照片,它就输出一个很大的值。所以在识别过程中,如果这两张图片的差异值小于某个阈值$\tau$,它是一个超参数,那么这时就能预测这两张图片是同一个人,如果差异值大于$\tau$,就能预测这是不同的两个人, 这就是解决人脸验证问题的一个可行办法。

要注意在这过程中你是如何解决一次学习问题的,只要你能学习这个函数d,通过输入一对图片,它将会告诉你这两张图片是否是同一个人。如果之后有新人加入了你的团队,你只需将他的照片加入你的数据库,系统依然能照常工作。

posted @ 2018-11-10 09:04  刘-皇叔  阅读(1976)  评论(0编辑  收藏  举报