第一章:神经网络的复习

关于本书第一章内容,主要是对《深度学习入门:基于Python的理论与实现》一书的精炼性概括。

如果你是刚入门且没有看过这本书的新同学,强烈建议阅读一遍,以下是之前整理这本书的链接,供君参考:


如果你已经在AI领域入门,并且有一定的理论基础,那么也可以通过这一章节快速对一些基础知识进行复习,方便后面更加高效的学习。

接下来我们一起看一下第一章所讲内容。

1.1 数学和Python的复习

该节主要讲解了神经网络中向量、矩阵等内容。

1.1.1 向量和矩阵

我们知道向量是同时拥有大小和方向的量。

  • 向量可以表示为排成一排的数字集合,在Python实现中可以处理为一维数组。
  • 与此相对,矩阵是排成二维形状(长方阵)的数字集合。

向量和矩阵的例子如下图所示:
《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP

1.1.2 矩阵的对应元素的运算

矩阵对应元素的运算,直接在每个元素中相应运算

>>> W = np.array([[1, 2, 3], [4, 5, 6]])
>>> X = np.array([[0, 1, 2], [3, 4, 5]]) 

 >>> N + X
array([[ 1, 3, 5],
       [7, 9, 11]])
>>> W * X 
array([[0, 2, 6],
       [12, 20, 30]])

1.1.3 广播机制

举例一:针对数字的广播机制

>>> A = np.array([[1, 2], [3, 4]]) 
>>> A * 10
array([[10, 20],
       [30, 49]])

举例二:不同形状之间的广播

>>> k = np.array([[1, 2], [3, 4]]) 
>>> b = np.array([10, 20])
>>> k* b
array([[10, 40],
       [30, 80]])

1.1.4 向量内积和矩阵乘积

  • 向量内积是两个向量对应元素的乘积之和。
    • 《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP
  • 矩阵乘积通过“左侧矩阵的行向量(水平方向)”和“右侧矩阵的列向量(垂直方向)”的内积(对应元素的乘积之和)计算得出。
    • 《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP

通过如下举例可以看出他们之间的区别

# 向量内积
>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])
>>> np.dot (a, b)
32

# 矩阵乘积
>>> A = np.array([[1, 2], [3, 4]])
>>> B = np.array([[5, 6], [7, 8]])
>>> np.dot (A, B)

array([[19, 22],
       [43, 50]]

1.1.5 矩阵形状检查

矩阵计算过程中,一定要注意对应维度的元素个数一致。

《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP

1.2 神经网络的推理

神经网络推理全貌图:

《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP

在上图,用O表示神经元,用箭头表示它们的连接。此时,在箭头上有权重,这个权重和对应的神经元的值分别相乘,其和(严格地讲,是经过激活函数变换后的值)作为下一个神经元的输人。另外,此时还要加上一个不受前一层的神经元影响的常数,这个常数称为偏置。因为所有相邻的神经元之间都存在由箭头表示的连接。

1.3 神经网络的学习

不进行神经网络的学习,就做不到“好的推理”。因此,常规的流程是,首先进行学习,然后再利用学习好的参数进行推理。

所谓推理,就是对需要求解的问题给出回答的任务。而神经网络的学习的任务是寻找最优参数。

1.3.1 损失函数

计算神经网络的损失要使用损失函数(loss function)。进行多类别分类的神经网络通常使用交叉滴误差(cross entropy error)作为损失函数。此时,交叉熵误差由神经网络输出的各类别的概率和监督标签求得。

以下为使用了损失函数的神经网络的层结构:

《深度学习进阶 自然语言处理》第一章:神经网络的复习-LMLPHP

1.3.2 链式法则

学习阶段的神经网络在给定学习数据后会输出损失。这里我们想得到的是损失关于各个参数的梯度。只要得到了它们的梯度,就可以使用这些梯度进行参数更新。那么,神经网络的梯度怎么求呢?

此时就轮到误差反向传播法出场了。理解误差反向传播法的关键是链式法则。

链式法则是复合函数的求导法则,其中复合函数是由多个函数构成的函数。然后对该函数进行链式求导。

1.4 计算的高速化

神经网络的学习和推理需要大量的计算。因此,如何高速地计算神经网络是一个重要课题。本节将简单介绍一下可以有效加速神经网络的计算的位精度和GPU的相关内容。

1.4.1 位精度

在神经网络的计算中,数据传输的总线带宽有时会成为瓶颈。在这种情况下,毫无疑问数据类型也是越小越好。再者,就计算速度而言,32位浮点数也能更高速地进行计算(浮点数的计算速度依赖于CPU或GPU的架构)。所以数据的位精度就是我们在进行计算的时候需要关注的指标。

1.4.2 GPU(CuPy)

深度学习的计算由大量的乘法累加运算组成。这些乘法累加运算的绝大部分可以并行计算,这是GPU比CPU擅长的地方。因此,一般的深度学习框架都被设计为既可以在CPU上运行,也可以在GPU上运行。

如果我们的代码环境中有GPU,那么推荐计算的时候,优先使用GPU。

1.5 小结

本章中主要复习了神经网络的基础知识。掌握了这些基础知识后,从下一章开始,我们就要真正不如NLP知识的殿堂。

11-08 09:00