深度学习入门04(关于输出层的设计)

前情回顾:
前面我们了解了感知机,包括单层感知机和多层感知机。与门,与非门,或门都是单层感知机,而异或门是不能用单层感知机创造的,我们用图像解释了原因。这个是深度学习入门笔记01的内容。

我们由感知机的知识,迁移到神经网络。神经网络由三个部分,包括输入层,隐藏层和输出层。我们还用阶跃函数来描述是否达到阈值输出1的这个过程,据此我们引出了激活函数,一个输入之和(考虑了权重与偏置)变成输出的函数。除了阶跃函数,我们还介绍了Sigmoid函数,它的图像更加平滑。不论是阶跃函数还是Sigmoid函数,都不是线性的函数,我们解释了为什么激活函数不能用线性函数。这个是深度学习入门笔记02的内容。

最后我们介绍了一点数组的知识,使用了矩阵这个强大的工具,使用矩阵相乘的方式,一个式子来表示出多个输入的计算。并且我们用代码实践了多层神经网络的推理,包括输入层到隐藏层1,再到隐藏层2,最后到输出层。在上次实践中,输出层使用的激活函数我们使用的是恒等函数。这个是深度学习入门笔记03的内容。

现在具体介绍输出层的设计。

神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数。判断一张人像图中的人是男性还是女性属于分类问题,根据一个人的图像预测一个人的体重,是回归问题。

输出层的设计

恒等函数

在输出层使用恒等函数时,输入信号会原封不动地被输出。

如图表示(上一节用的恒等函数)

softmax函数

分类问题中的输出层的激活函数softmax函数的公式:

分母是所有输入的指数函数的和,分子是第k个输入信号的指数函数,输出是第k个输出信号。

图示说明了,输出信号和所有的输入信号有关。(输入信号a是上一层的输出信号计算完权重之后的结果,注意这里的箭头没有权重,只是代表输出信号与输入信号有关)

回忆一下sigmoid函数 ,它是用于隐藏层的激活函数的一种。

 它的图示也是一一对应的。类似于恒等函数的图示。

softmax函数的python实现

定义softmax

上述写法在计算机的运算上有一定的缺陷,这个缺陷就是溢出问题。softmax函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。

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

改进的方法:

先在指数外面乘以一个常数,再将常数放在指数里面,变成log。

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

以下是具体的例子:

这样我们就解决了溢出问题。接下来重新定义softmax函数

softmax函数的特征

从上面的公式可以看出softmax的两个特征:1.输出在0到1之间,2.输出信号的结果的和为1。

正因为有了这个性质,我们才可以把softmax函数的输出解释为“概率”​。

“上面的例子可以解释成y[0]的概率是0.018(1.8%),y[1]的概率是0.245(24.5%),y[2]的概率是0.737(73.7%)。从概率的结果来看,可以说“因为第2个元素的概率最高,所以答案是第2个类别”​。而且,还可以回答“有74%的概率是第2个类别,有25%的概率是第1个类别,有1%的概率是第0个类别”​。也就是说,通过使用softmax函数,我们可以用概率的(统计的)方法处理问题。”

对于 上面这一段的叙述,我觉得我是不能理解的。硬要说的话,我觉得有一下几点可以帮助我们理解:

1.softmax函数不能改变输入信号的大小关系,如果a1>a2,则y1>y2。这点从公式可以看出

2.神经网络接受信号的过程有这样的图,我们可以理解为,哪一个神经元的数值越大,说明它越兴奋。

这是我粗浅的理解,可能不对。

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

机器学习分为两个阶段,一个是学习阶段(也被称为训练阶段),这个过程针对训练数据来调整与确定模型的参数。一个是推理阶段,用自己训练好的模型对于未知数据进行推理(如分类)。

输出层神经元的数量

输出层的神经元数量需要根据待解决的问题来决定。对于分类问题,输出层的神经元数量一般设定为类别的数量。比如,对于某个输入图像,预测是图中的数字0到9中的哪一个的问题(10类别分类问题)​,可以像图3-23这样,将输出层的神经元设定为10个。

如图3-23所示,在这个例子中,输出层的神经元从上往下依次对应数字0, 1, .. ., 9。此外,图中输出层的神经元的值用不同的灰度表示。这个例子中神经元y2颜色最深,输出的值最大。这表明这个神经网络预测的是[插图]对应的类别,也就是“2”​。 

手写数字的识别(实战训练)

手写数字的识别是一个分类的问题的。假设我们已经完成了学习,即已经确定好了模型的参数。我们现在用模型来进行推理。这个推理处理也称为神经网络的前向传播(forward propagation)。

预知后续如何,点击关注,我会及时更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值