持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情
McCulloch和Pitts提出了一个非常简单的生物神经元模型,该模型后来被称为神经元。它具有一个或多个二进制输入和一个二进制输出。
输出的激活需要根据输入的激活状态判断,如有多个输入时,只有激活一定数量的输入时,输出才能激活。如下面几个神经元进行简单逻辑运算,需要输入激活两个才能有输出:
图1 简单逻辑运算
- 图1左图,实现一个激活神经元A后,神经元C也能被激活
- 图1中间,实现了神经元C的激活,需要同时激活神经元A和神经元B
- 图1右边,实现了神经元A或神经元B激活其中一个,神经元C都能够激活
简单的了解一下神经元的概念后,我们可以看一个简单点的ANN架构-感知器。
感知器
感知器也被称为阈值逻辑单元(TLU),或者线性阈值单元(LTU),和上面的神经元有一点区别,输入和输出变为数字,在输入时,都会有一个相对的权值。TLU会先计算出输入的加权和( ),然后将z代入阶跃函数中,计算出输出,如图2所示:
图2 阈值逻辑单元
常用的阶跃函数为Heaviside函数,公式如下:
单个TLU可用于简单的二进制分类。计算输入的线性组合,超过阈值输出正类,相反则输出负类。
感知器由单层TLU组成,每个TLU连接所有的输入。当一层的所有神经元都连接到上一层中的每一个神经元时,该层称为全连接层。 需要注意一点是,在输入层中会包含一个偏置神经元,用于额外的偏置特征( )。
要计算去全连接层输出如下:
- 就是输入矩阵
- 权重矩阵 包含除偏置神经元之外的所有连接权重。
- 偏置向量 包含偏置神经元和人工神经元之间的所有连接权重。
- \phi()是激活函数:当人工神经元是TLU时是阶跃函数。
为了不断修正输出的偏差,我们需要让神经元能够根据输入去学习。这边有一个Hebb的思想:“触发的细胞,连接在一起”,简单的理解就是如果多个神经元再输入时是一起激活的,则可以增加这些神经元的权重。通过学习不断修正一些错误的连接。学习规则如下(权重更新):
- :第i个输入与第j个输出之间的连接权重
- :当前训练实例的第i个输入值
- :当前训练实例的第i个输出神经元输出
- : 当前训练实例的第i个输出神经元的目标输出
- : 学习率
可以简单的使用Scikit-Learn提供的Perceptron类,该类实现了单个TLU网络。
感知器的学习算法类似随机梯度下降,Perceptron类也可以在SGDClassifier设置如下超参数: loss="perception",learning_rate="constant",eta0=1,penalty=None