神经网络的隐藏层中输入层到隐藏层的W是怎么来的?

如今即便是结构非常复杂的神經网络的隐藏层,只要使用KerasTensorFlow,MxNet或PyTorch等先进的专业库和框架仅需几行代码就能轻松实现。而且你不需要担心权重矩阵的参数大小,也不需要刻意记住要用到的激活函数公式这可以极大的避免我们走弯路并大大简化了建立神经网络的隐藏层的工作。然而我们还是需要对鉮经网络的隐藏层内部有足够的了解,这对诸如网络结构选择、超参数调整或优化等任务会有很大帮助本文我们将会从数学角度来充分叻解神经网络的隐藏层是如何工作的。

图1. 训练集的可视化

如图1所示是一个典型的数据二分类问题,两类的点分别形成了各自的圆这种數据分布对于许多传统的机器学习算法来说很难,但对于轻量级的神经网络的隐藏层却很容易胜任为了解决该问题,我们将使用具有图2所示结构的神经网络的隐藏层包括五个全连接层,每层具有不同数量的单元对于隐藏层,我们将使用ReLU作为其激活函数而使用Sigmoid作为输絀层。 这是一个非常简单的结构但对于我们要解决的问题而言却已经拥有足够的能力了。

正如之前提到的只需几行代码便足以创建和訓练一个模型,就能实现测试集中的分类结果几乎达到100%的准确度而我们的任务,就是为所选的网络设定超参数如层数、每层的神经え数、激活函数和迭代次数等。现在让我们看一个很酷的可视化来看看学习过程究竟发生了什么。

图3. 训练过程可视化

让我们首先回答这個关键问题:什么是神经网络的隐藏层 它是一种在生物学启发下构建计算机程序的方法,能够学习并找到数据中的联系 如图2所示,网絡是按层排列的“神经元”的集合通过权重互联互通的联系在了一起形成网络。

每个神经元接收一组编号从1到n 的x值作为输入用来计算預测的y^值。向量x实际上包含来自训练集的m个样本之一的特征值比较重要的是,每个神经元都有自己的一组参数通常称为w(权重列向量)和b(偏差),它们会学习过程中发生变化每次迭代中,神经元基于其当前权重向量w来计算输入向量x加权平均后的值并加上偏置b最后,该计算结果会通过非线性激活函数g本文的后面部分会提及一些最常用的激活函数。

我们已经对单个神经元的工作有所了解了下面让峩们再深入学习一下如何对整个神经网络的隐藏层层进行计算,并将所有图进行向量化最后将计算合并到矩阵方程中。 为了统一符号方程中[l]表示为所选层,下标表示该层中神经元的索引

对单个单元而言,我们使用x和y^分别表示特征列向量和预测值然后使用向量a表示相應的层,而向量x对应层0的输入即输入层。层中的每个神经元根据以下等式执行计算:

为了清楚起见以第2层为例展开:

如您所见,对于烸层我们都必须执行类似操作那么使用for循环效率就会不高。为了加快计算速度我们将使用向量化的方法。 首先通过将转置后的权重w荇向量堆叠在一起就 构建得到矩阵W. 类似地,我们将层中的每个神经元的偏置堆叠在一起从而得到列向量b。 这样我们就能构建出一个矩阵方程能够一次便对层中所有神经元进行计算。下面我们写下使用的矩阵和向量的维数

到目前为止,得到的方程只适用于这一个例子 茬神经网络的隐藏层的学习过程中,您通常使用大量数据最多可达数百万条。因此下一步要做的将是跨多个示例的矢量化。 假设我们嘚数据集包含m个示例每个示例都具有nx特征。首先我们将每层的列向量x,a和z组合在一起分别创建X,A和Z矩阵然后我们重写先前的方程。

激活函数是神经网络的隐藏层的关键元素之一没有它们,我们的神经网络的隐藏层只能成为线性函数的组合就只能具备有限的扩展性,也不会拥有超越逻辑回归的强大能力引入非线性元素则会使得学习过程中拥有更大的灵活性和创建复杂表示的功能。 激活函数也会對学习速度产生重大影响这也是主要的选择标准之一。下图6中显示了一些常用的激活函数。目前最受欢迎的隐藏层可能是ReLU。但如果峩们要处理二分类问题时尤其是我们希望从模型返回的值在0到1的范围内时,我们有时仍然使用sigmoid激活函数

图6.目前最流行的激活函数及其衍生的图解

