输入“/”快速插入内容

101N0302 MLP Python 核心代码(numpy版)解读

2024年8月2日修改
原始代码仓库地址:https://github.com/EurekaLabsAI/mlp
代码目录结构树:
代码块
mlp
|-- README.md
|-- common.py
|-- data
| |-- preprocess.py
| |-- test.txt
| |-- train.txt
| `-- val.txt
|-- mlp_numpy.py
`-- mlp_pytorch.py
今天将和大家一起学习 LLM101n 课程中 MLP 部分的 Python 核心代码(numpy 版),即上面👆结构树中的 mlp_numpy.py。大家可以使用git clone命令克隆好仓库,结合源代码和本解读一起食用更佳哦~
1.
前置知识
1.1
MLP 模型简介
多层感知机(MLP,Multi-Layer Perceptron)属于前馈神经网络(Feedforward Neural Network)的一种。在模型训练过程中,需要通过反向传播算法计算梯度,将误差从输出层反向传播回输入层,用于更新网络参数。它包含至少三层节点:一个输入层,一个或多个隐藏层,以及一个输出层。每一层的节点都全连接到下一层的每个节点。MLP 模型通常用于解决分类和回归问题。
1.
输入节点(Input Nodes):输入节点从外部世界提供信息,总称为「输入层」。在输入节点中,不进行任何的计算,仅向隐藏节点传递信息。
2.
隐藏节点(Hidden Nodes):隐藏节点和外部世界没有直接联系(由此得名)。这些节点进行计算,并将信息从输入节点传递到输出节点。隐藏节点总称为「隐藏层」。尽管一个前馈神经网络只有一个输入层和一个输出层,但网络里可以没有隐藏层(如果没有隐藏层,激活函数选择 sigmoid,那么就变成逻辑回归了),也可以有多个隐藏层。
3.
输出节点(Output Nodes):输出节点总称为「输出层」,负责计算,并从网络向外部世界传递信息。
1.2
何谓“前馈”
“前馈”指的是信息在网络中的流动方向是单向的。具体来说,在模型推理过程中,每层的神经元将输入信号进行加权求和,通过激活函数生成输出信号,传递到下一层。在整个推理过程中,信息只沿着从输入到输出的方向传递,不存在反向的信息传播。
💡
这种单向的信息流动方式与其他类型的神经网络,如循环神经网络(RNN)形成对比。在 RNN 中,信息可以在网络中循环传递,形成反馈回路。
例如,想象一个简单的前馈神经网络用于图像分类,图像数据作为输入进入网络,经过各层神经元的计算和处理,最终得到关于图像所属类别的输出,在这个过程中,信息不会从输出层或隐藏层反向流回输入层。
图示三层 MLP 的隐藏层包含 10 个神经元,激活函数为 sigmoid;输出层有 3 个神经元,激活函数为 softmax。本图采用以下 MATLAB 代码生成:net = patternnet; view(net)