5分钟了解神经网络激活函数(二)

简介: 5分钟了解神经网络激活函数(二)
  1. 双曲正切函数(Tanh)

双曲正切函数是深度学习中使用的另一种激活函数,并且在深度学习应用程序中具有某些变体。被称为tanh函数的双曲正切函数是一个更平滑的零中心函数,范围在-1到1之间,因此tanh函数的输出由下式给出:

image.png

与sigmoid函数相比,tanh函数更好,因为它为多层神经网络提供了更好的训练性能。但是,tanh函数也无法解决S形函数所遭受的消失梯度问题。该函数提供的主要优点是,它可以产生零中心输出,从而有助于反向传播过程。tanh函数的一个特性是,仅当输入值为0时,即x为零时,它才能达到1的梯度。这使得tanh函数在计算过程中产生一些死亡的神经元。死神经元是激活权重很少被归因于零梯度的结果的情况。

image.png

tanh函数的这种局限性促使人们进一步研究激活函数从而解决这个问题,最终诞生了整流线性单元(ReLU)激活函数。tanh函数主要用于自然语言处理和语音识别任务的递归神经网络中。

  1. 整流线性单元(ReLU)功能

整流线性单元(ReLU)激活函数由Nair和Hinton在2010提出,从那时起,它一直是深度学习应用程序中使用最广泛的激活函数,具有迄今为止最先进的结果。ReLU是一种快速学习的激活函数,已被证明是最成功且使用最广泛的函数。与Sigmoid和tanh激活函数相比,它在深度学习中具有更好的性能和通用性。ReLU表示几乎是线性的函数,因此保留了线性模型的属性,这些属性使它们易于使用梯度下降法进行优化。ReLU激活功能对每个输入元素执行阈值操作,其中小于零的值设置为零,因此ReLU的计算公式为:

image.png

此函数可对输入值进行校正,使其小于零,从而将其强制为零,并消除了在早期激活函数类型中观察到的梯度消失问题。

ReLU函数已在深层神经网络的隐藏单元中与另一个激活函数一起使用,在网络的输出层中是对象分类和语音识别应用程序中的典型示例。在计算中使用Relu的主要优点在于,由于它们不计算指数和除法,因此它们保证了更快的计算速度,从而提高了总体计算速度。ReLU的另一个特性是,当它压缩介于0到最大值之间的值时,会在隐藏的单位中引入稀疏性。

然而,尽管已经采用了dropout技术来减少ReLU的过拟合效应,并且网络改善了深层神经网络的性能,但ReLU的局限性仍然在于与S型函数相比它容易过拟合。

ReLu的另一个问题是,某些梯度在训练过程中可能会很脆弱,甚至会消失。它可能导致权重停止更新,从而使其永远不会再在任何数据点上激活。简而言之,ReLu可能导致神经元死亡。

为了解决这个问题,引入了另一种名为Leaky ReLu的修改来解决死亡的神经元问题。它引入了一个小偏置以使更新保持活动状态。

  1. Softmax函数

Softmax函数是计算中使用的另一种激活函数。它用于根据实数向量计算概率分布。Softmax函数产生的输出范围是0到1之间的值,且概率之和等于1。

Softmax函数的计算公式如下:

image.png

Softmax函数用于多分类模型中,在该模型中,它返回每个类的概率,而目标类的概率最高。Softmax函数主要出现在使用它们的深度学习架构的几乎所有输出层中。Sigmoid和Softmax激活函数之间的主要区别在于,Sigmoid用于二分类,而Softmax用于多分类任务。

理论上足够了对吗?我认为现在是时候检查不同的激活函数并比较它们的性能,然后选择对我们更合适的函数。因此,让我们从选择一个数据集开始。

作为该领域的新手,您可能遇到过MNIST这个词。它是一个Digit Recognizer数据集,非常适合入门。

https://www.kaggle.com/c/digit-recognizer/data

数据文件train.csv和test.csv包含从零到九的手绘数字的灰度图像。

每个图像的高度为28像素,宽度为28像素,总计784像素。每个像素都有一个与之关联的像素值,表示该像素的亮度或暗度,数字越高表示像素越暗。此像素值是0到255之间的整数(含)。

训练数据集(train.csv)有785列。第一列称为“标签”,是用户绘制的数字。其余列包含关联图像的像素值。

训练集中的每个像素列都有一个类似pixelx的名称,其中x是0到783之间(包括0和783)的整数。

测试数据集(test.csv)与训练集相同,除了它不包含“标签”列。

在开始编写代码之前,我建议您使用Google Collaboratory,因为它既快速又易于使用。

imports

# This Python 3 environment comes with many helpful analytics libraries installed, here's several helpful packages to load in
import pandas as pd
import numpy as np
import keras
import matplotlib.pyplot as plt
from keras.utils import to_categorical
from keras.models import Sequential, load_model
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.layers.advanced_activations import LeakyReLU
from sklearn.model_selection import train_test_split

b.png

目录
相关文章
|
1天前
|
机器学习/深度学习 算法 Serverless
神经网络的激活函数(二)
本文介绍了神经网络中的激活函数,特别是tanh和ReLU。tanh函数将输入映射到(-1,1),以0为中心,加快了训练速度,但两侧导数为0可能导致梯度消失。ReLU函数在正区间的导数为1,解决了梯度消失问题,常用于隐藏层。softmax函数用于多分类,将输出转换为概率分布。文章还包含了代码示例,展示了这些函数的图形和导数。
|
4天前
|
机器学习/深度学习 人工智能 Serverless
【深度学习】神经网络中的激活函数:释放非线性的力量
【深度学习】神经网络中的激活函数:释放非线性的力量
14 1
|
1天前
|
机器学习/深度学习 算法
神经网络的激活函数(一)
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。
|
1月前
|
机器学习/深度学习 人工智能 算法
【AI 初识】激活函数在神经网络中的作用是什么?
【5月更文挑战第2天】【AI 初识】激活函数在神经网络中的作用是什么?
|
1月前
|
机器学习/深度学习 人工智能 算法
神经网络中的神经元和激活函数介绍
神经网络中的神经元和激活函数介绍
24 0
|
1月前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
28 0
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
|
1月前
|
存储 Unix Linux
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
深入理解 Linux 系统下的关键网络接口和函数,gethostent,getaddrinfo,getnameinfo
19 0
|
1月前
|
消息中间件 Java Linux
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
|
16天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
33 1

热门文章

最新文章