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

简介: 本文介绍了神经网络中的两种常用激活函数——softmax与sigmoid函数,简单介绍了其基本原理、性质及其使用,并用python进行了实例化演示,在文章的最后总结了两种激活函数的区别。

更多深度文章,请关注:https://yq.aliyun.com/cloud

Softmax函数与Sigmoid函数之间的区别

作者介绍:

f4fc34dbd7db4870aaad8adbe6801f02712e0bff

Saimadhu Polamuri是一名自学成才的数据科学家,对数据科学有热爱和兴趣,他认为学习意味着生活,擅长使用python编程,业余时间在quora上回答问题。

领英:https://www.linkedin.com/in/saimadhu/

博客http://dataaspirant.com/author/saimadhu/

0a68f8e4007c67a30d310d506bd56c8951d7539b

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

  • 什么是S型函数
  • S形函数性质
  • Sigmoid函数使用
  • Python中实现Sigmoid函数
  • 创建Sigmoid函数图像 
  • 什么是Softmax函数
  • Softmax函数的性质
  • Softmax函数使用
  • Python中实现Softmax函数
  • 创建Softmax函数图像 
  • Sigmoid函数与Softmax函数之间的差异
  • 结论 

什么是S函数

数学定义上来看,Sigmoid函数取任何范围实数,返回输出值在01的范围内。S形函数产生“S”曲线这些曲线也用于统计使用累积分布函数(输出范围为01
S函数性质

  • sigmoid函数返回一个实值输出。
  • S形函数的一阶导数是非负的或非正的。

  1. 非负数:如果数字大于或等于零。
  2. 非正数:如果数字小于或等于零。

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函数的性质。

  • 传递一个包含021范围内的数字的列表。
  • 计算输入列表的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")

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

脚本输出

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]

图像

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

2af24904fb9e1b80b569e854d65561ab3e0f697e

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

ca81779093824ed50a586b53a6d102e83eb97d27

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

Softmax函数的性质

以下是softmax函数的几个性质

  • 计算出的概率将在01的范围内。
  • 所有概率的和等于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函数创建图像来了解这个函数的表现

  • 创建一个包含021范围内的值的列表。
  • 之后将通过此列表来计算已实现函数的分数。
  • 使用列表和估计分数创建图像。
# 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]

图像  

c1385c479881cefd367307909716f29cbbae380a

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

56a1f13aeac2e59c5c725f9ec93c4f5bd7ea801d                        

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

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

附件为原文的pdf

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《Difference Between Softmax Function and Sigmoid Function》,作者Saimadhu Polamuri,译者:海棠,审阅:

文章为简译,更为详细的内容,请查看原文

 

 

相关文章
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【9月更文挑战第12天】在当今科技飞速发展的时代,人工智能(AI)已深入我们的生活,从智能助手到自动驾驶,从医疗诊断到金融分析,其力量无处不在。这一切的核心是神经网络。本文将带领您搭乘Python的航船,深入AI的大脑,揭秘智能背后的秘密神经元。通过构建神经网络模型,我们可以模拟并学习复杂的数据模式。以下是一个使用Python和TensorFlow搭建的基本神经网络示例,用于解决简单的分类问题。
26 10
|
4天前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
28 8
|
8天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
26 7
|
7天前
|
API 开发者 Python
揭秘Python网络请求的幕后英雄:requests与urllib的恩怨情仇
【9月更文挑战第10天】在Python的网络请求领域,urllib与requests犹如武林中的两大高手,各自展现了独特的魅力。urllib作为标准库成员,自Python诞生以来便承担着网络请求的任务,以其稳定性和全面性著称。然而,其复杂的API让不少开发者望而却步。
11 2
WK
|
15天前
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
34 1
|
21天前
|
数据采集 机器学习/深度学习 人工智能
Python爬虫入门指南探索AI的无限可能:深度学习与神经网络的魅力
【8月更文挑战第27天】本文将带你走进Python爬虫的世界,从基础的爬虫概念到实战操作,你将学会如何利用Python进行网页数据的抓取。我们将一起探索requests库和BeautifulSoup库的使用,以及反爬策略的应对方法。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往数据抓取世界的大门。
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
11 0
WK
|
8天前
|
机器学习/深度学习
在神经网络的反向传播中,Tanh和Sigmoid哪个更快
在神经网络反向传播中,Tanh与Sigmoid函数的速度差异并无定论,受网络结构、数据特性及参数设置影响。Sigmoid在远离零时易导致梯度消失,而Tanh因输出范围为(-1, 1)且以0为中心,能更好地缓解此问题,理论上训练速度更快。两者计算复杂度相近,现代硬件优化使这一差距不明显。实际应用中,Sigmoid常用于二分类输出层,Tanh则适用于隐藏层以加速收敛并减少权重更新偏向。随着深度学习发展,ReLU等新激活函数因高效性和轻度梯度消失问题成为主流选择。综合来看,Tanh可能比Sigmoid稍快,但需根据具体任务和网络结构选择。
WK
15 0
|
17天前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
18天前
|
存储 C语言 Python