6- 深度学习: 图像搜索
github: https://github.com/mtianyan/graphLabStartedML
基于图片的相似度来选购商品
可视化商品推荐
我想买双新鞋,但是。。。
符合我的风格,我又感兴趣的鞋子真不容易
搜素时装鞋,只能找到一双我们觉得有意思的。而我想找的是真正有个性不同的鞋子
可我又不知道用什么关键字搜索,用图像的特征找到相似的鞋子
在做机器学习时我们一般会有输入值,比如情感分析中的评价语句
目标;重新检视分类器,但是应用更复杂的非线性特征
我们的目标是从一个图像出发。
输入图像的像素,输出预测的对象值。
分出狗狗的品种。
特征指的是我们的数据的表现形式,我们把他们当做输入送入分类器。
数据有很多种表现形式:
线性分类器区分开正类和负类
分类器的图表示: 用于定义神经网络
对于每一个特征变量我们都有一个与之对应的特征节点,直到第d个特征变量。
对于我们要预测的输出值y我们也有一个节点来对应。
将特征节点与权重相乘然后累加得到分数。
分值大于零时我们输入1,分值小于0时我们输出0
小型线性分类器,小型神经网络或单层神经网络。
逻辑的或运算可以用线性分类器来表示。
定义一个打分函数,在后三行的情况下输出正值,值大于0即可。
权重为 -0.5 1 1 时满足条件。
与运算,只有x1 和x2 都等于1的时候才能大于0
单层神经网络来表示逻辑与运算和或运算。
在这个函数中没有哪条线能将加号,减号分割开。
异或运算: 任何事情的反例
我们之前讲过的线性特征就不够用了,我们需要一些非线性的特征
XOR结果为1的情况是x1为真,x2为假 或 x1为假,x2为真时
添加两个单元。z1,z2
我们要做的是建立一个神经网络:
与运算:
z1:节点1的权重-0.5, x1权重1,因为是not x2权重-1
z2: 节点1权重-0.5, x1权重-1,x2权重1
此时当x1 x2全为真时: x1*1
为1 x2*1
为-1加起来为0,而我们需要的值是此时小于0.所以常数项-0.5
其他情况略。
对数据进行多层次的变换。
有多层的线性和非线性变换
神经网络已经被发明接近50年了
大约十年前,最近几年有了大的复兴
- 在一些典型问题的准确率大大提升
特征 = 局部探测器
鼻子探测器,眼睛探测器,嘴巴探测器。
如果每个探测器都探测成功,就可以通过这个小型神经网络做出预测这是个人脸。
图像特征: 局部兴趣点的组合
角落探测器
SIFT特征
根据sift特征被激活的地方构成向量。这些特征在有些地方激活,有些地方不激活
这跟寻找一篇文章的单词是类似的。
图像特定的地方有没有特定的角,然后就可以把这些信息输入到分类器
线性识别分类器: 告诉我们是否是人脸
输入到一个三层的神经网络
识别这些局部神经探测器,每一层都会发现这些特征。在不同的层次探测不同的图像性质。
发现弯弯曲曲的线,一些角
99.5%准确率(IDSIA团队)
每个字符97.8%准确率
对于图片进行分类,不是识别是不是一条狗,而是这个狗是啥品种的问题
superVision团队采用了深度神经网络,大幅度超过对手
大大提高了大家对于深度学习网络在计算机视觉领域应用的兴趣。
8层的神经网络,有6000万个参数
获得这种惊人的结果需要:
识别图片中狗的品种
每个像素进行分类,发现特定的区域。天空区域,草坪区域。
这类景物解析,也称为场景理解。
神经网络对于这种需求非常有效
我们输入一张自己中意的鞋子的图片,输出风格等类似的鞋子的图片
使学习特征成为可能,而不是手动的去调节
卓越的性能提升:
- 计算机视觉
- 语音识别
- 一些文本分析
潜在更多的影响
需要大量的标注数据,包含哪种狗。(人工标注)
验证发现不符合,我们又需要进行修改模型。我们需要不停的迭代
不同特征的层和很多复杂的细节。
为了达到高准确率,需要非常多的数据
计算特别昂贵
非常难调节模型
- 架构的选择(层数)
- 参数类型
- 元参数
- 学习算法
昂贵的计算成本+太多的选择 = 模型非常难以调节
帮助建立神经网络,甚至当你没有很多数据的时候都可以建立。
我们能不能从数据中学习特征。
很老的方法
在你拥有很多的数据的时候,训练神经网络。
如果我们有一个区分猫和狗的任务,我们训练了一个八层1600个参数的复杂网络。
最后我们得到了一个非常准确的猫狗分类器。
假如我们有了新的任务,此时我们只拥有很少量的数据。检测椅子大象,相机等
我们使用从猫狗神经网络中学习到的特征再加上一个简单的分类器,来获取一个对于101个类别上的高准确率
这就是迁移学习,我们在猫狗中学习到的特征可以被迁移到新的任务中。
我们更改一下学习方法。对于猫狗分类而言这个网络非常准确。
最后的几层: 主要用于猫和狗的分类。
就跟之前例子中最后一层进行颜色检测
中间的层很一般化,代表角落检测,弯弯曲曲的画面等。
对于任务2,要预测101个类别,只需要学习神经网络的末端
把最后这一块中专门针对猫和狗的部分剔除掉。
保持前面各层的权重固定。
利用这些特征再加上一个简单的分类器。
我们就能用很少的椅子汽车大象等图片数据来训练一个模型
注意分割点,后面的层可能太特定于任务了
垃圾回收
垃圾车挨个回收路径优化。
以前的回归,分类,机器学
输入图像和相应的标签,标签是要么是一只猫,要么是一只狗,或者是一个房子。
特征提取: 采用深度特征进行特征提取。
输出的是图片和图片的深度特征X
使用机器学习模型来分类这类特征。拿出我们预测的标签y帽子和真正的标签y。在性能度量中。
y y帽子 性能度量取决于你的任务。(我们本次的任务中使用了分类准确率)
这时的w帽子才是真正的逻辑回归的权重参数
机器学习要做的是保证分类准确率,尝试改变和更新w帽子来使准确率更高
见jupyter notebook
深度学习图片检索工具