(三)深度学习入门:神经网络的学习

本文介绍了数据在神经网络学习中的关键作用,强调了如何通过损失函数如均方误差和交叉熵误差衡量模型性能。重点讲解了随机梯度下降法(SGD)在大规模数据下的高效优化策略,包括学习率的选择和batchsize/epochsize的概念。
摘要由CSDN通过智能技术生成

目录

前言

一、数据的重要性        

二、损失函数

三、随机梯度下降法(SGD)


前言

上一篇我们探讨了神经网络的前向传播过程,可以完成分类和回归任务。但是我们在使用神经网络解决问题之前,需要为神经网络设置合适的参数,如果神经网络的参数量很小,人工测试不失是一种解决方案,而随着神经网络越来越庞大,参数量呈指数级增长,我们迫切需要实现神经网络参数的自动化配置,让神经网络基于已有知识进行学习。为了让神经网络进行学习,我们引入损失函数作为学习效果优劣的标准,那么神经网络的学习问题就可以转化为损失函数的最优化问题,在本篇中我们首先探讨基本的随机梯度下降法。


一、数据的重要性        

神经网路的特征之一就是可以从数据中进行中学习,即根据大量数据自动决定权重参数的值。传统算法解决问题的模式依赖于人对算法的设计,基于程序设计人员已掌握的知识发现各种情况、少量具有代表性数据之间的联系。这就导致了传统算法只能应用于某种特定场景和情况下,算法的优劣很大程度上受人力、环境的制约,也不能启发性地解决新环境下的未知问题。随着互联网的发展,各种各样移动端设备的出现,收集海量的数据成为可能。计算机所理解的规律和人所理解的规律有很大区别,计算机底层全部由0、1二进制代码实现,人眼所观察到的彩色图像在计算机中只是一堆人无法理解的数据而已。

1a3c50e62174439db99a1f23ea103585.png

上图是手写数字经过卷积神经网络后中间过程图像的示意,我们发现随着网络层的加深,其输出的图像越来越不能够被人类识别,这就显示了计算机的认知策略和人类有着巨大差异。幸运的是我们不需要尝试去理解计算机的底层学习过程,我们只需要寻找计算机与人类交流的一座桥梁即可。与其人工的按照人的标准去教会计算机如何去做,不如让计算机基于海量的数据中自己寻找规律,通过“学习”数据中的规律建立计算机世界观与人类概念的桥梁。显然,要实现计算机的自主学习,大量的数据是必不可少的,数据量越大,学习效果所能达到的上限越高,智能化程度越高。

既然数据对于神经网络如此重要,那么如何有效的组织数据又是一个庞大复杂的课题,我们不过多探究。在我们初步应用神经网络进行学习时,一般将数据分为训练数据与测试数据两部分来进行学习和测试。首先,使用训练数据进行学习,寻找最优的参数;然后,使用测试数据评价训练得到的模型的实际能力。我们不仅仅追求模型的准确率,还关心模型的泛化能力。泛化能力是指模型在未见过的数据上的表现能力。一个具有强泛化能力的模型能够很好地适应不同的数据,不仅在训练数据上表现良好,还能在测试数据上取得较好的预测结果。为了正确的评估模型的泛化能力,就必须划分训练集和测试集,测试集是不能够包含在训练集中的。如果仅仅用一个数据集去学习和评价参数,是无法进行正确评价的,这样会导致网络可以顺利地处理某个数据集,但无法处理其他数据集的情况,这种只对某个数据集过度拟合的状态称为过拟合,避免过拟合也是机器学习的重要课题。

二、损失函数

损失函数是表示神经网络性能恶劣程度的指标,即当前的神经网络对监督数据多大程度上不拟合或不一致。我们通过不断改变权重的参数的值来减小损失函数的值,优化神经网络的检测效果。

1.均方误差

均方误差是比较常见的损失函数形式:

aa32df93df51452da881f6a4b0dbd233.png

