更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer/column
作者:人工智能资讯小编
摘要:在这篇文章中,我们将快速讨论很多方面的问题。接下来主要讲述的几大主题如下:
1.多层感知器。
2.神经元,权重与激活。
3.神经元构成的网络。
4.训练网络。
人工神经网络是一个令人神往的研究领域,尽管当新手入门的时候它们可能会令人生畏。
我们在描述本领域使用的数据结构和算法时,会使用到大量的专业术语。
这篇文章则是针对多层感知器(Multi-layer Perceptron)神经网络领域中所使用的术语和流程的速成课程。阅读这篇文章后,你会学到:
神经网络的构建模块,包括神经元(Neurons)、权重(Weights)和激活函数(Activation functions)。
如何在层中使用各个构建模块来创建网络。
如何使用样例数据训练网络。
让我们开始速成之路吧!
神经网络速成课
图片来自 Joe Stump,作者保有相应权利。
1.多层感知器
人工神经网络领域经常被简称为神经网络或多层感知器,而后者也许是最有用的神经网络类型。一个感知器是单个神经元模型,它是更大型的神经网络的前身。
这是一个研究如何使用简单的生物大脑模型来解决复杂计算任务的领域,如我们在机器学习中看到的预测建模任务。其目标不是创建真实的大脑模型,而是开发出可用于对复杂问题建模的高鲁棒性算法和数据结构。
神经网络的力量源于他们从训练数据中学习表示的能力,以及将其与想要预测的输出变量以最好的方式关联起来的能力。在这个意义上,神经网络是在学习一个映射。从数学的角度来看,他们能够学习任意的映射函数,并且被证明了是一个通用的近似算法。
神经网络的预测能力则源于网络的层次或多层结构。数据结构可以在不同尺度或解析度的特征中进行选择(学习表示),并将它们组合成更高阶的特征。例如从线条到线条集合,再到图形。
2.神经元
神经网络的构建模块是人工神经元。
它们都是一些简单的具有加权输入信号的计算单元,并且使用激活函数产生输出信号。
一个简单的神经元模型
神经元权重
您可能熟悉线性回归,在这种情景下,输入的权重与回归方程中所使用的系数非常相似。
就像线性回归一样,每个神经元也有一个偏差,这个偏差可认为是一个值永远为 1.0 的输入,它也必须加权。
比如说,一个神经元可能有两个输入,而在这种情况下,它总共就需要三个权重。每个输入对应一个,偏差也对应一个。
虽然可以使用更复杂的初始化方案,但是我们通常将权重初始化为一些小的随机值,例如 0 到 0.3 之间的某些值。
与线性回归相同,较大的权重表示复杂性和脆弱性也随之增加。我们希望保持网络中的权重是可取的,此时我们可以使用正则化技术。
激活
对加权输入求和,并通过一个激活函数(有时称为传递函数)。
激活函数是求和后的加权输入与神经元输出的简单映射。它控制着激活神经元的阈值以及输出信号的强度,因此被称为激活函数。
在以往我们使用简单的步骤激活函数:对输入求和后,若所得结果高于阈值(例如 0.5),则神经元将输出值 1.0,否则输出 0.0。
习惯上我们常使用非线性激活函数。它允许网络以更复杂的方式将输入组合起来,进而在其可模拟的函数中提供更丰富的能力。诸如 logistic 的非线性函数也称为 sigmoid 函数,用于输出一个介于 0 和 1 之间的 s 形分布的值。双曲正切函数也称为tanh,它也输出 s 型分布的值,其范围是 -1 到 +1 。
最近,整流器激活函数已被证明可以提供更好的结果。
3.神经网络
神经元通过排列则可成为神经网络。
一排神经元被称为一层,一个网络中可以有多层。网络中神经元的架构通常称为网络拓扑。
一个简单的网络模型
输入(或可见)层
最底下的那一层从数据集中获取输入,它被称为可见层,因为它是网络的暴露的部分。通常神经网络是用一个可见层绘制的,其中每个输入值或数据集中的一列对应一个神经元。这些则不是如上所述的神经元,它们只是将输入值传递给下一层。
隐含层
输入层之后的层被称为隐藏层,因为它们不直接暴露在输入中。最简单的网络结构,就是隐藏层中只有一个直接将输入的值输出的单个神经元。
考虑到运算能力和高效的库的增加,我们现在可以构建出非常深的神经网络。深度学习可以指在你的神经网络中有着诸多隐藏层。它们很深,因为在过去它们训练的速度巨慢无比,但现在我们使用现代技术与硬件进行训练,则可能只需要几秒或几分钟就能训练完毕。
输出层
最后的隐藏层被称为输出层,它负责输出一个符合问题所需格式的值或向量值。
对输出层中激活函数的选择受到所建模的问题类型的强烈约束。比如说:
一个回归问题可能只有一个输出神经元,且这个神经元可能没有激活函数。
二元分类问题可能只有一个输出神经元,并使用一个 S 形激活函数来输出一个介于 0 和 1 之间的值,以表示预测一个值属于类 1 的概率。通过使用阈值 0.5,可以将其转化为明确的类别值,将小于阈值的值设定为 0,否则为 1。
多元分类问题可能在输出层有多个神经元,每个类对应一个神经元(例如着名的虹膜花 [Iris flowers] 分类问题中的三个神经元)。在这种情况下,我们可以使用 softmax 激活函数来输出网络对每个类别值的概率预测。我们可以选择具有最高概率的输出来明确类别分类值。
4.训练网络
一旦完成了配置,神经网络就需要在数据集上进行训练。
准备数据
您必须先准备好您的数据,以便在神经网络上进行训练。
数据必须是数值,例如实际值。如果您有分类数据,例如具有 “男性” 和 “女性” 二值的性别属性,则可以将其转换成被称为一位有效编码(One hot encoding)的实值表示。这是为每个类别值添加一个新列(在男性和女性的情况下共添加两列),并且每行根据具体的类别值来添加 0 或 1。
对于不止一个类别的分类问题,可以在输出变量上使用相同的一位有效编码。这将从单个列创建一个二进制向量,它可以很容易地与网络输出层中神经元的输出进行直接比较,并且如上所述为每个类输出一个值。
神经网络要求以一致的方式对输入进行缩放(Scale)。您可以将其重新调整到 0 和 1 的范围,这样的操作也被称为标准化。另一个主流的标准化技术是,使每个列的分布的均值为 0,标准差为 1。
缩放同样适用于图像像素数据。诸如单词之类的数据可以被转换为整数,诸如数据集中的单词的流行程度以及其他编码技术。
随机梯度下降法
一个经典的,并仍然在神经网络的训练中被优先考虑的算法,就是随机梯度下降法(Stochastic Gradient Descent)。
当一行数据作为输入暴露给网络时,网络对输入进行处理以自下向上地激活神经元,最终产生一个输出值。这在网络中称为正向传递。这是在网络训练完成之后,对新数据进行预测时也会使用的传递类型。
网络的输出与预期的输出进行比较,并计算误差。这个误差则通过网络反向传播回来,一次一层,相应的权重则根据它们所导致的误差总数进行更新。这个巧妙的数学运算称为反向传播算法。
对训练数据中的所有样本都重复该过程。通过整个训练数据集的对网络进行的一次更新称为一次迭代(Epoch)。一个网络可以进行几十,几百或几千次这样的迭代训练。
更新权重
网络中的权重可以根据针对每个训练样本而计算出来的误差进行更新,我们将此称为在线学习。它可能导致网络快速且混乱地进行变化。
另一种方法是,对于所有训练样本,将误差值保存起来,最后再用于更新网络。这称为批量学习,它通常更稳定。
通常情况下,由于数据集十分巨大,并且受计算效率,批大小(Batch size)的影响,更新之前的网络训练样本的数量往往会减少到一个比较小的规模,例如几十或几百个样本。
权重更新的数量是由一个称为学习率(Learning rate)的配置参数所控制的。它也被称为步长(Step size),并且它控制着对于给定误差的网络权重的步骤或更改。通常我们使用较小的权值,例如 0.1,0.01 或者更小的值。
权重更新公式可以补充一些您可以设置的附加配置项。
动量(Momentum)是一个术语,它包含了来自之前的权重更新的特性,即使我们计算出的误差很小,权重也可以继续在同一方向上继续变化。
学习速率衰减(Decay)用于降低迭代(Epoch)的学习速率,以使得网络能够在开始时对权重进行较大修改,而在训练进度后期进行较小的微调。
预测
一旦神经网络训练完成,它就可以用来做出预测。
您可以对测试数据或验证数据进行预测,从而估计出模型对于未知数据的预测能力。您也可以部署它,并使用它来持续进行预测。
网络拓扑结构和最终权重集就是所有您需要从模型中保存的内容。预测,则是通过向网络提供输入并执行前向传递,从而生成一个可用于预测的输出。
更多资源
几十年来有许多关于人工神经网络的论文和书籍出版。
如果你是该领域的新手,我建议你可以进一步阅读下列资源:
Neural Smithing: Supervised Learning in Feedforward Artificial Neural Networks(神经锻造:前馈人工神经网络中的监督学习)
Neural Networks for Pattern Recognition(用于模式识别的神经网络)
An Introduction to Neural Networks(神经网络导论)
总结
在这篇文章中,您了解到了关于机器学习的人工神经网络相关的知识。
阅读这篇文章后,您学到了:
神经网络并非大脑的模型,而是用于解决复杂机器学习问题的计算模型。
神经网络是由带权重和激活功能的神经元组成的。
网络被组织成神经元层的形式,并且我们使用随机梯度下降法对其进行训练。
在训练神经网络模型之前准备好您的数据,这是个好主意。
领取专属 10元无门槛券
私享最新 技术干货