写到哪儿算哪儿的神经网络基础-4

神经网络可用在分类问题和回归问题,根据问题不同改变输出层的激活函数。回归问题用恒等函数,分类问题用softmax函数等。

恒等函数对于输出层来说就是加权和直接输出,没什么可以说的,分类问题中使用的softmax函数,公式如下:

y_k=\frac{exp(a_k)}{\sum_{i=1}^{n}exp(a_i)}

式中,n表示输出层有n个神经元,计算第k个神经元的输出y_k,整体来看,函数的分子是输入信号a_k的指数函数,分母是输入信号的指数函数和。

用Python写下:

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

    return y

但是softmax的公式到代码还是可能遇到问题的,因为进行指数运算可能会遇到溢出问题,e^{10}超过了20000,e^{100}计算机会返回无穷大inf,为了防止溢出,可以在原公式上乘以常数C,即,

y_k=\frac{Cexp(a_k)}{C\sum_{i=1}^{n}exp(a_i)}=\frac{exp(a_k+logC)}{\sum_{i=1}^{n}exp(a_i+logC)}=\frac{exp(a_k+C')}{\sum_{i=1}^{n}exp(a_i+C')}

式中,C'可以是任意常数,一般取输入信号中的最大值,改进后的softmax函数Python代码:

import NumPy as np
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的特点:

不难发现,其结果是输出0.0-1.0之间的实数,且输出和为1.0,所以softmax函数的输出通常被解释为“概率”,换言之,通过使用softmax函数,可以用概率统计方法处理问题。但是,神经网络往往只把输出最大的神经元所对应的类别作为分类决策结果(也就是标签),且即使使用了softmax函数,输出值最大的神经元位置也不会变。故而,在使用神经网络处理分类问题时候,输出层的激活函数softmax可以省去了,计算机计算量也变小了。

但是,但是,机器学习求解问题,有训练和推理两个步骤,训练网络的过程其实还是保留了softmax函数,而应用训练好的模型进行推理时,则往往省略了。

说到输出层的神经元个数,这个与亟待解决的实际问题相关。举个栗子,分类问题,标签一共5个类,那么输出层的神经元个数就会设定为5,如果是10个类,就会设定为10。

 上图,输出层神经元对应的数字依次为0, 1, ..., 9.也用了不同灰度表示神经元的值。y_2灰度值大,表示其输出值最大,说明该网络预测的手写体是y_2对应的分类,“2”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值