一文搞懂神经网络
【51CTO.com原创稿件】人工智能是这几年非常火的技术,上至九十九下至刚会走都对人工智能或多或少的了解。神经网络是人工智能的核心,也就是说没有神经网络就没有人工智能,那么这篇文章就带大家学习一下神经网络相关的知识。这篇文章没有数学公式、没有代码,旨在帮助读者快速掌握神经网络的核心知识。
一、什么神经网络
-
概念 所谓神经网络简单说就是包含多个简单且高度相连的元素的系统,每个元素都会根据输入来处理相关信息。神经网络是由节点(神经元)组成,这些节点相互链接,信息传入到输入层之后由多个隐藏层进行处理,处理完后再传递给输出层进行最终处理。这里所说的最终处理有可能是输出结果,也有可能是作为输入数据传入到另外的神经网络或者节点进行下一轮的处理。 在上面的内容中我们多次提到节点,那么什么是节点呢?节点也被称为神经元,是一个神经网络的基本单元。它通过接收输入的数据来计算出应该输出的数据,输入的数据可能来自于其他节点或者是外部的输入源。针对每个输入的数据都会有权重,权重是根据输入数据的重要性进行分配得来的。当节点收到输入的数据后,将输入的信息加权和之后再传递给激活函数,然后激活函数通过计算输出最后的输出数据。
-
训练简述 前面我讲解了神经网络和节点的概念,下面我们就看一下神经网络是怎么训练的。简单说就是修改输入层的输入权重,通过隐藏层处理数据,再通过激活函数对它们进行最终处理。最常见的神经网络学习方式叫做 delta 。 delta 是一种监督规则,每当向神经网络发送一种学习模式时都会调用它,这种情况被称为循环。 在神经网络训练中还涉及到一个概念:误差率。误差率简单地说就是我们向神经网络输入一张图片时,它识别出的结果和正确答案之间的差异。我们训练神经网络最根本的目的就是降低误差率,让每次识别都无限接近于0。
-
梯度下降 说到误差率就不得不提梯度下降,它是一个一阶最优化算法也称为最速下降法,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值,这个算法很重要因此需要具体讲解一下。 例如我们要从某个大山的深处下山,但是我们不知道下山的路在哪,于是就决定走一步看一步,在每走到一个位置的时候求解当前位置的梯度,然后沿着是当前最陡峭的位置向下走一步,接着继续求解当前位置梯,再向所在位置最陡峭最易下山的位置走。这样一步步的走下去,一直走到觉得我们已经到了山脚。但是这样走下去可能我们不能走到山下而是到了一个局部的最低处。从这段描述中我们可以看出梯度下降不一定能找出全局最优解,有可能找出的是局部最优解。
-
常见的神经网络 目前已知的神经网络多达上千种,这里面有很大一部分并不是通用的,这部分我们不提。在通用的神经网络中用的最多的有27种,其中经常能见到的是:RNN、感知机网络和前馈网络,下面我进行一个简单的讲解。
- RNN RNN 中文叫循环神经网络,它对序列中的每个元素都执行相同的任务,输出的数据取决于前面的计算,而且它还可以记录前面的步骤,形成短期记忆。他的图像是这样的:
- 感知机网络 这是最简单的神经网络,他不包含任何隐藏层,只有输出和输出层。图像大致是这样的:
- 前馈网络 包含多个节点,相邻层的节点之间具有边,每个边都有权重。他是这样的:
二、神经网络的学习类型
一个孩子家长要教他很多事情,但是家长不能任何事情都要教他,有时也需要他通过其他方式学习。在人工智能中也存在这种情况,因此神经网络就出现了三种不同的学习类型,分别是有监督学习、无监督学习和强化学习。
- 有监督学习 有监督学习的前提条件是你具有一个存在已知结果的数据集。神经网络从给定的训练数据集中学习出一个模型参数,当新的数据到来时可以根据这个函数预测结果。数据集要求包括输入输出,里面的数据输出信息是由人手工标注的。有监督学习一般用在分类问题中,通过已有的数据集去训练得到最优模型,之后再利用这个模型将所有输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。常见的有监督学习算法包括KNN和SVM
- 无监督学习 当你的数据集没有结,那么你就适合使用无监督学习。它会根据数据间相似性对数据集进行分类,试图使每个分类内的差距最小化,每个分类之间的差距最大化。它的目标不是告诉人工智能怎么做,而是让它自己去学习怎样做事情。无监督学习一般我们会分为两大类: 基于概率密度函数估计的直接方法和基于数据间相似性度量的简洁聚类方法。基于概率密度函数估计的直接方法会设法找到各个分类在特征空间中的分布参数,然后再进行分类。而基于数据间相似性度量的简洁聚类方法则是设法规定出不同分类的核心和初始内核,然后根据数据与核心之间的相似度将数据分成不同的类别。
- 强化学习 强化学习俗称胡萝卜和大棒。简单说就是如果误差率鉴定成功我们就会得到胡萝卜,反之会得到大棒的惩罚。它是机器学习中的一个领域,强调如何基于环境而行动以取得最大化的预期利益。灵感来源于心理学中的行为主义理论,有机体在环境给予的奖励或惩罚的刺激下会逐步形成对刺激的预期从而产生能获得最大利益的习惯性行为。在人工智能中环境通常被设为马尔可夫决策过程,所以许多强化学习算法在这种情况下使用动态规划技巧。
三、激活函数与感知器
如果说节点是神经网络的核心,那么激活函数和感知器就是神经网络核心的核心,几乎在所有的神经网络中都可以看到他俩,这一小节我就来讲解一下激活函数和感知器。
- 激活函数 激活函数被添加到神经网络的输出端以确定输出,它的输出结果范围通常在-1到1的范围,具体取值范围取决于选择的激活函数。它最终用于确定神经元是否运行。激活函数是数据输出之前的最后一部分,可以将其视为输出值的提供者。激活函数分为两种,一种是线性激活函数,另一种是非线性激活函数。简单地说线性函数是在直线上或几乎在直线上的函数,非线性函数是不在直线上的函数(哈哈解释的够简单吧)
- 感知器 感知器是一种特殊的节点,当输入为正或0该函数返回1,否则返回0,具有这种激活函数的节点称为感知器。现在我们通过例子来讲解一下感知器。我们有一个感知器,它具有两个输入x1和x2,这两个输入的权重分别为w1和w2,我们要对这两个输出加权,所谓的加权就是乘以权重,权重是随机分配的,权重值介于-1到1之间。加权之后就需要将所有加权求和,求和之后将会被作为激活函数的输入传递给激活函数继续处理。激活函数处理后会告知感知器是否执行。
四、后向传播
前面所讲的都是前向传播,和前向传播相反的就是后向传播,后向传播是提升神经网络准确率的重要内容。后向传播又称误差向后传播,是使用梯度下降有监督学习神经网络算法的一种。后向传播通过在神经网络中反向移动来计算梯度。先计算最后一层权重的梯度,最后计算第一层的梯度。后向传播计算取决于前向阶段的激活函数和输出数据,这些值都必须在后向传播开始之前进行计算,因此前向计算必须在后向传播之前完成。 前向和后向传播对于很多刚刚步入人工智能这一行的人很难以理解,下面我就来说说他俩的区别。前向传播数据以获取输出,然后将输出与预期值进行比较从而获得误差。为了能达到最小化该误差,还必须算出每个权重的误差导数来向后传播,然后从权重中减去误差导数。通过前向传播,可以显示神经网络的行为并找到误差。找出误差率后可以后向传播并使用梯度下降的形式更新权重值。