3层神经网络:从原理到代码实现的完整指南
深度学习的核心组件——神经网络,今天我们就来手把手实现一个3层神经网络。无论你是刚入门的小白,还是想巩固基础的开发者,这篇指南都会让你有所收获!
神经网络结构解析
首先来看我们的网络架构:
输入层(2个神经元)→ 隐藏层1(3个神经元)→ 隐藏层2(2个神经元)→ 输出层(2个神经元)
这就是典型的全连接前馈神经网络。每一层的神经元都与下一层的所有神经元相连。
符号系统详解
神经网络有一套标准的符号表示法:
- :表示从第1层第2个神经元到第2层第1个神经元的权重
- 右上角数字表示层数,右下角两个数字表示“目标层神经元索引, 来源层神经元索引”
信号传递的数学原理
第一层计算:从输入到隐藏层
对于第1层的第一个神经元,其计算过程为:
但这样逐个计算太繁琐了!聪明的做法是用矩阵运算打包处理:
其中:
Python实现:一步步构建神经网络
第一步:初始化网络参数
import numpy as npdefsigmoid(x):"""Sigmoid激活函数"""return1 / (1 + np.exp(-x))definit_network():"""初始化神经网络权重和偏置""" network = {} network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.2, 0.3]) network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) network['b2'] = np.array([0.1, 0.2]) network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]]) network['b3'] = np.array([0.1, 0.2])return network
第二步:前向传播实现
defidentity_function(x):"""恒等函数(输出层激活函数)"""return xdefforward(network, x):"""前向传播""" W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3']# 第1层计算 a1 = np.dot(x, W1) + b1 # 加权和 z1 = sigmoid(a1) # 激活函数# 第2层计算 a2 = np.dot(z1, W2) + b2 z2 = sigmoid(a2)# 输出层计算 a3 = np.dot(z2, W3) + b3 y = identity_function(a3) # 恒等激活return y
第三步:运行神经网络
# 初始化网络network = init_network()# 准备输入数据x = np.array([1.0, 0.5])# 前向传播得到输出y = forward(network, x)print(f"神经网络输出: {y}") # [0.31682708 0.69627909]
关键知识点总结
1. 矩阵运算的高效性
2. 激活函数的选择
3. 网络参数的组织
为什么这样设计?
模块化设计
可扩展性
实际应用场景
这样的3层神经网络可用于:
扩展思考
- 只需修改z1 = sigmoid(a1)为其他函数
- 如ReLU:
z1 = np.maximum(0, a1)
结语
通过这个简单的3层神经网络实现,我们看到了深度学习的基本构建模块。虽然这个网络还无法解决复杂问题,但它包含了所有核心概念:
✅ 前向传播 ✅ 激活函数 ✅ 矩阵运算 ✅ 参数组织
掌握了这些基础,你就为学习更复杂的网络架构(如CNN、RNN)打下了坚实的基础!
实践建议:尝试修改网络结构(如增加神经元数量),观察输出变化;或者用真实数据集替换我们的示例数据,看看网络的表现如何。