您的位置:首页 > 理论基础 > 计算机网络

神经网络常用激活函数对比:sigmoid VS sofmax(附python源码)

2017-04-14 23:21 791 查看
更多深度文章,请关注:https://yq.aliyun.com/cloud
Softmax函数与Sigmoid函数之间的区别
作者介绍:

Saimadhu Polamuri:是一名自学成才的数据科学家,对数据科学有热爱和兴趣,他认为学习意味着生活,擅长使用python编程,业余时间在quora上回答问题。
领英:https://www.linkedin.com/in/saimadhu/
博客:http://dataaspirant.com/author/saimadhu/

Softmax函数VS Sigmoid函数在学习逻辑回归概念时,主要的困惑在于计算概率的函数,由于在逻辑回归模型中会使用计算出的概率来预测目标类别,经常用到的两个函数是Softmax和Sigmoid函数。从函数水平(帮助预测目标类别)上来看,这两个函数是相同的,但存在许多明显的数学差异,应用在深度学习和其他领域中,发挥了至关重要的作用。所以在这篇文章中将进一步了解这两个函数及其应用之间的根本区别。在开始之前,介绍本文的目录
什么是S型函数?
S形函数的性质
Sigmoid函数的使用
在Python中实现Sigmoid函数
创建Sigmoid函数图像形 
什么是Softmax函数?
Softmax函数的性质
Softmax函数的使用
在Python中实现Softmax函数
创建Softmax函数图像形 
Sigmoid函数与Softmax函数之间的差异
结论 

什么是S型函数?
从数学定义上来看,Sigmoid函数取任何范围的实数,返回的输出值在0到1的范围内。S形函数产生“S”型曲线,这些曲线也用于统计,使用累积分布函数(输出范围为0到1)。S形函数的性质
sigmoid函数返回一个实值输出。
S形函数的一阶导数是非负的或非正的。

非负数:如果数字大于或等于零。
非正数:如果数字小于或等于零。
Sigmoid函数的使用
Sigmoid函数用于逻辑回归模型中的二进制分类。
在创建人造神经元时,Sigmoid函数用作激活函数。
在统计学中,S形函数图像是常见的累积分布函数。
在Python中实现Sigmoid函数
现在让我们在Python中实现sigmoid函数 
# Required Python Package
import numpy
as np

def sigmoid(inputs):
    """
    Calculate the sigmoid for the give inputs (array)
    :param inputs:
    :return:
    """
    sigmoid_scores = [1 / float(1 + np.exp(- x))
for x in inputs]
    return sigmoid_scores

sigmoid_inputs = [2,
3, 5,
6]
print
"Sigmoid Function Output :: {}".format(sigmoid(sigmoid_inputs))

以上是Sigmoid函数的实现代码。
该函数将以列表形式的值作为输入参数。
列表中的每个元素/值将被视为Sigmoid函数的输入,并计算输出值。
代码 1 / float(1 + np.exp(-x))是用于计算sigmoid分数的函数。
接下来,我们将一个列表sigmiod_inputs作为函数的输入,列表值为2,3,5,6,经过sigmoid函数计算后获得Sigmoid分数。 

脚本输出 
Sigmoid Function Output :: [0.8807970779778823, 0.9525741268224334, 0.9933071490757153, 0.9975273768433653]

创建Sigmoid函数图像现在使用上面的函数来创建图像,以方便了解Sigmoid函数的性质。
传递一个包含0到21范围内的数字的列表。
计算输入列表的sigmoid分数。
然后使用输出值来显示图像。 
# Required Python Packages
import numpy
as np
import matplotlib.pyplot
as plt

def sigmoid(inputs):
    """
    Calculate the sigmoid for the give inputs (array)
    :param inputs:
    :return:
    """
    sigmoid_scores = [1 / float(1 + np.exp(- x))
for x in inputs]
    return sigmoid_scores

def line_graph(x, y, x_title, y_title):
    """
    Draw line graph with x and y values
    :param x:
    :param y:
    :param x_title:
    :param y_title:
    :return:
    """
    plt.plot(x, y)
    plt.xlabel(x_title)
    plt.ylabel(y_title)
    plt.show()

graph_x = range(0,
21)
graph_y = sigmoid(graph_x)

print
"Graph X readings: {}".format(graph_x)
print
"Graph Y readings: {}".format(graph_y)

line_graph(graph_x, graph_y,
"Inputs", "Sigmoid Scores")

创建一个包含0到21范围内的数字的graph_x列表。
之后在graph_y列表中,存储给定graph_x输入的计算sigmoid分数。
调用line_graph函数,该函数采用图像的x,y和标题来创建线形图。 

