资讯专栏INFORMATION COLUMN

神经网络NN算法(理论篇)

BenCHou / 1880人阅读

摘要:起步神经网络算法是机器学习中非常非常重要的算法。于是计算科学家们开始考虑用调整权值的方法来让机器学习。年,和等人提出了反向传播,算法,这是最著名的一个神经网络算法。算法算法是多层神经网络的训练一个核心的算法。

起步

神经网络算法( Neural Network )是机器学习中非常非常重要的算法。这是整个深度学习的核心算法,深度学习就是根据神经网络算法进行的一个延伸。理解这个算法的是怎么工作也能为后续的学习打下一个很好的基础。

背景

神经网络是受神经元启发的,对于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。

1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型MP。

1949年心理学家Hebb提出了Hebb学习率,认为人脑神经细胞的突触(也就是连接)上的强度上可以变化的。于是计算科学家们开始考虑用调整权值的方法来让机器学习。这为后面的学习算法奠定了基础。

1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字--感知器( Perceptron )。

1986年,Rumelhar和Hinton等人提出了反向传播( Backpropagation ,BP)算法,这是最著名的一个神经网络算法。

神经网络的构成

多层神经网络由三部分组成:输入层( input layer ), 隐藏层 ( hidden layers ), 输出层 ( output layers )。

每一层都是有单元( units )组成,其中,输入层是由训练集中实例特征向量传入,根据连接点之间的权重传递到下一层,这样一层一层向前传递。

输入层和输出层都只有一层,隐藏层的个数可以是任意的。神经网络的层数计算中不包括输入层,比方说一个神经网络中有2个隐藏层,我们就说这是一个3层的神经网络。

作为多层向前神经网络,理论上,如果有足够多的隐藏层和训练集,是可以模拟出任何方程的。

神经网络可以用来解决分类( classification )问题,也可以解决回归( regression )问题。

从单层到多层的神经网络

由两层神经网络构成了单层神经网络,它还有个别名———— 感知器

如图中,有3个输入,连接线的权值分别是 w1, w2, w3。将输入与权值进行乘积然后求和,作为 z 单元的输入,如果 z 单元是函数 g ,那么就有 z = g(a1 * w1 + a2 * w2 + a3 * w3)

单层神经网络的扩展,也是一样的计算方式:

在多层神经网络中,只不过是将输出作为下一层的输入,一样是乘以权重然后求和:

设计神经网络结构

使用神经网络进行训练之前,必须确定神经网络的层数,以及每一层中单元的个数。整个训练过程就是调整连接点之间的权重值。

特征向量在被传入输入层前,通常要先标准化为 0 到 1 之间的数,这是为了加速学习过程。

对于分类问题,如果是两类,可以用一个输出单元(0 和 1 表示分类结果)进行表示。如果是多分类问题,则每一个类别用一个输出单元表示。分类问题中,输出层单元个数通常等于类别的数量。

目前没有明确的规则来设计最好有多少个隐藏层,通常是根据实验测试和误差,以及准确度来进行改进。

交叉验证方法

如何来预测准确度呢?在SVM的应用篇中,有个方法就是将数据集分为两类,训练集和测试集,利用测试集的数据将模型的预测结果进行对比,得出准确度。这里介绍另一个常用但更科学的方法————交叉验证方法( Cross-Validation )。

这个方法不局限于将数据集分成两份,它可以分成 k 份。用第一份作为训练集,其余作为测试集,得出这一部分的准确度 ( evaluation )。再用第二份作为训练集,其余作为测试集,得出这第二部分的准确度。以此类推,最后取各部分的准确度的平均值。从而可以得到设计多少层最佳。

BP 算法

BP 算法 ( BackPropagation )是多层神经网络的训练一个核心的算法。目的是更新每个连接点的权重,从而减小预测值( predicted value )与真实值 ( target value )之间的差距。输入一条训练数据就会更新一次权重,反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新权重(weitht)。

在训练神经网络之前,需要初始化权重( weights )和偏向( bias ),初始化是随机值, -1 到 1 之间,每个单元有一个偏向。

