深度学习入门:基于 Python 的理论与实现 (18):神经网络 3.5&3.5.1

阅读数:49 2019 年 11 月 13 日 15:07

深度学习入门:基于Python的理论与实现(18):神经网络 3.5&3.5.1

内容简介
本书是深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术。书中使用 Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。书中不仅介绍了深度学习和神经网络的概念、特征等基础知识,对误差反向传播法、卷积神经网络等也有深入讲解,此外还介绍了深度学习相关的实用技巧,自动驾驶、图像生成、强化学习等方面的应用,以及为什么加深层可以提高识别精度等疑难的问题。
本书适合深度学习初学者阅读,也可作为高校教材使用。

(输出层的设计)

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

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

(恒等函数和 softmax 函数)

恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。因此,在输出层使用恒等函数时,输入信号会原封不动地被输出。另外,将恒等函数的处理过程用之前的神经网络图来表示的话,则如图 3-21 所示。和前面介绍的隐藏层的激活函数一样,恒等函数进行的转换处理可以用一根箭头来表示。

图 3-21 恒等函数

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

$y_k=\frac{\exp(a_k)}{\sum^n_{i=1}\exp(a_i)}\quad\quad\quad\quad\quad(3.10)$

$\exp(x)$ 是表示 ${\rm e}^x$ 的指数函数(e 是纳皮尔常数 2.7182 …)。式(3.10)表示假设输出层共有 $n$ 个神经元,计算第 $k$ 个神经元的输出 $y_k$。如式(3.10)所示,softmax 函数的分子是输入信号 $a_k$ 的指数函数,分母是所有输入信号的指数函数的和。

用图表示 softmax 函数的话,如图 3-22 所示。图 3-22 中,softmax 函数的输出通过箭头与所有的输入信号相连。这是因为,从式(3.10)可以看出,输出层的各个神经元都受到所有输入信号的影响。

图 3-22 softmax 函数

现在我们来实现 softmax 函数。在这个过程中,我们将使用 Python 解释器逐一确认结果。

>>> a = np.array([0.3, 2.9, 4.0])
>>>
>>> exp_a = np.exp(a) #  指数函数
>>> print(exp_a)
[  1.34985881  18.17414537  54.59815003]
>>>
>>> sum_exp_a = np.sum(exp_a) #  指数函数的和
>>> print(sum_exp_a)
74.1221542102
>>>
>>> y = exp_a / sum_exp_a
>>> print(y)
[ 0.01821127  0.24519181  0.73659691]

这个 Python 实现是完全依照式(3.10)进行的,所以不需要特别的解释。考虑到后面还要使用 softmax 函数,这里我们把它定义成如下的 Python 函数。

def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a

    return y

评论

发布