神经网络

From Ufldl

Jump to: navigation, search
(神经网络模型)
Line 40: Line 40:
如图,我们使用圆圈来表示神经网络的输入,标上“ <math>\textstyle +1</math> ”的圆圈被称为'''偏置节点''',也就是截距项。神经网络最左边的一层叫做'''输入层''',最右的一层叫做'''输出层'''(本例中,输出层只有一个节点)。中间所有节点组成的一层叫做'''隐藏层''',因为我们不能在训练样本集中观测到它们的值。同时可以看到,以上神经网络的例子中有3个'''输入单元'''(偏置单元不计在内),3个'''隐藏单元'''及一个'''输出单元'''。
如图,我们使用圆圈来表示神经网络的输入,标上“ <math>\textstyle +1</math> ”的圆圈被称为'''偏置节点''',也就是截距项。神经网络最左边的一层叫做'''输入层''',最右的一层叫做'''输出层'''(本例中,输出层只有一个节点)。中间所有节点组成的一层叫做'''隐藏层''',因为我们不能在训练样本集中观测到它们的值。同时可以看到,以上神经网络的例子中有3个'''输入单元'''(偏置单元不计在内),3个'''隐藏单元'''及一个'''输出单元'''。
-
我们用 <math>\textstyle {n}_l</math> 来表示网络的层数,本例中 <math>\textstyle n_l=3</math> ,我们将第 <math>\textstyle l</math> 层记为 <math>\textstyle L_l</math> ,于是 <math>\textstyle L_l</math> 是输入层,输出层是 <math>\textstyle L_{n_l}</math> 。本例神经网络有参数 <math>\textstyle (W,b) = (W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)})</math> ,其中 <math>\textstyle W^{(l)}_{ij}</math> 第 <math>\textstyle l</math> 层第 <math>\textstyle j</math> 单元与第 <math>\textstyle l+1</math> 层第 <math>\textstyle i</math> 单元之间的联接参数(其实就是连接线上的权重,注意标号顺序), <math>\textstyle b^{(l)}_i</math> 是第 <math>\textstyle l+1</math> 层第 <math>\textstyle i</math> 单的偏置项。因此,本例中, <math>\textstyle W^{(1)} \in \Re^{3\times 3}</math> , <math>\textstyle W^{(2)} \in \Re^{1\times 3}</math> 。注意,没有其他单元连向偏置单元(即偏置单元没有输入),因为它们总是输出+1。同时,我们用 <math>\textstyle s_l</math> 表示第 <math>\textstyle l</math> 层的节点数(偏置单元不计在内)。
+
 
 +
我们用 <math>\textstyle {n}_l</math> 来表示网络的层数,本例中 <math>\textstyle n_l=3</math> ,我们将第 <math>\textstyle l</math> 层记为 <math>\textstyle L_l</math> ,于是 <math>\textstyle L_1</math> 是输入层,输出层是 <math>\textstyle L_{n_l}</math> 。本例神经网络有参数 <math>\textstyle (W,b) = (W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)})</math> ,其中 <math>\textstyle W^{(l)}_{ij}</math> 第 <math>\textstyle l</math> 层第 <math>\textstyle j</math> 单元与第 <math>\textstyle l+1</math> 层第 <math>\textstyle i</math> 单元之间的联接参数(其实就是连接线上的权重,注意标号顺序), <math>\textstyle b^{(l)}_i</math> 是第 <math>\textstyle l+1</math> 层第 <math>\textstyle i</math> 单的偏置项。因此,本例中, <math>\textstyle W^{(1)} \in \Re^{3\times 3}</math> , <math>\textstyle W^{(2)} \in \Re^{1\times 3}</math> 。注意,没有其他单元连向偏置单元(即偏置单元没有输入),因为它们总是输出+1。同时,我们用 <math>\textstyle s_l</math> 表示第 <math>\textstyle l</math> 层的节点数(偏置单元不计在内)。
 +
 
我们用 <math>\textstyle a^{(l)}_i</math> 表示第 <math>\textstyle l</math> 层第 <math>\textstyle i</math> 号单元的'''激活值'''(输出值)。当 <math>\textstyle l=1</math> 时, <math>\textstyle a^{(1)}_i = x_i</math> ,也就是第 <math>\textstyle i</math> 个输入值(输入值的第 <math>\textstyle i</math> 个特征)。对于给定参数集合 <math>\textstyle W,b</math> ,我们的神经网络就按照函数 <math>\textstyle h_{W,b}(x)</math> 计算输出结果。本例神经网络的计算过程就由以下步骤表示:
我们用 <math>\textstyle a^{(l)}_i</math> 表示第 <math>\textstyle l</math> 层第 <math>\textstyle i</math> 号单元的'''激活值'''(输出值)。当 <math>\textstyle l=1</math> 时, <math>\textstyle a^{(1)}_i = x_i</math> ,也就是第 <math>\textstyle i</math> 个输入值(输入值的第 <math>\textstyle i</math> 个特征)。对于给定参数集合 <math>\textstyle W,b</math> ,我们的神经网络就按照函数 <math>\textstyle h_{W,b}(x)</math> 计算输出结果。本例神经网络的计算过程就由以下步骤表示:
 +
