Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
start:深度学习教程---从感知到深度网络 [2017/09/09 21:34] vanabel [感知器的训练] |
start:深度学习教程---从感知到深度网络 [2019/06/27 22:37] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== 深度学习教程──从感知到深度网络 ====== | + | ====== 深度学习教程──从感知器到深度网络 ====== |
[[https://www.toptal.com/machine-learning/an-introduction-to-deep-learning-from-perceptrons-to-deep-networks|本文]]原作者是Java工程师**Ivan Vasilev**, 同时作者也开发了[[https://github.com/ivan-vasilev/neuralnetworks|Java深度学习库]], 大家可以去点赞. 这里我将根据我的理解, 作一记录. | [[https://www.toptal.com/machine-learning/an-introduction-to-deep-learning-from-perceptrons-to-deep-networks|本文]]原作者是Java工程师**Ivan Vasilev**, 同时作者也开发了[[https://github.com/ivan-vasilev/neuralnetworks|Java深度学习库]], 大家可以去点赞. 这里我将根据我的理解, 作一记录. | ||
Line 63: | Line 63: | ||
> 一系列线性函数的线性复合还是线性函数,故大多数的神经网络用的是非线性激活函数。 | > 一系列线性函数的线性复合还是线性函数,故大多数的神经网络用的是非线性激活函数。 | ||
- | 正因为如此,大多数神经网络使用非线性的激活函数,例如[logistic](https://en.wikipedia.org/wiki/Sigmoid_function)函数、[tanh](https://en.wikipedia.org/wiki/Tanh)函数、[binary](https://en.wikipedia.org/wiki/Artificial_neuron#Step_function)函数或者[rectifier](https://en.wikipedia.org/wiki/Rectified_linear_unit)函数。如果不用非线性函数,那么神经网络只能学习其输入的线性组合这类函数。 | + | 正因为如此,大多数神经网络使用非线性的激活函数,例如[[wp>Sigmoid_function|Logistic函数]]、[[wp>Tanh|tanh函数]]、[[wp>Artificial_neuron#Step_function| binary函数]]或者[[wp>Rectified_linear_unit|rectifier函数]]。如果不用非线性函数,那么神经网络只能学习其输入的线性组合这类函数。 |
==== 感知器的训练 ==== | ==== 感知器的训练 ==== | ||
有监督训练多层感知器的深度学习中最常见的算法是所谓的反向传播算法(backpropagation)。其基本过程是: | 有监督训练多层感知器的深度学习中最常见的算法是所谓的反向传播算法(backpropagation)。其基本过程是: | ||
Line 80: | Line 79: | ||
上图还只是最简单的情形,即误差只依赖于单一参数(权重)。一般而言,神经网络的误差依赖于每一个权重,因此实际的误差函数比上述例子复杂得多的多。 | 上图还只是最简单的情形,即误差只依赖于单一参数(权重)。一般而言,神经网络的误差依赖于每一个权重,因此实际的误差函数比上述例子复杂得多的多。 | ||
- | 正是由于`反向传播算法`(backpropagation)方法的引入,它使得任何两个神经元之间的权重可以基于输出误差来更新。向后传播的推导本身有些复杂,但是给定节点的权重更新却很简单: | + | 正是由于`反向传播算法`([[wp>Backpropagation|backpropagation]])方法的引入,它使得任何两个神经元之间的权重可以基于输出误差来更新。向后传播的推导本身有些复杂,但是给定节点的权重更新却很简单: |
$$ | $$ | ||
\Delta w_i=-\alpha\frac{\partial E}{\partial w_i}, | \Delta w_i=-\alpha\frac{\partial E}{\partial w_i}, | ||
Line 116: | Line 115: | ||
大多数机器学习入门都停止在前馈神经网络这一步。但是可能的网络空间远非如此──所以让我们继续。 | 大多数机器学习入门都停止在前馈神经网络这一步。但是可能的网络空间远非如此──所以让我们继续。 | ||
- | 自动编码器(Autoencoder)是典型的前馈型神经网络,旨在**学习一个经过压缩的、分布表示(编码)的数据集**。 | + | `自动编码器`([[wp>Autoencoder| Autoencoder]])是典型的前馈型神经网络,旨在**学习一个经过压缩的、分布表示(编码)的数据集**。 |
{{ :start:autoencoder.png?400 | Autoencoder}} | {{ :start:autoencoder.png?400 | Autoencoder}} | ||
概念上来说,网络被训练成“重新生成”输入,即,输入以及目标数据是一样的。换句话说:你尝试着输出跟你输入的一模一样的东西,但在某种程度上经过了压缩。这是个容易让人迷糊的方法,所以让我们来看一个实例。 | 概念上来说,网络被训练成“重新生成”输入,即,输入以及目标数据是一样的。换句话说:你尝试着输出跟你输入的一模一样的东西,但在某种程度上经过了压缩。这是个容易让人迷糊的方法,所以让我们来看一个实例。 | ||
Line 158: | Line 157: | ||
在某种程度上,由于偏好这样更为简单的表示方法,我们也会尝试从一个更接近“真理”的意义上去学习数据。 | 在某种程度上,由于偏好这样更为简单的表示方法,我们也会尝试从一个更接近“真理”的意义上去学习数据。 | ||
+ | ===== 有限Boltzmann机 ===== | ||
+ | |||
+ | 下一个逻辑步骤是看看有限玻尔兹曼机[[wp>Restricted_Boltzmann_machine|Restricted Boltzmann machine]] (RBM),一个可以从它自身输入来学习概率分布的随机生成神经网络。 | ||
+ | {{ :start:rbm.png?400 |RBM}} | ||
+ | RBMS由隐藏层(hidden layer)、可见层(visible layer)、以及偏置层(bias layer)所组成。不同于前馈神经网络,在可见层和隐层之间的连接是无向的(值可以同时从隐层传到可见层,反之亦然)同时还是全连接的(给定层的每个神经元都会和下一层的每个神经元相连接——如果我们允许任意层次的任意神经元来连接到其他任何层次,那么就是`玻尔兹曼机`(Boltzmann)(并非有限玻尔兹曼机(restricted Boltzmann)))。 | ||
+ | |||
+ | 标准的RBM有二进制隐藏元和可见元:即是说在伯努利分布下神经元的激活值为0或者1,但是这里也有其他非线性的变量。 | ||
+ | |||
+ | 研究者们知晓RBMs已经有一定的年月,但最近关于对比分歧无监督训练算法的介绍又重新挑起了研究者们的兴趣。 | ||
+ | |||
+ |