深度学习入门:从零解析BP神经网络、卷积神经网络与循环神经网络

1次阅读
没有评论

共计 2120 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景介绍

神经网络的发展经历了多次起伏,从早期的感知机模型到如今的深度学习架构,每一次突破都伴随着计算能力的提升和算法的改进。BP 神经网络(Backpropagation Neural Network)、卷积神经网络(CNN, Convolutional Neural Network)和循环神经网络(RNN, Recurrent Neural Network)是深度学习中三种最基础且广泛应用的网络结构。

深度学习入门:从零解析 BP 神经网络、卷积神经网络与循环神经网络

  • BP 神经网络:作为最基础的全连接网络,适用于简单的分类和回归任务。
  • CNN:专为图像处理设计,通过局部连接和权值共享大幅减少参数数量。
  • RNN:擅长处理时间序列数据,如语音识别和自然语言处理(NLP)。

核心原理

1. BP 神经网络

BP 神经网络的核心在于前向传播和反向传播(Backpropagation)。前向传播计算输出,反向传播通过梯度下降(Gradient Descent)更新权重。

数学推导:

  • 前向传播:
    $$
    z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}
    $$
    $$
    a^{(l)} = \sigma(z^{(l)})
    $$
    其中,$\sigma$ 是激活函数(如 Sigmoid 或 ReLU)。

  • 反向传播:
    $$
    \delta^{(l)} = \frac{\partial J}{\partial z^{(l)}} = (W^{(l+1)})^T \delta^{(l+1)} \odot \sigma'(z^{(l)})
    $$
    $$
    \frac{\partial J}{\partial W^{(l)}} = \delta^{(l)} (a^{(l-1)})^T
    $$
    $$
    \frac{\partial J}{\partial b^{(l)}} = \delta^{(l)}
    $$

2. CNN

CNN 通过卷积核(Kernel)提取局部特征,池化层(Pooling)降低维度,权值共享减少参数。

  • 局部连接:每个神经元只连接输入区域的局部区域。
  • 权值共享:同一卷积核在不同位置共享参数。
  • 池化层:最大池化(Max Pooling)或平均池化(Average Pooling)减少计算量。

3. RNN

RNN 通过隐藏状态(Hidden State)捕捉时间序列的依赖关系,但存在梯度消失(Vanishing Gradient)问题。LSTM(Long Short-Term Memory)通过门控机制(输入门、遗忘门、输出门)解决这一问题。

代码实战

1. BP 神经网络实现

import numpy as np

class BPNetwork:
    def __init__(self, layers):
        self.weights = [np.random.randn(y, x) for x, y in zip(layers[:-1], layers[1:])]
        self.biases = [np.random.randn(y, 1) for y in layers[1:]]

    def forward(self, x):
        for w, b in zip(self.weights, self.biases):
            x = sigmoid(np.dot(w, x) + b)
        return x

    def train(self, x, y, learning_rate):
        # 反向传播实现
        # 省略详细代码
        pass

2. CNN 处理 MNIST

import torch
import torch.nn as nn

class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
        self.pool = nn.MaxPool2d(2)
        self.fc = nn.Linear(32 * 13 * 13, 10)

    def forward(self, x):
        x = self.pool(nn.functional.relu(self.conv1(x)))
        x = x.view(-1, 32 * 13 * 13)
        x = self.fc(x)
        return x

3. RNN 文本生成

import tensorflow as tf

model = tf.keras.Sequential([tf.keras.layers.Embedding(vocab_size, embedding_dim),
    tf.keras.layers.LSTM(units=128, return_sequences=True),
    tf.keras.layers.Dense(vocab_size, activation='softmax')
])

对比分析

网络类型 计算复杂度 适用场景
BP 高 简单分类
CNN 中等 图像处理
RNN 高 时间序列

避坑指南

  • 梯度消失 / 爆炸:使用 Batch Normalization 或梯度裁剪(Gradient Clipping)。
  • 过拟合:采用 Dropout(丢弃法)或 L2 正则化。
  • 超参数调优:学习率(Learning Rate)建议从 0.001 开始调整。

延伸思考

  • Transformer:注意力机制(Attention)取代 RNN 的循环结构。
  • 挑战任务:尝试用 CNN 处理文本数据,或改进 LSTM 的门控机制。

结语

通过本文的学习,你应该对 BP、CNN 和 RNN 有了初步的认识。深度学习的世界广阔而深邃,希望你能在实践中不断探索和进步。

Colab 实践链接 : 点击这里

正文完
 0
评论(没有评论)