深度学习-神经网络的学习(rush_peng)

一. 神经网络的学习

这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习,将导入损失函数这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。


(一)数据驱动


比如手写数字 5 的识别

1.传统机器方法:

先从图像中提取特征量,然后再用机器学习中的 SVM 、KNN 等分类器进行学习。

计算机视觉中,常用的特征向量包括:SIFT. SURF.HOG 等



2.深度学习的方法:

连特征量的选择也不需要人为的选择了

在这里插入图片描述

深度学习是一种端到端的学习,机器学习极力的避免人为的介入,而神经网络或者深度学习,比以往的机器学习方法更避免人为的介入。



(二)损失函数


损失函数衡量的是:当前的神经网络和和训练数据,在多大程度上不一致。

损失函数可以使用任意的函数,但一般用 均方误差交叉熵误差

1.均方误差

在这里插入图片描述

以手写数字识别为例:

 y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
 t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
def mean_squared_error(y, t):
 return 0.5 * np.sum((y-t)**2)

注意:

  • 将正确标签表示为1,其他标签表示为0的表示方法称为 one hot 表示
  • Python实现这个代码的时候,yt 都是 NumPy数组
  • 输出结果的值越小,说明越吻合

2.交叉熵误差

在这里插入图片描述
这个其实比上边更简单,因为使用 one-hot 的表示方法,只有正确的标签是1,其他的都是0,所以,其他的不用乘,t(k)也始终等于 1 ,就是 - ln(正确标签的概率)



3.mini-batch 学习

原则上来讲:计算损失函数时必须将所有的训练数据作为对象。也就是说,如果训练数据有100个的话,我们就要把这100个损失函数的总和作为学习的指标。

前边的例子都是针对单个数据的损失函数,如果要求所有训练数据的损失函数的中和,以交叉熵为例,公式如下:

在这里插入图片描述
看着复杂,其实就是加起来除以总数求平均。

但是如果遇到大数据,数据量会有几百万、几千万之多,这种情况下以全部数据为对象计算损失函数是不现实的。因此,我们从全部数据中选出一部分,作为全部数据的“近似”。神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习。




4.为什么要用损失函数

很多人要问,为什么要引入损失函数?而不是直接把准确率作为指标?

在神经网络的学习中,寻找最优参数(权重和偏置)时,要寻找使损失函数的值尽可能小的参数。为了找到使损失函数的值尽可能小的地方,需要计算参数的导数(确切地讲是梯度),然后以这个导数为指引,逐步更新参数的值

比如从100笔训练数据中,训练出来了32笔,那么准确率就是32%,你轻微的调节参数,算出来的也还是32笔,所以准确率还是32%,它的值也不会像32.0123 … %这样连续变化,而是变为33 %、34 %这样的不连续的、离散的值。这样就没办法求导数了。

同样的道理,为什么我们选择激活函数,使用 sigmoid 函数,而不是阶跃函数。

在这里插入图片描述



(三)数值微分

1.导数

导数就是某个瞬间的变化量。


2.偏导数

偏导数是有两个向量。其中的一个就是偏导数。


3.梯度的概念

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

梯度就是把全部变量的偏导汇总二层的向量,称为梯度:

在这里插入图片描述


例如:下面是 f(x0 +x1)=x02 + x12 的梯度图。
在这里插入图片描述

4.梯度法

机器学习的主要任务是在学习时寻找最优参数。即损失函数取得最小值时候的参数。

函数的极小值点称为 鞍点,但是当函数很复杂并且呈扁平状的时候,学习会陷入 “局部最优解”,无法前进的停滞期。

梯度法的叫法,严格来说有两种:

  • 寻求最小值的梯度法称为梯度下降法
  • 寻找最大值的梯度法称为梯度上升法


下面使用数学的方式来表示梯度法:

在这里插入图片描述
注意:

  • η 表示的是学习率
  • 这里只是展示的有两个变量的时候,如果有多个变量,也是通过类似的式子进行更新。
  • 但是一般而言,学习率过大或过小,都抵不过一个好位置

像学习率这样的参数称为超参数。这是一种和神经网络的参数(权重和偏置)性质不同的参数。相对于神经网络的权重参数是通过训练数据和学习算法自动获得的,学习率这样的超参数则是人工设定的。一般来说,超参数需要尝试多个值,以便找到一种可以使学习顺利进行的设定。



5.学习算法实现的步骤

神经网络需要合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为”学习“

第一步( mini-batch )
从训练数据中随机选出一部分数据,这部分数据称为mini-batch。我们
的目标是减小mini-batch的损失函数的值。


第二步(计算梯度)
为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度。梯度表示损失函数的值减小最多的方向。


第三步(更新参数)
将权重参数沿梯度方向进行微小更新。


第四步(重复)
重复步骤1、步骤2、步骤3。

因为这里使用的数据是随机选择的mini batch数据,所以又称为随机梯度下降法(stochastic gradient descent)。“随机”指的是“随机选择的”的意思,因此,随机梯度下降法是“对随机选择的数据进行的梯度下降法”。深度学习的很多框架中,随机梯度下降法一般由一个名为SGD的函数来实现。SGD来源于随机梯度下降法的英文名称的首字母。


6.测试评价

为了防止过拟合,就要在定期评价神经网络的泛化能力,就必须使用不包含在训练数据里的数据,定期对训练数据和测试数据记录识别精度,这样每经过一个 epoch,就会记录训练数据和测试数据的识别精度。

epock [i:pok 新纪元,新时代],是一个单位,一个epoch表示学习中 所有训练数据 均被使用过一次的更新次数,比如:。比如,对于10000笔训练数据,用大小为100 笔数据的mini-batch进行学习时,重复随机梯度下降法100次,所有的训练数据就都被“看过”了。此时,100次就是一个epoch

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值