# 多层感知机神经网络速成课程

> 原文： [https://machinelearningmastery.com/neural-networks-crash-course/](https://machinelearningmastery.com/neural-networks-crash-course/)

人工神经网络是一个迷人的研究领域，尽管它们在刚开始时可能会令人生畏。

在该领域中，人们使用许多专门术语来描述数据结构(data structure)和算法(algorithm)。

这篇文章是一个速成课程，它将为您介绍在多层感知机人工神经网络领域中使用的术语和过程。阅读这篇文章后您会知道：

*   神经网络的组成单元，包括神经元（neuron），权重（weight）和激活函数（activation function）。
*   如何在层中使用构建块来创建网络。
*   如何从示例数据中训练网络。

让我们开始吧。

![Crash Course In Neural Networks](img/9cf44410774b0c5f0b4c55ecc97e2692.png)

神经网络速成课程
摄影： [Joe Stump](https://www.flickr.com/photos/joestump/2357729981/) ，保留一些权利。

## 速成课程概述

我们将在这篇文章中简短地介绍以下基础内容：

1.  多层感知机
2.  神经元，权重和激活
3.  神经元的网络
4.  训练网络

我们将从概述多层感知机开始。

## 1.多层感知机（Multi-Layer Perceptrons）

人工神经网络（artificial neural networks）领域通常被称为 “神经网络” 或 “多层感知机”。多层感知机可能是最有用的神经网络类型。感知机是单个神经元模型，是较大神经网络的前身。

这个领域研究生物大脑的简单模型如何被用于解决困难计算任务，例如我们在机器学习中看到的预测性建模任务。它的目标不是创建大脑的真实模型，而是开发稳健的算法和数据结构，从而对复杂的问题进行建模。

神经网络的力量在于，它可以从训练数据中学习到表征（representation），以及如何将其与想要预测的输出变量（output variable）最好的联系起来。从这个意义上说，神经网络学习的是映射（mapping）。在数学上，它们能够学习任何映射函数，并且已经被证明是一种通用的近似算法。

神经网络的预测能力来自网络的分层或多层结构。数据结构可以挑出（即学会表示）不同比例或分辨率的特征（feature），并将它们组合成更高阶的特征。例如，从线条到线条的集合，再到各种形状。

## 2.神经元（Neurons)

神经网络的组成单元是人工神经元(artificial neurons)。

这些计算单元接收加权的输入信号，并使用激活函数（activation function）产生输出信号。

![Model of a Simple Neuron](img/498ab2d8740c6a44a78ade60a46c95a9.png)

简单神经元的模型

### 神经元权重(weight)

您可能熟悉线性回归，在这种情况下，输入上的权重非常类似于回归方程中使用的系数。

像线性回归一样，每个神经元也有一个偏差（bias），可以认为它是一个总是具有 1.0 值的输入，它也必须加权。

例如，神经元可能有两个输入(inputs)，在这种情况下它需要三个权重。每个输入一个，偏差一个。

虽然可以使用更复杂的初始化(initialization)方案，但是权重通常被初始化为小的随机值，例如 0 到 0.3 范围内的值。

与线性回归一样，较大的权重表明复杂性和脆弱性增加。所以我们一般希望网络中的权重较小，正则化（regularization）技术就是用于处理这个问题。

### 激活（Activation）

加权输入先进行加总，然后通过激活函数，有时称为转化函数（transfer function）。

激活函数就是神经元接收的加权求和的输入与输出的简单映射。它被称为激活函数，因为它控制神经元激活的阈值和输出信号的强度。

历史上，人们曾经使用简单的激活函数，如果求和输入（summed input）高于阈值，例如 0.5，则神经元将输出值 1.0，否则将输出 0.0。

传统上，人们会使用非线性的激活函数。这允许网络以更复杂的方式组合输入，从而使他们可以学习更复杂的函数。非线性函数，如 logistic 函数，也称为 sigmoid 函数，输出 0 到 1 之间的值，具有 s 形分布; 双曲正切函数也称为 tanh，在-1 到+1 范围内输出相同的分布。

最近，整流激活函数（rectified activation function）已被证明可提供更好的结果。

## 3.神经元网络

神经元被排列成神经元网络。

一行神经元称为层，一个网络可以有多个层。网络中神经元的架构通常称为网络拓扑。

![Model of a Simple Network](img/efb0b72bb3c64da47744e0d5c7a8aeac.png)

简单网络的模型

### 输入或可见层

从数据集获取输入的底层称为可见层，因为它是网络的公开部分。通常，神经网络使用可见层绘制，每个输入值或数据集中的列具有一个神经元。这些不是如上所述的神经元，而是简单地将输入值传递到下一层。

### 隐藏层

输入层之后的层称为隐藏层，因为它们不直接暴露给输入。最简单的网络结构是在隐藏层中有一个直接输出值的神经元。

鉴于计算能力和高效库的增加，可以构建非常深的神经网络。深度学习可以指神经网络中有许多隐藏层。它们很深，因为它们在历史上训练起来会非常缓慢，但可能需要几秒钟或几分钟才能使用现代技术和硬件进行训练。

### 输出层

最后的隐藏层称为输出层，它负责输出与问题所需格式相对应的值或值向量。

输出层中激活函数的选择受到您正在建模的问题类型的严格限制。例如：

*   回归问题可能具有单个输出神经元，并且神经元可能没有激活功能。
*   二分类问题可能有一个输出神经元，并使用 sigmoid 激活函数输出 0 到 1 之间的值，以表示预测类 1 的值的概率。这可以通过使用阈值转换为清晰的类值 0.5 和小于阈值的捕捉值为 0，否则为 1。
*   多分类问题可能在输出层中具有多个神经元，每个类一个（例如，着名的[虹膜花分类问题](https://en.wikipedia.org/wiki/Iris_flower_data_set)中的三个类别的三个神经元）。在这种情况下，softmax 激活函数可用于输出网络预测每个类值的概率。选择具有最高概率的输出可用于产生清晰的类别分类值。

## 4.训练网络

配置完成后，需要在数据集上训练神经网络。

### 数据准备

您必须首先准备数据以进行神经网络的训练。

数据必须是数字，例如实数值。如果您有分类数据，例如值为“male”和“female”的性别属性，则可以将其转换为称为[单热编码](https://en.wikipedia.org/wiki/One-hot)的实值表示。这是为每个类值添加一个新列的位置（在男性和女性的性别情况下为两列），并且每行添加 0 或 1，具体取决于该行的类值。

对于具有多个类的分类问题，可以在输出变量上使用相同的热编码。这将从单个列创建一个二进制向量，该向量很容易直接与网络输出层中神经元的输出进行比较，如上所述，将为每个类输出一个值。

神经网络要求输入以一致的方式缩放。您可以将其重缩放到 0 到 1 之间的范围，称为标准化。另一种流行的技术是将其标准化，使每列的分布均值为零，标准偏差为 1。

缩放也适用于图像像素数据。诸如单词的数据可以被转换为整数，诸如数据集中的单词的流行度等级以及其他编码技术。

### 随机梯度下降

用于神经网络的经典且仍然优选的训练算法称为随机梯度下降。

这是一行数据作为输入一次暴露给网络的地方。当网络最终产生输出值时，网络处理输入向上激活神经元。这称为网络上的前向传递。它是在训练网络之后使用的传递类型，以便对新数据做出预测。

将网络输出与预期输出进行比较，并计算误差。然后，该错误通过网络传播回来，一次一层，并根据它们对错误的贡献量来更新权重。这个聪明的数学运算称为[反向传播算法](https://en.wikipedia.org/wiki/Backpropagation)。

对训练数据中的所有示例重复该过程。更新整个训练数据集的网络之一称为迭代。可以训练网络数十，数百或数千个时期。

### 重量更新

可以从针对每个训练示例计算的误差更新网络中的权重，这称为在线学习。它可能导致网络快速但又混乱的变化。

或者，可以在所有训练示例中保存错误，并且最后可以更新网络。这称为批量学习，通常更稳定。

通常，因为数据集如此之大并且由于计算效率，批量的大小，在更新之前显示网络的示例的数量通常减少到少量，例如数十或数百个示例。

更新权重的数量由称为学习率的配置参数控制。它也称为步长，控制给定错误对网络权重的步骤或更改。通常使用小的重量尺寸，例如 0.1 或 0.01 或更小。

可以使用您可以设置的其他配置项补充更新等式。

*   动量是一个术语，它包含先前重量更新的属性，以允许权重在相同方向上继续变化，即使计算的误差较少。
*   学习率衰减用于降低时期上的学习率，以允许网络在开始时对权重进行大的改变，并且在训练时间表中稍后进行较小的微调改变。

### 预测

一旦神经网络被训练，它就可以用于做出预测。

您可以对测试或验证数据做出预测，以便估计模型对未见数据的技能。您还可以在操作上部署它并使用它来连续做出预测。

您需要从模型中保存网络拓扑和最终权重集。通过向网络提供输入并执行前向传递来做出预测，从而允许它生成可用作预测的输出。

## 更多资源

关于人工神经网络的主题有数十年的论文和书籍。

如果您是该领域的新手，我建议您阅读以下资源：

*   [Neural Smithing：前馈人工神经网络中的监督学习](http://www.amazon.com/dp/0262527014?tag=inspiredalgor-20)
*   [模式识别神经网络](http://www.amazon.com/dp/0198538642?tag=inspiredalgor-20)
*   [神经网络简介](http://www.amazon.com/dp/1857285034?tag=inspiredalgor-20)

## 摘要

在这篇文章中，您发现了用于机器学习的人工神经网络

阅读本文后，您现在知道：

*   神经网络如何不是大脑的模型，而是解决复杂机器学习问题的计算模型。
*   神经网络由具有权重和激活功能的神经元组成。
*   网络被组织成神经元层，并使用随机梯度下降进行训练。
*   在训练神经网络模型之前准备数据是个好主意。

你对神经网络或这篇文章有任何疑问吗？在评论中提出您的问题，我会尽力回答。
