首页 > 数据分析 > 深度学习教程:从感知器到深层网络

[悬赏]深度学习教程:从感知器到深层网络 (已翻译100%)

查看 (683次)
英文原文:A Deep Learning Tutorial: From Perceptrons to Deep Networks
标签: 深度学习
admin 发布于 2017-02-21 16:01:12 (共 23 段, 本文赏金: 88元)
参与翻译(10人): DataMoneyor zdb_cn yuyi007 jeffy Laurenwang 亲爱的十一 Y小牛S 小胖想吃肉 liangliqiang 廿九_ 默认 | 原文

【已悬赏】 赏金: 3元


近年来,人工智能领域风云再起。它不仅仅限于学术领域传播,像谷歌、微软以及Facebook之类的主要玩家正在构建他们自己的研究团队,并做了一些令人印象深刻的并购。

这种情况一部分归因于社交网络用户所产生的丰富的、许多需要被分析的原始数据,也归功于通过GPGPU获得的价格低廉的计算能力。

但除了这些现象,人工智能的复兴,相当一部分是被一个AI领域的新的趋势所驱动的,特别是在机器学习上,被称为“深度学习”。在这篇教程中,我将会向您介绍深度学习背后的关键概念和算法。从组成的最简单的单元开始,到用JAVA语言构建机器学习的概念。

(透露一下,我也是一个Java深度学习库的作者,点这可获取,本文中的例子就是用上述的库所完成的。如果你喜欢,可以在Github上送上一颗星以表支持,谢谢。使用指导在homepage上可以找到)

jeffy
翻译于 2017-02-28 21:04:54
 

参与本段翻译用户:
zdb_cn jeffy

显示原文内容 | 显示全部版本

【已悬赏】 赏金: 2元

30秒了解机器学习

如果您对机器学习不熟悉, 可以查看机器学习介绍:

以下为机器学习的简单流程:

  1. 假设我们有某个机器学习算法以及20张人工标注的训练样本(图片), 其中10张带狗的图片标注为 1,其他不带狗的10张图片标注为 0——这里以监督学习和二分类为例。
  2. 算法通过学习来辨别带狗和不带狗的图片,当算法学习完后,给其一张图片,则算法会输出一个标签(如果图片中有狗,则标签为数字 1,否则为 0)。

这个案例够简单吧?!当然,你的数据也可以是一些疾病的症状,标签则为对应的疾病;你的数据还可以是带手写字符的图片,标签为这些图片所表示的字符。

DataMoneyor
翻译于 2017-02-26 14:11:01
 

参与本段翻译用户:
DataMoneyor

显示原文内容

【已悬赏】 赏金: 3元

感知机: 早期深度学习算法

感知机是最早的有监督学习算法之一,它是神经网络的基本构成块。

假设在平面上有n个点,每个点都被标记为'0'或'1'。 我们给了一个新的点,我们想猜它的标签(这类似于上面的“狗”和“不是狗”场景)。 我们该怎么做呢?

一种方法是查看离这个点最近的点并返回该点的标签。 但是一个更聪明的方式是找到一条能尽量将标号数据分开的线,并使用它作为你的分类器。

A depiction of input data in relation to a linear classifier is a basic approach to deep learning.

在这种情况下,每个输入数据将被表示为向量x =(x_1,x_2),如果此点在这条线下面,我们的函数值将是“0”,如果在线之上,则为“1”。

为了在数学上表示,我们令分类器由权重w和垂直偏移(或偏置)b的向量定义。 然后,我们的函数将输入和权重与加权和转化函数组合:

weighted sum transfer function

然后将该传递函数的结果馈送到激活函数中以产生标记。 在上面的示例中,我们的激活函数是阈值截止的(例如,如果大于某个值,则为1):

result of this transfer function

yuyi007
翻译于 2017-02-27 19:11:48
 

参与本段翻译用户:
yuyi007

显示原文内容

【已悬赏】 赏金: 3元


训练感知器


感知器的训练包括了为其提供多个的训练样本并计算每个样本的输出结果。每使用一个样本,权重w都会被调整,通过这种方法使得输出误最小化,输出误差被定义为期望值(目标值)与实际输出之间的差。还有其他多种误差函数,比如均方差,但是训练的基本原理都是一样的。


单个感知器的缺点