算法详细介绍

数据集用 D 表示,学习率用 l 表示。对于每一个训练实例 X,都是一样的步骤。

利用上一层的输入,得到本层的输入:

$$ I_j = sum_i w_{i,j}O_i + heta{j} $$

得到输入值后,神经元要怎么做呢?我们先将单个神经元进行展开如图:

得到值后需要进行一个非线性转化,这个转化在神经网络中称为激活函数( Activation function ),这个激活函数是一个 S 函数,图中以 f 表示,它的函数为:

$$ O_j = frac1{1+e^{-I_j}} $$

更新权重

通过上面的传递规则,可以得到最终的输出,而训练实例中包含实际的值,因此可以得到训练和实际之间的误差。根据误差(error)反向传送。

对于输出层的误差为:

$$ Err_j = O_j(1 - O_j)(T_j - O_j) $$

其中 Oj 表示预测值, Tj 表示真实值。

对隐藏层的误差:

$$ Err_j = O_j(1 - O_j)sum_k Err_kw_{j,k} $$

更新权重:

$$ egin{align*} Delta w_{i,j} &= (l)Err_jO_i w_{i,j} &= w_{i,j} + Delta w_{i,j} end{align*} $$

这里的 l 是学习率。偏向更新:

$$ egin{align*} Delta heta{j} &= (l)Err_j heta{j} &= heta{j} + Delta heta{j} end{align*} $$

训练的终止条件

怎样才算是一个训练好了的神经网络呢?满足下面一个情况即可:

权重的更新低于某个阈值,这个阈值是可以人工指定的;

预测的错误率低于某个阈值;

达到预设一定的循环次数。

BP 算法举例

假设有一个两层的神经网络,结构,权重和数据集如下:

计算误差和更新权重:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41136.html

相关文章

  • 浅析 Hinton 最近提出的 Capsule 计划

    摘要:近几年以卷积神经网络有什么问题为主题做了多场报道,提出了他的计划。最初提出就成为了人工智能火热的研究方向。展现了和玻尔兹曼分布间惊人的联系其在论文中多次称,其背后的内涵引人遐想。 Hinton 以深度学习之父 和 神经网络先驱 闻名于世,其对深度学习及神经网络的诸多核心算法和结构(包括深度学习这个名称本身,反向传播算法,受限玻尔兹曼机,深度置信网络,对比散度算法,ReLU激活单元,Dropo...

    Donald 评论0 收藏0
  • 【面向代码】学习 Deep Learning(一)Neural Network

    摘要:最近一直在看,各类博客论文看得不少但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一个只是跟着的写了些已有框架的代码这部分的代码见后来发现了一个的的,发现其代码很简单,感觉比较适合用来学习算法再一个就 最近一直在看Deep Learning,各类博客、论文看得不少但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一...

    ?xiaoxiao, 评论0 收藏0
  • 六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步

    摘要:本文讨论了多个评估指标,并从多个方面对评估指标进行了实验评估,包括距离分类器。鉴于定性评估的内在缺陷,恰当的定量评估指标对于的发展和更好模型的设计至关重要。鉴于评估非常有难度,评估评估指标则更加困难。 作者:Qiantong Xu、Gao Huang、Yang Yuan、Chuan Guo、Yu Sun、Felix Wu、Kilian Weinberger生成对抗网络的评估目前仍以定性评估和...

    zorro 评论0 收藏0
  • AI技术说:人工智能相关概念与发展简史

    摘要:如何看待人工智能的本质人工智能的飞速发展又经历了哪些历程本文就从技术角度为大家介绍人工智能领域经常提到的几大概念与发展简史。一人工智能相关概念人工智能就是让机器像人一样的智能会思考是机器学习深度学习在实践中的应用。 作为近几年的一大热词,人工智能一直是科技圈不可忽视的一大风口。随着智能硬件的迭代,智能家居产品逐步走进千家万户,语音识别、图像识别等AI相关技术也经历了阶梯式发展。如何看待...

    amuqiao 评论0 收藏0

发表评论

0条评论

BenCHou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<