4.深度学习及神经网络
2.1 深度学习
深度学习是通过预先处理大量的标记数据,找到其内在规律和表示层次。典型的深度学习模型就是神经网络,神经网络中最基本的组成是神经元模型。
在生物神经网络中,每个神经元与与其他神经元相连,神经元之间的联系通过外部的激励信号做变化,每个神经元有可以接受多个激励信号从而呈现兴奋和抑制的状态,所以人脑在处理各种信息的结果是由各个神经元状态决定的。如下图所示,一个神经元接受到的外部电信号,可以呈现出兴奋和抑制两种状态。
2.1.1 人工神经元
人工神经元是根据生物神经元模拟出来的模型,在这个模 型中,神经元可以接受n个从其他神经元传递过来的输入信号,输入信号通过带权重ω连接到神经元,将神经元的总输入值与阈值θ 进行比较,最后通过激活函数处理输出
其中x_i为输入信号, ω_i为神经元连接权重, ∑为输入的总信号和, θ为阈值, y为激活函数。如果要使下一个神经元接受到信号,则接收到的各个信号一定要大于某一个阈值θ才能输出信号 ,该阈值有神经元本身决定。
2.1.2 激活函数
激活函数(Activation Function)是一种在人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。
在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。
下图中为一个神经单元,该单元先不考虑阈值,展示一个神经元可以使用不同的激活函数来实现不同的任务。
疑问:为什么这里的神经元阈值消失了?
答:神经网络中的阈值函数,一般也可称为激活函数。
可以先理解为把阈值和激活函数捆绑在一起称为一个函数。
神经网络中的激活函数就是为了增加非线性,激活函数选择了一个阈值,即当大于某个值就被激活,小于等于则输出0。其实这么做也符合人类直觉,对于脑细 胞而言,应该也是存在某个阈值,该细胞就会被激活,或者变得敏感。
下面以一个阶跃函数为例,这个函数可以理解为:当输入没有超过阈值点时,所有的输出都为0。当输入大于阈值点是,就输出为5。
下面展示一个简单的激活函数,该激活函数称为Sigmoid函数,它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。
可以从上图看到, Sigmoid激活函数可以将输入的所有实数压缩在[0,1]范围内。所以Sigmoid函数也可以理解为压缩激活函数。
下面假设一个神经元使用Sigmoid激活函数的示意图。
神经元计算过程为:
1.输入数据x_1 、x_2 、…、x_n进行求和操作,得到net值。
2.将net值传输Sigmoid激活函数,计算得到y值。
3.将y值作为神经元的输出。
2.1.3 实现人工神经元模型
我们已经学习了一个拥有sigmod激活函数的神经元的结构及组成,那么下面我们编写一个python程序,使用numpy库实现一个神经元模型。该模型结构如下所示,该神经元接受10个输入信号x,权重w,偏 置b。
程序流程图
python代码实现:
import numpy as np #导入numpy库
def sigmoid(x):
return 1 / (1 + np.exp(-x)) #实现sigmod函数公式
class Neuron:
def __init__(self, weights, bias):
self.weights = weights #各输入的权重值
self.bias = bias #偏置值
def forward(self, inputs):
# 对输入进行加权求和,并增加偏置
total = np.dot(self.weights, inputs) + self.bias
return sigmoid(total) #返回sigmod激活函数输出的结果
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) #输入数据
weights = np.array([0.9, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.1, 0]) #权重参数
bias = 2 #偏置值
n = Neuron(weights, bias) #传入权重和偏置值
print(n.forward(x)) #打印神经元模型输出结果
2.2 感知机
2.2.1 感知机模型
感知机(Perceptron)是一种简单的二元线性分类器,简单的来说就是可以将两个简单的样本进行分类。它和我们提到的神经元模型类似,也是由两层神经元组成,感知机也是通过输入层接受外界信号或其他神经元传递的信号,传递给输出层,输出层就是我们一开始介绍的M-P神经元(人工神经元)。
如下图所示,下图为一个接受两个输入信号的,输出一个信号的感知机。
感知机和人工神经元一样可以接受多个输入信号,输出一个信号。但是对于感知机来说,输出的信号只会是0或1。
感知机与含Sigmoid激活函数的神经元不同的是,感知机使用的激活函数是符号(sign)函数,如下所示:
如果对于接受两个输入信号的,输出一个信号的感知机来说,激活函数可以为:
其中ω_1, ω_2为权重值; x_1, x_1为输入信号;b为偏置值;f(x)为输出信号。
**注意:**增加偏置这个参数,可以提高神经网络的拟合能力,提升模型的精度,网络的自由度更大。