普通程序员如何入门深度学习(2)
通常,我们拿到的数据和最终想要的结果相差甚远。例如,想知道照片中的人是不是开心,我们希望有一个模型,能将成千上万的低级特征(像素值),转化为高度抽象的输出(开心程度)。选择正确模型并不简单,不同的模型适合不同的数据集。在这本书中,我们会主要聚焦于深度神经网络模型。这些模型包含了自上而下联结的数据多层连续变换,因此称之为深度学习。在讨论深度神经网络之前,我们也会讨论一些简单、浅显的模型。
损失函数(Loss Functions)
我们需要对比模型的输出和真实值之间的误差。损失函数可以衡量输出结果对比真实数据的好坏。例如,我们训练了一个基于图片预测病人心率的模型。如果模型预测某个病人的心率是100bpm,而实际上仅有60bpm,这时候,我们就需要某个方法来提点一下这个的模型了。
类似的,一个模型通过给电子邮件打分来预测是不是垃圾邮件,我们同样需要某个方法判断模型的结果是否准确。典型的机器学习过程包括将损失函数最小化。通常,模型包含很多参数。我们通过最小化损失函数来“学习”这些参数。可惜,将损失降到最小,并不能保证我们的模型在遇到(未见过的)测试数据时表现良好。由此,我们需要跟踪两项数据:
训练误差(training error):这是模型在用于训练的数据集上的误差。类似于考试前我们在模拟试卷上拿到的分数。有一定的指向性,但不一定保证真实考试分数。
测试误差(test error):这是模型在没见过的新数据上的误差,可能会跟训练误差很不一样(统计上称之为过拟合)。类似于考前模考次次拿高分,但实际考起来却失误了。
优化算法(Optimization Algorithms)
最后,我们需要算法来通盘考虑模型本身和损失函数,对参数进行搜索,从而逐渐最小化损失。最常见的神经网络优化使用梯度下降法作为优化算法。简单地说,轻微地改动参数,观察训练集的损失将如何移动。然后将参数向减小损失的方向调整。
什么是深度学习
这是机器学习的一个子领域,近年来表现出了很大的潜力。它涉及到大脑中神经元结构和功能的算法。Andrew Ng曾用下图对比说明传统机器学习算法和深度学习算法的特点。从图中可以看出,随着数据的增多,到达一定量后,深度学习算法的表现会明显优于传统的机器学习算法。
深度学习中最令人激动的特性之一是它在特征学习上的表现。该算法在从原始数据中检测特征方面表现地特别好。有一个很好的例子,就是通过深度学习技术来识别汽车图片中的车轮。下图说明了典型机器学习与深度学习之间的区别:
在机器学习中特征选择部分一般需要人的先验知识的介入来设计好的特征提取方法,比如人知道轮子一般是圆的,一般出现在交通工具上,有轮胎、轮毂等部件,基于先验知识,人可以选取适合提取轮子特征的方法,再设计分类器以识别轮子。而深度学习通常由多个层组成。它们通常将更简单的模型组合在一起,通过将数据从一层传递到另一层来构建更复杂的模型。通过大量数据的训练自动得到一个能识别轮子的模型,不需要人工设计特征提取环节。这是深度学习随着数据量的增加而优于其他学习算法的主要原因之一。
随着深度学习的发展,为了方便算法人员训练模型,调整参数等,很多公司开源了优秀的深度学习框架,到目前为止,主要的深度学习框架如下图所示。目前工业界用的比较多的是Caffe和TensorFlow,Caffe主要在计算机视觉上用的较多,TensorFlow由谷歌开源,相关文档较好,适用范围广,基于Python语音,入门简单,建议新手入门可以选择TensorFlow。但是这些只是深度学习的平台框架而已,真正重要的还是学习好深度学习的理论,有了理论各种平台都不是问题。
TensorFlow简介
TensorFlow是专门为机器学习而设计的快速数值计算Python库,它由谷歌开源,旨在让世界各地更多的研究人员和开发人员掌握深度学习。为了加速深度学习领域的发展,2015年11月9日,Google发布深度学习框架TensorFlow并宣布开源。在短短的一年时间内,在GitHub上,TensorFlow就成为了最流行的深度学习项目。
TensorFlow在计算机视觉、语音识别、推荐系统和自然语言处理等场景下都有丰富的应用。虽然Tenforflow开源时间刚满一年,但是它正在以迅猛的速度渗入到我们的寻常生活中。它支持Linux平台,Windows平台,Mac平台,甚至还宣称要发布相应的移动端平台。其次,TensorFlow提供了非常丰富的深度学习相关的API,可以说目前所有深度学习框架里,提供的API最全的,包括基本的向量矩阵计算、各种优化算法、各种卷积神经网络和循环神经网络基本单元的实现、以及可视化的辅助工具、等等。
你可以按照官方的教程安装TensorFlow,安装好之后,你就可以用它提供的多个API来训练机器学习模型了。具体的教程可以参考TensorFlow官网,不想看英文的也可以参考TensorFlow中文社区。
虽然TensorFlow是最受欢迎的机器学习库,不过也有其他几个很棒的选择,如Torch(Facebook使用)、Caffe(出自Berkeley AI研究所的深度学习框架)等等。其中Caffe是第一个在工业上得到广泛应用的开源深度学习框架,也是第一代深度学习框架里最受欢迎的框架,目前也有很多企业和科研人员在使用。
学习资料
一旦对基础知识有了一定的了解,你应该知道自己对机器学习的哪些方面比较感兴趣,你想在应用程序中使用机器学习,还是想研究机器学习。下面是一些优秀的参考资料,可以帮助你系统的学习。
书籍:
深度学习技术发展迅速,各种平台框架也迭代很快,推荐相关的书籍其实不太好推荐。在这里我只推荐两本书:
第一本是《白话深度学习与TensorFlow》,这本书写的非常通俗易懂,没有太多理论知识介绍,基本是深度学习的基础知识和TensorFlow的相关例程,适合没有深度学习基础,想入门深度学习的人看。
第二本是美国Ian,Goodfellow 写的《Deep Learning》,这本书有中文翻译版《深度学习》,但是这本书基本是讲深度学习理论的,没有基础的话很难看懂,但是翻译者提供了PDF在GitHub上,想看的可以去下载:https://github.com/exacity/deeplearningbook-chinese
网络资源:
对于新手入门个人觉得很多网上的手册、教程和博客都很不错。这篇文章主要面向零基础的想了解DeepLearning的人员,太复杂专业的暂时就不推荐了,以下是一些基础的入门资源。
1.吴恩达的深度学习在线课程:这是吴恩达成立DeepLearning.ai在线教育网站后的第一个课程,网易云课堂引进了,偏工程可以学习一下,还有相关证书,吴恩达给你的人工智能第一课.
2.莫烦Python:这是一个在澳大利亚读博的中国人,他会讲Python和深度学习的教程,有视频。Python基本是现在做深度学习的必会语言了,喜欢的可以去这里学习https://morvanzhou.github.io/about/。
3.台湾李宏毅教授的在线课程:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html,还有一个300多页的ppt,比较系统,也最通俗易懂的:http://www.slideshare.net/tw_dsconf/ss-62245351?qid=108adce3-2c3d-4758-a830-95d0a57e46bc&v=&b=&from_search=3
4.TensorFlow中文社区:http://www.tensorfly.cn
5.想学习caffe框架的,也可以参考徐其华的博客:http://www.cnblogs.com/denny402/tag/caffe/
结语
“整个世界就是一个大数据问题” - Andrew McAfee
掌握机器学习就像是驯服一头野兽。但是,如果你已经吃透它,那么它就是你身边一个非常有价值的资源。暂时想到的就这么多,愿大家一同进步……