深度学习入门–激活函数

作者 : 开心源码 本文共2453个字,预计阅读时间需要7分钟 发布时间: 2022-05-12 共142人阅读

激活函数的概念

感知机的权重偏置参数都是人为设定的,而神经网络的一个重要性质就是它可以自动的从数据中学习到合适的权重偏置参数。

将输入信号的总和转换为输出信号,这种函数一般称为激活函数。激活函数的作用在于决定如何来激活输入信号的总和。

x=b+w1x1+w2x2
y=h(x)

这里的h(x)就是激活函数,若x>0y=1;若x<=0y=0

激活函数是连接感知机和神经网络的桥梁。一般而言,“朴素感知机”是指单层网络,指的是激活函数使用阶跃函数的模型。“多层感知机”是指神经网络,即便用sigmoid函数等平滑的激活函数。

阶跃函数

阶跃函数是指一旦输入超过阀值,就切换输出的函数。

阶跃函数的简单实现(参数x仅支持实数):

def step_function(x):      if x>0:          return 1      else:          return 0

阶跃函数的numpy数组实现(参数x取numpy数组)

def step_function(x):      y=x>0  # 数组y是一个布尔数组      return y.astype(np.int)  # 将数组y的元素类型从布尔型转换为int型

阶跃函数的图形:

import numpy as npimport matplotlib.pylab as pltdef step_function(x):    return np.array(x>0, dtype=np.int)x=np.arange(-5.0, 5.0, 0.1)y=step_function(x)plt.plot(x,y)plt.ylim(-0.1, 1.1) # 指定y轴的范围plt.show()

图形如下:

sigmoid函数

sigmoid函数的实现:

def sigmoid(x):    return 1/(1+np.exp(-x))  # 这里np.exp(-x)对应exp(-x)

sigmoid函数的图形:

import numpy as npimport matplotlib.pylab as pltdef sigmoid(x):    return 1/(1+np.exp(-x))  # 这里np.exp(-x)对应exp(-x)x=np.arange(-5.0, 5.0, 0.1)y=sigmoid(x)plt.plot(x,y)plt.ylim(-0.1, 1.1) # 指定y轴的范围plt.show()

图形如下:

阶跃函数和sigmoid函数的比照:
  • 阶跃函数只能返回0或者1,sigmoid函数能返回0-1中的每一个实数(具备平滑性)
  • 两者的输出信号的值都在0-1之间。
  • 两者都为非线性函数。神经网络的激活函数必需使用非线性函数

ReLU函数

ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0.

当x>0时,h(x)=x;
当x<=0时,h(x)=0;

ReLU函数的实现:

def relu(x):    return np.maximum(0, x)  # maximum函数会从输入的数值中选择较大的那个值进行输出

ReLU函数的图形:

import numpy as npimport matplotlib.pylab as pltdef relu(x):    return np.maximum(0, x)  # maximum函数会从输入的数值中选择较大的那个值进行输出x=np.arange(-5.0, 5.0, 0.1)y=relu(x)plt.plot(x,y)plt.ylim(-0.1, 1.1) # 指定y轴的范围plt.show()

图形如下:


输出层的激活函数

神经网络一般是两层及以上,这里的层数指拥有权重的层数。

上面的阶跃函数sigmoid函数ReLU函数 都是中间层的激活函数,而输出层的激活函数一般有两种:

神经网络可以用在分类问题和回归问题上,一般而言,分类问题用softmax函数,回归问题用恒等函数

恒等函数

在输出层使用恒等函数时,输入信号会原封不动的被输出。

恒等函数的实现:

def identity_function(x):    return x  # 将输入按原样输出

恒等函数的图形:

import numpy as npimport matplotlib.pylab as pltdef identity_function(x):    return x  # 将输入按原样输出x=np.arange(0, 5.0, 0.1)y=identity_function(x)plt.plot(x,y)plt.ylim(0, 5) # 指定y轴的范围plt.show()

图形如下:

softmax函数

softmax函数的分子是输入信号a的指数函数,分母是所有输入信号的指数函数的和。

求解机器学习问题的步骤可以分为学习推理两个阶段。首先,在学习阶段进行模型的学习,而后,在推理阶段,用学到的模型对未知的数据进行推理(分类)。在输出层使用softmax函数主要是由于它和神经网络的学习有紧密关系。

softmax函数的实现:

def softmax(x):    c=np.max(x)  # 找出输入信号中的最大值    exp_x=np.exp(x-c)  # 减去最大值,结果不变,防止溢出    sum_exp_x=np.sum(exp_x)    y=exp_x/sum_exp_x        return y

softmax函数的示例:

import numpy as npdef softmax(x):    c=np.max(x)  # 找出输入信号中的最大值    exp_x=np.exp(x-c)  # 减去最大值,结果不变,防止溢出    sum_exp_x=np.sum(exp_x)    y=exp_x/sum_exp_x        return y    x=np.array([0.3, 2.9, 4.0])y=softmax(x)print(y)np.sum(y)

输出为:

[0.01821127 0.24519181 0.73659691]1.0

上面的例子可以解释为y[0]的概率为0.018、y[1]的概率为0.245、y[2]的概率为0.737。并且,softmax函数的输出值的总和为1,输出总和为1是softmax函数的一个重要性质。也就是说,通过使用softmax函数,我们可以用概率的角度解决问题。

每天学习一点点,每天进步一点点。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 深度学习入门–激活函数

发表回复