单个感知器方法对于深度学习来说,有个主要的缺点:它仅仅能够学习线性可分函数。这个问题有多重要呢?拿“异或运算”,一个相对简单的函数来举例。注意到它是不能被线性区分的(下图所示,是一次失败的分割尝试)。

The drawback to this deep learning approach is that some functions cannot be classified by a linear separator.


为了解决这个问题,我们需要使用多层感知器,也就是前馈神经网络:事实上,我们会把一堆感知器组合在一起,来创建一个更强有力的学习机制。

jeffy
翻译于 2017-02-27 21:58:16
 

参与本段翻译用户:
jeffy

显示原文内容

【已悬赏】 赏金: 5元


深度学习的前向神经网络

一个神经网络实际上只是一堆感知器的组合,这些感知器通过不同的方式互相连接,对不同的激励函数起作用。

Feedforward neutral network deep learning is a more complex approach than single perceptrons.

对于初学者,我们来看一下前馈神经网络,它有如下的特征:


  • 一个输入层,一个输出层,一个或多个隐含层。上面的图片显示了一个有着三单元输入层、一个4单元隐含层和一个2单元输出层的网络(这里术语“单元”和“神经元”是一个意思)
  • 每一个“单元”是个单个感知器,如同前面所描述的
  • 对于隐含层的单元来说,输入层单元就是他们输入。同样对于输出层来说,隐含层就是它的输入。
  • 每两个神经元之间的连接都有一个权重w(与感知器的权重类似)
  • 每一个t层中的单元,一般都与前一层(t-1层)中的每一个单元都连接(尽管你可以把权重设置为0表示断开它们)
  • 为了处理输入的数据,你可将输入向量“夹取”到输入层,将向量的值设置成每个输入单元的输出值。 在这个例子中,这个网络能处理三维输入向量(因为有三个输入单元)。举个栗子,如果输入向量是[7, 1, 2],那么你就将最上面的输入单元的输出设为7,中间的单元设为1,如此类推。于是,这些值就使用加权和转移函数向前传播到每个隐含单元(这就是前向传播这个词的由来),这些隐含单元再来计算他们的输出(激励函数)
  • 输出层用与隐含层同样的方法来计算它的输出。输出层的结果也就是这个网络的输出
jeffy
翻译于 2017-02-27 22:32:26
 

参与本段翻译用户:
jeffy

显示原文内容

【已悬赏】 赏金: 9元

超越线性

假如每个感知器只允许使用线性激活函数将会怎么样? 那么,网络的最终输出仍然是输入的某个线性函数,只是调整了权重,使它有很大的不同(因为权重贯穿了整个网络)。 换句话说,线性函数的线性组合仍然只是一个线性函数。 如果我们局限于线性激活函数,那么无论神经网络有多少层,它也不比感知器更强大。(线性函数的线性组合仍然只是一个线性函数,因此大多数神经网络使用非线性激活函数)因此,大多数神经网络使用非线性激活函数,如逻辑函数,双曲函数,二元函数或整流函数。 没有它们,神经网络只能学习其输入的线性组合的函数。

训练感知器

最常见的深度学习算法用于多层感知器的监督训练,被称为反向传播。 基本步骤: 

1.输入训练样本,并通过网络向前传播;

2.计算输出误差,通常为均方误差:
      mean squared error

      其中t是目标值,y是实际的网络输出。 其他误差计算也是可以的,但MSE(均方误差)是一个不错的选择。

3.使用随机梯度下降的方法来最小化网络误差。

Gradient descent

      梯度下降法是通用的,但是在神经网络的情况下,这是作为输入参数的函数的训练误差的图(上图)。每个权重的最佳值是误差达到全局最小值时。在训练阶段,权重是以一小步一小步更新(在每个样本或几个作为一个批次的样本训练之后),以使得它们总是尝试达到全局最小值,但这不是容易的任务。通常最终我们取得局部最小值,如图上右边的那个。例如,如果权重具有值0.6,则需要将其朝着0.4改变。

      此图表示最简单的情况,其中误差取决于单个参数。然而,网络误差取决于每个网络的权重,并且误差函数是非常复杂得多的。

      幸好,关于输出误差,反向传播提供了一种用于更新两个神经元之间的每个权重的方法。派生本身相当复杂,但是对于给定节点的权重更新具有以下(简单)形式: 

      example form

      其中E是输出误差,w_i是输入到神经元的权重。
      基本上,目标是关于权重i沿梯度的方向移动。 关键当然是误差的导数,这并不总是很容易计算:如何从一个大型网络中的随机隐藏节点的随机权重中找到这个导数?
      答案是:通过反传。 首先在输出单元处计算误差,其中公式相当简单(基于目标值和预测值之间的差),然后通过网络传播回来,从而允许我们在训练期间有效地更新权重, (希望)达到最低。

