深度学习4大激活函数(代码片段)

尤尔小屋的猫 尤尔小屋的猫     2022-11-23     442

关键词:

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出实际上都是上层输入的线性函数。

这样就使得无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,模型的表达力仍然不够。

我们决定引入非线性函数作为激励函数,这样深层神经网络才有意义(不再是输入的线性组合)。

本文将介绍深度学习中的4个常见的激活函数,从原函数公式、导数函数及二者的可视化来进行对比:

  • Sigmoid函数
  • Tanh函数
  • ReLu函数
  • Leaky ReLu函数

激活函数特征

  1. 非线性:激活函数满足非线性时,才不会被单层网络替代,神经网络才有了意义
  2. 可微性:优化器大多数是用梯度下降来更新梯度;如果不可微的话,就不能求导,也就不能更新参数
  3. 单调性:激活函数是单调的,能够保证网络的损失函数是凸函数,更容易收敛

Sigmoid函数

表示形式为tf.nn.sigmoid(x)

f ( x ) = 1 1 + e − x f(x)=\\frac11+e^-x f(x)=1+ex1

原函数

In [1]:

# import tensorflow as

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline
 

def sigmoid(x):
    """
    返回sigmoid函数
    """
    return 1 / (1 + np.exp(-x))

 
def plot_sigmoid():
    # param:起点,终点,间距
    x = np.arange(-10, 10, 0.2)
    y = sigmoid(x)
    plt.plot(x, y)
    plt.grid()
    plt.show()
 
 
if __name__ == '__main__':
    plot_sigmoid()

导数函数

该函数的导数为:

f ′ ( z ) = ( 1 1 + e − z ) ′ = e − z ( 1 + e − z ) 2 = 1 + e − z − 1 ( 1 + e − z ) 2 = 1 ( 1 + e − z ) ( 1 − 1 ( 1 + e − z ) ) = f ( z ) ( 1 − f ( z ) ) \\beginaligned f^\\prime(z) &=\\left(\\frac11+e^-z\\right)^\\prime \\\\ &=\\frace^-z\\left(1+e^-z\\right)^2 \\\\ &=\\frac1+e^-z-1\\left(1+e^-z\\right)^2 \\\\ &=\\frac1\\left(1+e^-z\\right)\\left(1-\\frac1\\left(1+e^-z\\right)\\right) \\\\ &=f(z)(1-f(z)) \\endaligned f(z)=(1+ez1)=(1+ez)2ez=(1+ez)21+ez1=(1+ez)1(1(1+ez)1)=f(z)(1f(z))

另一种求解方法:

步骤1:

d y   d x = − ( 1 + e − x ) − 2 ⋅ ( 1 + e − x ) ′ = − ( 1 + e − x ) − 2 ⋅ 1 ⋅ ( e − x ) ′ = − ( 1 + e − x ) − 2 ⋅ 1 ⋅ ( e − x ) ⋅ ( − x ) ′ = − ( 1 + e − x ) − 2 ⋅ 1 ⋅ ( e − x ) ⋅ ( − 1 ) = ( 1 + e − x ) − 2 ⋅ ( e − x ) = e − x ( 1 + e − x ) 2 \\beginaligned \\frac\\mathrmd y\\mathrm~d x &=-\\left(1+e^-x\\right)^-2 \\cdot\\left(1+e^-x\\right)^\\prime \\\\ &=-\\left(1+e^-x\\right)^-2 \\cdot 1 \\cdot\\left(e^-x\\right)^\\prime \\\\ &=-\\left(1+e^-x\\right)^-2 \\cdot 1 \\cdot\\left(e^-x\\right) \\cdot(-x)^\\prime \\\\ &=-\\left(1+e^-x\\right)^-2 \\cdot 1 \\cdot\\left(e^-x\\right) \\cdot(-1) \\\\ &=\\left(1+e^-x\\right)^-2 \\cdot\\left(e^-x\\right) \\\\ &=\\frace^-x\\left(1+e^-x\\right)^2 \\endaligned  dxdy=(1+ex)2(1+ex)=(1+ex)21(ex)=(1+ex)21(ex)(x)=(1+ex)21(ex)(1)=(1+ex)2(ex)=(1+ex)2ex

步骤2:

1 − y = 1 − 1 1 + e − x = 1 + e − x − 1 1 + e − x = e − x 1 + e − x 1-y=1-\\frac11+e^-x=\\frac1+e^-x-11+e^-x=\\frace^-x1+e^-x 1y=11+ex1=1+ex1+ex1=查看详情

第三节2:深度学习必备组件之损失函数和激活函数(代码片段)