脚本输出
Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Graph Y readings: [0.5, 0.7310585786300049, 0.8807970779778823, 0.9525741268224334, 0.9820137900379085, 0.9933071490757153, 0.9975273768433653, 0.9990889488055994,
0.9996646498695336, 0.9998766054240137, 0.9999546021312976, 0.999983298578152, 0.9999938558253978, 0.999997739675702, 0.9999991684719722, 0.999999694097773, 0.9999998874648379, 0.9999999586006244, 0.9999999847700205, 0.9999999943972036, 0.9999999979388463]

图像
成功运行上述代码后,屏幕上将显示以下图像。如果上述代码在你的系统中运行失败。检查机器学习包的设置。 

从上图可以看出,随着输入值的增加,sigmoid得分增加到1。图的顶部表示在0.9到0.99范围内的值。什么是Softmax函数?

Softmax函数计算事件超过'n'个不同事件的概率分布。一般来说,这个函数将会计算每个目标类别在所有可能的目标类中的概率。计算出的概率将有助于确定给定输入的目标类别。使用Softmax的主要优点是输出概率的范围,范围为0到1,所有概率的和将等于1。如果将softmax函数用于多分类模型,它会返回每个类别的概率,并且目标类别的概率值会很大。指数公式计算给定输入值的指数和输入中所有值的指数值之和。那么输入值的指数与指数值之和的比值就是softmax函数的输出。 
Softmax函数的性质
以下是softmax函数的几个性质。
计算出的概率将在0到1的范围内。
所有概率的和等于1。
Softmax函数的使用

用于多重分类逻辑回归模型。
在构建神经网络中,在不同的层使用softmax函数。
在Python中实现Softmax函数现在让我们在Python中实现softmax函数:
# Required Python Package
import numpy
as np

def softmax(inputs):
    """
    Calculate the softmax for the give inputs (array)
    :param inputs:
    :return:
    """
    return np.exp(inputs) / float(sum(np.exp(inputs)))

softmax_inputs = [2,
3, 5,
6]
print
"Softmax Function Output :: {}".format(softmax(softmax_inputs))

脚本输出
Softmax Function Output :: [ 0.01275478  0.03467109  0.25618664  0.69638749]

我们观察到输入值6的函数输出是高概率,这是可以从softmax函数预先知道的。之后在分类任务中,可以使用高概率值来预测给定输入特征的目标类别。 

创建Softmax函数图像现在让我们使用实现的Softmax函数创建图像来了解这个函数的表现。
创建一个包含0到21范围内的值的列表。
之后将通过此列表来计算已实现函数的分数。
使用列表和估计分数创建图像。
# Required Python Packages
import numpy
as np
import matplotlib.pyplot
as plt

def softmax(inputs):
    """
    Calculate the softmax for the give inputs (array)
    :param inputs:
    :return:
    """
    return np.exp(inputs) / float(sum(np.exp(inputs)))

def line_graph(x, y, x_title, y_title):
    """
    Draw line graph with x and y values
    :param x:
    :param y:
    :param x_title:
    :param y_title:
    :return:
    """
    plt.plot(x, y)
    plt.xlabel(x_title)
    plt.ylabel(y_title)
    plt.show()

graph_x = range(0,
21)
graph_y = softmax(graph_x)

print
"Graph X readings: {}".format(graph_x)
print
"Graph Y readings: {}".format(graph_y)

line_graph(graph_x, graph_y,
"Inputs", "Softmax Scores")

脚本输出
Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Graph Y readings: [ 1.30289758e-09 3.54164282e-09 9.62718331e-09 2.61693975e-08 7.11357976e-08 1.93367146e-07 5.25626399e-07 1.42880069e-06 3.88388295e-06
1.05574884e-05 2.86982290e-05 7.80098744e-05 2.12052824e-04 5.76419338e-04 1.56687021e-03 4.25919483e-03 1.15776919e-02 3.14714295e-02 8.55482149e-02 2.32544158e-01 6.32120559e-01]

图像 

该图显示了softmax函数的基本属性,值越大,其概率越高Sigmoid函数与Softmax函数之间的差异以下是Sigmoid和Softmax函数之间的差异表格:
                        

结论在本文中,详细了解确定逻辑回归模型的两个函数。

Softmax:用于多分类任务。
Sigmoid:用于二进制分类任务。

附件为原文的pdf
本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。
文章原标题《Difference Between Softmax Function and Sigmoid Function》,作者:Saimadhu Polamuri,译者:海棠,审阅:
文章为简译,更为详细的内容,请查看原文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