Day 6:深度学习入门——神经网络基本原理

187 阅读1分钟

摘要

本文将从生物学神经元出发,完整拆解神经网络的核心机制:

  1. 神经元数学模型:前向传播的数学表达
  2. 网络架构设计:输入层/隐藏层/输出层的参数计算
  3. 激活函数对比:Sigmoid/ReLU/Softmax的特性与选择
  4. 实战案例:用Keras搭建手写数字识别网络
    配套工具:神经网络参数计算器(Excel模板下载)

目录

  1. 从生物神经元到人工神经元
  2. 神经网络架构详解
  3. 激活函数对比实验
  4. 实战:MNIST分类网络搭建
  5. 参数初始化与批标准化
  6. 可视化工具推荐

1. 从生物神经元到人工神经元

生物神经元 vs 人工神经元

对比表格

组成部分生物神经元人工神经元
输入树突接收电信号输入特征x1...xnx_1...x_n
处理机制细胞体整合信号加权求和z=wixi+bz=\sum w_ix_i+b
输出轴突传递动作电位激活函数输出a=f(z)a=f(z)

前向传播流程图

graph LR
A[输入x1] --> C[∑权重计算]
B[输入x2] --> C
C --> D[+偏置b]
D --> E[激活函数f(z)]
E --> F[输出a]

2. 神经网络架构详解

网络参数计算公式

对于具有NN个隐藏层的网络:

输入层→隐藏层1:z1=W1x+b1隐藏层输出:a1=f(z1)隐藏层→输出层:zN+1=WN+1aN+bN+1最终输出:y^=g(zN+1)\begin{aligned} \text{输入层→隐藏层1} &: \mathbf{z}^1 = \mathbf{W}^1\mathbf{x} + \mathbf{b}^1 \\ \text{隐藏层输出} &: \mathbf{a}^1 = f(\mathbf{z}^1) \\ \text{隐藏层→输出层} &: \mathbf{z}^{N+1} = \mathbf{W}^{N+1}\mathbf{a}^N + \mathbf{b}^{N+1} \\ \text{最终输出} &: \mathbf{\hat{y}} = g(\mathbf{z}^{N+1}) \end{aligned}

参数数量计算表(以输入层4节点,隐藏层3节点,输出层2节点为例):

层间连接权重矩阵维度参数量
输入层→隐藏层3×412
隐藏层→输出层2×36
总计-18

3. 激活函数对比实验

主流激活函数对比

函数类型公式优点缺点适用场景
Sigmoid11+ez\frac{1}{1+e^{-z}}输出在(0,1)梯度消失二分类输出层
ReLUmax(0,z)max(0,z)缓解梯度消失神经元死亡隐藏层默认选择
Softmaxeziezj\frac{e^{z_i}}{\sum e^{z_j}}多分类概率输出仅用于输出层多分类问题

梯度对比可视化

import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 100)
plt.plot(x, 1/(1+np.exp(-x)), label='Sigmoid')
plt.plot(x, np.maximum(0, x), label='ReLU')
plt.title('激活函数对比')
plt.legend()
plt.show()

4. 实战:MNIST分类网络搭建

Keras实现步骤

from tensorflow.keras import layers, models

# 1. 网络架构定义
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28)),  # 输入层
    layers.Dense(128, activation='relu'),  # 隐藏层
    layers.Dense(10, activation='softmax') # 输出层
])

# 2. 模型编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 3. 训练与评估
history = model.fit(train_images, train_labels, epochs=5, 
                    validation_data=(test_images, test_labels))

训练过程监控表

Epoch训练集准确率验证集准确率训练时间
10.8760.89245s
50.9840.97638s

5. 参数初始化与批标准化

初始化方法对比

方法原理适用场景
全零初始化所有参数初始为0❌ 绝对禁止使用
随机正态分布WN(0,0.01)W \sim N(0, 0.01)小型网络
He初始化WN(0,2/nin)W \sim N(0, \sqrt{2/n_{in}})ReLU激活网络

批标准化(BatchNorm)实现

model.add(layers.Dense(64))
model.add(layers.BatchNormalization())
model.add(layers.Activation('relu'))

6. 可视化工具推荐

  1. Netron:模型架构可视化工具
  2. TensorBoard:训练过程监控
  3. Weights & Biases:实验记录与对比
graph TB
A[输入图像] --> B[卷积层]
B --> C[批标准化]
C --> D[ReLU激活]
D --> E[最大池化]
E --> F[全连接层]

下一篇预告

Day 7:卷积神经网络(CNN)实战——图像识别核心算法
"为什么CNN能看懂图片?可视化卷积核让你秒懂特征提取!"


关键公式速查表

单个神经元输出:a=f(i=1nwixi+b)批量矩阵运算:A=f(XWT+b)\boxed{ \begin{aligned} \text{单个神经元输出} &: a = f(\sum_{i=1}^n w_ix_i + b) \\ \text{批量矩阵运算} &: \mathbf{A} = f(\mathbf{X}\mathbf{W}^T + \mathbf{b}) \end{aligned} }

需要增加反向传播的详细推导吗?或者提供更多初始化方法的对比实验代码?