【深度学习】2-3 神经网络-输出层设计

前馈神经网络(Feedforward Neural Network),之前介绍的单层感知机、多层感知机等都属于前馈神经网络,它之所以称为前馈(Feedforward),或许与其信息往前流有关:数据从输入开始,流过中间计算过程,最后达到输出层
下面来看输出层如何设计

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

恒等函数和sigmoid函数和softmax函数
恒等函数主要用于对回归问题的激活,这种问题中往往需要最大程度的保护最后的输出结果,因为回归问题往往最后计算的结果是一个具体的权重,也是最终答案,那当然是原封不动的输出是最好的。所以恒等函数简单点来说那就是什么都不做
恒等函数会将输人按原样输出

sigmoid函数由于其限制在[0,1]中,所以很适合二元分类。

softmax函数充分考虑每一个输出结点的权重影响,从而使概率的描述更加准确,适合多元分类。
softmax函数可以用下面的式子表示
在这里插入图片描述
softmax函数的分子是输人信号的指数函数,分母是所有输人信号的指函数的和。(softmax所有值加起来是1)

使用python来实现softmax

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

softmax 的缺陷就是溢出问题,因为使用指数计算,值会变得非常大,改进的代码如下:

def softmax(a):
	c = np.max(a)
	exp_a = np.exp(a - c) #溢出对策
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y

通过减少输入信号中的最大值来解决溢出的问题

softmax函数的特征
softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。正是因为softmax函数的输出值的总和都是1,所以可以用概率(统计的)方法处理问题

关于理解机器学习的问题
机器学习的步骤可以分为“学习”和“推理”两个阶段
首先在学习阶段进行模型的学习,然后,在推理阶段,用学到的模型对未知的数据进行推理(分类)。
softmax函数用在学习不用在推理阶段

将softmax函数引入输出层
如下面例子:


def forward_net(network,x):
    W1 = network['W1']
    b1 = network['b1']
    W2 = network['W2']
    b2 = network['b2']
    W3 = network['W3']
    b3 = network['b3']
    x = np.dot(x,W1)+b1
    x = ReLU(x)
    x = np.dot(x,W2)+b2
    x = ReLU(x)
    x = np.dot(x, W3) + b3
    x = softmax(x)
    return x

运行结果为:

[0.00196166 0.99803834]

你可能感兴趣的:(学习深度学习,深度学习,神经网络,机器学习)