文章目录一:损失函数(1)均方误差损失(MSE)(2)交叉熵损失(CrossEntropy)二:激活函数(1)tanh(2)ReLU(3)LeakyReLU(4& 查看详情

第三节2:深度学习必备组件之损失函数和激活函数(代码片段)

文章目录一:损失函数(1)均方误差损失(MSE)(2)交叉熵损失(CrossEntropy)二:激活函数(1)tanh(2)ReLU(3)LeakyReLU(4& 查看详情

深度学习基础之激活函数(代码片段)

文章目录激活函数阶跃函数sigmoid函数sigmoid函数和阶跃函数的比较为什么激活函数要用非线性函数?ReLU函数-线性整流函数LeakyReLU函数-带泄露线性整流函数tanh函数-双曲正切函数参考激活函数激活函数是连接感知机和神经网络... 查看详情

深度学习中激活函数的用途(代码片段)

深度学习中激活函数的概念激活函数,即ActivationFunction,有时候也称作激励函数。它是为了解决线性不可分的问题引出的。但是也不是说线性可分就不能用激活函数,也是可以的。它的目的是为了使数据更好的展现出我们... 查看详情

深度学习深度学习基础学习笔记(代码片段)

深度学习基础🔭文章目录深度学习基础🔭前言🎠一、深度学习与传统机器学习的区别?二、深度学习的改进点1.更加合适目标函数2.新增Softmax层3.激活函数进化历程4.梯度下降算法进化历程5.BatchNormalization的由来6.... 查看详情

python深度学习入门-神经网络(代码片段)

深度学习入门-神经网络博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!目录摘要1、从感知机到神经网络1.1 神经网络的例子1... 查看详情

《深度学习入门》——神经网络(代码片段)

感知机需要人工设定权重,而神经网络可以自动地从数据中学习到合适的权重参数。激活函数(activationfunction)——将输入信号的总和转换为输出信号。激活函数的作用在于决定如何激活输入信号的总和。阶跃函数—&md... 查看详情

深度学习入门多层感知机(代码片段)

...3tanh函数3.多层感知机4.小结前言因为工作需求需要接触到深度学习知识,导师推荐了一本书用来入门:《动手学深度学习(PyTorch版)》在此处记录一下学习内容以及学习总结,文章以原作者书籍为基础,... 查看详情

深度学习神经元介绍(代码片段)

目录1激活函数1.1Sigmoid/logistics函数:1.2tanh(双曲正切曲线)1.3RELU1.4LeakReLu1.5SoftMax1.6其他激活函数1.7如何选择激活函数1.7.1隐藏层1.7.2输出层2参数初始化2.1随机初始化2.2标准初始化2.3Xavier初始化2.4He初始化1激活函数人工神经元接... 查看详情

从零开始实现一个深度学习框架|激活函数,损失函数与卷积层(代码片段)

往期回顾super(Sigmoid,self).__init__()x=/(+np.exp(-x))xp=self.forward(self.storage[gradient=p*(-p)accumulated_gradient*gradientsuper(Tanh,self).__init__()x=/(+np.exp(*x))-xp=self.forward(self.storage[grad 查看详情

《andrewng深度学习》笔记4

浅层神经网络1.激活函数在神经网络中,激活函数有很多种,常用的有sigmoid()函数,tanh()函数,ReLu函数(修正单元函数),泄露ReLu(泄露修正单元函数)。它们的图形如下:sigmoid()激活函数,范围是y属于{0,1},所以0<=y<=1。但是sig... 查看详情

深度学习笔记:激活函数常见问题总结

...5、为什么tanh收敛速度比sigmoid快理论系列:    深度学习笔记(一):卷积层+激活函数+池化层+全连接层    深度学习笔记(二):激活函数的前世今生    深度学习 查看详情

深度学习笔记:激活函数常见问题总结

...5、为什么tanh收敛速度比sigmoid快理论系列:    深度学习笔记(一):卷积层+激活函数+池化层+全连接层    深度学习笔记(二):激活函数的前世今生    深度学习 查看详情

《python深度学习》第五章-4(可视化中间激活层)读书笔记(代码片段)

5.4 卷积神经网络的可视化卷积神经网络学到的表示非常适合可视化,很大程度上是因为它们是视觉概念的表示\\colorred视觉概念的表示视觉概念的表示。接下来介绍3种可视化方法。可视化卷积神经网络的中间输出(中间... 查看详情

pytorch学习笔记3.深度学习基础(代码片段)

...:【计算机-AI】PyTorch学这个就够了!(好课推荐)深度学习与PyTorch入门实战——主讲人龙 查看详情

深度学习笔记:归一化问题总结(代码片段)

理论系列:    深度学习笔记(一):卷积层+激活函数+池化层+全连接层    深度学习笔记(二):激活函数的前世今生    深度学习笔记(三):BatchNorm(BN࿰... 查看详情

干货|深入理解深度学习中的激活函数(代码片段)

理解深度学习中的激活函数在这个文章中,我们将会了解几种不同的激活函数,同时也会了解到哪个激活函数优于其他的激活函数,以及各个激活函数的优缺点。1.什么是激活函数?生物神经网络是人工神经网络的起源。然而,... 查看详情