:<math>  
:<math>  
\begin{align}
\begin{align}
Line 53: Line 56:
我们用 <math>\textstyle z^{(l)}_i</math> 表示第 <math>\textstyle l</math> 层第 <math>\textstyle i</math> 单元输入加权和(包括偏置单元),比如, <math>\textstyle  z_i^{(2)} = \sum_{j=1}^n W^{(1)}_{ij} x_j + b^{(1)}_i</math> ,则 <math>\textstyle a^{(l)}_i = f(z^{(l)}_i)</math> 。
我们用 <math>\textstyle z^{(l)}_i</math> 表示第 <math>\textstyle l</math> 层第 <math>\textstyle i</math> 单元输入加权和(包括偏置单元),比如, <math>\textstyle  z_i^{(2)} = \sum_{j=1}^n W^{(1)}_{ij} x_j + b^{(1)}_i</math> ,则 <math>\textstyle a^{(l)}_i = f(z^{(l)}_i)</math> 。
 +
这样我们就可以得到一种更简洁的表示法。这里我们将激活函数 <math>\textstyle f(\cdot)</math> 扩展为用向量(分量的形式)来表示,即 <math>\textstyle f([z_1, z_2, z_3]) = [f(z_1), f(z_2), f(z_3)]</math> ,那么,上面的等式可以更简洁地表示为:
这样我们就可以得到一种更简洁的表示法。这里我们将激活函数 <math>\textstyle f(\cdot)</math> 扩展为用向量(分量的形式)来表示,即 <math>\textstyle f([z_1, z_2, z_3]) = [f(z_1), f(z_2), f(z_3)]</math> ,那么,上面的等式可以更简洁地表示为:
Line 71: Line 75:
将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。
将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。
 +
目前为止,我们讨论了一种神经网络的例子,但我们也可以构建一个另一种'''结构'''的神经网络(这里结构指的是神经元之间的联接模式),包括具有多个隐藏层的神经网络。最常见的一个例子是 <math>\textstyle  n_l</math> 层的神经网络,第 <math>\textstyle  1</math> 层是输入层,第 <math>\textstyle  n_l</math> 层是输出层,中间的每个层 <math>\textstyle  l</math> 与层 <math>\textstyle  l+1</math> 紧密相联。这种模式下,要计算神经网络的输出结果,我们可以通过之前的等式描述的那样,按部就班,进行正向传播,逐一计算第 <math>\textstyle  L_2</math> 层的所有激活值,再者是第 <math>\textstyle  L_3</math> 层的激活值,以此类推,直到第 <math>\textstyle  L_{n_l}</math> 层。这是一个'''前馈'''神经网络的样例,因为这种联接图并没有闭环或回路。
目前为止,我们讨论了一种神经网络的例子,但我们也可以构建一个另一种'''结构'''的神经网络(这里结构指的是神经元之间的联接模式),包括具有多个隐藏层的神经网络。最常见的一个例子是 <math>\textstyle  n_l</math> 层的神经网络,第 <math>\textstyle  1</math> 层是输入层,第 <math>\textstyle  n_l</math> 层是输出层,中间的每个层 <math>\textstyle  l</math> 与层 <math>\textstyle  l+1</math> 紧密相联。这种模式下,要计算神经网络的输出结果,我们可以通过之前的等式描述的那样,按部就班,进行正向传播,逐一计算第 <math>\textstyle  L_2</math> 层的所有激活值,再者是第 <math>\textstyle  L_3</math> 层的激活值,以此类推,直到第 <math>\textstyle  L_{n_l}</math> 层。这是一个'''前馈'''神经网络的样例,因为这种联接图并没有闭环或回路。
 +
神经网络也可以有多个输出单元。比如,以下神经网络有两层隐藏层: <math>\textstyle L_2</math>  及 <math>\textstyle L_3</math> ,并在 <math>\textstyle L_4</math> 层中有两个输出单元。
神经网络也可以有多个输出单元。比如,以下神经网络有两层隐藏层: <math>\textstyle L_2</math>  及 <math>\textstyle L_3</math> ,并在 <math>\textstyle L_4</math> 层中有两个输出单元。

Revision as of 03:16, 14 March 2013

Personal tools