5.神经网络-激活函数

目录

1. 激活函数不是阶跃函数

1.1 激活函数和阶跃函数都是非线性函数

1.2 激活函数不是阶跃函数

2. sigmoid 函数

2.1 sigmoid 函数表达式

2.2 sigmoid 函数 Python 实现

2.4 sigmoid 函数图

3. ReLU 函数

3.1 ReLU 函数表达式

3.2 ReLU 函数 Python 实现

3.4 ReLU 函数图


        在下面的文章中提到了激活函数,事实上激活函数有很多种,本文介绍两种最常见的。另外文章中可能会用到一些 numpy、Matplotlib 模块的知识,同学们如果没有了解可以看看下面的文章。

4. 从感知机到神经网络-CSDN博客

1. 介绍 Matplotlib-CSDN博客

Python 数据分析_江南野栀子的博客-CSDN博客

1. 激活函数不是阶跃函数

1.1 激活函数和阶跃函数都是非线性函数

        在这里我们会提到数学上的专有名词 “线性函数” 和 “非线性函数”,两者是相对的。不是线性函数,就是非线性函数。

        激活函数和阶跃函数都是非线性函数。线性和非线性是相对而言的,它们是用来区分函数 y = f(x) 对自变量 x 的依赖关系的。

  • 线性:如果函数 y = f(x) 满足以下两个条件,那么它就是一个线性函数:

    • 叠加原理成立,即 f(ax + by) = af(x) + bf(y),其中 a 和 b 是任意常数。

    • 齐次原理成立,即 f(kx) = kf(x),其中 k 是任意常数。

  • 非线性:如果函数 y = f(x) 不满足以上两个条件,那么它就是一个非线性函数。

        从几何上看,线性函数的图像是一条直线,而非线性函数的图像是一条曲线或者不连续的线段。但是请注意,图像是一条直线的不一定是线性函数。

        严格来说,只有过原点的最简单的直线f(x)=kx才被称为一元线性函数;f(x)=kx+b 这种函数是不能满足叠加原理和齐次原理的。但是 f(x)=kx+b 的图是一条直线!

1.2 激活函数不是阶跃函数

        激活函数不是阶跃函数,阶跃函数的图是两条直线。激活函数的图是曲线的。

        阶跃函数适用于感知机,激活函数适用于神经网络,但是感知机的初级模型和神经网络的神经元图模型非常相似,仅此而已。

        下面是阶跃函数的 python 代码实现和图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def step_function(x):return(np.array(x>0,dtype=np.int32))
x=np.arange(-5.0,5.0,0.1)
y=step_function(x)
plt.plot(x,y)
plt.xlabel("x line")
plt.ylabel("y line")
plt.xlim(-5,5.1) #指定 x 轴的位置
plt.ylim(-1,1.1) #指定 y 轴的位置
plt.show()

        神经网络的激活函数必须使用非线性函数,如果使用线性函数,那么加深神经网络的层数就没有意义了。 

2. sigmoid 函数

        sigmoid 函数是一种在数学和工程领域中广泛使用的函数,在人工神经网络中也经常使用。

2.1 sigmoid 函数表达式

        它的数学定义可以表示为:

        f(x)=1/(1+e^{-x})

        其中 e 是自然对数的底数。这个函数将输入值映射到 (0,1) 的区间内,当输入值趋于正无穷或负无穷时,输出分别趋近于 1 和 0。

        Sigmoid函数具有以下特性:

  • 连续性和可导性:它是连续且可导的,这使得它在数学处理上非常方便。
  • 有界性:函数的值域被限制在 (0,1) 之间,这个性质使得它在需要将输出解释为概率值的场景中非常有用。
  • 对称性:关于原点对称,这意味着如果 x 是输入,那么 -x 也是输入,并且输出相同。
  • S形曲线:它的图形呈现优美的 S 形曲线,这也是其名称的来源。
  • 易于求导:它的导数可以用自身表示,即 f'(x)=f(x)(1-f(x)) ,这大大简化了计算过程。

尽管Sigmoid函数具有上述优点,但它也存在一些缺点:

  • 计算量大:由于涉及指数运算,它的计算成本相对较高。
  • 梯度消失问题:在反向传播过程中,当输入值很大或很小的时候,梯度会趋近于零,这会导致权重更新缓慢,影响网络的训练效率。

因此,虽然Sigmoid函数在神经网络和逻辑回归中有广泛的应用,但在处理深层网络时可能会遇到一些计算和优化上的挑战。

2.2 sigmoid 函数 Python 实现

        sigmoid 函数的 python 实现如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def sigmoid_function(x):return(1/(1+np.exp(-x)))
