深度学习理论基础11-输出层的设计

首先,继续上节的话题。softmax()函数。

这只就是softmax函数了。其中a代表输出层的输入数据,ak代表第k个输入。

如果你觉得又难理解又难记,其实可以拆成3步来理解:

1.把所有的输入计算成序列[e**(a1),e**(a2),e**(a3)...e**(an)],用np的广播功能一行就能搞定

2.计算得到上面的结果之和sum

3.第k个输入的softmax之值即为 e**(ak)/sum

是不是用Python语言比数学语言好理解多了?下面是Python实现,感受下。

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

但是这个函数还有一个瑕疵,如果np.exp方法的参数过大,会出现很大很大很大的数,

毕竟指数爆炸不是闹着玩的。

所以下面是改进版本

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

括号里减掉一个c难道不影响结果吗?不要着急懵,非数学精英请跟随我的证明。

 

如果理解依然有困难。可以这么想,e**(a+c)=e**a乘以e**c   

既然分子和分母同时乘以e**c了,它们有什么理由不相同呢?

所以,括号里的部分,只要分子和分母加的是同一个东西,就不影响结果。

softmax()的结果在0~1之间。所以把softmax()的输出称为概率。

softmax()是单调递增的:

也就是说如果输入数据本来就是最大的,经过softmax()计算之后还是最大。

如果输入数据本来排行老二,经过softmax()计算之后还是排行老二。

所以神经网络在'推理'的过程可以省略softmax()。

'推理'是指用学到的模型对未知的数据进行分类,

也称为神经网络的前向传播(forward propagation)。

在输出层使用softmax函数是因为它和神经网络的学习有关系,这部分的内容在后面博文里。

--------结语--------

下集预告:手写数字识别。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值