亲爱的十一
翻译于 2017-03-01 17:20:02
 

参与本段翻译用户:
jeffy 亲爱的十一 Y小牛S

显示原文内容 | 显示全部版本

【已悬赏】 赏金: 2元

隐含层


隐含层很有意思。由通用逼近定理一个有着有限神经元的单个隐含层可以被训练接近一个任意的随机函数。换句话说,单个隐含层就足够强大到可以学习任何函数。即便如此,在实际中我们经常使用多个隐含层来获得更好的学习效果(如,深度网络)

隐含层是网络存储训练集数据内部抽象表达的地方


隐含层是网络存储训练集数据内部抽象表达的地方,这与人脑(极度简化的类比)有着真实世界的内部呈现类似。继续本教程,我们会去看一看隐含层的多种使用方式。


jeffy
翻译于 2017-02-27 22:47:35
 

参与本段翻译用户:
jeffy

显示原文内容

【已悬赏】 赏金: 5元

一个网络的例子

  可以看一下这个通过testMLPSigmoidBP方法用Java实现的简单(4-2-3)前馈神经网络,它将IRIS数据集进行了分类。这个数据集中包含了三类鸢尾属植物,特征包括花萼长度,花瓣长度等等。每一类提供50个样本给这个神经网络训练。特征被赋给输入神经元,每一个输出神经元代表一类数据集(“1/0/0” 表示这个植物是Setosa,“0/1/0”表示 Versicolour,而“0/0/1”表示 Virginica)。分类的错误率是2/150(即每分类150个,错2个)。

大规模网络中的难题

  神经网络中可以有多个隐含层:这样,在更高的隐含层里可以对其之前的隐含层构建新的抽象。而且像之前也提到的,这样可以更好的学习大规模网络。然而增加隐含层的层数通常会导致两个问题:

梯度消失:随着我们添加越来越多的隐含层,反向传播传递给较低层的信息会越来越少。实际上,由于信息向前反馈,不同层次间的梯度开始消失,对网络中权重的影响也会变小。

过度拟合:也许这是机器学习的核心难题。简要来说,过度拟合指的是对训练数据有着过于好的识别效果,这时导至模型非常复杂。这样的结果会导致对训练数据有非常好的识别较果,而对真实样本的识别效果非常差。

  下面我们来看看一些深度学习的算法是如何面对这些难题的。

 

小胖想吃肉
翻译于 2017-05-13 10:04:19
 

参与本段翻译用户:
小胖想吃肉

显示原文内容

【已悬赏】 赏金: 2元

Autoencoders

自编码器

Most introductory machine learning classes tend to stop with feedforward neural networks. But the space of possible nets is far richer—so let’s continue.

An autoencoder is typically a feedforward neural network which aims to learn a compressed, distributed representation (encoding) of a dataset.

大多数介绍机器学习的课程都以神经网络的自反馈结尾。但是可能存在的网络可能远比这更丰富--所以我们继续。

一个自编码器一般来说是一个具有学习数据组中压缩的,分布式的代理(编码)的自反馈式神经网络。

An autoencoder is a neural deep learning network that aims to learn a certain representation of a dataset.

Conceptually, the network is trained to “recreate” the input, i.e., the input and the target data are the same. In other words: you’re trying to output the same thing you were input, but compressed in some way. This is a confusing approach, so let’s look at an example.

从概念上来说,神经网络被训练对输入进行“再创造”,也就是,输入和目标是一致的。换句话说,你在尝试输出与你之前输入的相同的东西,但是以某种方式压缩。这是一个令人疑惑的过程,所以让我们来看一个例子。

Laurenwang
翻译于 2017-02-28 11:31:15
 

参与本段翻译用户:
Laurenwang

显示原文内容

【已悬赏】 赏金: 3元

Compressing the Input: Grayscale Images

输入的压缩:灰度图

Say that the training data consists of 28x28 grayscale images and the value of each pixel is clamped to one input layer neuron (i.e., the input layer will have 784 neurons). Then, the output layer would have the same number of units (784) as the input layer and the target value for each output unit would be the grayscale value of one pixel of the image.

