BP神经网络(深度学习入门)

本文深入探讨了BP神经网络及其在深度学习中的应用。介绍了代价函数、梯度下降法及其优化,包括梯度的概念、梯度下降与梯度上升的区别,以及在训练过程中的作用。此外,文章还讨论了BP算法的详细步骤,以及在求解异或问题上的应用。

BP(Back Propagation) 算法是神经网络深度学习中最重要的算法之一,了解BP算法可以让我们更理解神经网络深度学习模型训练的本质,属于内功修行的部分。

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一 。Minsky和Papert在颇具影响力的"perceptron"
一书中指出,简单的感知器只能求解线性问题,能够求解非线性问题的网络应该具有感知层,但是对隐藏层神经元的学习规则还没有合理的理论依据。

从前面介绍的感知器学习规则来看,其权值的调整取决于期望输出与实际输出之差:
Δwi=η(t−y)xi \Delta w_i=\eta (t-y)x_i Δwi=η(ty)xi
但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整。

BP算法的基本思想是:学习过程由信号的正向传播和误差的反向传播两个过程组成。

正向传播时,把样本的特征从输入层进行输入,信号经过各个隐藏层的处理后,最后从输出层传出。对于网络的实际的输出与期望输出之间的误差,把误差信号从最后一层逐层反传,从而获得各个层的误差学习信号,然后再根据误差学习信号来修正各层神经元的权值。

这种信号正向传播与误差反向传播,然后各层调整权值的过程是周而复始地进行的。权值不断调整的过程,也就是网络学习训练的过程。进行此过程直到网络输出误差减小到预先设置的阈值以下,或者超过预先设置的最大训练次数。

代价函数

代价函数也称为损失函数(Loss Function 或 Cost Function)。

代价函数并没有准确的定义,一般我们可以理解为是一个人为定义的函数,我们可以利用这个函数来优化模型的参数。最简单且常见的一个代价函数是均方差(MSE)代价函数,也称为二次代价函数:
E=12N(T−N)2=12N∑t=1N(ti−yi)2 E=\frac{1}{2N}(T-N)^2=\frac{1}{2N}\sum_{t=1}^{N}(t_i-y_i)^2 E=2N1(TN)2=2N1t=1N(tiyi)2
矩阵可以用大写字母来表示,这里的TTT表示真实标签,YYY表示网格输出,iii表示第iii个数据。NNN表示训练样本的个数(注意,这里的NNN是一个大于0的整数,不是矩阵)

T−YT-YTY可以得到每个训练样本与真实标签的误差。误差的值有正有负,我们可以求平方,把所有的误差都变成正的,然后除以2N2N2N。这里的2没有特别的含义,主要是我们对均方差代价函数求导的时候,式子中的2次方的2可以跟分母中的2约掉,使得公式推导看起来更整齐简洁。除以NNN表示求每个样本的误差平均的平均值。

公式可以用矩阵形式来表达,也可以拆分为用∑\sum来累加各个训练样本的真实标签与网络输出的误差的平方。

梯度下降法

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。

梯度

在微积分里面,对多元函数的参数求<!−−StartFragment−−>∂<!−−EndFragment−−><!--StartFragment-->∂<!--EndFragment--><!StartFragment><!EndFragment>偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y)f(x,y)f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x,∂f/∂y)T(∂f/∂x, ∂f/∂y)^T(f/x,f/y)T,简称gradf(x,y)grad f(x,y)gradf(x,y)或者▽f(x,y)▽f(x,y)f(x,y)。对于在点(x0,y0)(x_0,y_0)(x0,y0)的具体梯度向量就是(∂f/∂x0,∂f/∂y0)T(∂f/∂x_0, ∂f/∂y_0)^T(f/x0,f/y0)T.或者▽f(x0,y0)▽f(x_0,y_0)f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x,∂f/∂y,∂f/∂z)T(∂f/∂x, ∂f/∂y,∂f/∂z)^T(f/x,f/yf/z)T,以此类推。

那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y)f(x,y)f(x,y),在点(x0,y0)(x_0,y_0)(x0,y0),沿着梯度向量的方向就是(∂f/∂x0,∂f/∂y0)T(∂f/∂x_0, ∂f/∂y_0)^T(f/x0,f/y0)T的方向是f(x,y)f(x,y)f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 −(∂f/∂x0,∂f/∂y0)T-(∂f/∂x_0, ∂f/∂y_0)^T(f/x0,f/y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。

梯度下降和梯度上升

在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。

梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)f(θ)f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 −f(θ)-f(θ)f(θ)的最大值,这时梯度上升法就派上用场了。

下面来详细总结下梯度下降法。

梯度下降法

首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

在详细了解梯度下降的算法之前,我们先看看相关的一些概念。

1. 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

2.特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0))(x(0),y(0))x(0),y(0),(x(1),y(1))(x(1),y(1))x(1),y(1),则第一个样本特征为x(0)x(0)x(0),第一个样本输出为y(0)y(0)y(0)

3. 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)h_θ(x)hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,...m)(x(i),y(i))(i=1,2,...m)x(i),y(i)(i=1,2,...m),可以采用拟合函数如下:$ h_θ(x)=θ_0+θ_1x$。

4. 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,...m)(xi,yi)(i=1,2,...m)xi,yi(i=1,2,...m),采用线性回归,损失函数为:
$$

  J(θ_0,θ_1)=∑_{i=1}^{m}(h_θ(x_i)−y_i)^2
$$

其中xix_ixi表示第iii个样本特征,yiy_iyi表示第iii个样本对应的输出,hθ(xi)h_θ(x_i)hθ(xi)为假设函数。

梯度下降的详细算法

  1. 先决条件: 确认优化模型的假设函数和损失函数。

比如对于线性回归,假设函数表示为
hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn, h_θ(x_1,x_2,...x_n)=θ_0+θ_1x_1+...+θ_nx_n, hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn,
其中θi(i=0,1,2...n)θ_i (i = 0,1,2... n)θi(i=0,1,2...n)为模型参数,xi(i=0,1,2...n)x_i (i = 0,1,2... n)xi(i=0,1,2...n)为每个样本的nnn个特征值。这个表示可以简化,我们增加一个特征x0=1x_0=1x0=1 ,这样hθ(x0,x1,...xn)=∑i=0nθixi h_θ(x_0,x_1,...x_n)=∑_{i=0}^nθ_ix_ihθ(x0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值