神经网络的激活函数(一)

简介: 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。

目录


神经网络

激活函数

sigmoid 激活函数

tanh 激活函数

backward方法

relu 激活函数

softmax 激活函数



神经网络


人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。



人工神经网络




每一个神经元都是=g(w1x1 + w2x2 + w3x3...) ,即先对输入求和,再对其激活


💎这个流程就像,来源不同树突(树突都会有不同的权重)的信息, 进行的加权计算, 输入到细胞中做加和,再通过激活函数输出细胞值。我们使用多个神经元来构建神经网络,相邻层之间的神经元相互连接,并给每一个连接分配一个强度 w,机器学习的目的就是求这些 w 值



  • 输入层: 即输入 x 的那一层
  • 输出层: 即输出 y 的那一层
  • 隐藏层: 输入层和输出层之间都是隐藏层


激活函数


💎激活函数用于对每层的输出数据进行变换, 进而为整个网络结构结构注入了非线性因素。此时, 神经网络就可以拟合各种曲线。如果不使用激活函数,整个网络虽然看起来复杂,其本质还相当于一种线性模型。


假设有一个单层的神经网络,其输入为𝑥x,权重为𝑤w,偏置为𝑏b,那么该层的输出𝑦y可以表示为:𝑦=𝑤⋅𝑥+𝑏y=w⋅x+b


对于多层的神经网络,如果每一层都不使用激活函数,那么无论网络有多少层,最终的输出都可以表示为输入𝑥x的一个线性组合 y=wn⋅(wn−1⋅(…(w2⋅(w1⋅x+b1)+b2)…)+bn−1)+bn


通过给网络输出增加激活函数, 实现引入非线性因素, 使得网络模型可以逼近任意函数。


激活函数能够向神经网络引入非线性因素,使得网络可以拟合各种曲线。没有激活函数时,无论神经网络有多少层,其输出都是输入的线性组合,这样的网络称为感知机,它只能解决线性可分问题,无法处理非线性问题。


增加激活函数之后, 对于线性不可分的场景,神经网络的拟合能力更强:



🔎我们可以发现如果只使用线性函数Lnear,则模型永远不会区分两种小球(不管多少次Epochs)



🔎但当我们引入非线性激活函数后,仅仅100次就可以完美区分两种小球。


激活函数主要用来向神经网络中加入非线性因素,以解决线性模型表达能力不足的问题,它对神经网络有着极其重要的作用。我们的网络参数在更新时,使用的反向传播算法(BP),这就要求我们的激活函数必须可微。


sigmoid 激活函数


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



Sigmoid函数,也称为逻辑斯蒂激活函数,是早期神经网络中最常用的激活函数之一。它的特点是能够将任何实数值映射到介于0和1之间的值,这使得它在二分类问题中尤其有用,可以将输出解释为概率或者激活程度。


这个函数的图形呈现出一个S形曲线,它在中心点(x=0)增长缓慢,而在两端则增长迅速接近水平。这种特性使得Sigmoid函数在早期的神经网络中非常受欢迎,因为它可以帮助网络学习非线性关系。然而,它也存在梯度消失的问题,这意味着在训练过程中,当输入值非常大或非常小的时候,梯度几乎为零,这会导致权重更新变得非常缓慢,从而影响网络的学习效率。


一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。而且,该激活函数并不是以 0 为中心的,所以在实践中这种激活函数使用的很少。sigmoid函数一般只用于二分类的输出层。


📀绘制Sigmoid函数图像


import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F
 
 
def test():
    _, axes = plt.subplots(1, 2)
 
    
    x = torch.linspace(-20, 20, 1000)
    y = F.tanh(x)
    axes[0].plot(x, y)
    axes[0].grid()
    axes[0].set_title('Sigmoid 函数图像')
 
    
    x = torch.linspace(-20, 20, 1000, requires_grad=True)
    torch.sigmoid(x).sum().backward()
 
    axes[1].plot(x.detach(), x.grad)
    axes[1].grid()
    axes[1].set_title('Sigmoid 导数图像')
 
    plt.show()
 
 
if __name__ == '__main__':
    test()


📀在神经网络中,一个神经元的输出可以通过Sigmoid函数来表示其被激活的概率,接近1的值表示高度激活,而接近0的值则表示低激活。这种特性使得Sigmoid函数特别适合用于二分类问题的输出层,因为它可以表示两个类别的概率分布。



神经网络的激活函数(二)+https://developer.aliyun.com/article/1544636?spm=a2c6h.13148508.setting.15.2a1e4f0eDtAPEV

相关文章
|
6天前
|
机器学习/深度学习 算法 Serverless
神经网络的激活函数(二)
本文介绍了神经网络中的激活函数,特别是tanh和ReLU。tanh函数将输入映射到(-1,1),以0为中心,加快了训练速度,但两侧导数为0可能导致梯度消失。ReLU函数在正区间的导数为1,解决了梯度消失问题,常用于隐藏层。softmax函数用于多分类,将输出转换为概率分布。文章还包含了代码示例,展示了这些函数的图形和导数。
|
8天前
|
机器学习/深度学习 人工智能 Serverless
【深度学习】神经网络中的激活函数:释放非线性的力量
【深度学习】神经网络中的激活函数:释放非线性的力量
19 1
|
1月前
|
机器学习/深度学习 人工智能 算法
【AI 初识】激活函数在神经网络中的作用是什么?
【5月更文挑战第2天】【AI 初识】激活函数在神经网络中的作用是什么?
|
1月前
|
机器学习/深度学习 人工智能 算法
神经网络中的神经元和激活函数介绍
神经网络中的神经元和激活函数介绍
24 0
|
1月前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
29 0
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
|
1月前
|
存储 Unix Linux
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
23 0
|
1月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
14天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
14天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】

热门文章

最新文章