关于神经网络,这里有你想要了解的一切!

简介: 想要学习神经网络?不了解这些东西怎么能行。

介绍

随着神经网络的发展,很多过去曾被认为是难以完成的任务现在已经可以完成了例如图像识别、语音识别,在数据集中发现更深的关系等已经变得更加容易了。所以我们应该衷心感谢这一领域的杰出研究人员,他们的发现帮助我们发挥了神经网络的真正力量。

如果你真的有兴趣将机器学习作为一门学科,深入了解深度学习网络对你来说是至关重要。大多数ML算法在给定具有多个变量的数据集时往往会失去准确性,而深度学习模型在这种情况下会产生奇迹。因此,了解它的工作原理非常重要!

在本文中,我将解释深度学习中使用的核心概念,即什么样的技巧可以提高模型的准确性。除此之外,我还会分享各种建模技巧,并深入了解神经网络的历史。

a6787fe1ffb90e7d65114c904935e3ebbffc9f4a

目录

  • 神经网络的历史
  • 单层感知器
  • 多层感知器
    • 初始化参数
    • 激活函数
    • 反向传播算法
    • 梯度下降
    • 成本函数
    • 学习率
    • 动量
    • Softmax
    • 多层感知器(MLP)总结

神经网络的历史

神经网络是当今深度学习领域技术突破的基石。神经网络可以看作是大规模并行的处理单元,能够存储知识并应用这些知识进行预测。


1950年,神经心理学家卡尔拉什利的论文发表,他将大脑描述为分布式系统。神经网络的设计模仿大脑,网络通过从学习过程中获取知识。然后,使用称为突触权重的干预连接强度来存储所获得的知识。在学习过程中,网络的突触权重被有序地修改以达到期望的目标。


神经网络与人脑进行对比的另一个原因是,它们像非线性并行信息处理系统一样运行,这些系统可快速执行模式识别和感知等计算操作。因此,这些网络在语音、音频和图像识别等领域表现非常好,就是因为其中输入信号本质上是非线性的。


在Hebb1949年出版的“行为组织”一书中,第一次提出了大脑连接性随着任务变化而不断变化的观点。这条规则意味着两个神经元之间的连接同时处于活动状态。这很快成为开发学习和自适应系统计算模型的灵感来源。


人工神经网络有能力从所提供的数据中学习,这被称为自适应学习,而神经网络创建自己的组织或信息表示的能力被称为自组织。


15年后,Rosenblatt于1958 年开发出了感知器(perceptron),成为了神经元的下一个模型。感知器是最简单的神经网络,能将数据线性地分为两类。后来,他随机地将这些感知器互相连接,并使用了一种试错方法来改变权重以进行学习。


1969年,在数学家Marvin Minsky 和Seymour Parpert发表了一篇对感知器的数学分析后,这个方向的研究在接下来的 15 年里陷入了停滞。他们的研究发现感知器无法表征很多重要的问题,比如异或函数(XOR)。其实,那时的计算机还没有足够的处理能力来有效地处理大型神经网络。


1986年,Rumelhart,Hinton和Williams宣布了反向传播算法的发展,它们可以解决XOR等问题,于是又开启了神经网络时代。在同一年,出版了由Rumelhart和McClelland编辑的《Parallel Distributed Processing: Explorations in the Microstructures of Cognition(并行分布式处理:认知的微结构中的探索)》。这本书一直使得反向传播的影响力越来越大,目前,反向传播已经成为多层感知器训练中最流行的学习算法。


单层感知器(SLP)

最简单的感知器类型具有连接输入和输出的单层权重。这样,它可以被认为是最简单的前馈网络。在前馈网络中,信息总是向一个方向移动; 它永远不会倒退。

8d09494129ce100ff110eb6be4dfe92cc7d1bab4

