机器学习硬件 EE290 2021 DNN Introduction

202 阅读5分钟

课程介绍

本课程是由加州大学伯克利分校的 Sophia Shao 讲授,课程编号是 EE290 。本课程主要在硬件和机器学习之间搭建一个交互的桥梁,目的是构建一个加速机器学习应用的高效硬件。学生通过了解机器学习的关键特性,利用核心的硬件优化原则,以及学习前沿的工业界应用,以一种非常实际的方法来理解行业所面临的挑战。

课程内容

DNN Introduction

Shao 首先清楚的定义了人工智能(AI,Artifical Intellengence),机器学习(ML,Machine Learning)和深度学习(DL,Deep Learning)的概念以及它们之间的关系。2012 年因对深度学习领域具有贡献而获得图灵奖的得主 Yoshua Bengio 提出,深度学习是 "Seek to exploit the unknown structure in the input distribution in order to discover good representations, often at multiple levels." DL 通过有限的特征数据,以多层特征提取的方法推演出事物之间的复杂关系。DL 是 ML 的子集,而 ML 又是 AI 的子集。DNN 的快速发展得益于三个原因,Bigger Data,Better Algorithm 以及 More Compute。本课程的主要内容就是教授如何构建更优秀的硬件用以加速机器学习应用,并且在其基础上希望学生能够思考如何实际构建更优的算法,更高效的管理或软件基础架构,同时也能打造出更卓越的硬件。

我们在讨论如何构建一个 ML 算法的时候,我们主要关注三个部分,经验(Experience)、性能评估(Performance Measure)以及我们要执行的任务(Task)。经验指的是已经有的成功案例,在这里指的是数据集(Dataset);性能评估指我们的算法目标是否达成,我们的模型效果如何,在 ML 算法中我们用成本函数(Cost Function) 衡量;需要执行的任务通常有两个关键部分,一个是模型,可能是线性回归方程,也有可能是深度学习中的网络架构,另一个是优化方法,在给定模型和成本函数的基础上,可以尝试不同的优化方法对模型进行微调,以达到更好的效果。Shao 提出一个简单的例子来解释这三个部分:

以房价为例,我们用一个线性回归模型(Linear Regression)假设房屋面积大小和近期房屋价格之间的关系。

Dataset(数据集):

  1. (x, y) 中 x 是房屋面积大小,y 是近期房屋价格
  2. m 是训练的数量

Cost function(成本函数):

  1. Mean Squared error 均方误差
  2. MSE=MSE= 1m1 \over m Σi=0m\Sigma_{i=0}^m (h(xi)yi)2(h(x_i)-y_i)^2

Model(模型):

  1. h=w0+w1xh=w_0+w_1*x

Optimization method(优化方法):

  1. 求解梯度为 0 的位置
  2. 梯度下降

关于成本函数 CFCF,这里引入了一个概念,正则化(Regularization) 。正则化的目的是为了减少模型的过拟合(Overfitting),过拟合指的是模型在训练集上效果很好,但在测试集上表现糟糕。正则化试图在训练过程中添加模型的偏好,降低泛化误差(Generalization Error)而不是训练误差(Training Errors),并且这种偏好是将模型更加简化。如果一个复杂的模型和一个简单的模型可以达到一样的任务目标,我们更倾向于选择更简单的模型,因为我们认为更简单的模型泛化能力更好。正则化的具体方法之一是权重衰减(Weight Decay) ,即L2/1 正则化,我们倾向更小的权重,公式如下:

CF=MSEtrain+λΣiWi2(L2)CF=MSE_{train}+\lambda\Sigma_iW_i^2 (L2)

CF=MSEtrain+λΣiwi(L1)CF=MSE_{train}+\lambda\Sigma_i|w_i| (L1)

在这个例子中,我们希望通过梯度下降的方法,将成本函数,本例中的均方误差最小化,即期望预测值与实际值完全一致。这里采取的方法就是更新系统权重(Weight)w0w_0w1w_1

当我们讨论深度神经网络的时候,深度 "Deep" 指的是多层结构,它是由线性模型和非线性转换构成的。如下图所示,深度神经网络是一个相当标准的网络结构,为了和其他算法区别开,我们称点为激活过程(Activations),边为权重(Weights)。深度神经网络分为输入层,输出层,以及中间一些被称为隐藏层。中间的隐藏层并不直接与外部输入交互,也不直接与外部输出交互

Two-or-more-hidden-layers-comprise-a-Deep-Neural-Network.png

关于非线性转换(Non-linear Transformations)或者非线性函数(Non-linear Function),设置它的目的是为了在计算的过程中提供更多数据集以外的特征,否则层与层之间的映射就是单纯的矩阵乘法,无法学习到除数据集以外的知识。之前的非线性函数一般使用的是 SigmoidSigmoid 函数和 TanhTanh 函数,原因是这些函数有界,非常方便作为下一层的输入。比如 SigmoidSigmoid 函数,如下图所示,是一个非常漂亮的函数,以(0, 0.5)为中心,在 x 轴上(-5,5)区间外函数趋于平滑,在 y 轴上函数处于(0,1)区间之内。

790418-20181107181130984-1052306153.png

然而,SigmoidSigmoid 函数由于其计算复杂,计算量大,且在深度网络结构中容易出现梯度消失的问题。所以,当前主流的非线性函数一般选用 ReluRelu 函数。ReluRelu 函数的表达式是 Relu(x)=max(0,x)Relu(x)=max(0,x),它的优势在于大大降低了计算复杂度,提供了一个稀疏性的网络,更有针对性的提供除数据集以外的特征。

总而言之,训练(Training) 模型的本质就是一个挑选数据集,审视成本函数,并反向传播更新权重,以便输出的激活值更好的拟合模型的流程。其中的成本函数就是我们评估模型优劣的指标,优化方法就是我们更新权重的一种方式。而推理(Inference) 基本上就只进行前向传播,而不涉及反向传播。

论述完毕!