神经网络激活函数简介

介绍

本篇文章,介绍几个常用的神经网络激活函数:

  1. sigmoid 函数
  2. tanh 函数
  3. ReLU 函数

sigmoid 函数

sigmoid 函数表达式

函数表达式如下所示:

σ(z)=11+ez

画出函数图像:

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1.0/(1.0+np.exp(-x))

x = np.linspace(-8,8,200)
y = sigmoid(x)

plt.plot(x,y)
plt.show()


这里写图片描述

sigmoid 函数导数

对 sigmoid 函数求导,可以得到如下表达式:

σ(z)=ez(1ez)2=1(1ez)(111ez)=σ(z)(1σ(z))

画出其导数图形,如下:

def pre_sigmoid(z):
    return sigmoid(z)*(1-sigmoid(z))
y_sigmoid_pre = pre_sigmoid(x)
plt.plot(x, y_sigmoid_pre)


这里写图片描述

tanh 函数

tanh 函数表达式

函数表达式如下:

tanh(z)=1e2z1+e2z=2σ(2z)1

画出函数图像,如下所示:

def tanh(x):
    return 2*sigmoid(2*x)-1

y1 = tanh(x)
plt.plot(x,y1)


这里写图片描述

tanh 函数导数

tanh(z)=4σ(2z)

def pre_tanh(z):
    return 4*pre_sigmoid(2*z)

y_tanh_pre = pre_tanh(x)
plt.plot(x, y_tanh_pre)


这里写图片描述

ReLU 函数

ReLU 函数表达式

ReLU(z)=max(z,0)

函数图像如下所示:

def relu(z):
    return np.maximum(0,z)
y2 = relu(x)
plt.plot(x,y2)


这里写图片描述

ReLU 函数的导数

注意到,ReLU 函数在 z=0 处不可导,我们可以指定 z=0 处的导数为 0 或者 1。

def pre_relu(z):
    result = []
    for i in z:
        if i >= 0: result.append(1)
        else: result.append(0)
    return result
y_relu_pre = pre_relu(x)
plt.plot(x, y_relu_pre)


这里写图片描述

小结

首先,定义对任何函数求导的函数:

def derivative(f, z, eps=0.0001):
    return (f(z+eps)-f(z-eps))/(2*eps)

然后,将上述三个激活函数画在一起:

x = np.linspace(-3,3,200)
plt.plot(x, sigmoid(x), color="red")
plt.plot(x, tanh(x), color="green")
plt.plot(x, relu(x), color="blue")
plt.legend(["sigmoid", "tanh", "relu"], loc="best")
plt.grid()
  • plt.legend() 用来标示图注
  • plt.grid() 用来打开网格线


这里写图片描述

然后将三个激活函数的导数图像画在一起:

plt.plot(x, derivative(sigmoid, x), color="red")
plt.plot(x, derivative(tanh, x), color="green")
plt.plot(x, derivative(relu, x), color="blue")
plt.legend(["sigmoid", "tanh", "relu"], loc="best")
plt.grid()


这里写图片描述

我的个人博客

欢迎访问我的个人博客: www.wangs0622.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值