简单神经网络(ANN)实现:从零开始构建第一个模型

本文将手把手带你用 Python + Numpy 实现一个最基础的人工神经网络(Artificial Neural Network, ANN)。不依赖任何深度学习框架,适合入门理解神经网络的本质。


一、项目目标

构建一个三层神经网络(输入层、隐藏层、输出层),用于解决一个简单的二分类任务,例如根据两个输入特征判断输出是 0 还是 1。


二、基本结构说明

我们将构建如下结构的神经网络:

复制代码

复制编辑

输入层(2个神经元) → 隐藏层(4个神经元) → 输出层(1个神经元)

  • 激活函数:使用 Sigmoid

  • 损失函数:均方误差

  • 学习方式:批量梯度下降 + 手动反向传播


三、准备数据

我们使用一个简单的数据集(可类比于 AND/OR 操作):

python 复制代码
import numpy as np

# 输入数据:4组样本,每组2个特征
X = np.array([
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
])

# 标签:这里我们尝试模拟逻辑或(OR)操作
y = np.array([[0], [1], [1], [1]])

四、初始化网络参数

python 复制代码
np.random.seed(0)

# 网络结构:2 → 4 → 1
input_size = 2
hidden_size = 4
output_size = 1

# 权重初始化(正态分布)
W1 = np.random.randn(input_size, hidden_size)
b1 = np.zeros((1, hidden_size))

W2 = np.random.randn(hidden_size, output_size)
b2 = np.zeros((1, output_size))

五、激活函数

python 复制代码
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    # 输入为 sigmoid 的输出值
    return x * (1 - x)

六、训练循环

我们进行 10000 次迭代,手动实现前向传播、损失计算和反向传播。

python 复制代码
learning_rate = 0.1
for epoch in range(10000):
    # --- 正向传播 ---
    z1 = np.dot(X, W1) + b1
    a1 = sigmoid(z1)

    z2 = np.dot(a1, W2) + b2
    a2 = sigmoid(z2)  # 预测值

    # --- 损失计算(均方误差)---
    loss = np.mean((y - a2) ** 2)

    # --- 反向传播 ---
    error_output = y - a2
    d_output = error_output * sigmoid_derivative(a2)

    error_hidden = d_output.dot(W2.T)
    d_hidden = error_hidden * sigmoid_derivative(a1)

    # --- 参数更新 ---
    W2 += a1.T.dot(d_output) * learning_rate
    b2 += np.sum(d_output, axis=0, keepdims=True) * learning_rate

    W1 += X.T.dot(d_hidden) * learning_rate
    b1 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate

    if epoch % 1000 == 0:
        print(f"Epoch {epoch}, Loss: {loss:.4f}")

七、模型测试

python 复制代码
print("预测结果:")
print(a2.round())

输出如下,接近 OR 操作的结果 [0, 1, 1, 1]

Lua 复制代码
预测结果:
[[0.]
 [1.]
 [1.]
 [1.]]

八、总结与拓展

通过这篇文章,我们实现了一个从零开始的神经网络:

  • 完整构建了网络结构(无需框架)

  • 实现了正向传播与反向传播

  • 成功对二分类任务进行了拟合

拓展建议:

  • 改用 ReLU 激活函数;

  • 增加网络层数,提升模型表达能力;

  • 用 Softmax 处理多分类问题;

  • 尝试用真实数据集,如鸢尾花(Iris)或 MNIST。


这类"纯手写"的 ANN 实战项目非常适合用来理解深度学习的本质机制。如果你打算继续深入,可以尝试逐步迁移到 PyTorch 或 TensorFlow 框架实现更复杂的模型。

相关推荐
白-胖-子1 小时前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
想要成为计算机高手2 小时前
11. isaacsim4.2教程-Transform 树与Odometry
人工智能·机器人·自动驾驶·ros·rviz·isaac sim·仿真环境
静心问道3 小时前
InstructBLIP:通过指令微调迈向通用视觉-语言模型
人工智能·多模态·ai技术应用
宇称不守恒4.03 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
小楓12014 小时前
醫護行業在未來會被AI淘汰嗎?
人工智能·醫療·護理·職業
数据与人工智能律师4 小时前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
chenchihwen4 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习
说私域4 小时前
公域流量向私域流量转化策略研究——基于开源AI智能客服、AI智能名片与S2B2C商城小程序的融合应用
人工智能·小程序
Java樱木4 小时前
AI 编程工具 Trae 重要的升级。。。
人工智能
码字的字节4 小时前
深度学习损失函数的设计哲学:从交叉熵到Huber损失的深入探索
深度学习·交叉熵·huber