4-深度学习基础

深度学习的深度有两个含义,一个是指神经网络的层数比较多,一个是由于神经网络层数多,它能学习的样本更深层次

一,信号前向传播

1,介绍

信号前向传播是指输入信号按照输入层,隐藏层,输出层的顺序传播。每个隐藏层都与前一层和后一层的每个神经元连接(即全连接)。

假如我们输入-1和1,输出0.62和0.83,函数就可以写作如下所示,但是中间隐藏层我们是无法构造出一个函数的,也就是无法具体的把f的数学表达式写出来。

输入信息量一般是一定的,输出信息量也是一定的,中间隐藏层层数和神经元个数我们是可以去设计的

2,输出层用softmax函数处理分类问题

处理分类问题时,输出层可以用softmax函数作为激活函数,softmax函数会使输出层的所有结果加起来等于1,而每个输出值都代表出现这个结果的概率。

softmax函数具体过程如下所示,它会将输出层上一步的得到的数值进行e的指数次方,然后除以他们所有数值e的指数次方的和,这样就能保证输出数值加和为1

如判断一张图片中的一个数字是什么。输入层输入值为这张图片所有像素点的数值,经过多层隐藏层,会在输出层用softmax输出各个数字出现的概率(输出层的可能结构是固定的,在这个问题中输出层结果就是0~9的10个数字)

二,激活函数

在神经网络中,我们说在隐藏层和输出层会增加激活函数,对输入信号进行激活。为了增强网络的表达能力,我们需要激活函数来将线性函数转换为非线性函数。以下介绍的函数主要用在隐藏层中,如果是回归问题,也可以用在输出层上;对于分类问题,就用上面说的softmax函数

引用激活函数的目的就是为了在模型中引入非线性,增强网络的非线性表达能力。

1,浅层神经网络激活函数

sigmoid函数

在浅层神经网络中,最早常用的主要是sigmoid函数,它的取值在0到1之间,它的图形是以y=0.5为对称的。在x不断增大时它的y值趋向稳定,函数值y是恒大于零的。

常用的第二个激活函数为tanh函数,它的图形和上述的sigmoid函数是类似的,只是tanh函数以原点为对称点,这样函数值y就有正有负

tanh函数

注意:在前面我们介绍过的梯度下降法中,参数值需要根据上一次得到的函数值不断求导更新,但对于sigmoid函数和tanh函数来说当x不断增大或减小时,函数值会恒定,也就是对图像求导近似等于0,导致参数无法更新,所以上述两种方法不适合用在深层神经网络当中,只适用于浅层神经网络。

2,深层神经网络激活函数

ReLU函数

ReLU函数:这个函数意思是,当x<0时,函数值等于0.当x》0时函数值y=x。当x>0是这个函数的求导值始终为1,就不存在梯度消失的问题,这就解决了浅层神经网络参数无法更新的问题。但是当x<0时,y=0也会存在问题,于是就有了改进函数Leaky-ReLU函数

 Leaky-ReLU函数

Leaky-ReLU函数:无论x大于0小于0,都不会存在梯度消失的问题

  ELU函数

 ELU函数:

3,选用

CNN在卷积层尽量不要使用sigmoid和tanh,将导致梯度消失。首先选用ReLU,使用较小的学习率,以免造成神经元死亡的情况。

如果ReLU失效,考虑使用Leaky ReLU,PReLU,ELU或Maxout,此时一般情况都可以解决。

三,损失函数

前面机器学习概述我们介绍过深度学习分为 建立模型-衡量标准-参数学习三部分。而损失函数就是衡量标准这一步中的,它用来评价一个函数的好坏。

损失函数是用来衡量模型的预测值和真实值之间差异程度的函数。损失函数的设计依赖于具体的任务,分类问题中常用交叉熵损失函数,回归问题常用平方损失函数等。比如前面所说的数字识别的问题,我们就要设计分类的损失函数,使得学习目标能够达到输入如图所示的手写数字8能够使输出y8最大(y8就表示识别为8的概率)。也就是说输入一个手写数字图片得到他的输出值,输出值要尽可能接近我们的目标值(目标值已知),损失函数就是用来表示输出值和目标值之间的差距,这个值越小越好,在这里损失函数就是所有样本集的总损失和

对于多分类问题的损失函数 。如图所示当对四组输入值xi进行权重和b加和后得到了三组数据-2.85,0.86,0.28.目标值1,00;在最一开始的时候权重值w和b都是随机选取的所以将他们带入后的计算结果必然和标签不一致,这时就需要定义一个损失函数来衡量计算结果与标签值的差异。

多分类损失的定义使用交叉熵损失函数和Softmax函数概率归一化处理。softmax概率归一化如下图1所示,最终得到概率值q(x),然后利用交叉熵损失函数来衡量q(x)和标签值之间的差异,它的形式以及计算结果如图二所示

 

四,优化方法

优化方法就是权重参数w和b,前面机器学习概述我们介绍过深度学习分为 建立模型-衡量标准-参数学习三部分。优化方法就属于参数学习这一部分,它用来更新w和b,然后再带入损失函数中看一看损失函数值和标签值的差距,如果差距还大,那就再利用优化方法再更新。优化方法,也就是参数学习,常用的方法是梯度下降法和误差反向传播算法

1,梯度下降法

