Python深度学习入门笔记

Numy使用笔记

NumPy 数组( np.array )可以生成 N 维数组,即可以生成一维数组、
二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,
将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统
称为张量 (tensor)。本书基本上将二维数组称为“矩阵”,将三维数
组及三维以上的数组称为“张量”或“多维数组”。

广播

NumPy 中,形状不同的数组之间也可以进行运算。之前的例子中,在
2×2 的矩阵 A 和标量 10 之间进行了乘法运算。在这个过程中,如图 1-1 所示,
标量 10 被扩展成了 2 × 2 的形状,然后再与矩阵 A 进行乘法运算。这个巧妙
的功能称为广播 (broadcast)。

matplotlib的使用笔记

1
2
3
4
5
6
7
8
9
10
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以 0.1 为单位,生成 0 到 6 的数据
y = np.sin(x)
# 绘制图形1.6
Matplotlib
17
plt.plot(x, y)
plt.show()

感知机

感知机接收多个输入信号,输出一个信号。
x 1 、x 2 是输入信号,
y 是 输 出 信 号,w 1 、w 2 是 权 重(w 是 weight 的 首 字 母)。图 中 的 ○ 称 为“神
经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w 1 x 1 、w 2 x 2 )
。神经元会计算传送过来的信号的总和,只有当这个总和超过
了某个界限值时,才会输出 1。这也称为“神经元被激活” 。这里将这个界
限值称为阈值,用符号 θ 表示。

未激活神经元

y = 0 = (w1x1+w2x2)<=θ

激活神经元

y = 1 = (w1x1+w2x2)>θ

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

偏置与权重的说明

这里把−θ命名为偏置b,但是请注意,偏置和权重w1、w2的作用是不一样的。具体地说,w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。比如,若b为−0.1,则只要输入信号的加权总和超过0.1,神经元就会被激活。但是如果b为−20.0,则输入信号的加权总和必须超过20.0,神经元才会被激活。像这样,偏置的值决定了神经元被激活的容易程度。另外,这里我们将w1和w2称为权重,将b称为偏置,但是根据上下文,有时也会将b、w1、w2这些参数统称为权重。

线性与非线性

感知机的局限性就在于它只能表示由一条直线分割的空间。图2-8这样弯曲的曲线无法用感知机表示。另外,由图2-8这样的曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。线性、非线性这两个术语在机器学习领域很常见,可以将其想象成图2-6和图2-8所示的直线和曲线。

感知机的局限性

节讲到的感知机的局限性,严格地讲,应该是“单层感知机无法表示异或门”或者“单层感知机无法分离非线性空间”。

实际上,与门、或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机(multi-layered perceptron)。

感知机小结

• 感知机是具有输入和输出的算法。给定一个输入后,将输出一个既定的值。• 感知机将权重和偏置设定为参数。• 使用感知机可以表示与门和或门等逻辑电路。• 异或门无法通过单层感知机来表示。• 使用2层感知机可以表示异或门。• 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。• 多层感知机(在理论上)可以表示计算机。

神经网络

阶跃函数与sigmoid函数

如果把这两个函数与水联系起来,则阶跃函数可以比作“竹筒敲石”A,sigmoid函数可以比作“水车”。阶跃函数就像竹筒敲石一样,只做是否传送水(0或1)两个动作,而sigmoid函数就像水车一样,根据流过来的水量相应地调整传送出去的水量。

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

ReLU函数

1
2
def relu(x):
return np.maximum(0, x)

maximum函数会从输入的数值中选择较大的那个值进行输出。

矩阵的乘积的计算方法

矩阵A和矩阵B的对应维度的元素个数必须保持一致。

就是运算结果的矩阵C的形状是由矩阵A的行数和矩阵B的列数构成的。

A是二维矩阵、B是一维数组时,也要保持对应维度的元素个数一致。

输出层函数

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

恒等函数

恒等函数会将输入按原样输出。

softmax函数

在进行softmax的指数函数的运算时,加上(或者减去)某个常数并不会改变运算的结果。可以使用任何值,但是为了防止溢出,一般会使用输入信号中的最大值。

1
2
3
4
def softmax(a):
max = np.max(a) # 为了解决溢出问题
exp_a = np.exp(a- max)
return exp_a / np.sum(exp_a)

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

机器学习的分类

机器学习的问题大致可以分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。比如,区分图像中的人是男性还是女性的问题就是分类问题。而回归问题是根据某个输入预测一个(连续的)数值的问题。比如,根据一个人的图像预测这个人的体重的问题就是回归问题(类似“57.4kg”这样的预测)。

学习与推理

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