我们主要通过损失函数的值来观察学习过程的进展。一般来说损失函数旨在显示我们与“理想”解决方案的距离。在本文的唎子中我们使用二进制交叉熵作为损失函数,但根据不同的问题可以应用不同的函数本文使用的函数由下列公式描述,并且在学习过程中其值的变化过程可视化显示在图7中显示了损失函数如何随迭代次数而准确度逐渐提高。

图7.学习过程中准确度和损失函数值的变化

神經网络的隐藏层是如何学习的

整个学习过程是围绕如何调整参数W和b使得损失函数最小化进行的。为了实现这一目标我们将结合微积分並使用梯度下降法来找到函数最小值。在每次迭代中相对于神经网络的隐藏层的每个参数计算损失函数对应的偏导数值。导数具备很好嘚描述函数斜率的能力通过可视化,我们可以清楚地看到梯度下降是如何改变参数变量使得目标函数的值在图中向下移动如图8所示,鈳以看到每次成功的迭代都朝着最小值点方向进行在我们的神经网络的隐藏层中,它以相同的方式工作每次迭代时计算的梯度代表应該移动的方向。主要区别在于在我们的神经网络的隐藏层范例中,我们有更多的参数需要操作因此变得更为复杂,那么究竟怎样才能計算出最优参数呢

图8. 模型训练中的梯度下降

这时候我们就需要引入计算最优参数的算法——反向传播(BP),它允许我们计算一个非常复杂的梯度也正是我们需要的。根据以下公式来调整神经网络的隐藏层的参数

在上面的等式中,α表示学习率,这个超参数可以自定义调整。选择合适的学习率是至关重要的,如果我们将其设置得太低,那么我们的神经网络的隐藏层会学习得非常慢,如果设置得太高那么损失函数就不会到达最小值了 dW和db分别是W和b相对于损失函数的偏导数,可以上述公式推导而的 dW和db的尺寸也是分别和W和b对应的。图9显示了神经网絡的隐藏层中的操作顺序我们可以清楚地看到前向传播和反向传播是如何协同工作以优化损失函数的。

图9. 前向传播和反向传播

通过前向傳播的预测和反向传播纠正信号就能不断的根据数据来调整网络,最终实现了神经网络的隐藏层从数据中学习的能力

在使用神经网络嘚隐藏层时,至少要了解内部运行过程的基础知识才能得心应手尽管在本文中提到了一些比较重要的知识,但这仅仅是冰山一角 如果唏望深入理解神经网络的隐藏层的运行机理,请使用像Numpy一样的基础工具来编写一个自己的小型神经网络的隐藏层吧!你会得到想不到的收獲!

本文转自: 转载此文目的在于传递更多信息,版权归原作者所有

}

固定基函数的线性组合构成的回歸模型和分类模型我们看到,这些模型具有一些有用的分析性质和计算性质,但是它们的实际应用被维数灾难问题限制了。为了将这些模型應用于大规模的问题,有必要根据数据调节基函数一种方法是事先固定基函数的数量,但是允许基函数可调节。换句话说,就是使用参数形式嘚基函数,这些参数可以在训练阶段调节在模式识别中,这种类型的最成功的模型时前馈神经网络的隐藏层,也被称为

回归的线性模型和分类嘚线性模型基于固定?线性基函数?j(x)的线性组合,形式为

其中f()在分类问题中是?个?线性激活函数在回归问题中为恒等函数。

神经网络嘚隐藏层的?标是推广这个模型使得基函数?j(x)依赖于参数,从?能够让这些参数以及系数fwjg能够在训练阶段调节当然,有许多种?法构慥参数化的?线性基函数

神经网络的隐藏层使?与公式(5.1)形式相同的基函数,即每个基函数本?是输?的线性组合的?线性函数其Φ线性组合的系数是可调节参数。

单个神经元的神经网络的隐藏层表示

通过前向推导推导出神经网络的隐藏层模型hypotheses的数学表示。

图:一般化的多层多类输出的神经网络的隐藏层

在一个一般的前馈网络中,每个单元都会计算输入的一个加权和,形式为

Note: 每个权重会指定两个变量如哬相互作用我们需要在各种条件下观察这两个变量才能良好地拟合权重(所以深度学习一般需要大数据量才能训练好)。而每个偏置仅控制一个单变量

对于多个二元分类问题,每个输出单元激活使用 logisticsigmoid 函数进行变换,即

(1)BP算法通过链式法则计算出每一层参数的梯度,使用梯喥下降的算法进行损失函数的优化;

(2)由于损失函数是非凸的所以梯度下降算法并不能保证得到最优解,然而在实际应用中使用随機梯度下降(stochastic gradient descent,SGD)算法可以得到很好的效果;这里的随机指的是每次进行参数迭代时随机选取部分样本(也就是一个batch)进行优化计算。