eq?y_k表示神经网络的输出,eq?t_k表示监督数据,eq?k表示数据的维数。

在一个分类问题当中,假定一共有五个类别。对于某个检测对象神经网络的输出为:

8aea752af43e4a7e91a9341b60e8a5c1.png

 理想输出为:

0cb26559960242e0a164b9a452718b1a.png

则其均方差误差为: 

36b66c8036ad485489a5162bad2002bd.png

2. 交叉熵误差 

交叉熵函数也常用作损失函数,其表达形式如下:

61726a5372b448149870a34c6ab49d6a.png

由于eq?t_k中只有正确类别标签的索引为1,交叉熵可以简化为对应正确解标签的输出的自然对数的相反数。交叉熵误差的值是由正确解标签所对应的输出结果决定。

在分类问题当中,相较于均方差误差,交叉熵函数有更好的表现。

交叉熵误差相比于均方差误差有以下几个优势:

  1. 处理分类问题:交叉熵误差是一种常用于分类问题的损失函数,特别适用于多类别分类问题。它对于类别之间的差异性更为敏感,能够更好地区分不同类别的样本。

  2. 避免梯度消失:在使用sigmoid函数作为激活函数时,交叉熵误差对于梯度消失的问题更为稳定。由于sigmoid函数的导数在输入值较大或较小时接近于0,使用均方差误差时可能会出现梯度消失的情况。

  3. 更好的数值稳定性:交叉熵误差的计算使用了log函数,能够有效地避免数值计算上的不稳定性问题。而均方差误差在计算过程中不涉及log函数,可能在数值计算上更容易出现问题。

  4. 更快的收敛速度:交叉熵误差在训练过程中能够更快地收敛于最优解,尤其是在深度神经网络中,交叉熵误差通常能够比均方差误差更快地收敛。

三、随机梯度下降法(SGD)

机器学习使用训练数据进行学习,如果计算损失函数时必须将所有的训练数据作为对象,在数据量庞大的情况下,运行效率将极为低下。随机梯度下降法(Stochastic Gradient Descent,简称SGD)是一种基于梯度的优化算法,常用于训练机器学习模型。与传统的梯度下降法相比,SGD在每次迭代中仅使用一个随机选择的样本(mini-batch)来计算梯度,从而减少了计算开销。

机器学习的主要任务是在学习时寻找最优参数,即尽可能地减小损失函数的值。但是一般而言,损失函数很复杂,参数空间也非常庞大,我们不知道它在何处能够取得最小值。

梯度表示的各点处的函数值减小最多的方向,不能够保证梯度所指的方向就是函数的最小值或者能够到达最小值的方向。虽然梯度的方向不一定指向最小值,但沿着它的方向能够最大限度地减小函数的值,因此在寻找损失函数的最小值(或者尽可能小的值)的位置的任务中,梯度下降法是有效的。

d37e0048e2524bcea56de85e56fb11d6.png

其中eq?%5Calpha表示学习率,学习率决定了在一次学习中,应该学习多少,以及在多大程度上更新参数。学习率一般取在[0,1]之间的范围上,如果学习率过大,会导致损失函数发散成一个很大的值;反之,如果学习率过小,容易陷入局部最小值不易跳出,没有进行有效更新就结束优化过程。学习率是一种超参数,它和神经网络的权重和偏置不同,它不能通过神经网络的学习自动得到,而是要通过人工设定选取合适的值。 

对于一般的神经网络开始学习之前,我们还需要设定batchsize和epochsize。对于SGD算法来讲batchsize表示每一次随机选取计算损失的数据个数,epochsize表示学习中所有训练数据均被使用过一次的更新次数。如果总数据量10000,batchsize=100,进行SGD过程100次时总共用过的数据量是10000,即不考虑随机选取的重复情况,只关注次数,此时完成了一个epoch。一般我们每一个epoch便会记录当前神经网络的识别精度,这样便可以绘制随着训练进行识别精度的变化曲线,便于我们修正和分析。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值