机器学习(machine learning)已然成为无数重要应用的基石——如今,在网络搜索、垃圾邮件检测、语音识别以及产品推荐等领域,你都能够发现它的身影。如果你或你的团队正在研发一款机器学习相关应用,并期待取得较快进展,那么这本书将会是你的得力助手。
案例:建立猫咪图片初创公司
想象一下,你正在建立一家初创公司,这家公司的产品目标是为猫咪爱好者们提供数不尽的猫咪图片,你打算应用神经网络(neural network)技术来构建一套计算机视觉系统,通过该系统来识别图片中的猫。
但悲剧的是,目前你的学习算法准确度还不够好。为了改进这个猫咪检测器,你正面临着巨大的压力。可你该怎么做呢?
你的团队给出了许多建议,例如:
- 获取更多的数据,即收集更多的猫咪图片
- 收集更加多样化的训练数据集,图片中猫的位置可能不常见,也有可能颜色奇异,或者拍摄时使用不同的相机参数
- 通过增加梯度下降的迭代次数,使算法训练得久一些
- 尝试一个拥有更多层/更多隐藏元/更多参数的,规模更大的神经网络
- 尝试一个更小的神经网络
- 尝试加入正则化(例如 L2 正则化)
- 改变神经网络的架构(激活函数,隐藏元数量等等)
- …
在上面众多的方向中,如果你做出了正确的选择,就将建立起一个效果领先的猫咪图片识别平台,并带领你的公司取得成功。但如果你选择了一个糟糕的方向,则可能因此浪费掉几个月的时间。那么你该如何做出决定呢?
这本书将告诉你应该怎么做。众多的机器学习问题会留下一些线索,告诉你什么样的尝试有用,什么样的没用。而学会解读这些线索将会节省你几个月甚至几年的开发时间。
规模驱动机器学习发展
关于深度学习(神经网络)的一些想法在几十年前就有了,那为什么它们到现在才流行起来了呢?
推动其近期发展的主要因素有两个:
- 数据可用性(data availability):如今人们在数字设备(笔记本电脑、移动设备等)上花费的时间越来越多,对应的数字化行为与活动产生了海量的数据,而这些数据都可以提供给我们的学习算法用来训练。
- 计算规模(computational scale):在近几年前,我们才开始有能力训练出规模足够大的神经网络来使用现有的海量数据集。
具体来说,即使你积累了更多的数据,但应用在类似于对数几率回归(logistic regression)这样较传统的学习算法上,其性能表现(performance)也将趋于 “平稳” 。这意味着算法的学习曲线将 “变得平缓” ,就算提供更多的数据,算法的性能也将不再提升。
传统学习算法似乎并不知道要如何来处理现今这般规模量级的数据。
在同样的监督学习任务下,选择训练一个小型的神经网络(neutral network, NN),你可能会获得较好的性能表现:
该图显示了在小数据集上应用神经网络的效果会更好,但这种效果与将神经网络应用在大数据集时不太一致。在小数据集情况下,传统算法是否会表现得更好,取决于人们如何进行特征选择工程。例如,假设你只有 20 个训练样本,那么使用对数几率回归还是神经网络可能无关紧要;此时人为的特征选择工程比起选择哪种算法将产生更大的影响。但如果你有 100 万个样本数据,我会赞成你使用神经网络。
这里的 “小型神经网络” 指的是只含有少量的隐藏元/层/参数的神经网络。但如果你训练的神经网络规模越来越大,最终很有可能会获得更好的表现:
因此,为了获得最佳的性能表现,你可以这样做:
- 训练大型的神经网络,效果如同上图的绿色曲线;
- 拥有海量的数据。
在算法训练时,许多其它的细节也同等重要,例如神经网络的架构。但目前来说,提升算法性能的更加可靠的方法仍然是训练更大的网络以及获取更多的数据。完成 1 和 2 的过程异常复杂,本书将对其中的细节作进一步的讨论。我们将从传统学习算法与神经网络中都起作用的通用策略入手,循序渐进地讲解至最前沿的构建深度学习系统的策略。
PDF下载
描二维码关注微信公众号,回复关键字“机器学习要领”获取下载地址。
任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~