x=np.arange(-5.0,5.0,0.1)
y1=step_function(x)
y2=sigmoid_function(x)
plt.plot(x,y1,label="step")
plt.plot(x,y2,linestyle="dashdot",label="sigmoid")
plt.xlabel("x line")
plt.ylabel("y line")
plt.xlim(-5,5.1) #指定 x 轴的位置
plt.ylim(-1,2) #指定 y 轴的位置
plt.show()

2.4 sigmoid 函数图

        下面是 sigmoid 函数和阶跃函数的比对图。

         从图上看 sigmoid 函数和阶跃函数 还是有很多共同之处:

  • 不管输入信号是多少,输出信号都是在 0 和 1 之间。
  • 输入信号越大,输出信号越接近 1;输入信号越小,输出信号越接近 0;

3. ReLU 函数

        ReLU(Rectified Linear Unit)函数是一种常用的激活函数,近些年 ReLU 函数在深度学习中被广泛应用,因为它的计算简单且能够有效地缓解梯度消失问题。

        ReLU函数的优点包括:计算简单,梯度不会饱和,能够加速收敛速度,并且能够提供稀疏激活性。

3.1 ReLU 函数表达式

        ReLU 函数在输入大于 0 时候,直接输出该值;在输入小于 0 时候,输出 0.

        其数学表达式为:

        f(x)=\left\{\begin{matrix} x (x>0)\\ 0 (x<0))\\ \end{matrix}\right.

3.2 ReLU 函数 Python 实现

        ReLU 函数的 python 实现如下:

def ReLU_function(x):return(np.maximum(0,x))
x=np.arange(-5.0,5.0,0.1)
y=ReLU_function(x)
plt.plot(x,y,label="ReLU")
plt.xlabel("x line")
plt.ylabel("y line")
plt.xlim(-5,5.1) #指定 x 轴的位置
plt.ylim(-5,5.1) #指定 y 轴的位置
plt.show()

3.4 ReLU 函数图

        下面是 sigmoid 函数、阶跃函数、ReLU 的比对图。

'''

要是大家觉得写得还行,麻烦点个赞或者收藏吧,想给博客涨涨人气,非常感谢!

'''

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性集合:ArrayList,LinkedList,Vector/Stack

共同点&#xff1a;都是线性集合 ArrayList ArrayList 底层是基于数组实现的&#xff0c;并且实现了动态扩容&#xff08;当需要添加新元素时&#xff0c;如果 elementData 数组已满&#xff0c;则会自动扩容&#xff0c;新的容量将是原来的 1.5 倍&#xff09;&#xff0c;来…

Rust使用HashSet对Vec类型的元素进行去重

在Rust语言中&#xff0c;对Vec类型的元素进行去重&#xff0c;一种常见的方法是使用一个HashSet来帮助我们快速检查元素是否已经存在。以下是使用HashSet对Vec进行去重的示例代码&#xff1a; use std::collections::HashSet;fn main() {let vec_numbers vec![1, 2, 2, 3, 4…

Java后端初始化项目(项目模板)

介绍 emmmm&#xff0c;最近看了一些网络资料&#xff0c;也是心血来潮&#xff0c;想自己手工搭建一个java后端的初始化项目模板来简化一下开发&#xff0c;也就发一个模板的具体制作流程&#xff0c;&#xff08;一步一步搭建&#xff0c;从易到难&#xff09; ok&#xff…

引用类型String的值传递和引用传递

引用传递(pass by reference)是指在调用方法时将实际参数的地址直接传递到方法中,在方法中对参数所进行的修改,将影响到实际参数。 值传递(pass by value)是指在调用方法时将实际参数拷贝一份传递到方法中,在方法中对参数修改,不会影响到实际参数。 基本类型传的是值的拷…

vue2和vue3区别: 探索关键差异

vue2和vue3区别&#xff1a; 探索关键差异 Vue.js 作为流行的前端框架&#xff0c;其版本 3 带来了许多令人兴奋的改进和新功能。虽然 Vue 3 保持了与 Vue 2 的相似性&#xff0c;但也存在一些关键差异需要开发者注意。本文将通过表格形式&#xff0c;清晰地展现 Vue 2 和 Vue …

在多线程程序中,如何保证线程的安全?

在多线程程序中保证线程安全通常涉及以下一些关键技术和策略&#xff1a; 1. 使用同步机制 同步方法&#xff1a;通过在方法签名前添加 synchronized 关键字&#xff0c;确保一次只有一个线程能够执行该方法。同步代码块&#xff1a;通过 synchronized 关键字同步一个代码块&…

