人工神经元:感知器

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

McCulloch和Pitts提出了一个非常简单的生物神经元模型,该模型后来被称为神经元。它具有一个或多个二进制输入和一个二进制输出。

输出的激活需要根据输入的激活状态判断,如有多个输入时,只有激活一定数量的输入时,输出才能激活。如下面几个神经元进行简单逻辑运算,需要输入激活两个才能有输出:

图1 简单逻辑运算

  • 图1左图,实现一个激活神经元A后,神经元C也能被激活
  • 图1中间,实现了神经元C的激活,需要同时激活神经元A和神经元B
  • 图1右边,实现了神经元A或神经元B激活其中一个,神经元C都能够激活

简单的了解一下神经元的概念后,我们可以看一个简单点的ANN架构-感知器。

感知器

感知器也被称为阈值逻辑单元(TLU),或者线性阈值单元(LTU),和上面的神经元有一点区别,输入和输出变为数字,在输入时,都会有一个相对的权值。TLU会先计算出输入的加权和( z = w 1 x 1 + . . . + w n x n z=w_{1}x_{1}+...+w_{n}x_{n} ),然后将z代入阶跃函数中,计算出输出,如图2所示:

图2 阈值逻辑单元

常用的阶跃函数为Heaviside函数,公式如下:

h e a v i s i d e ( z ) = { 0 , 如果 z < 0 1 , 如果 z 0 s g n ( z ) = { 1 , 如果 z < 0 0 , 如果 z = 0 1 , 如果 z > 0 heaviside(z) = \left\{\begin{matrix} 0,如果z<0 \\ 1,如果z\geqslant 0 \\ \end{matrix}\right. sgn(z) = \left\{\begin{matrix} -1,如果z<0 \\ 0,如果z=0 \\ 1,如果z>0 \\ \end{matrix}\right.

单个TLU可用于简单的二进制分类。计算输入的线性组合,超过阈值输出正类,相反则输出负类。

感知器由单层TLU组成,每个TLU连接所有的输入。当一层的所有神经元都连接到上一层中的每一个神经元时,该层称为全连接层。 需要注意一点是,在输入层中会包含一个偏置神经元,用于额外的偏置特征( x 0 = 1 x_{0}=1 )。

要计算去全连接层输出如下:

h w , b ( X ) = ϕ ( X W + b ) h_{w,b}(X)=\phi (XW+b)
  • X X 就是输入矩阵
  • 权重矩阵 W W 包含除偏置神经元之外的所有连接权重。
  • 偏置向量 b b 包含偏置神经元和人工神经元之间的所有连接权重。
  • \phi()是激活函数:当人工神经元是TLU时是阶跃函数。

为了不断修正输出的偏差,我们需要让神经元能够根据输入去学习。这边有一个Hebb的思想:“触发的细胞,连接在一起”,简单的理解就是如果多个神经元再输入时是一起激活的,则可以增加这些神经元的权重。通过学习不断修正一些错误的连接。学习规则如下(权重更新):

W i , j ( 下一步 ) = W i , j + η ( y j y j ^ ) x i W_{i,j}^{(下一步)}=W_{i,j}+\eta (y_{j}-\hat{y_{j}})x_{i}
  • W i , j W_{i,j} :第i个输入与第j个输出之间的连接权重
  • x i x_{i} :当前训练实例的第i个输入值
  • y j ^ \hat{y_{j}} :当前训练实例的第i个输出神经元输出
  • y j y_{j} : 当前训练实例的第i个输出神经元的目标输出
  • η \eta : 学习率

可以简单的使用Scikit-Learn提供的Perceptron类,该类实现了单个TLU网络。

感知器的学习算法类似随机梯度下降,Perceptron类也可以在SGDClassifier设置如下超参数: loss="perception",learning_rate="constant",eta0=1,penalty=None

猜你喜欢

转载自juejin.im/post/7111711748582801421