对于前面说过的一元线性回归理论,它的参数w,b是很少的,利用枚举所有可能的参数取值是可行的,但是对于深度学习来说。它的隐藏层多,每一层的神经元可能达到上百上千个,利用枚举所有参数可能的取值明显是不现实的。这时就需要寻找模型参数使得总损失最小

下图为总损失函数随着参数w变化的曲线,梯度下降法就是沿着曲线的负梯度方向去调节参数,使得总损失值逐渐减小,逼近最小值。由于神经网络当中参数非常多(参数多,无法一一枚举也就无法一起更新),所以在更新w时是逐个去更新,在更新一个权重参数wi时,其他参数都保持上一次更新后的值不变,仅仅以wi为变量x,则总损失值就会和wi构成一个函数,求出总损失函数对wi的导数,然后沿着负梯度方向去更新wi,直到导数值很小接近0时就可以终止这一个参数的迭代。之后每个权重参数都按照这样的方法找出总损失值的最小值。

wi的更新公式:,η指学习率,η乘的那一项就是导数值

但是总损失函数曲线可能为非凸的,更新wi时可能使更新停在鞍点或者是局部最小值上(即未找到全局最小值就停止)。这种情况可以通过对wi取多个不同的初始值,不断梯度下降后得到不同的损失最小值,然后比较他们的大小,选择最小的那一个,除此之外也有其他不同的解决办法

梯度下降法根据使用样本方式的不同分为批量梯度下降,随机梯度下降和小批量梯度下降。批量梯度下降:指每次迭代时考虑了所有样本的损失值,这样会导致计算量很大。随机梯度下降:指每次迭代时只考虑一个样本的损失值(利用Python中的ranom函数随机选择一个),但是迭代次数要比总样本数量多好几倍才能保证绝大多数样本能够被选上。小批量梯度下降法是两者的折中,他每次随机选取一定数量样本的损失值进行梯度的更新。

在传统的梯度下降法当中,每次更新梯度时只考虑当前的负梯度方向而忽略之前的更新历史,这样容易陷入局部最优解并且在优化过程中可能出现振荡现象,为了解决只写问题,就出现了梯度下降法的优化方法(如下图),每种数据的数学原理都比较复杂,在程序代码中用的时候,Python已经提供了内置函数,只需要一行代码调用即可

2,误差反向传播算法

误差反向传播也叫做BP神经网络,解决了多层神经网络学习的问题,大约80%的神经网络模型都用BP神经网络或者它的变形。误差反向传播和梯度下降法配合使用,误差反向传播用来计算损失函数关于参数的导数,并反向传播不断进行;梯度下降法是在每一步求出倒数之后对参数进行更新。

反向传播的思想就是通过计算输出层和期望值之间的误差来调整网络参数,从而使误差变得很小

在信号正向传播时,如下图所示,最终的输出结果V是所有参数(w1,w2,w3……)的函数。每一层的各个输出都是参数w的函数。所以就可以对每个参数求偏导。

先将神经网络的输出值和标签值作比较,计算损失。如果损失值较大,就使用梯度下降法先调整最后一层神经元的参数,然后反向进行调整逐层的参数,完成一轮训练。再根据上一轮训练后的参数正向计算输出值,再和标签值进行比较,然后反向再调整逐层的参数,完成第二轮训练,不断地进行训练,直到网络输出和标签值很接近

五,深度学习框架

深度学习框架是一种软件工具,用于支持和简化深度学习算法的设计,训练和部署。

深度学习框架提供了一组API和工具,可以方便定义和训练神经网络模型,并在不同的硬件上进行优化和部署,通常包括以下几个部分:1,前端API:用于定义和配置神经网络模型的结构和参数,例如层,激活函数,优化器等。  2,计算引擎:用于执行神经网络模型的前向传播和反向传播算法,并进行梯度计算和数据更新。   3,数据管理和预处理:用于加载和处理训练数据和测试数据,并进行数据增强和批量处理等操作。    4,硬件加速和分布式计算:用于在多个GPU或分布式系统上进行高效的并行计算和训练。

深度学习框架提供了高级API,开发人员可以在不需要理解底层算法和数学模型的情况下,快速搭建,训练和部署深度学习模型。深度学习框架可以在多个CPU或GPU上进行并行计算,从而提高模型的训练速度和效率。深度学习框架有一个庞大的开源社区,其中包括大量的模型,算法和工具。深度学习框架提供了不同的层和模块,使得开发人员可以根据具体需求选择合适的组件进行构建和优化模型。深度学习框架提供了许多可视化工具,可以帮助开发人员更好的理解和调试模型。

  • 常见深度学习框架

 PaddlePaddle:集深度学习核心训练和推理框架,基础模型库,端到端开发套件,丰富的工具组件为一体

  • 深度学习超参数

普通参数:权重矩阵w和偏置参数b是在确定了超参数后,通过模型的计算得到的

超参数:需要模型设计者确定的参数,如迭代轮次,学习率α,隐藏层参数,每个隐藏层的神经元个数,激活函数的选取,损失函数的选取等。超参数的确定很困难,学习率太小可能导致模型收敛太慢,太大又可能导致模型不收敛;损失函数设计不好也可能导致模型无法收敛。所以存在的问题还是比较多的。使用预训练模型来微调是一个捷径。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值