天天看点

深度学习入门笔记-第三章-神经网络

神经网络有三层

1.输入层

2.中间层/隐藏层

3.输出层

如下图

深度学习入门笔记-第三章-神经网络

图中网络有三层神经元构成,但实质上只有两层有权重,因此称为“2层网络”

对于感知机:

深度学习入门笔记-第三章-神经网络

b 是被称为偏置的参数,用于控制神经元被激活的容易程度;而 w_1 和 w_2 是表示各个信号的权重的参数,用于控制各个信号的重要性

现在将式(3.1)改写成更加简洁的形式。为了简化式(3.1),我们用一个函数来表示这种分情况的动作(超过 0 则输出 1,否则输出 0)。引入新函数 h(x),将式(3.1)改写成下面的式(3.2)和式(3.3)。

深度学习入门笔记-第三章-神经网络
深度学习入门笔记-第三章-神经网络

h(x)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数(activation function)。如“激活”一词所示,激活函数的作用在于决定如何来激活输入信号的总和。

现在来进一步改写式(3.2)。式(3.2)分两个阶段进行处理,先计算输入信号的加权总和,然后用激活函数转换这一总和。因此,如果将式(3.2)写得详细一点,则可以分成下面两个式子。

深度学习入门笔记-第三章-神经网络
深度学习入门笔记-第三章-神经网络

激活函数的类型:

1.sigmoid函数:

深度学习入门笔记-第三章-神经网络
def sigmoid(x):
    return 1 / (1 + np.exp(-x))



           

2.阶跃函数

def step_function(x):
    if x > 0:
        return 1
    else:
        return 0
           
深度学习入门笔记-第三章-神经网络

3.ReLU函数:

最近使用:ReLU 函数在输入大于 0 时,直接输出该值;在输入小于等于 0 时,输出 0。

深度学习入门笔记-第三章-神经网络
def relu(x):
    return np.maximum(0, x)


           
深度学习入门笔记-第三章-神经网络

numpy数组实现神经网络:

深度学习入门笔记-第三章-神经网络
>>> X = np.array([1, 2])
>>> X.shape
(2,)
>>> W = np.array([[1, 3, 5], [2, 4, 6]])
>>> print(W)
[[1 3 5]
 [2 4 6]]
>>> W.shape
(2, 3)
>>> Y = np.dot(X, W)
>>> print(Y)
[ 5  11  17]

           

(这里由于输入层为2层而输出层有3层,所以偏置的矩阵为2x3,由于输入的矩阵为1x2,所以输出矩阵为1x3)

如上所示,使用 np.dot(多维数组的点积),可以一次性计算出Y的结果。这意味着,即便 Y 的元素个数为 100 或 1000,也可以通过一次运算就计算出结果!如果不使用 np.dot,就必须单独计算 Y 的每一个元素(或者说必须使用 for 语句),非常麻烦。因此,通过矩阵的乘积一次性完成计算的技巧,在实现的层面上可以说是非常重要的。

输出层的设计:

神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用 softmax 函数。

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

分有恒等函数和softmax函数:

1.恒等函数:

恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。

深度学习入门笔记-第三章-神经网络

2.softmax函数

分类问题中使用的 softmax 函数可以用下面的式(3.10)表示。

深度学习入门笔记-第三章-神经网络

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

深度学习入门笔记-第三章-神经网络

继续阅读