刷代码随想录有感(63):将有序数组转换为二叉搜索树(其实时二叉平衡搜索树)

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(vector<int>& nums, int left, int right){if(left > right)return NULL;int mid left (right - left)/2;TreeNode* NewRoot new TreeNode(nums[mid]);NewRoot->left tra…

文心一言指令:解锁自然语言处理新时代的技术探索

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是研究与应用的热点&#xff0c;它致力于让机器理解、生成并运用人类语言&#xff0c;架起人机交互的桥梁。随着技术的飞速发展&#xff0c;一个全新的概念——“文心一言指令”应运而生&#xff0c;这一…

【GO】go语言中的HTTP标准库 - http编程

上一节已经学习了HTTP的基础知识&#xff0c;本章将学习关于go语言的HTTP编程&#xff0c;最重要的是掌握 net/http 包的用法&#xff0c;以及如何自己编写一个简单的Web服务端&#xff0c;通过客户端访问Server端等。 编写简单的Web 服务器 http.ListenAndServe 启动 Http S…

制作跳动的爱心网页效果

html <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>跳动的爱心</title> <link rel&q…

K-means聚类模型:深入解析与应用指南

K-means聚类是一种广泛使用的无监督学习算法&#xff0c;它通过迭代过程将数据集划分为K个聚类。以下是一篇关于K-means聚类模型的技术文章&#xff0c;将从不同的角度进行详尽的描述。 1. 引言 K-means聚类算法是一种简单且高效的聚类方法&#xff0c;广泛应用于数据挖掘、市…

Chatgpt的应用场景

文案创作类&#xff1a; 作为一名大型语言模型&#xff0c;ChatGPT可以为使用者提供多种文本处理和文字创作方面的服务&#xff0c;例如&#xff1a; 文本生成和创作 ChatGPT可以基于您提供的主题、关键词或文本段落&#xff0c;生成符合使用者要求的新文本。这些文本可以是文…

Linux:Figshare网站文件下载(非浏览器)

参考aws亚马逊云下载figshare内容 Linux wget -c 下载网页内容crul -C_figshare怎么下载数据-CSDN博客 尝试一下 mamba search awscli mamba install awscli2.15.48 aws --version通过网页获取下载链接 比如&#xff1a; https://s3-eu-west-1.amazonaws.com/pfigshare-u-…

Centos 停服倒计时!你的操作系统何去何从?

在计算机技术的不断演进中&#xff0c;操作系统扮演着至关重要的角色。然而&#xff0c;对于许多企业和个人用户来说&#xff0c;CentOS的突然停服消息带来了一场不小的冲击。作为一款备受欢迎的企业级Linux发行版&#xff0c;CentOS的停服意味着用户需要重新评估自己的操作系统…

如何清除DNS缓存,刷新DNS

大家在使用域名访问服务器的时候&#xff0c;经常会遇到一个问题&#xff0c;同一个局域网里的两台电脑&#xff0c;一台可以访问而另一台不行。这是为什么呢&#xff1f;这里我要和大家说下DNS缓存的问题&#xff0c;顾名思义&#xff0c;每台电脑都有DNS缓存&#xff0c;在域…

Torch添加、修改子模块

1. add_module link 2.net[2] 对nn.Sequential的索引 import torch.nn as nn model nn.Sequential(nn.Conv2d(1,20,5),nn.ReLU(),nn.Conv2d(20,64,5),nn.ReLU())print(model) print(model[2]) # 通过索引获取第几个层 运行结果为&#xff1a; Sequential((0): Conv2d(1, 2…

2024年数维杯数学建模

高质量原创论文已完成 需要的私我

vue3配置基础路径

我们在部署项目的时候&#xff0c;有时项目很多时&#xff0c;可能并不是直接部署到根目录下&#xff0c;那么就需要给项目配置一个公共目录。例如&#xff1a;www.iotzzh.com/zh-admin&#xff0c;用这个地址去访问项目而不是直接使用www.iotzzh.com。 那么在vue3中需要改两处…

虚拟化技术 安装和配置StartWind iSCSI目标服务器

一、实验内容 安装StartWind iSCSI目标服务器配置StartWind iSCSI目标服务器 二、实验主要仪器设备及材料 安装有64位Windows操作系统的台式电脑或笔记本电脑&#xff0c;建议4C8G或以上配置已安装vSphere Client已创建虚拟机并在其上安装CentOS6.5StarWind安装介质starwind.…

ubuntu18.04安装docker容器

Ubuntu镜像下载 https://mirrors.huaweicloud.com/ubuntu-releases/ docker安装 # 第一步、卸载旧版本docker sudo apt-get remove docker docker-engine docker.io containerd runc# 第二步、更新及安装软件 luhost:~$ curl -fsSL https://get.docker.com -o get-docker.sh …