深度学习:搜索图片

1 用神经网络学习非线性特征(Learning very non-linear features with neural networks)

我们首先来回顾一下分类模型
线性分类器会创造一条直线(线性决策边界)来区分正向类和负向类,如图 1 所示:

DeepLearningSearchingForImages_1
在神经网络中,我们把上述线性分类器称为一个单层神经网络
然而,一些分类无法用仅用一条直线就可以区分,比如异或运算:

y=1 1 0
y=0 0 1
x=0 x=1

神经网络就是用来解决这种非线性特征的
我们用神经网络来解决上述异或运算问题:
异或运算 XOR :XOR = (x1 AND NOT x2) OR (NOT x1 AND x2)
使 z1 = x1 AND NOT x2,z2 = NOT x1 AND x2
则 XOR = z1 OR z2
而与运算和非运算都可以用线性分类器来表示,比如下面就是一组例子:
DeepLearningSearchingForImages_2
一个神经网络就是对数据进行多次变换,然后用这些变换后的数据来建立非线性特征集

2 深度特征(Deep features)

2.1 深度特征(Deep features)

深度特征 = 深度学习 + 迁移学习

比如我们有很多猫和狗的数据,就可以训练出一个精确的猫狗分类器
假设现在有一个新的任务,需要在上千个分类中找出椅子、大象、汽车、照相机。。。但是我们只有很少的数据,那么我们能不能用从猫狗神经网络中学习到的特征,再加上一个简单的分类器,得到一个准确的 101 类别分类器呢?
方法就是利用迁移学习。
我们在猫狗分类器中学习得到的特征能被迁移到新的任务中,因为在这些特征中,只有一小部分是非常特殊的,而大多数都是一般的,比如圆角、边缘。。。如下图 3 所示:
DeepLearningSearchingForImages_3
而这些特征就可以被推广到 101 类别分类。那么我们让前面的一般的特征保持不变,只改变最后一小部分,就可以得到新任务的分类器,如下图 4 所示:
DeepLearningSearchingForImages_4

2.2 使用深度特征的深度神经学习的流程(Transfer learning with deep features workflow)

从一些标注过的数据开始,不需要大量数据;然后从深度神经网络中抽取特征;把数据分为两部分,一部分作为训练数据,另一部分作为验证测试数据;用训练数据集训练一个简单的分类器(比如线性分类器);由于分类器非常简单,所以不需要调整很多参数,很容易用少量数据完成训练并且效果非常好
如下图所示:
DeepLearningSearchingForImages_5

3 案例研究:用深度学习分类图片(Deep features for image classification)

代码在这里

4 案例研究:用深度学习检索图片(Deep features for image retrieval)

代码在这里