DAY15 神经网络的参数和变量
一、参数和变量
在神经网络中,参数和变量是两个关键概念,它们分别指代不同类型的数据和设置。
参数(Parameters)
- 定义:参数是指在训练过程中学习到的模型内部变量,这些变量决定了模型的预测能力。
- 组成:对于神经网络而言,参数主要包括 权重weights和 偏置biases。每个连接都有一个对应的权重,而每个神经元通常会有一个偏置项。
- 作用:参数通过反向传播算法和梯度下降等优化方法不断更新,以最小化损失函数(Loss Function),从而提高模型的性能。
- 计算方法:参数个数通常基于神经网络的层次结构和节点数量来计算。
- 迭代更新:参数的更新取决于学习率、误差反向传播过程中输出的误差和输入信号。
变量(Variables)
-
定义:变量在神经网络中通常指的是那些在训练过程中不直接参与参数更新的数据或设置,但它们对模型的训练和性能有重要影响。
-
类型:变量可以包括训练集、验证集和测试集等数据集,以及超参数(如学习率、批次大小、层数等)。
-
作用:变量用于指导模型的训练过程,评估模型的性能,并帮助调优模型结构。例如,训练集用于确定W、b参数,而验证集用于选择超参数。
-
表示形式:在TensorFlow等深度学习框架中,变量可以表示为张量(Tensor),具有不同的类型和阶数。
总的来说:
参数是神经网络模型内部的可学习变量,它们通过训练过程不断调整以优化模型性能;
变量则包括了更广泛的数据和设置,它们虽然不直接参与参数更新,但对模型的训练和性能评估至关重要。
示例
- 在神经网络中,当输入为 x 1 、 x 2 、 x 3 x1、x2、x3 x1、x2、x3时,神经单元将它们如下整合为加权输入 z z z,通过激活函数 a ( z ) a(z) a(z) 来处理。
z 1 = w 1 x 1 + w 2 x 2 + w 3 x 3 + b ( w 1 , w 2 , w 3 为权重, b 为偏置 ) z_{1} = w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + b (w_{1}, w_{2}, w_{3}为权重,b为偏置) z1=w1x1+w2x2+w3x3+b(w1,w2,w3为权重,b为偏置)
a 1 = a ( z 1 ) a_{1} = a(z_{1}) a1=a(z1)
- 此时,权重 w 1 w_{1} w1、 w 2 w_{2} w2、 w 3 w_{3} w3 与偏置 b b b 为参数,输入 x 1 x_{1} x1、 x 2 x_{2} x2、 x 3 x_{3} x3、加权输入 z 1 z_{1} z1、神经单元的输出 a 1 a_{1} a1 为变量,变量的值根据学习数据的学习实例而变化。
神经网络中参数和变量的量级
神经网络在实际应用中,其参数和变量的数量非常庞大。以下是一些实际例子来说明这一点:
-
鸢尾花分类案例:在这个案例中,一个简单的神经网络被用来对鸢尾花进行分类。该网络有4个输入神经元(对应于花萼长度、花萼宽度、花瓣长度和花瓣宽度四个特征),3个输出神经元(对应于三种不同的花类别)。仅连接关系就有12个,这还不包括权重和偏置参数。
-
手写数字识别:在MNIST数据集上训练的卷积神经网络(CNN)通常包含多个卷积层、池化层和全连接层。例如,一个典型的CNN可能第一层有32个滤波器,每个滤波器的大小为5x5,那么仅这一层的权重数量就是32x(5x5+1)=832个。再加上偏置项,参数数量更多。而整个网络可能有数十层,每层的参数数量都相当可观。
-
图像分类:在ImageNet数据集上训练的深度神经网络,如ResNet-50,它有超过2500万个参数。这些参数包括了所有卷积层、全连接层以及批量归一化和残差连接中的参数。
-
自然语言处理:在NLP任务中,如机器翻译或文本生成,使用的模型如Transformer,其参数数量更是惊人。例如,OpenAI的GPT-3模型拥有1750亿个参数。
- 综上所述,这些例子展示了神经网络中参数和变量数量的庞大性,这也是为什么训练神经网络需要大量的数据和计算资源。
- 随着网络深度和宽度的增加,构成神经网络的神经单元的数量非常大,参数的数量呈指数级增长,相应地表示偏置、权重、输入、输出的变量的数目也变得非常庞大,这也使得神经网络能够学习和表示更加复杂和精细的特征。
二、神经网络中用到的变量名和参数名
- 首先,我们对神经网络中各层进行编号,如下图所示,最左边的输入层为层 1,隐藏层(中间层)为层 2、层 3……最右边的输出层为层 l l l(这里的 l l l 指 l a s t last last 的首字母,表示层的总数)。
- 进行以上准备后,将如下表所示来表示变量和参数。
分类 | 符号 | 含义 |
---|---|---|
变量名 | x i x_i xi | 表示输入层(层1)的第 i i i个神经单元的输入的变量。 1.由于输入层的神经单元的输入和输出为同一值,所以也是表示输出的变量 2.这个变量名也作为神经单元的名称使用 |
参数名 | w j i l w_{ji}^l wjil | 从层 l − 1 l-1 l−1的第 i i i个神经单元指向层 l l l的第 j j j个神经单元的箭头的权重。 注意 i i i和 j j j的顺序。 |
变量名 | z j l z_j^l zjl | 表示层 l l l的第 j j j个神经单元的加权输入的变量 |
参数名 | b j l b_j^l bjl | 层 l l l的第 j j j个神经单元的偏置。 |
变量名 | a j l a_j^l ajl | 层 l l l的第 j j j个神经单元的输出变量。 此外,这个变量名也作为神经单元的名称使用 |
提供上表中字母符号对应的英文标注,用于加深的理解记忆:
w w w: w e i g h t weight weight | l l l: l a y e r layer layer | b b b: b i a s bias bias | a a a: a c t i v a t i o n activation activation|
- 上表中各个符号的逻辑含义如下:
在神经网络中,每个神经元计算一个线性组合(即加权输入 z z z),然后通过一个非线性的激活函数 f ( z ) f(z) f(z) 来生成最终的输出。这个经过激活函数处理后的值通常用 a a a 表示,因为它代表了激活函数的输出,也就是神经元的实际激活水平。
具体来说,对于第 l l l 层的第 j j j 个神经元,我们有:
z j l = ∑ i w j i l a i l − 1 + b j l z_j^l = \sum_{i} w_{ji}^l a_i^{l-1} + b_j^l zjl=i∑wjilail−1+bjl这里 z j l z_j^l zjl 是未激活的输入,而
a j l = f ( z j l ) a_j^l = f(z_j^l) ajl=f(zjl)
这里的 a j l a_j^l ajl 就是经过激活函数 f f f 处理后的输出,表示该神经元被激活的程度。
输入层相关的变量名
- 输入层为神经网络的数据入口,如果表示输入层的输入的变量名依次为 x 1 , x 2 , … x_1,x_2, … x1,x2,…由于输入层中神经单元的输入和输出为同一值,那么它们也是输出的变量名。
隐藏层、输出层相关的参数名与变量名
- 这里我们截取神经网络的一部分,并按照前面表格中的约定标注变量名和参数名,如下图所示。
注意:上图中的 a j l a_j^l ajl并不表示输出变量,而是作为神经单元的名称使用。
- 下表列举了图中几个符号的具体含义。
符号示例 | 符号示例的含义 |
---|---|
b 1 2 b_1^2 b12 | 层 2(隐藏层)的第 1 个神经单元的偏置 |
b 1 3 b_1^3 b13 | 层 3(输出层)的第 1 个神经单元的偏置 |
w 12 2 w_{12}^2 w122 | 从层 1 的第 2 个神经单元指向层 2 的第 1 个神经单元的箭头的权重,也就是层 2(隐藏层)的第 1 个神经单元分配给层 1(输入层)的第 2 个神经单元的输出 x 2 x_2 x2 的权重 |
w 12 3 w_{12}^3 w123 | 从层 2 的第 2 个神经单元指向层 3 的第 1 个神经单元的箭头的权重,也就是层 3(输出层)的第 1 个神经单元分配给层 2(隐藏层)的第 2 个神经单元的输出 a 2 2 a_2^2 a22 的权重 |
三、变量值的表示方法
示例一
在前面讲解变量名的表格中, x i x_i xi、 z j l z_j^l zjl、 a j l a_j^l ajl为变量,它们的值根据学习数据的学习实例而变化。
- 假设给出了下面的图像作为学习实例。在将这个图像输入到神经网络中时,求隐藏层(层 2)的第 1 个神经单元的加权输入的值,即求 z 1 2 z_1^2 z12。
若具体地给出了学习数据的一个图像,则 x i x_i xi、 z j l z_j^l zjl、 a j l a_j^l ajl就变成了数值,而不是变量。
-
根据前面的变量名的一般约定,加权输入 z 1 2 z_{1}^{2} z12可以如下表示。
z 1 2 = w 11 2 x 1 + w 12 2 x 2 + w 13 2 x 3 + ⋯ + w 112 2 x 12 + b 1 2 \begin{matrix}z_{1}^{2}=w_{11}^{2}x_{1}+w_{12}^{2}x_{2}+w_{13}^{2}x_{3}+\cdots +w_{112}^{2}x_{12}+b_{1}^{2}\end{matrix} z12=w112x1+w122x2+w132x3+⋯+w1122x12+b12 -
由于读取图像后,输入层的 x 1 , x 2 , ⋯ , x 12 x_{1}, x_{2}, \cdots, x_{12} x1,x2,⋯,x12的值就确定了,所以加权输入 z 1 2 z_{1}^{2} z12的值可以像下面这样确定。
z 1 2 的值 = w 11 2 × 1 + w 12 2 × 1 + w 13 2 × 0 + ⋯ + w 112 2 × 0 + b 1 2 = w 11 2 + w 12 2 + w 15 2 + w 18 2 + w 111 2 \begin{matrix}z_{1}^{2}的值=w_{11}^{2}\times 1+w_{12}^{2}\times 1+w_{13}^{2}\times 0+\cdots +w_{112}^{2}\times 0+b_{1}^{2}\\ =w_{11}^{2}+w_{12}^{2}+w_{15}^{2}+w_{18}^{2}+w_{111}^{2}\end{matrix} z12的值=w112×1+w122×1+w132×0+⋯+w1122×0+b12=w112+w122+w152+w182+w1112 -
这样一来,加权输入 z 1 2 z_{1}^{2} z12的具体值就可以以上计算给出。
权重( w 11 2 w_{11}^{2} w112等)和偏置 b 1 2 b_{1}^{2} b12为参数,它们都是常数。
在不清楚变量和常数的关系时,请参考Day14 最优化问题和回归分析(番外二:常数和变量?)。
示例二
从示例一中可以知道,我们需要区分变量 x i x_i xi、 z j l z_j^l zjl、 a j l a_j^l ajl的符号与它们的值。在后面计算代价函数时,这一点非常重要。
- 在给定学习数据的第 k k k 个学习实例时,各个变量的值可以如下表示。
- x i [ k ] x_{i}[k] xi[k]:输入层的第 i i i 个神经元的输入值(=输出值)
- z j l [ k ] z_{j}^l[k] zjl[k]:层 l l l 的第 j j j 个神经元的加权输入的值
- a j l [ k ] a_{j}^l[k] ajl[k]:层 l l l 的第 j j j 个神经元的输出值
这种表示方法是以 C 语言等编程语言的数组变量的表示方法为依据的。
-
在示例一中,假设输入图像为学习数据的第 7 张图像,按照上述约定,输入层的变量的值以及加权输入 z 1 2 z_1^2 z12 的值可以如下表示。
x 1 [ 7 ] = 1 , x 2 [ 7 ] = 1 , x 3 [ 7 ] = 0 , x 4 [ 7 ] = 0 , x 5 [ 7 ] = 1 , x 6 [ 7 ] = 0 , x_{1}[7]=1, x_{2}[7]=1, x_{3}[7]=0, x_{4}[7]=0, x_{5}[7]=1, x_{6}[7]=0, x1[7]=1,x2[7]=1,x3[7]=0,x4[7]=0,x5[7]=1,x6[7]=0,x 7 [ 7 ] = 0 , x 8 [ 7 ] = 1 , x 9 [ 7 ] = 0 , x 10 [ 7 ] = 0 , x 11 [ 7 ] = 1 , x 12 [ 7 ] = 0 , x_{7}[7]=0, x_{8}[7]=1, x_{9}[7]=0, x_{10}[7]=0, x_{11}[7]=1, x_{12}[7]=0, x7[7]=0,x8[7]=1,x9[7]=0,x10[7]=0,x11[7]=1,x12[7]=0,
z 1 2 [ 7 ] = w 11 2 + w 12 2 + w 15 2 + w 18 2 + w 111 2 + b 1 2 z_{1}^2[7]=w_{11}^{2}+w_{12}^{2}+w_{15}^{2}+w_{18}^{2}+w_{111}^{2}+b_{1}^{2} z12[7]=w112+w122+w152+w182+w1112+b12
示例三
- 若输出层(层 3)的第 j j j 个神经单元的加权输入为 z j 3 z_j^3 zj3 ,输出变量为 a j 3 a_j^3 aj3。
- 在将学习数据的第 1 张图像作为图像实例输入时,
- 输出层(层 3)的第 j j j个神经单元的加权输入的值为 z j 3 [ 1 ] z_j^3[1] zj3[1],输出值为 a j 3 [ 1 ] a_j^3[1] aj3[1] ,如下图所示。
- 在将学习数据的第 1 张图像作为图像实例输入时,
四、更简洁的使用神经单元符号和变量名
- 到目前为止,本Day的示意图都是将参数和变量写在一个神经单元的周围,这就导致图看起来非常吃力(见下图左)。之后将根据情况使用如下所示的标有参数和变量的神经单元示意图(见下图右)。
- 利用这种整合了参数和变量的示意图,就可以简洁地表示两个神经单元的关系,如下所示。