1 用神经网络学习非线性特征(Learning very non-linear features with neural networks)
我们首先来回顾一下分类模型
线性分类器会创造一条直线(线性决策边界)来区分正向类和负向类,如图 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
而与运算和非运算都可以用线性分类器来表示,比如下面就是一组例子:
一个神经网络就是对数据进行多次变换,然后用这些变换后的数据来建立非线性特征集
2 深度特征(Deep features)
2.1 深度特征(Deep features)
深度特征 = 深度学习 + 迁移学习
比如我们有很多猫和狗的数据,就可以训练出一个精确的猫狗分类器
假设现在有一个新的任务,需要在上千个分类中找出椅子、大象、汽车、照相机。。。但是我们只有很少的数据,那么我们能不能用从猫狗神经网络中学习到的特征,再加上一个简单的分类器,得到一个准确的 101 类别分类器呢?
方法就是利用迁移学习。
我们在猫狗分类器中学习得到的特征能被迁移到新的任务中,因为在这些特征中,只有一小部分是非常特殊的,而大多数都是一般的,比如圆角、边缘。。。如下图 3 所示:
而这些特征就可以被推广到 101 类别分类。那么我们让前面的一般的特征保持不变,只改变最后一小部分,就可以得到新任务的分类器,如下图 4 所示:
2.2 使用深度特征的深度神经学习的流程(Transfer learning with deep features workflow)
从一些标注过的数据开始,不需要大量数据;然后从深度神经网络中抽取特征;把数据分为两部分,一部分作为训练数据,另一部分作为验证测试数据;用训练数据集训练一个简单的分类器(比如线性分类器);由于分类器非常简单,所以不需要调整很多参数,很容易用少量数据完成训练并且效果非常好
如下图所示:
3 案例研究:用深度学习分类图片(Deep features for image classification)
代码在这里
4 案例研究:用深度学习检索图片(Deep features for image retrieval)
代码在这里