【深度学习基础】神经网络入门:从感知机到反向传播

摘要

神经网络是深度学习的核心!本文将带你从零开始理解神经网络的基本原理,包括感知机模型、激活函数选择、反向传播算法等核心概念,并通过Python实现一个简单的全连接神经网络。文末提供《神经网络公式推导手册》和实战项目资源包!

目录

目录

摘要

目录

一、神经网络基础概念

[1.1 感知机模型](#1.1 感知机模型)

[1.2 常用激活函数](#1.2 常用激活函数)

二、前向传播与反向传播

[2.1 前向传播过程](#2.1 前向传播过程)

[2.2 损失函数](#2.2 损失函数)

[2.3 反向传播算法](#2.3 反向传播算法)

三、Python实现全连接神经网络

四、神经网络实战应用

[4.1 异或问题求解](#4.1 异或问题求解)

[4.2 手写数字识别(MNIST)](#4.2 手写数字识别(MNIST))

五、神经网络优化技巧

[5.1 超参数调优](#5.1 超参数调优)

[5.2 防止过拟合](#5.2 防止过拟合)

六、结语与资源

附录:进阶学习路线


一、神经网络基础概念

1.1 感知机模型

感知机是最简单的神经网络单元,其数学表达式为:

其中:

  • :输入特征

  • :权重参数

  • :偏置项

  • :激活函数

1.2 常用激活函数

函数名称 数学表达式 特点
Sigmoid 输出范围(0,1)
ReLU 计算简单,缓解梯度消失
Tanh 输出范围(-1,1)

二、前向传播与反向传播

2.1 前向传播过程

对于L层神经网络,第l层的输出为:

2.2 损失函数

常用交叉熵损失函数:

2.3 反向传播算法

关键梯度计算公式:

  1. 输出层误差:

  2. 隐藏层误差:

  3. 参数梯度:

三、Python实现全连接神经网络

复制代码
import numpy as np

class NeuralNetwork:
    def __init__(self, layers, learning_rate=0.01):
        self.layers = layers  # 网络结构,如[2,4,1]
        self.lr = learning_rate
        self.weights = []
        self.biases = []
        
        # 初始化参数
        for i in range(len(layers)-1):
            self.weights.append(np.random.randn(layers[i+1], layers[i]) * 0.1)
            self.biases.append(np.zeros((layers[i+1], 1)))
    
    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))
    
    def sigmoid_derivative(self, x):
        return x * (1 - x)
    
    def forward(self, X):
        self.activations = [X.T]
        self.z_values = []
        
        for w, b in zip(self.weights, self.biases):
            z = np.dot(w, self.activations[-1]) + b
            self.z_values.append(z)
            self.activations.append(self.sigmoid(z))
        
        return self.activations[-1]
    
    def backward(self, X, y):
        m = X.shape[0]
        y = y.reshape(-1, 1).T
        
        # 计算输出层误差
        delta = (self.activations[-1] - y) * self.sigmoid_derivative(self.activations[-1])
        
        # 反向传播
        for l in range(len(self.layers)-2, 0, -1):
            self.weights[l] -= self.lr * np.dot(delta, self.activations[l].T) / m
            self.biases[l] -= self.lr * np.sum(delta, axis=1, keepdims=True) / m
            delta = np.dot(self.weights[l].T, delta) * self.sigmoid_derivative(self.activations[l])
        
        # 更新第一层参数
        self.weights[0] -= self.lr * np.dot(delta, self.activations[0].T) / m
        self.biases[0] -= self.lr * np.sum(delta, axis=1, keepdims=True) / m
    
    def train(self, X, y, epochs):
        for epoch in range(epochs):
            output = self.forward(X)
            self.backward(X, y)
            if epoch % 100 == 0:
                loss = -np.mean(y * np.log(output) + (1-y) * np.log(1-output))
                print(f"Epoch {epoch}, Loss: {loss:.4f}")

四、神经网络实战应用

4.1 异或问题求解

复制代码
# 准备数据
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([[0], [1], [1], [0]])

# 创建网络
nn = NeuralNetwork(layers=[2,4,1], learning_rate=0.1)

# 训练网络
nn.train(X, y, epochs=5000)

# 测试效果
print("Predictions:")
for x in X:
    print(f"{x} -> {nn.forward(x.reshape(1,-1))[0,0]:.3f}")
复制代码

4.2 手写数字识别(MNIST)

复制代码
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 加载数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 784) / 255.0
X_test = X_test.reshape(-1, 784) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# 创建更大的网络
mnist_nn = NeuralNetwork(layers=[784, 128, 64, 10], learning_rate=0.01)

# 训练(实际应用中建议使用深度学习框架)
# mnist_nn.train(X_train, y_train, epochs=10)
复制代码

五、神经网络优化技巧

5.1 超参数调优

参数 调优方法 典型值
学习率 学习率衰减 0.1-0.0001
批量大小 尝试不同批次 32-256
网络深度 逐步增加 2-10层

5.2 防止过拟合

  • Dropout技术

  • L2正则化

  • 早停法(Early Stopping)

六、结语与资源

通过本文您已经掌握了:

🔹 神经网络基本原理 🔹 反向传播算法推导 🔹 Python实现简单神经网络


附录:进阶学习路线

  1. 卷积神经网络(CNN) - 图像处理

  2. 循环神经网络(RNN) - 时序数据处理

  3. 注意力机制 - Transformer模型基础

相关推荐
多巴胺与内啡肽.3 分钟前
OpenCV进阶操作:图像直方图、直方图均衡化
人工智能·opencv·计算机视觉
白熊1884 分钟前
【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
人工智能·计算机视觉·3d
phoenix@Capricornus18 分钟前
神经网络发展的时间线——积跬步至千里
人工智能·深度学习·神经网络
长长同学1 小时前
基于C++实现的深度学习(cnn/svm)分类器Demo
c++·深度学习·cnn
VI8664956I262 小时前
海外社交软件技术深潜:实时互动系统与边缘计算的极限优化
人工智能·实时互动·边缘计算
每天都要写算法(努力版)2 小时前
【神经网络与深度学习】生成模型-单位高斯分布 Generating Models-unit Gaussian distribution
人工智能·深度学习·神经网络·生成模型
何似在人间5752 小时前
LangChain4j +DeepSeek大模型应用开发——7 项目实战 创建硅谷小鹿
java·人工智能·ai·大模型开发
Timmer丿2 小时前
Spring AI开发跃迁指南(第二章:急速上手3——Advisor核心原理、源码讲解及使用实例)
java·人工智能·spring
xrgs_shz3 小时前
基于MATLAB图像中的圆形目标识别和标记
图像处理·人工智能·计算机视觉·matlab
pen-ai3 小时前
【NLP】32. Transformers (HuggingFace Pipelines 实战)
人工智能·自然语言处理