当前位置: 首页 > 科技观察

深度学习的三个主要步骤!

时间:2023-03-21 14:33:13 科技观察

本文来自李宏毅机器学习笔记(LeeML-Notes)团队学习,详细介绍了使用深度学习技术的三个主要步骤。教程地址:https://github.com/datawhalechina/leeml-notes深度学习三步走:Step1:神经网络(Neuralnetwork)Step2:模型评估(Goodnessoffunction)Step3:选择最优函数(Pickbestfunction)Step1:神经网络神经网络由许多单元相连组成,这些单元称为神经元。神经网络类似于人体的神经细胞,电信号在神经元上传递,类似于神经网络传递数值的过程。在这个神经网络中,一个神经元相当于一个逻辑回归函数,所以上图中有很多逻辑回归函数,每个逻辑回归都有自己的权值和自己的偏置,而这些权值和偏置就是参数。图中红色方框代表神经元。多个神经元以不同的方式连接,形成不同结构的神经网络。神经元的连接方式是人为设计的。Neuron:神经元的结构,如图将每个输入乘以其对应的权重,并将结果求和得到;将总和代入激活函数得到结果。全连接前馈神经网络全连接:每个神经元的输出连接到下一层神经元的每个神经元,每个神经元的输入来自上一层的每个神经元。前馈:前馈也可以称为前馈。从信号流的角度来看,是指输入信号进入网络后,信号流是单向的,即信号从上一层流向下一层,一直流向输出层。任意两层之间的连接没有反馈(feedback),即信号不会从下一层返回到上一层。全连接前馈神经网络示例:如图所示,这是一个4层的全连接神经网络,每层有两个神经元,每个神经元的激活函数为sigmoid。网络输入为(1,-1),激活函数为sigmoid:网络输入为(0,0),激活函数为sigmoid:神经网络结构:InputLayer:网络的输入层,以及Layer的大小与实际输入大小相匹配。隐藏层:输入层和输出层之间的网络层。OutputLayer:网络的最后一层,神经元计算的结果直接作为模型的输出输出。一些问题为什么叫“全连接”?因为网络中有两层相邻的神经元,上一层的每个神经元都连接到下一层的每个神经元,所以称为全连接;为什么叫“前馈”?由于网络中价值传递的方向是从前向后(输入层到输出层),所以称为前馈。深度学习,“Deep”体现在哪里?神经网络的连接方式是人工设计的,因此可以堆叠很多层神经元,形成一个非常“深”的网络。如上图所示,2015年提出的ResNet已经达到了152层的深度。深度神经网络需要特殊的训练技能。随着层数的增加,网络参数的数量增加,计算量增加,通常超过数亿次计算。如此复杂的结构,我们就不一一计算了。对于上亿次的计算,使用循环的效率很低。网络的运算过程如图所示:在上图中,网络的运算过程可以看作是一个矩阵运算。网络的计算方式就像嵌套一样,所以整个神经网络的运算就相当于一系列的矩阵运算。从结构上看,每一层的计算都是相同的,即用计算机进行并行的矩阵运算。这样写矩阵运算的好处是可以使用GPU加速,GPU核数多,可以并行做很多矩阵运算。神经网络的本质:通过隐藏层进行特征转换。隐藏层可以看作是对网络输入层的输入特征进行特征处理,输出是在最后一个隐藏层输出。这时候的输出可以看作是一套全新的特征。它的输出被馈送到输出层,输出层对这组全新的特征进行分类。例子:手写数字识别举一个手写数字识别的例子:输入:一个16*16=256维的向量,每个像素对应一个维度,颜色(墨水)用1表示,没有颜色(没有墨水)用1表示0表示,将图片展平成256维的向量作为网络输入。输出:10个维度,每个维度代表一个数的置信度(可以理解为这个数的概率)。从输出结果来看,每个维度对应输出一个数,代表模型输出的是当前分类数的概率。说明这张图为2的可能性最大。在这个问题中,唯一确定的是输入是256维的向量,输出是10维的向量。我们需要找到的函数是输入和输出之间的神经网络的函数。从上图可以看出,神经网络的结构决定了函数集。一般来说,函数集中的函数越多,函数越复杂,网络的表达空间就越大,能够处理的模型也就越复杂。因此,网络结构(networkstructured)很关键。那么有几个问题:多少层?每层有多少个神经元?对于这道题,我们需要用尝试和直觉的方法来调试。对于一些机器学习相关的问题,我们一般使用特征工程来提取特征,但是对于深度学习,我们只需要设计一个神经网络模型就可以进行。对于语音识别和图像识别,深度学习是一个很好的方法,因为特征工程不容易提取特征。可以自动确定结构吗?有很多设计方法可以让机器自动找到神经网络的结构,例如进化人工神经网络(EvolutionaryArtificialNeuralNetworks),但这些方法都不是很流行。我们可以设计网络结构吗?是的,比如CNN卷积神经网络(ConvolutionalNeuralNetwork)Step2:模型评估损失示例对于模型评估,我们一般使用损失函数来反映模型的优劣,所以对于神经网络,我们可以使用交叉熵(crossentropy)函数来计算?和?的损失,然后我们调整参数使交叉熵尽可能小。Overallloss对于loss,我们不仅仅需要计算一个数据,而是要将所有训练数据作为一个整体来计算loss,然后将所有训练数据的loss相加得到一个overallloss。接下来就是在functonset中找到一组可以最小化整体损失的函数,或者找到一组神经网络参数来最小化整体损失。Step3:选择最优函数如何找到最优函数和最佳参数集?-使用梯度下降。具体过程:是一组包括权重和偏差在内的参数。随机找一个初始值,然后计算每个参数对应的偏微分。得到的偏微分集合?就是梯度。有了这些偏微分,我们就可以更新梯度以获得新的参数,并且可以反复重复此操作以获得一组参数,以最小化损失函数的值。Backpropagation在神经网络训练中,我们需要将计算出的loss向前传递,计算每个神经元连接的权重对loss的影响。这里使用的方法是反向传播。我们可以使用很多框架来计算loss,比如TensorFlow、Pytorch、theano等。思考题为什么要用深度学习,深度架构带来了哪些好处?是不是隐藏层越多越好?隐藏层越多越好?从图中的结果来看,毫无疑问理论上网络越深效果越好,但现实中是否如此呢?普遍性定理参数越多的模型越适合数据,这很正常。有一个普遍的理论:对于任何连续函数,它都可以用足够多的神经元来表示。那为什么我们还需要深度(Deep)神经网络结构呢?能不能直接用一层包含很多神经元的网络(Fat)来表示呢?