深度学习基础之一个神经元

神经元

  深度学习中最基础的概念:神经元,现在所流行的神经网络,几乎都是由神经元通过不同的方式组合而成的,一个完整的神经元主要由两部分组成,分别是线性函数和激励函数。
  线性函数:
     y = wX + b
    线性函数的公式都是这样的表达方式,这里的x表示输入,y表示输出,w表示权重,b表示偏差。
    输入:神经元处理之前的数据,x不一定是一个数,也可以是一个矩阵或者其他数据
     输出:经过神经元处理之后的数据,输出的数据也可以是各种形式的数据,由输入数据和神经元决定
    权重:输入进入神经元时乘的数据,可以是数也可以是矩阵,一般初始权重都是随机设置的,经过训练之后,计算机会自己调整权重,为相对重要的特征分配较大的权重,而反之未不重要的特征分配较小的权重。
    偏差:输入和权重相乘的结果增加线性分量,可以增加线性范围
  激活函数(激励函数):
     激活函数的作用是为神经元增加非线性因素,因为线性函数能表达的内容具有很大的局限性,现实中很多的问题都是非线性的,所以增加非线性因素可以增加模型的拟合效果。

常用的激活函数
  常用的激活函数有sigmoid函数,relu函数,tanh函数,softmax函数等等。

sigmoid函数:
在这里插入图片描述
  也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。
  sigmoid缺点:激活函数计算量大,反向传播求误差梯度时,求导涉及除法,反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。

  为何会出现梯度消失:反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:
在这里插入图片描述

  sigmoid 原函数及导数图形如下:由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象
在这里插入图片描述

  绘制sigmoid函数:

"""
绘制一条sigmoid曲线
"""
import numpy as np
import matplotlib.pyplot as mp
import math

def sigmoid(x):
    y = 1 / (1 + np.exp(-x))
    return y

# [-π,π] 拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
sigmoid_x = sigmoid(x)

# 绘图
mp.plot(x, sigmoid_x, linestyle='--', linewidth=2, 
		color='dodgerblue', alpha=0.9,
		label=r'$y=sigmoid(x)$')

# 修改坐标刻度
x_val_list=[-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
x_text_list=['-5', '2.5', '0', '2.5', '5']
mp.xticks(x_val_list, x_text_list)
mp.yticks([0, 1], 
	      ['0', '1'])

# 设置坐标轴
ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))


# 显示图例
mp.legend(loc='best')
mp.show()

在这里插入图片描述

Relu函数:
  绘制relu函数:
在这里插入图片描述
  ReLU 的优点:使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

  ReLU 的缺点:训练的时候很”脆弱”,很容易就”die”了。例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0,如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

"""
绘制relu
"""
import numpy as np
import matplotlib.pyplot as mp
import math

def Relu(x):
    y = []
    for xx in x:
        if xx >= 0:
            y.append(xx)
        else:
            y.append(0)
    return y

# [-π,π] 拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
Relu_x = Relu(x)

# 绘图
mp.plot(x, Relu_x, linestyle='--', linewidth=2, 
		color='dodgerblue', alpha=0.9,
		label=r'$y=relu(x)$')

# 修改坐标刻度
x_val_list=[-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
x_text_list=['-π', r'$-\frac{\pi}{2}$', '0', 
			 r'$\frac{π}{2}$', 'π']
mp.xticks(x_val_list, x_text_list)
mp.yticks([-1, -0.5, 0.5, 1], 
	      ['-1', '-0.5', '0.5', '1'])

# 设置坐标轴
ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
# 显示图例
mp.legend(loc='best')
mp.show()

在这里插入图片描述
tanh函数
  绘制tanh函数:
在这里插入图片描述
  也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好

"""
绘制一条tanh曲线
"""
import numpy as np
import matplotlib.pyplot as mp

# [-π,π] 拆1000个点
x = np.linspace(-np.pi, np.pi, 1000)
tanh_x = np.tanh(x)

# 绘图
mp.plot(x, tanh_x, linestyle='--', linewidth=2, 
		color='dodgerblue', alpha=0.9,
		label=r'$y=tanh(x)$')

# 修改坐标刻度
x_val_list=[-np.pi, -np.pi/2, 0, np.pi/2, np.pi]
x_text_list=['-π', r'$-\frac{\pi}{2}$', '0', 
			 r'$\frac{π}{2}$', 'π']
mp.xticks(x_val_list, x_text_list)
mp.yticks([-1, -0.5, 0.5, 1], 
	      ['-1', '-0.5', '0.5', '1'])

# 设置坐标轴
ax = mp.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))


# 显示图例
mp.legend(loc='best')
mp.show()

在这里插入图片描述
softmax函数
在这里插入图片描述
  将输出层的值通过激活函数映射到0-1区间,将神经元输出构造成概率分布,用于多分类问题中,softmax激活函数映射值越大,则真实类别可能性越大。
  sigmoid一般用于二分类问题,而softmax用于多分类问题
本文参考:
链接:https://www.jianshu.com/p/22d9720dbf1a

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环神经网络(RNN)是一种用于处理连续性数据的神经网络模型。它与基础神经网络不同之处在于,在层与层之间建立了权连接的同时,也在层之间的神经元之间建立了权连接。RNN适用于处理具有顺序关系的数据,例如文本、语音和时间序列数据。 RNN的特点在于它可以通过循环连接来传递之前时间步的信息至当前时间步,从而更好地捕捉到序列数据的上下文信息。比如在处理文本时,RNN可以在读取第一个单词后,将该信息传递至下一个时间步进行预测输出,然后继续传递至下一个时间步,直到最后一个时间步完成输出。这样的循环连接可以帮助RNN捕捉到整个序列的相关信息,并对其进行处理和分析。 RNN的应用非常广泛,包括机器翻译、语音识别、行为预测和股票价格预测等领域。在机器翻译,RNN可以将源语言句子作为输入,通过逐个时间步地生成目标语言句子。在语音识别,RNN可以将声音信号转换为文字。在行为预测和股票价格预测,RNN可以根据过去的数据来预测未来的趋势。 总结来说,深度学习的循环神经网络是一种用于处理具有顺序关系的连续性数据的模型,它通过循环连接在时间步之间传递信息,从而更好地捕捉序列数据的上下文信息。它在机器翻译、语音识别、行为预测和股票价格预测等领域有着广泛的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值