深度学习笔记二:多层感知机(MLP)与神经网络结构

本文介绍了神经网络的基本结构,包括输入层、隐藏层和输出层,强调了前向传播的过程,并以手写体识别为例进行说明。讨论了激活函数的重要性,特别是sigmoid函数在神经网络中的作用,以及它与logistic回归的关系。文章还简述了神经网络的训练,使用随机梯度下降法最小化损失函数,为后续的反向传播打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了尽量能形成系统的体系,作为最基本的入门的知识,请参考一下之前的两篇博客:
神经网络(一):概念
神经网络(二):感知机
上面的两篇博客让你形成对于神经网络最感性的理解。有些看不懂的直接忽略就行,最基本的符号的记法应该要会。后面会用到一这两篇博客中的一些记号和用法的约定什么的之后就不再啰嗦了。

一.基本结构

看完上面给出的两个博客或者已经有基本概念的同学应该对于神经网络的基本结构有基本的认识了。但是上面那个还只是涉及到单层结构,并没有推广到多层结构,同时,也没有在实践中使用这种结构的经验。所以,这节的内容就是以手写体识别为例子来讲一下基本结构,和实践中的基本使用思想。这是推广到更加复杂任务上的基础。
假设你现在已经有了神经网络的一些感性认识了,那就就看下面这幅图。
这里写图片描述
输入层(最左边),隐藏层(中间两层),和输出层(最右边),在之前列出的博客就讲过了,这里回顾一下。感受一下大概的架构。
神经网络的流程分为前向过程和反向过程。反向过程一般用于训练,后面讲,这里只讲前向过程。
还记得每个神经元上面都有对于一个输入的权值,以及一个偏置,还有一个激活函数。(不知道的话看之前列出来的博客,后面不再强调了),所以一个前向过程的流程就是input输入,然后经过第一层神经元运算(乘上权值,加上偏执,激活函数运算一次),得到输出,然后第一层的输出作为第二层的输入,运算,得到第二层的输出…..直到到输出层运算,然后得到结果。神经网络就是依靠这样一套机制来进行计算和预测的。
假如你的权值和偏置已经是被训练好了。对于一个新的输入,进行这样的过程,就能够得到一个预测。那么你就能够通过这个预测来解决一些问题了。

### 绘制MLP感知器神经网络结构图 绘制一个多感知器(MLP神经网络的结构图可以帮助理解其内部架构和工作原理。以下是创建这种图表的方法: #### 使用绘图工具手动绘制 可以选择任何支持矢量图形编辑的软件来手工设计MLP结构图,比如Microsoft Visio、Adobe Illustrator或是免费开源的选择如Inkscape。 - **输入**:通常表示为一列圆形节点,代表各个特征变量。 - **隐藏**:每同样是一系列圆圈排列成的一行或多行;数取决于具体的设计需求。这些单元之间的连线表明它们相互间的权重连接[^3]。 - **输出**:最后一组节点构成输出,数目依据预测目标而定。 #### 利用编程语言自动化生成 对于更精确控制以及重复使用的场景来说,采用Python等脚本语言配合专门库可能是更好的方案之一。下面给出一段基于`matplotlib`和`networkx`包实现的例子代码: ```python import matplotlib.pyplot as plt import networkx as nx def draw_mlp(input_size, hidden_sizes, output_size): G = nx.DiGraph() layers = [input_size] + list(hidden_sizes) + [output_size] pos = {} node_labels = {} current_x = 0 for layer_index, num_nodes in enumerate(layers): y_spacing = 2 / (num_nodes + 1) for i in range(1, num_nodes + 1): node_name = f"L{layer_index}_N{i}" # Add nodes with labels and positions. G.add_node(node_name) pos[node_name] = (current_x, i * y_spacing - 1) node_labels[node_name] = str(i) if layer_index != len(layers)-1: next_layer_num_nodes = layers[layer_index+1] from_range = range(1,num_nodes+1) to_range = range(1,next_layer_num_nodes+1) edges_between_layers = [(f'L{layer_index}_N{j}', f'L{layer_index+1}_N{k}') for j in from_range for k in to_range] G.add_edges_from(edges_between_layers) current_x += 2 fig, ax = plt.subplots(figsize=(8,6)) nx.draw_networkx(G, pos=pos, arrows=True, arrowstyle='->', edge_color="gray", width=2, connectionstyle='arc3,rad=0.1') nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=10, font_family="sans-serif") ax.set_title('Multi-Layer Perceptron Structure Diagram') plt.show() ``` 此函数接受三个参数定义了一个简单的前馈型MLP拓扑——输入维度大小(`input_size`)、各隐含宽度组成的列表(`hidden_sizes`)及最终输出的数量(`output_size`). 调用该方法即可得到一张直观展示指定配置下的MLP布局图像.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值