假设训练数据由28X28的灰度图组成,并且每张图的像素值都与其中一个输入层神经元相关(也就是说,输入层将有784个神经元)。所以,输出层也会与输入层有相同数量的神经元单元,而且每个单元的目标输出值也将会是一张灰度图的像素值。

The intuition behind this architecture is that the network will not learn a “mapping” between the training data and its labels, but will instead learn the internal structure and features of the data itself. (Because of this, the hidden layer is also called feature detector.) Usually, the number of hidden units is smaller than the input/output layers, which forces the network to learn only the most important features and achieves a dimensionality reduction.

这个构架的直观印象并不是是网络将会去学习将训练数据和它的标签之间进行“绘图”,而将是学习内部构架和数据特点之间的联系。(正因为如此,隐藏层也被称作特征探测器)。一般来讲,隐藏单元的数量小于输入、输出层,这将迫使网络只学习最重要的特征并且达到维数约简的目的。

We want a few small nodes in the middle to learn the data at a conceptual level, producing a compact representation.

In effect, we want a few small nodes in the middle to really learn the data at a conceptual level, producing a compact representation that in some way captures the core features of our input.

我们希望在中间有一些小的节点使其在概念层次上学习数据,并产生一种紧凑的描述。

实际上,我们我们希望在中间有一些小的节点使其真正在概念层次上学习数据,并产生一些紧凑的、能用某种方式获取我们输入中的核心特点的描述。

Laurenwang
翻译于 2017-02-28 19:44:31
 

参与本段翻译用户:
Laurenwang

显示原文内容

【已悬赏】 赏金: 5元

流感病

    为了进一步验证自编码器,让我们再来看一个应用。

    在这个案例中,我们会使用一个简单的流感症状数据集。如果你感兴趣,可以使用这个代码

    下面是数据集的解释:

  • 数据集包括6个二元输入特征。
  • 前三个特征是流感病症。例如,1 0 0 0 0 0 表明该名病人体温偏高,而0 1 0 0 0 0表示咳嗽, 1 1 0 0 0 0表示咳嗽和发烧等。
  • 后三个特征是“相反”症状;当一个病人具备后三特征其中之一,那他/她很只有很低的可能得病。例如,0 0 0 1 0 0表明病人具有流感免疫。也可能会在两个特征集合中都存在:0 1 0 1 0 0表明带疫苗的病人有咳嗽症状等等。

    我们认为一个病人在他/她前三个特征中有任意两个及以上就是得病,而后三特征至少有两个时为健康,例如:

  • 111000, 101000, 110000, 011000, 011100 = 患病
  • 000111, 001110, 000101, 000011, 000110 = 健康

    我们会训练一个6个输入节点和6个输出节点的自编码器(通过反向传播),但只有两个隐藏节点。

    在几百次迭代之后,我们观察当每个患病记录被输入到机器学习网络,两个隐藏节点之一(对每个病人样本都是同一个节点)总是比另一个节点出现更高的激活值。相反,当健康记录被输入到网络中,另一个隐藏节点会有更高的激活值。

liangliqiang
翻译于 2017-06-15 17:51:34
 

参与本段翻译用户:
liangliqiang

显示原文内容

【已悬赏】 赏金: 4元

回到机器学习

本质上,我们的两个隐藏单位已经学会了流感症状数据集的紧凑表示。为了了解这与学习的关系,我们回到了过度适应的问题上。通过训练我们的网络来学习数据的紧凑表示,我们更倾向于一个更简单的表示,而不是过度拟合训练数据的高度复杂的假设。

在某种程度上,通过支持这些更简单的表示,我们试图从更真实的意义上学习数据。




受限波尔兹曼机

下一个逻辑步骤是研究一个受限波尔兹曼机(RBM),这是一种生成的随机神经网络,它可以在其输入集上学习概率分布。

In machine learning, Restricted Botlzmann Machines are composed of visible and hidden units.

