《人工智能数学基础》唐宇迪 ----学习笔记

1.随机变量的几种分布

1.1正态分布

python正态分布相关工具包:

(1)产生正态随机变量

from scipy.stats import norm
#draw a single sample
print(norm.rvs(, end="\nin")
#draw 10 samples
print(norm.rvs(size=10), end="inin")
#adjust mean ('loc') and standard deviation ('scale')print(norm.rvs( loc=10,scale=0.1),end="inin")

在上述代码中,首先通过语句 from SciPy.stats import norm 从 SciPy.stats包中导入norm对象,然后调用norm对象的rvs方法产生随机正态变量。rvs方法常用的默认值参数有 loc,scale,size,分别表示正态分布的均值、标准差以及要产生的随机变量的个数,其默认值分别为 loc=0,scale=1,size=1。代码中首先采用默认参数调用rvs 产生一个标准正态分布的随机变量样本,又通过参数 size=10再次调用rvs产生10个标准正态分布的随机样本,最后通过参数loc=10,scalc=0.1调用rvs,产生一个普通正态分布的随机样本。

从上述代码,首先产生一个标准正态分布的随机值,然后产生10个标准正态分布的随机值,最后产生一个均值为10,标准差为0.1的正态分布随机值。
 

(2)计算正态分布概率:

from scipy.stats import norm
#probability of x less or equal 8.3
print("P(X<0.3)={}".format( norm.cdf(0.3)))
#probability of x in[-e.2,+0.2]
print("P(-0.2<x<0.2)= {}".format(norm.cdf(0.2)- norm.cdf( -0.2)))

在上述代码中,首先通过语句from SciPy.stats import norm 从 SciPy.stats包中导入norm对象,然后调用norm对象的cdf方法,传入分布函数(累积概率密度函数)参数值,得到随机变量从负无穷到当前参数所构成的区间的累积概率,当求一个有限区间的概率时,可以通过两个无限区间的累积概率相减来得到。

(3)标准正态分布图形:

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
import matplotlib.style as style
from IPython.core.display import HTML

#PLOTTING CONFIG
#%matplotlib inline
style.use( 'fivethirtyeight')
plt.rcParams[ "figure.figsize"]=(14,7)
plt.figure(dpi=100)

#PDF
plt.plot(np. linspace(-4,4,100),
        stats.norm.pdf(np. linspace(-4,4,100))
        /np.max(stats.norm.pdf(np.linspace(-3,3,100))),
         )
plt.fill_between(np.linspace(-4,4,100),
                stats.norm.pdf(np. linspace(-4, 4,100))
                /np.max(stats.norm.pdf(np.linspace(-3,3,100))),alpha=.15,
                )

#CDF
plt.plot(np.linspace(-4, 4,100),
        stats.norm.cdf(np.linspace(-4,4,100)),
         )

#LEGEND
plt.text(x=-1.5, y=.7,s="pdf (normed)", rotation=65,
        alpha=.75, weight="bold",color="#008fd5")
plt.text(x=-.4, y=.5,s="cdf",rotation=55, alpha=.75,
        weight="bold",color="#fc4f3e")

#TICKS
plt.tick_params(axis = 'both',which = 'major', labelsize = 18)
plt.axhline(y = 0,color = 'black',linewidth = 1.3,alpha= .7)

#TITLE
plt.text(x = -5, y = 1.25,s ="Normal Distribution - Overview",
         fontsize = 26, weight= 'bold',alpha = .75)
plt.text(x =-5, y = 1.1,
        s =('Depicted below are the normed probability density function (pdf)'
        'and the cumulative density \nfunction (cdf) of a normally distributed'
        ' random variable $y lsim \mathcal{N}(\mu, \sigma)$,'
        'given $ imu =e $and $ lsigma = 1$.'),
    fontsize =19,alpha =.85)


1.2二项分布

属性:(1)二项分布中的每个试验都是独立的。(2)在试验中只有两个可能的结果:成功或失败。                 (3)总共进行了n次试验。(4)所有试验成功或失败的概率是相同的,即试验是一样的。

python二项分布相关工具包:

(1)产生二项分布随机变量

import numpy as np
from scipy.stats import binom

#draw a single sample
np.random. seed(42)
print(binom.rvs(p=0.3,n=10), end="\n\n")

#draw 10 samples
print(binom.rvs(p=0.3,n=10,size=10),end="\n\n")
上述代码会首先产生一个二项分布的随机值,再产生10个二 项分布的随机值
(2) 二顶分布的概率质量 函数
  
from scipy.stats import binom
#additional imports for plotting purpose
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
plt.rcParams["figure.figsize"]=(14,7)
#likelihood of x and y
x=1
y =7
print("pmf(X=1)= {}\npmf(X=7)={}".format(binom.pmf(k=x,p=0.3, n=10), \
                                        binom. pmf(k=y,p=0.3,n=10)))
#continuous pdf for the plot
x_s= np.arange(11)
y_s = binom. pmf(k=x_s,p=8.3,n=10)
plt.scatter(x_s,y_s,s=100)

首先输出二项分布在取值处1和7的概率,然后输出n=10、p=0.3的二项分布的散点图。散点图显示了二项分布在各可能取值处的概率。
 

(3)累计概率:

from scipy.stats import binom
# probability of x less or equal e.3
print("P(X<=3)={}".format(binom.cdf(k=3,p=0.3,n=10)))
# probability of x in[-8.2,+8.2]
print("P(2< X <=8)= {}".format(binom.cdf(k=8,p=0.3, n=10) - binom.cdf(k=2,p=0.3,n=10)))

分别显示了二项分布随机变量值小于等于3的概率和在2~8的概率。
 

1.3泊松分布

事件特点:

(1)已经出现的事件都不影响下一个事件出现的概率。
(2)事件出现的平均频率总是固定的,出现的概率与时间或空间范围成正比。                                (3)时间间隔很小时,在给定时间间隔内事件出现的概率趋向于0。

python泊松分布相关工具包:

(1)产生泊松分布随机变量

import numpy as np
from scipy.stats import poisson
#draw a single sample
np.random.seed(42)
print(poisson.rvs(mu=10),end="\n\n")
# draw 10 samples
print(poisson.rvs(mu=18,size=10),end="\n\n")

上述代码首先产生一个泊松分布的随机值,然后产生10个泊松分布的随机值。


(2)泊松分布的概率质量函数

from scipy.stats import poisson
# additional imports for plotting purpose
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
plt.rcParams[ "figure.figsize"]=(14,7)
#continuous pdf for the plot
x_s = np.arange(15)
y_s = poisson.pmf(k=x_s,mu=5)
plt.scatter(x_s, y_s,s=100)
plt.show()
显示了0~14的整数值对应的泊松分布概率构成的散点图。
 
(3) 计算泊松分布的累积概率
from scipy.stats import poisson
#probability of x less or equal 0.3
print("P(X<=3)={}".format(poisson.cdf(k=3,mu=5)))
#probability of x in[-8.2,+8.2]
print("P(2<X<=8)={}".format(poisson.cdf(k=8,mu=5) - poisson.cdf(k=2,mu=5)))

输出结果分别为泊松分布随机变量值小于等于3的概率和在2~8的概率。

1.4均匀分布

1.5卡方分布

python卡方分布相关工具包:

(1)产生卡方分布随机变量

import numpy as np
from scipy.stats import chi2
#draw a single sample
np.random.seed(42)
print(chi2.rvs(df=4), end="\n\n")
#draw 10 samples
print(chi2.rvs( df=4, size=10),end="\n\n")

上述代码首先产生一个自由度为4的卡方分布的随机值,然后产生10个卡方分布的随机值。

(2)卡方分布的概率密度函数计算

import numpy as np
from scipy.stats import chi2
#additional imports for plotting purposeimport numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
plt.rcParams["figure.figsize"]=(14,7)
#continuous pdf for the plot
x_s =np.arange(15)
y_s = chi2.pdf(x=x_s,df=4)
plt.scatter(x_s,y_s,s=100);
plt.show()

显示了自由度为4的卡方分布的概率密度函数散点图。
 

(3)计算卡方分布概率

from scipy.stats import chi2
print("P(X<=3)={}".format(chi2.cdf(x=3,df=4)))
#probability of x in[-0.2,+0.2]
print("P(2<X<=8)= {}".format(chi2.cdf(x=8,df=4) - chi2.cdf(x=2,df=4)))

1.6 Beta分布

python Beta分布相关工具包:

(1)产生 Beta 分布随机变

from scipy.stats import beta
import numpy as np
#draw a single sample
np.random.seed(42)
print(beta.rvs(a=2,b=2),end="\n\n")
#draw 10 samples
print(beta.rvs(a=2,b=2,size=10))

上述代码首先产生一个参数为α=2,b=2的 Beta分布的随机值,然后又产生10个 Beta分布的随机值。
 

(2)Beta 分布的概率密度函数计算

from scipy.stats import beta
# additional import for plotting
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
plt.rcParams["figure.figsize"]=(14,7)
#continuous pdf for the plot
x_s = np . linspace(0,1,100)
y_s = beta.pdf(a=2,b=2,x=x_s)
plt.scatter(x_s, y_s);
plt.show()

(3)计算Beta分布概率

from scipy.stats import beta
#probability of x less or equal 0.3
print("P(X<0.3)= {:.3}".format(beta.cdf(a=2, b=2,x=0.3)))
#probability of x in [ -e.2,+0.2]
print("P(-0.2<X<0.2)= {:.3}" .format(beta.cdf(a=2,b=2, x=0.2)-\
                                    beta.cdf(a=2,b=2,x=-8.2)))

2.核函数变换

2.1相关知识介绍

2.1.1超平面

在几何中,超平面(Hyper Plane)的本质是自由度比所在空间的维度小1。自由度的概念可以简单地理解为至少要给定多少个分量的值才能确定一个点。例如,二维空间中(超)平面只要给定(x, y)中任意一个分量x或y,就可以确定剩下一个分量的值,其中先确定值的分量是自由的,剩下的那个是“不自由的”,它的值由先确定值的分量确定。因此,在二维空间中超平面为一条直线,自由度是1;一维空间中超平面为数轴上的一个点,自由度为0;三维空间中超平面为二维平面,自由度为2;n维空间中超平面的自由度为n-1。

2.1.2线性分类

简单地说,若用一个分类超平面可以将两类样本完全分开,则称这些样本是“线性可分”的,否则称为非线性可分的。

2.1.3升维

升维,就是把样本从原输入低维空间向高维特征空间作映射,使得数据的维度增大。升维可以用来解决低维空间非线性可分的问题。
 

2.2核函数引入

核函数在机器学习算法中进行非线性改进的主要思路如下。
(1)   对于低维空间非线性可分的样例,可以将样例特征映射到高维空间(也可以是无穷维)中,即“升  维”,以此达到高维空间线性分类的目的。其中关键的部分在于找到低维到高维的非线性映射函数f(x),确定参数和高维特征空间维数等问题,实现低维数据到高维数据的映射。
(2)非线性可分的样例映射到高维空间后,需要计算高维空间中数据之间的内积,计算量大且计算非常困难,甚至会引起“维数灾难”,这些问题可以应用核函数解决。
(3)  核函数是对低维数据的计算,其计算结果与高维数据的内积运算结果相同,从而不需要再选取映射函数。用核函数代替高维数据的内积,避免了直接在高维空间中进行复杂计算。

2.3核函数实例

核函数有严格的数学要求,凡满足 Mercer 定理的都可以作为核函数。Mercer定理确保高维空间任意两个向量的内积一定可以被低维空间中两个向量的某种计算表示(多数时候是内积的某种变换)。


2.3.1定义

2.3.2 实例

f(x)=[1,2,3,2,4,6,3,6,9]。
f(y)=[16,20,24,20,25,30,24,30,36]。
f(x): f(y)=16+40+72+40+100+180+72+180+324=1024。
 

2.3.3核函数特点

(1)核函数是在原空间进行计算,既避免了“维数灾难”,又大大减小了计算量,因此,核函数方法可以有效处理高维输入。
(2)无须知道变换函数f(x)的形式和参数。
(3)核函数的形式和参数的变化会改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变核函数方法的性能。
(4)核函数方法可以和不同的算法相结合,形成多种不同的基于核函数计算的方法,且这两部分的设计可以单独进行,并可为不同的应用选择不同的核函数和算法。
 

2.3.4常用核函数

(1)线性核函数

线性核函数是最简单的核函数,对应的公式为K(x ,y)=x y。显见,此时的映射函数f(z)=z。线性核函数可以直接使用,主要用于线性可分的情形。线性核函数的特征空间与输入空间的维度是一样的,对数据不作任何变换,不需要设置任何参数,通常首先尝试用线性核函数作分类,如果效果不理想,再改换别的核函数。
(2)多项式函数

import numpy as np#映射函数
def f(Z):
    Z1=Z**2
    Z_shape=np.shape(Z)[1]-1
    z0=[]
    for i in range(Z_shape,0, -1):
        for j in range(i-1,-1,-1):
            xy=Z[0,i]*Z[0,j]*2**0.5
            z0.append(xy)
    Z2=np.array(z0).reshape(1, -1)
    Z3=Z*2**0.5
    return np.hstack((Z1,Z2,Z3,[[1]]))
X=np.array([[1,2,3,4]]) #四维行向量
Y=np.array([[5,6,7,8]])

#使用多项式核函数计算
XY_poly = (X.dot(Y.T)+1)**2
print("使用多项式核函数计算的结果:",XY_poly)#使用映射计算
X1=f(X)
Y1=f(Y)
print("使用映射计算的结果:",X1.dot(Y1. T))
print("输出×的映射值:\n",X1)
print("输出Y的映射值:\n",Y1)
print("原输入空间的维度: ",np.shape(X)[1])
print("映射后特征空间的维度:",np.shape(X1)[1])

(3)高斯径向基核函数

\delta>0称为核半径,是用户定义的用于确定到达率或者说函数值跌落到0的速度参数。若x和y很相近,则核函数值为1;x和y相差很大,则核函数值约为0。由于这个函数类似于高斯分布,因此被称为高斯核函数,也叫径向基函数(Radial Basis Function,RBF)。RBF是指数形式,展开就是无穷多的多项式,所以RBF可以将原始特征数据映射到无穷维。该核函数对于大样本和小样本均有较好的性能,比多项式核函数参数要少。

(4)核函数实现

import numpy as np#线性核函数
def linear(X,Y):
    K= X.T.dot(Y)
    return K
#RBF
def gaussian(X,Y,sigma):#X和Y为数据,sigma为参数
    K=np.exp(-np.linalg.norm(X-Y)**2/(2* sigma**2))
    return K
#多项式核函数
def poly(X, Y,gamma,c,degree):#通过数据计算转换后的核函数
    K=X.T.dot(Y)
    K= (gamma*K +c)**degree
    return K

2.4核函数的选择


        选择核函数包括两部分工作:一是确定核函数,二是确定核函数类型后相关参数的选择。根据具体的数据选择恰当的核函数是机器学习应用领域中的一个重大难题,也是科研工作者所关注的焦点。
在实际问题中选择核函数,采用的方法如下:
一是根据先验知识预先选定核函数,针对特征向量类型选用核函数。
(1)线性核函数:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了,适用于维数很大、样本数量差不多的数据集。当维数较少,样本数量很多,可以手动添加一些维数,再使用线性核函数。
(2)高斯径向基核函数:使用范围较广,是SVM的默认核函数,适用于维数较低和样本数量一般的数据集,主要用于非线性可分的情形。
(3)多项式核函数:非常适合用于图像处理,可调节参数(可通过交叉验证或枚举法获得)获得好的结果。
二是采用交叉验证(Cross-Validation)方法,在选取核函数时,分别试用不同的核函数,通过仿真实验,在相同数据条件下对比分析,归纳误差最小的核函数就是最好的核函数。
三是采用由Smits等人提出的混合核函数方法,其基本思想是将不同的核函数结合起来后有更好的特性。该方法是目前选取核函数的主流方法,也是关于如何构造核函数的又一开创性的方法。
 

2.5 SVM原理

SVM的基本模型是二类分类模型,属于有监督学习,是在特征空间中找出一个超平面作为分类边界,对数据进行正确分类,且使每一类样本中距离分类边界最近的样本到分类边界的距离尽可能远,使分类误差最小化。

2.5.1几个相关概念

(1)最优分类超平面

a.最近距离最远
在两类样本中,每类都有距离超平面最近的样本,而“最优的”超平面是使这两类最近的样本到该超平面的距离(间隔)尽可能远。
b.等距
等距是指离超平面最近的两类样本到超平面的距离是相等的。
最优分类超平面是在所有分类超平面中分类效果最好的,对于样本空间中的数据,这个超平面能够准确地把样本分开且不存在错误分类,空间中最靠近分类超平面的点到超平面的距离是相等且最大的。


(2)  支持向量机

支持是表示边界支撑的意思,机代表算法。两类样本中,离最优分类超平面最近的点且平行于最优分类超平面的训练样本(向量)就叫作支持向量,它们“撑”起了分类超平面,求支持向量的算法称为支持向量机。

2.5.2 SVM的分类


( 1)当训练样本线性可分时,通过硬间隔最大化学习一个线性分类器,即线性可分SVM,SVM得到的超平面就是直线或平面。
( 2)当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化学习一个线性分类器,即线性SVM。
( 3)当训练数据是非线性可分时,通过使用核函数及软间隔最大化,学习非线性SVM
 

2.5.3 SVM目标

SVM的目标是求出最优分类超平面H,找到支持向量,对分类间隔进行最大化,将两类样本点正确地分开。几何间隔越大的解,它的误差上界越小,分类的确信度( confidence )也越大。因此,最大化分类间隔即训练阶段的目标。
 

2.5.4 sklearn.svm.SVC的使用

C:惩罚系数,代表对误差的惩罚程度,默认值是1.0。C越大,说明越不能容忍出现误差,容易过拟合,训练集测试时准确率很高,但泛化能力弱;C越小,容错率越高,泛化能力较强,但容易欠拟合。C过大或过小,泛化能力都会变差。
kernel:算法中采用的核函数类型,可以是 linear,poly,rbf,sigmoid,precomputed或者自定义一个核函数,默认是rbf ,即高斯径向基核函数。linear是线性核函数,poly指的是多项式核,sigmoid指的是双曲正切函数 tanh核。
degree:该参数只对kernel='poly'时有用,表示选择的多项式的最高次数,默认是3。
gamma:是选择RBF、poly和 sigmoid函数作为kernel后自带的参数。隐含决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,可能导致过拟合; gamma越小,支持向量越多,可能导致欠拟合。支持向量的个数影响训练与预测的速度。默认是auto,使用特征位数的倒数,即 features的数量。
cocf0:是 kernel='poly'或kernel='sigmoid'设置的核函数常数值。
 

3.熵与激活函数

3.1熵与信息熵

3.1.1熵的概念

嫡的概念来自热力学,热力学第二定律和第三定律都是和嫡有关的定律。在热力学中,嫡的物理意义是一个物理体系混乱程度的度量,是表征物质状态的参量之一。
嫡是一个宏观的物理量,是构成物理体系的大量微观粒子集体表现出来的一种物理性质。

3.1.2信息熵的概念

信息嫡度量了事物的不确定性,在机器学习中有很多应用。例如我们对事物进行分类的过程,实际上就是事物不确定性减少的过程。可以用信息嫡度量作为分类的依据,以信息嫡相对最小的属性作为分类属性,这就是决策树分类算法。
 

3.2激活函数

3.2.1概念

        激活函数(Activation Function)又称激励函数,是在人工神经网络( Artificial NeuralNetwork )中每一个神经元上运行的函数,根据神经元的输入,通过激活函数的作用,产生神经元的输出。要想了解激活函数的作用,首先要知道人工神经网络的结构和原理。
        人工神经网络是从信息处理角度模拟人脑神经元网络,建立神经元的简单模型,按不同的连接方式组成不同的网络结构。在人工神经网络中,每个神经元都是一个计算单元,大量的神经元节点之间相互连接,每个连接就是数据的一种传输通道,数据从网络一端输入,经过神经元之间的运算,从网络的另一端输出。下图是一个多层神经网络模型。

在人工神经网络中,一个具体的神经元的结构及运算原理。来自上一层的神经元的输人向量x经神经元连接的权值加权求和,再加上一个与当前神经元相关的常量构成神经元输人。

每一个神经元有一个激活函数,作用于本神经元的输入,产生输出如下。
f(x)=f\left ( \sum_{i}^{}\omega _{i}x_{i}+b \right )

        本层神经元的输出通过神经元连接传入下一层神经元,作为下一层神经元的输入。
        如果没有激活函数或激活函数是线性的,即f(x)=x,在这种情况下,每一层节点的输入虽然经过连接的权值和神经元节点的常量作用,但这本质上只是一种线性作用;不论神经网络的层数有多少,其本质上输出都是输入的线性组合,网络的计算能力就相当有限。使用非线性激活函数,可以将线性作用变成非线性作用,在输入输出之间生成非线性映射,使神经网络更加复杂,可以表示输入输出之间非线性的复杂的任意函数映射,可以描述复杂的表单数据,甚至可以具有学习复杂事物的能力。

3.2.2常见的几种激活函数

        激活函数的选取,直接影响了人工神经网络的效率和性能。在机器学习中,常见的激活函数有Sigmoid、Tanh、ReLU、Leaky ReLU等几种。

( 1 ) Sigmoid函数的数学表示和特点。
Sigmoid函数是logistics回归中进行最大似然估计时用到的一种函数形式。在人工神经网络中,Sigmoid 函数是经常应用的一种非线性激活函数。Sigmoid 函数的数学形式如下。

f(x)=\frac{1}{1+e^{-x}}

Sigmoid函数的主要特点如下。
①能够把输入的连续实值压缩到[0,1]区间上输出有助于输出值的收敛。如果输入非常大的负数,输出收敛于0;输入非常大的正数,输出收敛为1。
②应用Sigmoid 函数,会出现梯度消失情况。神经网络训练连接权值时,一般按照误差反向传播,应用梯度下降法不断对连接权值进行调整。Sigimoid函数的导数在x值非常大或非常小时接近于0,这对梯度下降法非常不利,会导致权值的梯度接近于0,权值的更新变得十分缓慢,即梯度消失。
②Sigmoid 函数非原点中心对称,不利于下层的计算。Sigmoid的函数的输出值全为正,在神经网络计算过程中,后一层的神经元将得到前一层输出的非0均值的信号作为输人,当输人x>0时,对权值局部求梯度为正,这样在反向传播中,权值要么往正向更新要么往负向更新,使得收敛缓慢。

        

        Sigmoid 函数及其导函数图形的特点:函数值在[0,1]区间,自变量很小时函数值趋于0,自变量很大时函数值趋于1;其导函数值在自变量很大或很小时,趋于0。

( 2 ) tanh函数的数学表示和特点
tanh函数是另外一种激活函数,与Sigmoid 函数不同的是它是把(-\infty ,+\infty)的输人映射到(-1,1)区间。在数学中,tanh称为双曲正切函数,是双曲函数中的一个,可由基本双曲函数双曲正弦和双曲余弦推导而来。tanh 的数学形式如下。

f(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

tanh函数的主要特点如下:
1.与Sigmoid 函数类似,tanh能够把输入的连续实值压缩到(-1,1)区间上输出。如果输人非常大的负数,输出收敛于-1;输人非常大的正数,输出收敛为1,有助于输出值的收敛。
2.相比Sigmoid 函数,tanh 函数关于原点中心对称,收敛较好。
3.tanh函数在x很大或很小时,导数趋于0,因此应用tanh函数也存在梯度消失问题。                4.tanh函数也含有幂运算,计算机求解时相对比较耗时。

        从图中可以看到,tanh函数及其导函数图形的特点:函数关于原点中心对称,函数值在[-1,1]区间,自变量很小时函数值趋于-1,自变量很大时函数值趋于1,其导函数值在自变量很大或很小时,趋于0。

(3 )ReLU函数的数学表示和特点。
ReLU函数又称为修正线性单元( Rectified Linear Unit ),是一种分段线性函数,它弥补了Sigmoid 函数以及 tanh函数的梯度消失问题。ReLU函数的数学形式如下。

f(x)=max(0,x)

ReLU函数虽然简单,但解决了Sigmoid 函数与tanh函数没有解决的问题,它的特点主要有以下几个:
①在x >0时,导数为1,解决了梯度消失问题。                                                                              ②计算速度很快,只需要判断输入是否大于0。                                                                              ③收敛速度快于 Sigmoid 函数和 tanh函数。                                                                                ④ReLU是非原点对称的,会影响收敛速度。
⑤当输入小于0时,输出为0,导致某些神经元永远不会被激活,相应的权值也不会被更新。

        从图中可以看到,ReLU函数及其导函数图形的特点:当x≤0时,ReLU函数和其导数都为0;当x>0时,ReLU函数是x本身,ReLU函数的导数为1。

( 4 )Leaky ReLU ( PReLU)函数的数学表示和特点。
        为了解决ReLU算法在x轴负向为0可能导致部分神经元无法激活的问题,将ReLU的前半段设为ax而非0,通常α=0.01。改进的函数称为Leaky ReLU函数。另外一种思路是基于参数的方法,通过算法来确定αx中的参数α,这种方法又称为Parametric ReLU ( PReLU)方法。Leaky ReLU函数的数学形式如下。

f(x)=max(0.01x,x)

        Leaky ReLU函数的特点与ReLU函数类似,理论上具有ReLU函数的所有优点,同时也解决了ReLU 函数可能导致部分神经元无法激活的问题。

        从图中可以看到,Leaky ReLU函数及其导函数图形的特点:当x≤0时,Leaky ReLU函数为0.01x,其导数都为0.01;当x >0时,Leaky ReLU函数是x本身,Leaky ReLU函数的导数为1。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