神经元模型
神经元(M-P)
1943 年,美国芝加哥大学的神经科学家沃伦·麦卡洛克和他的助手沃尔特·皮茨发表了论文《神经活动中思想内在性的逻辑演算》(A Logical Calculus of Ideas Immanent in Nervous Activity),首次提出了一种形式神经元模型,并命名为McCulloch-Pitts模型,即后 来广为人知的M-P模型。
在M-P模型中,神经元接受其他n个神经元的输入信号(0或1),这些输入信号经过权重加权并求和,将求和结果与阈值(threshold) θ 比较,然后经过激活函数处理,得到神经元的输出。 y = f ( ∑ i = 1 n ω i j x i − θ ) y=f\left(\sum_{i=1}^{n} \omega_{i j} x_{i}-\theta\right) y=f(i=1∑nωijxi−θ) M-P 模型可以表示多种逻辑运算,如取反运算、逻辑或、逻辑与。
人工神经网络的神经元用传递函数对输入的线性加权进行非线性处理以产生输出。
网络结构
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。
其中圆形节点表示一个神经元,方形节点表示一组神经元。
感知器
单层感知器
1958 年,罗森布拉特( Roseblatt )提出了感知器,与 M-P 模型需要人为确定参数不同,感知器能够通过训练自动确定参数。训练方式为有监督学习,即需要设定训练样本和期望输出,然后调整实际输出和期望输出之差的方式(误差修正学习)。 w i ← w i + α ( r − y ) x θ ← θ − α ( r − y ) \begin{aligned} w_{i} & \leftarrow w_{i}+\alpha(r-y) x \\\theta & \leftarrow \theta-\alpha(r-y) \end{aligned} wiθ←wi+α(r−y)x←θ−α(r−y) 其中, α \alpha α 是学习率, r r r 和 y y y 分别是期望输出和实际输出。
感知器是一种二分类的监督学习算法,通过自适应调整权重解决线性分类问题。
感知器的神经元之间通过权重传递信息,权重的变化根据误差来进行调节。
感知器不能解决以异或为代表的线性不可分问题。
多层感知器
多层感知器指的是由多层结构的感知器递阶组成的输入值向前传播的网络,也被称为前馈网络或正向传播网络。以三层结构的多层感知器为例,它由输入层、中间层及输出层组成。在感知器的输入层和输出层之间添加隐藏层,就可以得到多层感知器。
- 与M-P模型相同,中间层的感知器通过权重与输入层的各单元相连接,通过阈值函数计算中间层各单元的输出值。
- 中间层与输出层之间同样是通过权重相连接
BP算法
BP算法的基本过程
BP算法就是通过比较实际输出和期望输出得到误差信号,把误差信号从输出层逐层向前传播得到各层的误差信号,再通过调整各层的连接权重以减小误差。权重的调整主要使用梯度下降法: Δ w = − α ∂ E ∂ w \Delta w = -\alpha \frac{\partial E}{\partial w} Δw=−α∂w∂E
BP算法要根据误差函数的梯度来调整权重系数,需要应用求导的链式法则。单个隐藏层就能使多层感知器以任意精度逼近任意复杂度的连续函数。
前馈神经网络的Pytorch实现
net = nn.Sequential(nn.Flatten(),
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10))
def init_weights(m):
if type(m) == nn.Linear:
nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights);
这里第一层是隐藏层,它包含256个隐藏单元,并使用了ReLU激活函数。第二层是输出层。
参考资料
Datawhale 开源文档:https://github.com/liu-yang-maker/Easy-DL-Theory/tree/main/docs
感谢Datawhale对开源学习的贡献!