上图就是一个单层感知器,可以更容易地将概念接地和解释多层感知器中的概念。单层感知器表示了网络中一个层和其它层之间的连接的 m 权重,该权重可被看作是一组突触或连接链。此参数表明每个特征(Xj)的重要性。以下是输入的特征乘以它们各自的突触连接的加法器函数:

0042bac0490d4f431b3de9066cbc043de152dc29

该偏差bk 作为对加法器函数的输出的仿射变换,Uk给出Vk诱导的局部域:

a146dab0d59b4fd9aa4381f2692a589c1ba80d83

多层感知器(MLP)

多层感知器(也称为前馈神经网络)是由每一层完全连接到下一层的程序列组成。

一个多层感知器(MLP)具有一个或多个隐藏层以及输入层和输出层,每层包含几个神经元,这些神经元通过重量链路彼此互连。输入图层中的神经元数量将是数据集中属性的数量,输出图层中的神经元将是数据集中给出的类别数量。

6380c86e3441e8a761603e412e329438a1171c63

图2显示了一个多层感知器,为了使体系结构更加深入,我们需要引入多个隐藏层。

参数初始化

初始化参数,权重和偏差在确定最终模型中起着重要作用。

一个好的随机初始化策略可以避免陷入局部最小值问题。局部最小值问题是当网络陷入误差曲面时,即使有足够的上升空间,学习时也不会在训练时下降。

初始化策略应根据所使用的激活功能进行选择。

激活函数

激活函数是根据诱导的局部域v来定义神经元的输出为:

5ec358f6ee5cbd979f5896f38167a1d21d860312

其中φ()是激活函数。以下是常用的激活函数:

1.阈值函数

1ede619db18fea302915c6901f98d92b8cb7aa2e

cabb4d7f1f02310eb946fedcc0320858f185f35a

上图表明神经元是否完全活跃。但是,这个函数是不可微分的,这在使用反向传播算法时非常重要。

2.sigmoid函数

sigmoid函数是一个以0和1为界的逻辑函数,就像阈值函数一样,但是这个激活函数是连续的和可微的。

af7a751bbd9118490aee2f9e96abe195b63283e7

其中α是上述函数的斜率参数。此外,它本质上是非线性的,有助于提高性能,确保权重和偏差的微小变化引起神经元输出的微小变化。

3.双曲正切函数

φ(v)= tanh(v),该功能使激活功能的范围从-1到+1。

4.整流线性激活函数(ReLU)

ReLUs是许多逻辑单元之和的平滑近似,并产生稀疏活动向量。以下是函数的等式:

3b86bfa0c22a421f3bfa1e41453a7250569094e7

c59608d2003a91dedd30832c9f3f667098d06b25

5.Maxout函数

2013年,Goodfellow发现使用新激活Maxout函数是dropout的最佳伴侣。

Maxout单元通过退出来促进优化并提高退出的快速近似模型平均技术的准确性。单个最大单位可以解释为对任意凸函数进行分段线性逼近。

Maxout网络不仅学习隐藏单元之间的关系,而且学习每个隐藏单元的激活功能。以下是它如何工作的图形描述:

7e86f1bcec00cf261e313e7d58869ee9dc66c74c

图4显示了Maxout网络,每个隐藏单元有5个可见单位,3个隐藏单位。

反向传播算法

反向传播算法可以用来训练前馈神经网络或多层感知器。这是一种通过改变网络中的权重和偏差来最小化成本函数的方法。为了学习和做出更好的预测,会执行一些训练周期,在这些周期中,由成本函数确定的误差通过梯度下降反向传播,直到达到足够小的误差。

梯度下降

1.mini-batch梯度下降

比方说,在100个大小的mini-batch中,向学习算法显示了100个训练示例,并且相应地更新了权重。在所有mini-batch都按顺序呈现之后,计算每个时期的平均准确性水平和训练成本水平。

2.随机梯度下降

随机梯度下降用于实时在线处理,其中参数在仅呈现一个训练示例的情况下被更新,因此在每个时期对整个训练数据集取平均准确度水平和训练成本。

