分享
101N0302 MLP Python 核心代码(numpy版)解读
输入“/”快速插入内容
🍉
101N0302 MLP Python 核心代码(numpy版)解读
用户9737
用户9737
用户9516
用户9516
用户5190
用户5190
2024年8月2日修改
原始代码仓库地址:
https://github.com/EurekaLabsAI/mlp
完整代码:
https://github.com/EurekaLabsAI/mlp/blob/master/mlp_numpy.py
中文版共建仓库地址:
https://github.com/SmartFlowAI/LLM101n-CN/tree/master/
mlp
代码目录结构树:
代码块
Plain Text
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)