HelloDNN,多层感知机MLP学习笔记

本文从感知机出发,介绍多层感知机(MLP)的基本概念,包括隐藏层、多输出及激活函数的扩展。通过Tensorflow实现了一个简单的MLP模型,用于MNIST数据集的分类任务,讲解了模型构建、优化过程以及训练验证的步骤,最终展示训练结果和损失函数变化。

前言
学那个技术第一步都是helloworld,AI也是一样,我们来吧

1、从感知机说起

这是一个3输入1输出的感知机模型

这里写图片描述

输入输出之间学到一个线性关系
这里写图片描述
然后一个神经元激活函数
这里写图片描述
但这类模型无法学习比较复杂的非线性模型,且只能做2元分类

2、引入多层感知机神经网络

MLP在对感知机进行的改进主要有3点
2.1 隐藏层
主要为了加强表达能力,层数越多自然表达能力高,当然参数也线性增多,训练时、前向时计算量也越大,所以找到一个合适需求的
这里写图片描述
2.2 多输出
输出层的神经元不止1个,根据需求设计出多个输出,一般的分类回归都是有多个输出的吧
这里写图片描述
2.3 激活函数的扩展
神经网络中一般使用的sigmoid,softmax,relu,tanx等等,比如一般会用softmax解决分类问题,隐层为了防止梯度消失会选用relu,回归问题会用sigmoid,如:
这里写图片描述
好了,我们最后看个一般的MLP模型,每层之间的节点做全连接,参数量爆多,难怪要用显卡
这里写图片描述

3、代码中学习MLP

这里使用tensorflow来做这个HelloWorld(mnist)
因为是HelloWorld所以用一个最简单的1个全连接层10个节点的结构
3.1 构建模型


                
<think> 嗯,用户这次明确要求查找多层感知机MLP)的定义,而且引用了三篇站内资料。虽然用户说引用仅供参考,但内容其实很相关,需要从中提取核心定义要素。 用户可能刚接触神经网络概念,需要最基础的定义解释。从引用看,[^1]提到MLP就是人工神经网络(ANN),包含输入输出层和至少一个隐层;[^2]补充了训练方式(反向传播);[^3]则展示了PyTorch实现结构——这些正好构成完整的定义框架。 注意到上次对话历史是系统级指令,用户本次首次提问MLP定义。回复要严格分层:先用规范格式定义核心概念,再按指令补充相关问题。特别注意两点: 1. 数学表达需用$...$,比如激活函数$\sigma(w^Tx+b)$ 2. 代码块保持引用[^3]的PyTorch示例风格 用户给出的三个引用中,定义部分集中在[^1][^2],代码实现[^3]可作为实例佐证。考虑将定义拆解为三部分说明:结构特征(分层)、功能特性(非线性映射)、训练机制(反向传播),最后用代码示例锚定概念。 准备生成的问题需要覆盖MLP的延伸知识:结构设计(隐层/神经元数量)、激活函数选择、过拟合处理等,这些都是定义的自然引申。特别要避开引用未提及的内容如卷积操作,保持问题边界清晰。 </think> 根据引用内容,多层感知机MLP)的定义可归纳如下: ### 多层感知机MLP)定义 1. **基本结构** 多层感知机(Multilayer Perceptron, MLP)是一种**前馈人工神经网络**(Artificial Neural Network, ANN)。其核心结构包含: - **输入层**:接收原始数据 - **至少一个隐藏层**:进行非线性特征变换 - **输出层**:生成最终预测结果 最简单的MLP是三层结构(输入层+单隐藏层+输出层)[^1]。 2. **核心特性** MLP通过以下机制实现复杂映射: - **全连接**:相邻层的神经元完全互连 - **非线性激活函数**(如ReLU):使网络能够学习非线性关系 - **权重与偏置**:$\boldsymbol{W}$(权重矩阵)和$\boldsymbol{b}$(偏置向量)构成可学习参数 3. **数学表达** 对于含单隐藏层的MLP,输出计算为: $$ \boldsymbol{y} = \sigma_2(\boldsymbol{W}_2 \cdot \sigma_1(\boldsymbol{W}_1 \boldsymbol{x} + \boldsymbol{b}_1) + \boldsymbol{b}_2) $$ 其中$\sigma_1, \sigma_2$为激活函数,$\boldsymbol{x}$是输入向量。 4. **训练机制** 使用**反向传播算法**(Backpropagation): - 前向传播计算预测值 - 通过损失函数(如MSE)计算误差 - 误差反向传播更新权重与偏置,优化输入-输出映射关系[^2] 5. **代码实现示例**(基于引用[^3]) ```python import torch.nn as nn class MLP(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super().__init__() self.linear1 = nn.Linear(input_dim, hidden_dim) # 隐藏层 self.linear2 = nn.Linear(hidden_dim, output_dim) # 输出层 self.relu = nn.ReLU() # 非线性激活函数 def forward(self, x): x = self.relu(self.linear1(x)) # 隐藏层计算 x = self.linear2(x) # 输出层计算 return x ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值