前言
最近,几个CV相关的项目陆续暴露出识别准确率不高的问题,导致客户反应强烈。其实在项目初期时我就指出过,只有千级的训练数据是无法训练出一个准确率高的模型的。
在此写一篇博文记录一下。
正文
《数据量不够大,别玩深度学习》
2017年 Jeff Leek 在 Simply Stats 上发表了一篇题为《数据量不够大,别玩深度学习》(Don’t use deep learning your data isn’t that big)的博文。
作者指出,当样本数据集很小时,简单的线性模型也能优于深度网络模型的。
为了证明自己的论点,Leek 举了一个基于 MNIST 数据库进行图像识别的例子,分辨 0 或 1。当用仅 80 个样本的 MNIST 数据集中进行 0 和 1 的分类时,一个简单的线性预测器要比深度神经网络的预测准确度更高。
原文链接:You can probably use deep learning even if your data isn’t that big
谷歌与CMU联合发文:审视数据对深度学习的重要性
深度学习在视觉问题上所取得的成功可归因于以下几点:
-
高容量模型;
-
高速增长的计算力;
-
大规模标记数据的可用性。
原文链接:Revisiting Unreasonable Effectiveness of Data in Deep Learning Era
Why go large with Data for Deep Learning?
-
从原理了解为什么需要大量训练数据
1957年,弗兰克罗森布拉特设计了第一个模拟单个神经元活动的rst感知器。
感知器(感知机)如下图所示:
线性单元如下图所示:
神经网络如下图所示:
卷积神经网络的示意图:
一个卷积神经网络由若干卷积层、Pooling层、全连接层组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K
-
以图像识别为例子
图像识别是神经网络应用的主要领域之一,涉及识别隐藏在数据像素后面的大量特征。为了获取这些特征,采用了多层感知机。
常用反向传播将输出与训练数据的误差进行比较,并计算输出中的误差。然后,紧靠输出层的层会调整其权重,导致后续内层中的权重调整,直到错误率降低。深度学习需要大量不同实例的数据集,模型从中学习要查找的特征并生成带有概率向量的输出。
-
深度学习的性能能否提升取决于数据集的大小
模型学习的参数越多,训练所需的数据也会增加。否则,具有更多维数和小数据的问题会导致过拟合。
为了验证大数据的必要性,我们来看看2个大容量训练数据的成功应用场景:
1、Facebook上著名的现代人脸识别系统称为“DeepFace”,部署了一套4000多个身份的4百万面部图像,并且在带标签的数据集上达到了97.35%的准确率。
2、Alex Krizhevsky与Geoffrey Hinton等其他学者,描述了一个涉及手眼协调的机器人抓握学习模型。为了训练他们的网络,共收集了800,000次抓握尝试,机器人手臂成功地学习了更多种类的抓握策略。