讲到这里,吴博士突然又插播了一条人生经验:我们企业呀,不要整天想搞个大新闻,东边一个服务器,西边一个服务器,显得自己很国际化。可是这样搞得数据很不统一。他十分建议企业都使用 unified data warehouse(统一化的数据中心),让数据科学家可以安心的玩数据。 经验分享介绍后,吴博士具体举个了智能后视镜的例子:如果我们要做个智能后视镜(语音操作的车内智能助手),我们的数据该怎么搞? 首先,假设我们有 50000 小时的语音资料(随便在哪里下载来的)和 10 小时的车内对着后视镜讲话的语音资料(比如,让客户假装他的后视镜是智能的,然后录下一些语音指令……)。面对这些数据,我们该如何构造我们的训练集?
有人可能会这样说:50000 小时语料够大,可以分出一些来做开发集(dev set),其他的用来训练。而 10 小时珍贵的车内语音则做成测试集。 错!这是个非常不好的处理方式,因为你的开发集和测试集没能遵从相同的数据分布(distribution)。换句话说,开发集和测试集的内容「根本就不在同一个宇宙」。这样的结果就是,你的数据工程师在开发集上花费了很大的精力之后,结果放到测试集上却发现并没有什么用。 一个比较靠谱的处理方式应该是:
把 10 小时的车内语料分成开发集和测试集。同时,你也可以拿出训练集中的一部分内容作为训练-开发集(train-dev set)。这个数据集能帮助你的算法在训练集上做好优化,再转移到真实场景中。 按照这个构架,我们于是可以得到五种不同的误差值:
人类误差、训练集误差,训练-开发集误差、开发集误差、测试集误差 其中,人类误差与训练集误差之间的差值还是称为 bias(偏差);训练集误差与训练-开发误差之间的差值称为「训练集的过拟合」(也就是说,它代表了模型单纯在训练集上表现能力);训练-开发误差与开发集误差之间的差值称为「data mismatch」(数据不匹配,就是刚才说的两组数据不在同一个「宇宙」带来的偏差);开发集误差与测试集误差之间的差值称为「开发集过拟合」(同理)。 这个时候,拥有的差值就更多了,我们就需要一个新的处理策略:
P13:用于机器学习的新配方:如果训练误差高(偏置),就使用更大的模型、训练更长时间、使用新的模型架构;如果训练-开发误差高(方差),就使用更多数据、正则化、新的模型架构;如果开发误差高(训练-测试数据不匹配),就使训练数据更近似于测试数据、进行数据合成(域适应)、使用新的模型架构。 当你遇到数据不匹配(data mismatch)时,你可以: 1. 让你的训练集跟测试集更加相似; 2. 数据合成; 3. 尝试新模型。 而这时候,如果你又遇到了测试集误差太高的情况,那么你就只能寻求更多的测试集了。 总结一下以上内容,我们可以得出下面这张表:
P14:一般的人类/偏差/方差分析 人类水平的表现(Humen-Level performance) 对于人类误差和机器学习误差,你会发现一个规律:
当机器学习比人类水平低时,它的准确率的提升是很快的。但是当它超越人类以后,往往准确率提升效率就逐步降低了。并且,在人类水平线的上方,有一个叫 Bayes Optimal Error(贝叶斯最优误差)的线,这是我们人和机器学习都永远无法逾越的。
这一切的原因有二: 1. 机器学习超越人类以后,很快就会靠近贝叶斯最优误差线,这是一条理论上无法逾越的线。 2. 数据带有人类自己做的标签(label),所以本身就含有人类自己的见解(insight)。
P16:小测试:医学成像 在医学领域,如果我们想用深度学习来观察医学图像并作出判断,那么,以下哪一种应该被我们选作人类的误差值(human-level error)? 1. 一个普通人 3% 2. 一个普通医生 1% 3. 一个专家医生 0.7% 4. 一个医生专家组 0.5% 答案:选 4. (责任编辑:本港台直播) |