Skip to content

Latest commit

 

History

History
177 lines (96 loc) · 10.8 KB

neural-networks-crash-course.md

File metadata and controls

177 lines (96 loc) · 10.8 KB

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

原文: https://machinelearningmastery.com/neural-networks-crash-course/

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

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

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

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

让我们开始吧。

Crash Course In Neural Networks

神经网络速成课程 摄影: Joe Stump ,保留一些权利。

速成课程概述

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

  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

简单神经元的模型

神经元权重(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

简单网络的模型

输入或可见层

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

隐藏层

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

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

输出层

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

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

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

4.训练网络

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

数据准备

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

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

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

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

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

随机梯度下降

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

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

将网络输出与预期输出进行比较,并计算误差。然后,该错误通过网络传播回来,一次一层,并根据它们对错误的贡献量来更新权重。这个聪明的数学运算称为反向传播算法

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

重量更新

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

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

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

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

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

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

预测

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

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

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

更多资源

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

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

摘要

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

阅读本文后,您现在知道:

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

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