RBM由隐藏的、可的和偏置层组成。与前馈网络不同,可见层和隐藏层之间的连接是无向的(这些值可以从可视到隐藏和隐藏到可的方向)和完全连接(每一个给定层的单元都连接到下一个层中的每个单元--如果我们允许任何层中的任何单元连接到任何其他层,那么我们就有了一台Boltzmann(而不是受限的Boltzmann)机器。

标准的RBM有二进制隐藏和可见单元:也就是说,在Bernoulli分布下,单元激活为0或1,但也有其他非线性变量。

尽管研究者们对RBMS已经了解了一段时间,但最近引入的对比发散无监督训练算法重新引起了人们的兴趣。


廿九_
翻译于 2018-01-24 15:02:12
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 4元

对比发散


单步对比发散算法(CD-1)的工作原理如下:


  1. 正相:

    • 输入的样本V被夹紧到输入层。

    • v以传播到前馈网络类似的方式传播到隐藏层。隐藏层激活的结果是h。

  2. 负相:
    • h传播回可见层,得到结果v‘(可见层和隐藏层之间的连接是无方向的,因此允许在两个方向上移动)。

    • 用激活结果h‘将新的v’传播回隐藏层。

  3. 重量更新:

    weight update

    其中a是学习速率,v,v‘,h,h’和w是向量。

该算法背后的直觉是正相位(h给定的v)反映了网络的真实世界数据的内部表示。同时,负相表示试图基于此内部表示(v’给定h)重新创建数据。主要目标是使生成的数据尽可能接近现实世界,这反映在权重更新公式中。

换句话说,网络对输入数据的表示方式有一定的感知,因此它试图在此基础上再现数据。如果它的复制不够接近现实,它进行调整然后再试一次。


廿九_
翻译于 2018-01-24 16:15:47
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

回归流感案例

为了演示对比差异,我们将使用与前面相同的症状数据集。测试网络是一个有六个可见单元和两个隐藏单元的RBM。我们将用对比发散训练网络并将症状V卡在可见层上。在测试期间,症状再次呈现到可见层,然后将数据传播到隐藏层。隐藏单元表示病态/健康状态,这是一种与自动编码器非常相似的架构(将数据从可见层传播到隐藏层)。

经过几百次迭代,我们可以观察到与自动编码器相同的结果:其中一个隐藏单元在任何“病”样本出现时具有较高的激活值,而对于“健康果:”样本,另一个则总是更活跃。。

您可以在 in the testContrastiveDivergence method.看到这个示例的作用。

廿九_
翻译于 2018-01-24 16:20:26
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

深度网络

我们现在已经证明了隐藏层的自动编码器和RBM有效的特征检测器;但是我们很少能够直接使用这些特性。实际上,上面的数据集更多的是例外而不是通用的。相反,我们需要找到一些方法间接地使用这些检测到的特性。

幸运的是,人们发现这些结构可以堆叠成深网络。这些网络可以一层一层地进行贪婪的训练,以帮助克服消失的梯度和与经典反向传播相关的过度问题。

由此产生的结构往往相当强大,产生了令人印象深刻的结果。例如,谷歌著名的“猫”纸,他们用特殊的深层自动编码器来“学习”基于未标记数据的人类和猫脸检测。

让我们仔细看看。


廿九_
翻译于 2018-01-24 16:24:18
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 6元

堆叠式自动编码器

顾名思义,这个网络由多个堆叠的自动编码器组成。

Stacked Autoencoders have a series of inputs, outputs, and hidden layers that contribute to machine learning outcomes.

自动编码器t的隐藏层充当自动编码器t1的输入层。第一自动编码器的输入层是整个网络的输入层。贪婪的分层培训过程如下所示:

  1. 单独使用反向传播方法与所有可用的训练数据的第一编码(t = 1,或上图中的红色连接,但有一个额外的输出层)训练。

  2. 训练第二个自动编码器t=2(绿色连接)。因为T=2的输入层是T=1的隐藏层,我们不再对T=1的输出层感兴趣,我们从网络中删除它。训练首先将输入样本夹紧到输入层t=1,输入层向前传播到t=2的输出层。接下来,使用反向传播更新t=2的权值(输入-隐藏和隐藏输出)。t=2使用所有训练样本,类似于t=1。
  3. 对所有层重复前面的步骤(即,删除前一个自动编码器的输出层,用另一个自动编码器替换它,并使用反向传播进行训练)。
  4. 步骤1-3被称为预训练,并使重量正确初始化。但是,在输入数据和输出标签之间没有映射。例如,如果网络被训练来识别手写数字的图像,它仍然不可能将单元从最后一个特征检测器(即最后一个自动编码器的隐藏层)映射到图像的数字类型。在这种情况下,最常见的解决方案是将一个或多个完全连接的层添加到最后一层(蓝色连接)。整个网络现在可以被看作是一个多层感知器,并使用反向传播进行训练(这一步也称为微调)。

堆叠式自动编码器提供了一种有效的预训练方法来初始化网络的权重,使您拥有一个复杂的、多层感知器,可以进行训练(或微调)。

廿九_
翻译于 2018-01-24 16:48:25
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 4元

深层信念网络

和自动编码器一样,我们也可以堆叠Boltzmann机器来创建一个称为深度信念网络(DBN)的集合

Deep belief networks are comprised of a stack of Boltzmann machines.

在这种情况下,RBMt的隐藏层充当RBMt1的可见层。第一个RBM的输入层是整个网络的输入层,贪婪层的预训练工作是如下

  1. 使用与所有训练样本的对比散度对第一RBMT=1进行训练。

  2. 训练第二个RBM t=2。由于t=2的可见层是t=1的隐藏层,训练首先将输入样本夹到t=1的可见层,然后将其传播到t=1隐藏层。然后,该数据将用于启动t=2的对比发散训练。

  3. 对所有层重复前面的步骤。

  4. 与堆叠式自动编码器类似,经过预训练后,网络可以通过连接一个或多个完全连接的层扩展到最终的RBM隐藏层。这形成了一个多层感知器然后可以利用反向传播对其进行微调。

这一过程类似于堆叠式自动编码器,但用RBMS代替自动编码器,用对比发散算法代替反向传播。

(注:关于构建和培训堆叠式自动编码器或深层信念网络的更多信息,请参阅这里的示例代码。)

廿九_
翻译于 2018-01-25 08:56:58
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 8元

卷积网络

作为最后一种深度学习架构,让我们来看看卷积网络,这是一种非常适合图像识别的特别有趣的前馈网络。

Convolutional networks are a special class of deep learning feedforward networks. 

图片来自     DeepLearning.net

在我们研究卷积网络的实际结构之前,我们首先定义一个图像滤波器,或一个具有相关权重的正方形区域。在整个输入图像上应用过滤器,并且您将经常应用多个过滤器。例如,你可以对给定的输入图像应用四个6x6过滤器。然后,坐标为1,1的输出像素为6x6平方的输入像素与左上角1,1和滤波器的权重之和(也就是6x6平方)。输出像素2,1是输入方与左上角2,1等的结果。

在此基础上,这些网络由以下属性定义:


  • 卷积层将许多滤波器应用到输入端。例如,图像的第一个卷积层可以有四个6x6滤波器。应用于图像的一个滤波器的结果是被称为特征映射(FM),并且数字特征映射等于滤波器的数目。如果前一层也是卷积的,则滤波器被应用于所有不同权重的FMS中,因此,每个输入FM连接到每个输出FM。在整个图像中共享权重背后的直觉是,无论特征的位置如何,都将检测到这些特征,而过滤器允许每个过滤器检测不同的特征集。

  • 次采样层减小了输入的大小。例如,如果输入由32x32图像组成,而该层的次采样区域为2x2,则输出值为16x16图像,这意味着将输入图像的4个像素(每个2x2平方)组合成一个输出像素。子样本有多种方法,但最流行的方法是 max poolingaverage pooling, 和 stochastic pooling.

  • 最后一次采样(或卷积)层通常连接到一个或多个完全连接的层,其中最后一个表示目标数据。

  •  训练是使用考虑到次采样层的修改反向传播来执行的,并根据应用该滤波器的所有值更新卷积滤波器的权重。

在这里,您可以看到一些关于MNIST数据集(手写字母的灰度图像)的卷积网络的例子(通过反向传播),特别是在testLeNet*方法中(我推荐testLeNetTiny 2,因为它在相对较短的时间内实现了大约2%的低错误率)。这里还有一个类似网络的很好的JavaScript可视化。

廿九_
翻译于 2018-01-24 17:46:04
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

成就

既然我们已经讨论了最常见的神经网络变体,我想我应该写一些关于在实现这些深度学习结构过程中所面临的挑战。
总的来说,我创建深度学习图书馆的目标是(而且现在仍然是)建立一个基于神经网络的框架,该框架符合以下标准:

  • 一种通用的体系结构,能够代表不同的模型(例如,我们在上面看到的神经网络上的所有变体)。
  • 能够使用不同的训练算法(反向传播,对比发散,等等)。
  • 不错的表现

为了满足这些需求,我采用了分层(或模块化)方法来设计软件。

廿九_
翻译于 2018-01-24 17:07:25
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

结构

让我们从基础开始:

  • NeuralNetworkImpl是所有神经网络模型的基类。
  • 每个网络包含一组层。
  • 每个层都有一个连接列表,其中一个连接是两个层之间的链接,因此网络是一个有向无圈图。

这种结构足够灵活,可以用于经典的前馈网络,以及RBM和ImageNet等更复杂的体系结构。
它还允许一个层成为多个网络的一部分。例如,深度信念网络中的层也是相应的RBM中的层。
此外,该体系结构还允许将dbnDBN看作是预培训阶段的堆叠RBMs列表,以及微调阶段的前馈网络,这既直观又方便编程。


廿九_
翻译于 2018-01-24 17:20:18
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 5元

数据传播

下一个模块负责通过网络传播数据,这是一个两步的过程:

  1. 确定层的顺序。例如,为了从多层感知器获得结果,数据被“夹紧”到输入层(因此,这是要计算的第一层),并一直传播到输出层。为了在反向传播过程中更新权值,必须从输出层开始,将输出误差按宽度一阶传播到每一层。这是通过各种LayerOrderStrategy来实现的,它利用了网络的图形结构,使用了不同的图遍历方法。一些例子包设计宽度优先策略和特定层的目标。顺序实际上是由层间的连接决定的,因此策略返回一个有序的连接列表。
  2. 计算激活值。每个层都有一个关联的ConnectionCalculator,获取它的连接列表(来自上一步)和输入值(来自其他层),并计算激活结果。例如,在简单的Sigmoidal前馈网络中,隐藏层的连接计算器采用输入层和偏置层的值(分别是输入数据和1s数组)和单元之间的权重(对于完全连接的层,权重实际上作为一个矩阵存储在一个完整连接的连接中),计算加权和,并将结果输入到Sigmoid函数中。连接计算器实现各种传输(例如,加权和、卷积)和激活(例如,多层感知器的Logistic和TANA,RBM的二进制函数)功能。它们中的大多数可以在GPU上使用Aparapi执行,并可用于小型批量培训。
廿九_
翻译于 2018-01-24 17:16:16
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 3元

Aparapi计算GPU

正如我前面提到的,近年来神经网络复兴的原因之一是它们的训练方法非常有利于并行性,允许使用GPGPU大大加快训练。在这种情况下,我选择使用Aparapi库来添加GPU支持。

Aparapi对连接计算器施加了一些重要限制:


  • 只允许原始数据类型的一维数组(和变量)。
  • 只允许从GPU可执行代码调用Aparapi内核类本身的成员方法。

因此,大多数数据(权重、输入和输出数组)存储在矩阵实例中,这些实例内部使用一维浮点数组。所有的Aparapi连接计算器都使用AparapiWeightedsum(用于全连通层和加权和输入函数),Aparapisubsampling2D(用于次采样层),或AparapiConv2D(用于卷积层)。其中一些限制可以通过引入异构系统架构来克服。AparAPI还允许在CPU和GPU上运行相同的代码。

廿九_
翻译于 2018-01-25 09:09:45
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 4元

训练

训练模块实现了各种训练算法。它依赖于前两个模块。例如,BackPropagationTrainer(所有的培训师都在使用训练器基类)使用前馈层计算器作为前馈阶段,而专用的第一层宽度计算器用于传播误差和更新权重。
我最近的工作是Java 8支持和不久将合并到Master中的一些其他改进。

结论

本java深度学习教程的目的是向你简要介绍深度学习算法领域,从最基本的合成单元(感知器)开始,并通过各种有效和流行的体系结构,比如受限的Boltzmann机器让你进行了解。
神经网络背后的想法已经有了很长一段时间了,但是今天,如果没有深入的网络或其他深入学习的知识,你就不能涉足机器学习社区。炒作不应被误认为是正当的,但随着GPU计算的进步和 Geoffrey Hinton, Yoshua Bengio, Yann LeCun and Andrew Ng等研究人员所取得的令人印象深刻的进展,这个领域肯定有很大的希望。没有比现在更好的时间去熟悉和参与其中了。


廿九_
翻译于 2018-01-24 16:58:28
 

参与本段翻译用户:
廿九_

显示原文内容

GMT+8, 2018-7-22 22:36 , Processed in 0.059198 second(s), 11 queries .