这个系列是Gatech OMSCS 深度学习课程(CS 7643: Deep Learning)的同步课程笔记。课程内容涉及深度学习的基本理论方法以及它在计算机视觉、自然语言处理以及决策理论等领域中的应用,本节主要回顾线性分类器以及梯度下降法在机器学习中的应用。
Machine Learning Overview
机器学习(machine learning, ML)是目前整个计算机科学中最为火热的研究领域之一。和传统的算法研究相比,机器学习的特点是算法会在和数据进行交互的过程中不断提升自身的性能。
![](https://search.pstatic.net/common?src=https://i.imgur.com/JQjtSas.png)
同时,对于很多问题我们可能很难直接设计算法进行求解,有时甚至很难去精确地定义问题。在这种情况下,我们就可以利用机器学习这种数据驱动的方式来进行求解。
![](https://search.pstatic.net/common?src=https://i.imgur.com/4OAttGo.png)
从研究领域来划分,机器学习属于广义人工智能(artificial intelligence, AI)的一个子集,而深度学习(deep learning)则是机器学习的一个子集。
![](https://search.pstatic.net/common?src=https://i.imgur.com/5sWRDGQ.png)
目前,基于深度学习的机器学习技术已经成为整个学术界研究的主流方法。同时深度学习在计算机视觉(computer vision, CV)、自然语言处理(natural language processing, NLP)、决策科学(decision making)、机器人系统(robotics)等诸多领域中都取得了大量的应用。
![](https://search.pstatic.net/common?src=https://i.imgur.com/C19nbnN.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Et3Fcll.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/KWiO8WR.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/IBQ1nB9.png)
Supervised Learning and Parametric Models
根据提供数据的类型,机器学习大体可以分为监督学习(supervised learning)、无监督学习(unsupervised Learning)以及强化学习(reinforcement Learning)三种。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Jtjcx6p.png)
其中监督学习是指对于给定的数据$X$和标签$Y$,算法通过不断的学习输出一个函数$f$将$X$映射为$Y$。基于深度学习的监督学习算法已经取得了令人瞩目的成就,因此在本课程也主要会介绍深度学习在监督学习中的应用。
![](https://search.pstatic.net/common?src=https://i.imgur.com/4NEaFSM.png)
Supervised Learning
根据模型是否具有参数,监督学习还可以细分为参数化模型和非参数化模型两类。前者的代表是逻辑回归(logistic regression)和神经网络(neural networks),而后者的代表则包括决策树(decision tree)和kNN(k nearest neighbor)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/teS9jEN.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/4qntRan.png)
Traditional Machine Learning
以图像分类为例,在深度学习诞生之前的经典分类算法是利用一个参数模型$f(x, W)$将输入图像映射为一个类别向量,然后去得分最高的那个维度作为图像的分类结果。
![](https://search.pstatic.net/common?src=https://i.imgur.com/QRV908Q.png)
由于图像是一个高维的数组,直接带入模型进行训练的效率非常低,因此往往会利用人工设计的图像特征(如直方图)来表示整张图像。这样整个计算流程可以划分为特征工程和分类模型两部分。
![](https://search.pstatic.net/common?src=https://i.imgur.com/O359SH1.png)
Components of Parametric Learning
在介绍如何训练模型前我们首先来观察一下模型的构成,整个参数模型可以分成输入(input)、模型(model)、损失函数(loss function)以及优化算法(optimization algorithm)几部分。对于图像分类问题,参数化模型的输入就是图像的特征(features)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/ZNEQkXM.png)
对于线性模型,图像的输出类别向量是特征的线性组合,组合系数为可学习参数$W, b$。
![](https://search.pstatic.net/common?src=https://i.imgur.com/ZBsw9Af.png)
从几何的角度上讲,每个类别的参数$W_i, b_i$相当于在高维空间中定义了一个超平面(hyperplane)来将空间划分为正反两面,其中正确类别的样本需要被分类到正面而其它类别的样本则需要分类到背面。
![](https://search.pstatic.net/common?src=https://i.imgur.com/3InHkYk.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/XfDi8nu.png)
当然在有些情况下样本可能无法通过线性分类器来正确划分,这时则需要我们引入一些非线性的机制来进行处理。
![](https://search.pstatic.net/common?src=https://i.imgur.com/5rHsTGC.png)
Performance Measurement
对于任意的模型我们还需要考虑一个合适的度量函数来描述模型的性能,这样的函数称为性能度量(performance measurement)。同时注意到分类器输出的得分往往是无界的,我们还需要将得分转换成规范化的形式。对于分类问题最常用的方法是借助于softmax()函数,它将每个类别上的得分转换为相应的概率。
![](https://search.pstatic.net/common?src=https://i.imgur.com/fOSohWW.png)
对得分进行规范化后就可以利用度量函数来描述当前模型的输出与目标输出之间的差异,然后利用优化算法来进行求解。具体地,我们希望模型能够在正确的类别上有着足够高的概率同时在其他类别上的概率尽可能低。从优化的角度上讲我们需要最小化度量函数,因此度量函数往往也被称为目标函数(objective function)或是损失函数(loss function),记为$L$。
![](https://search.pstatic.net/common?src=https://i.imgur.com/hvrq6Fm.png)
Cross Entropy
对于使用softmax()函数规范化的输出,我们可以使用交叉熵(cross entropy)来描述输出概率与目标概率之间的差异,它相当于度量两个概率分布之间的”距离”。
![](https://search.pstatic.net/common?src=https://i.imgur.com/FGQAyam.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/zrV5Ee6.png)
Hinge Loss
另一种常用的损失函数是hinge loss,它要求正样本与决策边界需要保持足够大的间隔。实际上SVM就使用了hinge loss作为损失函数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/NamDm4y.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/dPG8Y4G.png)
除了cross entropy和hingeloss之外,对于回归问题还可以考虑使用L1、L2 loss或是logistic loss等不同类型的损失函数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/rpyyvUT.png)
Regularization
在标准的损失函数基础上我还往往会添加正则项(regularization)来避免模型出现过拟合的问题。常用的正则项包括L1、L2正则,它们会约束参数的范围,使模型倾向于学习到较小的参数值。
![](https://search.pstatic.net/common?src=https://i.imgur.com/914vwM2.png)
Gradient Descent
对于给定的模型和损失函数,模型的训练过程可以看成是一个寻找最优参数的优化问题。在机器学习中求解这种优化问题可以考虑使用随机搜索、遗传算法等不同类型的算法,但目前主流的优化算法仍然是基于梯度下降(gradient descent)的相关方法。简单来说,在梯度下降中我们把损失函数看做是关于模型参数的函数,然后通过沿当前点的负梯度方向前进从而寻找到最优点。
![](https://search.pstatic.net/common?src=https://i.imgur.com/H3g7POO.png)
梯度下降方法的总体流程如下:
![](https://search.pstatic.net/common?src=https://i.imgur.com/YMyZ3ag.png)
在计算梯度值时有时还会使用数据集上的全部或是一部分样本,此时的梯度下降也称为full batch gradient descent和mini-batch gradient descent。
![](https://search.pstatic.net/common?src=https://i.imgur.com/oZ56R97.png)
还需要说明的是要保证梯度下降能够收敛需要使用比较小的步长,而且梯度下降是不能保证收敛到全局最优的。不过在实践中发现即使收敛到局部最优,训练得到的模型也往往有足够好的效果。
![](https://search.pstatic.net/common?src=https://i.imgur.com/HNItfCk.png)
那么梯度下降最终的问题是如何计算损失函数关于参数的导数。显然显式计算过于复杂但使用数值梯度精度又不够高,因此在深度学习框架中使用了链式法则来逐步计算梯度。对于任意可导的函数,它可以分解成一系列比较简单的可导函数的复合。这样在计算梯度时可以从后向前计算每一个可导函数的梯度,然后利用链式法则乘起来就得到了复合函数的梯度。
![](https://search.pstatic.net/common?src=https://i.imgur.com/79VOmCa.png)
How is Deep Learning Different?
本节课最后讨论了深度学习与传统机器学习的差异。目前来看,深度学习的主要特点在于层级化(hierarchical compositionality)、端对端(end-to-end learning)和分布式表示(distributed representations)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/TOELRrw.png)
Hierarchical Compositionality
前面介绍过深度学习会将一系列简单的可导函数复合成一个复杂的函数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/WZtuemI.png)
这些简单的函数并不是相互独立的单元,实际上这些函数存在着层级的关系。以图像识别为例,通过可视化单元响应人们发现浅层的单元对应着浅层的图像信息,而后面更深层的单元则对应更高阶的视觉信息。
![](https://search.pstatic.net/common?src=https://i.imgur.com/3DpDJmF.jpg)
End-to-End Learning
深度学习的另一个重要特征是整个学习过程是端对端的。在传统机器学习中需要手动设计人工特征来作为模型的输入,而在深度学习中我们直接使用原始数据,即特征提取器会和模型会一起进行训练。
![](https://search.pstatic.net/common?src=https://i.imgur.com/6mfaFfL.png)
Distributed Representations
深度学习最后一个特点是模型学习到的是分布式的表示。每个单元不会学习到某个特征全部的信息,我们需要把所有的单元组合到一起才能得到特征的完整表示。
![](https://search.pstatic.net/common?src=https://i.imgur.com/5leFsng.png)