3.full batch梯度下降

在这种方法中,所有的训练样例都显示给学习算法,并且权重被更新。

成本函数

成本函数有很多种,以下是一些例子:

1.均方误差函数;

2.交叉熵函数;

3.负对数似然损失(NLL)函数。

学习率

学习速率控制从一次迭代到另一次迭代的权重变化。一般来说,较小的学习率被认为是稳定的,但会导致较慢的学习。另一方面,较高的学习率可能会不稳定导致振荡和数值误差,但会加快学习速度。

动量(Momentum)

动量为避免局部最小值提供了惯性,这个想法是简单地将以前的权重更新的一部分添加到当前的权重更新中,这有助于避免陷入局部最小值。

SOFTMAX

Softmax是一种神经传递函数,它是在输出层中实现的逻辑函数的一般形式,这些概率的综合为1且限定于1。

多层感知器(MLP)总结

对于分类任务,softmax函数可以包含在输出层中,它将给出每个发生类的概率。激活函数用于通过使用输入、权重和偏差来计算每个层中每个神经元的预测输出。

反向传播是通过修改它们之间的突触连接权重来训练多层神经网络,以基于需要连续和可微的纠错学习函数来提高模型性能。以下参数已在实验中评估过:

  • 隐藏层的数量。
  • 隐藏层中的神经元数量。
  • 学习速度和动量。
  • 激活功能的类型。

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!


本文由@阿里云云栖社组织翻译。

文章原标题《demystifying-generative-adversarial-networks》,

译者:虎说八道,审校:袁虎。

文章为简译,更为详细的内容,请查看原文 

相关文章
|
5月前
|
机器学习/深度学习 数据挖掘
零基础学习图神经网络
报名机器学习项目,却发现是图数据挖掘项目,于是从零开始入门速成。 (随着项目进展,有空就更新)
|
7月前
|
机器学习/深度学习 算法 Serverless
深度学习隐藏层神经网络工作
深度学习隐藏层神经网络工作
52 0
|
9月前
|
机器学习/深度学习 算法
【MATLAB第14期】#源码分享| 基于多层前馈神经网络的回归预测模型代码分享,多参数多图调整
【MATLAB第14期】#源码分享| 基于多层前馈神经网络的回归预测模型代码分享,多参数多图调整
|
11月前
|
机器学习/深度学习 并行计算 Ubuntu
怎样让ChatGPT在其内部训练神经网络?先让它想象自己有4块3090
怎样让ChatGPT在其内部训练神经网络?先让它想象自己有4块3090
136 0
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【Pytorch神经网络实战案例】19 神经网络实现估计互信息的功能
定义两组具有不同分布的模拟数据,使用神经网络的MINE的方法计算两个数据分布之间的互信息
251 0
|
11月前
|
机器学习/深度学习 存储 人工智能
详解DQN训练技巧!带你回到深度强化学习「梦开始的地方」
详解DQN训练技巧!带你回到深度强化学习「梦开始的地方」
211 0
|
机器学习/深度学习 算法 数据可视化
使用Python实现单隐藏层神经网络的训练(一)
使用Python实现单隐藏层神经网络的训练(一)
190 0
使用Python实现单隐藏层神经网络的训练(一)
|
机器学习/深度学习 数据可视化 Python
使用Python实现单隐藏层神经网络的训练(二)
使用Python实现单隐藏层神经网络的训练(二)
204 0
使用Python实现单隐藏层神经网络的训练(二)
|
机器学习/深度学习 监控 算法
训练神经网络的一些实用技巧
训练神经网络的一些实用技巧
训练神经网络的一些实用技巧
|
机器学习/深度学习 存储 传感器
在神经网络中提取知识:学习用较小的模型学得更好
在神经网络中提取知识:学习用较小的模型学得更好
135 0
在神经网络中提取知识:学习用较小的模型学得更好