《深度学习入门:基于Python的理论与实现》再读笔记(1)

第1章 Python入门

1.5.4 NumPy的N维数组

和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算,这也是基于广播的功能。

数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量。

Python等动态类型语言一般比C和C++等静态型语言(编译型语言)运算速度慢。实际上,如果是运算量大的处理对象,用C/C++写程序更好。为此,当Python中追求性能时,人们会用C/C++来实现处理的内容。Python则承担“中间人”的角色,负责调用那些用C/C++写的程序。NumPy中,主要的处理也都是通过C或C++实现的。因此,我们可以在不损失性能的情况下,使用Python便利的语法。

1.6 Matplotlib

在深度学习的实验中,图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

第2章 感知机

2.1 感知机是什么

感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。

权重相当于电流里所说的电阻。电阻是决定电流流动难度的参数,电阻越低,通过的电流就越大。而感知机的权重则是值越大,通过的信号就越大。不管是电阻还是权重,在控制信号流动难度(或者流动容易度)这一点上的作用都是一样的。

2.2 简单逻辑电路

机器学习的课题就是将决定参数值的工作交由计算机自动进行。学习是确定合适的参数的过程,而人要做的思考感知机的构造(模型),并把训练数据交给计算机。

只要把实现与门的参数值的符号取反,就可以实现与非门。

2.3.3 使用权重和偏置的实现

w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。偏置的值决定了神经元被激活的容易程度。

2.4.2 线性和非线性

由曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。

单层感知机无法表示异或门;单层感知机无法分离非线性空间。通过组合感知机(叠加层)就可以实现异或门。

通过叠加层(加深层),感知机能进行更加灵活的表示。

通过简单的NAND元件就可以实现计算机这样复杂的系统。

1.感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。

2.感知机将权重和偏置设定为参数。

3.使用感知机可以表示与门和或门等逻辑电路。

4.异或门无法通过单层感知机来表示。

5.使用2层感知机可以表示异或门。

6.单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。

7.多层感知机(在理论上)可以表示计算机。

第3章 神经网络

神经网络的一个重要性质就是它可以自动地从数据中学习到合适的权重参数。

一般而言,“朴素感知机”是指单层网络,指的是激活函数使用了阶跃函数的模型。“多层感知机”是指神经网络,即使用sigmoid函数等平滑的激活函数的多层网络。

3.2.5 sigmoid函数和阶跃函数的比较

sigmoid函数的平滑性对神经网络的学习具有重要意义。

感知机中神经元流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。

3.2.6 非线性函数

阶跃函数和sigmoid函数还有其他共同点,就是两者均为非线性函数。sigmoid函数是一条曲线,阶跃函数是一条像阶梯一样的折线,两者都属于非线性的函数。

3.3 多维数组的运算

通过矩阵的乘积一次性完成计算的技巧,在实现的层面上可以说是非常重要的。

输出层所用的激活函数,要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。

计算机处理“数”时,数值必须在4字节或8字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须常常注意。

softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。正是因为有了这个性质,我们才可以把softmax函数的输出解释为“概率”。

一般而言,神经网络只把输出值最大的神经元所对应的类别作为识别结果。并且,即便使用softmax函数,输出值最大的神经元的位置也不会变。因此,神经网络在进行分类时,输出层的softmax函数可以省略。在实际的问题中,由于指数函数的运算需要一定的计算机运算量,因此输出层的softmax函数一般会被省略。

求解机器学习问题的步骤可以分为“学习”和“推理”两个阶段。首先,在学习阶段进行模型的学习,然后,在推理阶段,用学到的模型对未知的数据进行推理(分类)。推理阶段一般会省略输出层的softmax函数。在输出层使用softmax函数是因为它和神经网路的学习有关系。

和求解机器学习问题的步骤(分成学习和推理两个阶段进行)一样,使用神经网络解决问题时,也需要首先使用训练数据(学习数据)进行权重参数的学习;进行推理时,使用刚才学习到的参数,对输入数据进行分类。

把数据限定到某个范围内的处理称为正规化,对神经网络的输入数据进行某种既定的转换称为预处理。

批处理对计算机的运算大有益处,可以大幅缩短每张图像的处理时间。这是因为大多数处理数值计算的库都进行了能够高效处理大型数组运算的最优化。并且,在神经网络的计算中个,当数据传送称为瓶颈时,批处理可以减轻数据总线的负荷(严格地讲,相对于数据读入,可以将更多的时间用在计算上)。也就是说,批处理一次性计算大型数组要比分开逐步计算各个小型数组速度更快。

本章介绍了神经网络的前向传播。本章介绍的神经网络和上一章的感知机在信号的按层传递这一点上是相同的,但是,向下一个神经元发送信号时,改变信号的激活函数有很大差异。神经网络中使用的是平滑变化的sigmoid函数,而感知机中使用的是信号急剧变化的阶跃函数。这个差异对于神经网络的学习非常重要。

本章所学的内容

1.神经网络中的激活函数使用平滑变化的sigmoid函数或ReLU函数。

2.通过巧妙地使用NumPy多维数组,可以高效地实现神经网络。

3.机器学习的问题大体上可以分为回归问题和分类问题。

4.关于输出层的激活函数,回归问题中一般用恒等函数,分类问题中一般用softmax函数。

5.分类问题中,输出层的神经元的数量设置为要分类的类别数。

6.输入数据的集合称为批。通过以批为单位进行推理处理,能够实现高效的运算。

你可能感兴趣的:(python,深度学习,numpy)