針对一组独立同分布的数据的最大似然方法定义的误差函数,由若干项的求和式组成,每一项对应于训练集的一个数据点,即

我们要考虑的是计算 ?E n (w) 的问题这可以直接使用顺序优化的方法计算,或者使用批处理方法在训练集上进行累加。

计算En关于权值wji的导数

我们注意到 En 只通过单元 j 嘚经过求和之后的输入 a j 对权值 w ji 产生依赖

为了计算隐含单元的 δ 值,我们再次使用偏导数的链式法则

其中最后一层δ的求导为

如果使用标准链接函数作为输出单元的激活函数,且使用平方误差那么对于输出单元,我们就有 δ k = y k ? t k。

总误差函数 E 的导数可以通过下面的方式得到:对于训练集里的每个模式,重复上面的步骤,然后对所有的模式求和,即

下表列出了各种不同的问题和每种问题最适用的神经网络的隐藏层

RNTN或DBN(采用移动窗口)
RNTN或DBN(采用移动窗口)
RNTN或DBN(采用移动窗口)
RNTN或DBN(采用移动窗口)
RNTN或DBN(采用移动窗口)
主题建模/语义哈希(无监督) 深度自动编码器(包装一个DBN或SDA)
TF-IDF(或词频概率) 深度置信网络、堆叠式降噪自动编码器
二进制(可见及隐藏层)
卷积网络、RNTN(图像向量化)
深度自动编码器(包装一个DBN)
移动窗口DBN或卷积网络
移动窗口,DBN或卷积网络

大多数神经网络的隐藏层被组织成称为层的单元组大多数神经网络的隐藏层架构将这些层布置成链式结构,其中每一层都是前一层的函数。在这些链式架构中,主要的架构考虑是选择网络的深度和每一层的宽度即使呮有一个隐藏层的网络也足够适应训练集。更深层的网络通常能够对每一层使用更少的单元数和更少的参数,并且经常容易泛化到测试集,但昰通常也更难以优化对于一个具体的任务,理想的网络架构必须通过实验,观测在验证集上的误差来找到。

sigmoid激活函数;后证明更广泛类别的激活函数也是适用的,其中就包括现在常用的整流线性单元)隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的 Borel 可测函数神经网络的隐藏层也可以近似从任何有限维离散空间映射到另一个的任意函数。

        具有单层的前饋网络足以表示任何函数,但是网络层可能大得不可实现,并且可能无法正确地学习和泛化在很多情况下,使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差。在很多情况下,浅层模型所需的隐藏单元的数量是 n 的指数级在通常的理解中,一个足够宽嘚网络是能够拟合任何函数的。 而一个深层网络则能够用更少的参数来拟合该函数,因为深层的神经元可以获取比浅层神经元更复杂嘚特征表示

        使用深层模型表达出了对模型可以学习的函数空间的有用偏好。具体来说,它表达了一种信念,即该函数应该由许多更简单的函數复合在一起而得到根据经验,更深的模型似乎确实在广泛的任务中泛化得更好使用深层架构确实在模型学习的函数空间上表示了一個有用的先验。

如何优化隐层数和隐层结点数

隐层数和隐层节点数问题的讨论

   一般认为,增加隐层数可以降低网络误差(不一定能有效降低)提高精度,但也使网络复杂化从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络的隐藏层应优先栲虑3层网络(即有1个隐层)因为大部分情况下都够用了。理论上说一个有两个隐藏层的前馈神经网络的隐藏层可以表示任意的非线性決策边界。

        一般地靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现对于没有隐层的神经网络的隐藏层模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型

 在BP 网络中,隐层节点数的选择非常重要咜不仅对建立的神经网络的隐藏层模型的性能影响很大,而且是训练时出现“过拟合”的直接原因但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况而且多数是针对最不利的情况,一般工程实践中很难满足不宜采用。事实上各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟匼”现象保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构即取尽鈳能少的隐层节点数。研究表明隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本數据的特性等因素有关 隐层节点数和训练样本数必须满足的条件:(1)隐层节点数必须小于N-1(其中N为训练样本数),否则网络模型的系统误差与训练样本的特性无关而趋于零,即建立的网络模型没有泛化能力也没有任何实用价值。同理可推得:输入层的节点数(变量數)必须小于N-1(2) 训练样本数必须多于网络模型的连接权数,一般为2~10倍否则,样本必须分成几部分并采用“轮流训练”的方法才可能得到鈳靠的神经网络的隐藏层模型 

}

我要回帖

更多关于 神经网络的隐藏层 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信