oracle max函数速度慢_神经网络之激活函数_Sigmoid和Tanh探索

492d1987b6d966dfff88437828f3377c.png

Sigmoid是神经网络常用的激活函数,相信大家在学机器学习的时候都知道Sigmoid的值域在 ( 0,1 ) 区间,模型结果y_label值是概率值,那么今天就来谈谈别的。

cedd7bd3073c0245202bfa3e4cbeb102.png

Tanh(双曲正切函数)

值域:( -1,1 )

公式:

718520613781df233a1c584f8813e785.png

图形看上Tanh与Sigmoid差异

b6ba1b396cc13bd9e62c5e57675e101d.png

1、Sigmoid函数比Tanh函数收敛饱和速度慢

2、Sigmoid函数比Tanh函数梯度收敛更为平滑

3、Sigmoid函数比Tanh函数值域范围更窄

具体代码细节

from scipy.special import expit, logit
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt

np.set_printoptions(precision = 2)
x = np.random.uniform(-10,10,size=(10000,10))

先随机模拟1W个10维sample

247283b8d68b1e3204883c9e839a81a1.png

对每个样本进行 ( ∑sample1,Σsample2,Σsample3... ) 得到1W个结果,尝试用sigmoid进行压缩

s = x.sum(axis=1)
s = np.sort(s).reshape(-1,1)
# sigmoid函数
np.set_printoptions(suppress=True)
y_sigmoid = 1/(1+np.exp(-s))

167266d4dcaa29705b432c395835bcdc.png

再尝试用tanh进行压缩

# tanh函数
y_tanh = (1.0 - np.exp(-2 * s)) / (1.0 + np.exp(-2 * s))

6706ba35eef473b6991f3ad63f0de703.png

可以看到所有的结果都近似与两函数值域,图形显示

f50c5727b4bcb638c93c5325a3628f49.png

这里就会看到问题,当Sigmoid和Tanh因变量过大时,所有过大的因变量落在函数饱和区间内,函数对因变量的收敛几乎不敏感,这就是为什么在做逻辑回归的时候要对数据先做 Normalize 处理的原因,机器学习教程里很少提到这个点。

我们重新对原始数据做 Normalize 处理

min_max_scaler = preprocessing.MinMaxScaler()  
y = min_max_scaler.fit_transform(s)

a6ac39d5af3bcd116d7600931217b502.png

由于Sigmoid和Tanh函数因变量值域为(-∞,+∞),MinMaxScaler将函数因变量压缩到(0,1),所以就形成了截断一半的曲线,两个函数分别以0.5、0为起点。

9dc97f220062641c6891ae15bc1348c6.png

再对原始数据再进行一次转换,这次StandardScaler是以0为基准通过σ计算到基准点的距离

z_score_scaler = preprocessing.StandardScaler()  
y = z_score_scaler.fit_transform(s)

aa22b347e2cc2575e01dc9d8ba096f59.png

最后得出结果图,如果后续还有加权计算,需注意tanh函数结果集可能小于0,会造成加权计算错误,sigmoid则不会。

4f110409d729b5774b36acf6c5ce9a86.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值