【机器学习笔记 Ⅱ】1 神经网络

神经网络是一种受生物神经元启发设计的机器学习模型,能够通过多层非线性变换学习复杂的输入-输出关系。它是深度学习的基础,广泛应用于图像识别、自然语言处理、游戏AI等领域。


1. 核心思想

  • 生物类比:模仿人脑神经元的工作方式,通过"激活"和"连接"处理信息。
  • 数学本质:多层嵌套的函数组合,通过调整权重和偏置拟合数据。

2. 基本结构

(1) 神经元(Neuron)

(2) 网络层级

  1. 输入层(Input Layer):接收原始数据(如图像像素、文本词向量)。
  2. 隐藏层(Hidden Layers):进行特征变换(层数和神经元数可调)。
  3. 输出层(Output Layer):生成最终预测(如分类概率、回归值)。

3. 前向传播(Forward Propagation)

数据从输入层逐层传递到输出层的过程:


4. 激活函数(Activation Functions)

函数 公式 特点 适用场景
Sigmoid ( \frac{1}{1+e^{-z}} ) 输出(0,1),适合概率 二分类输出层
ReLU ( \max(0, z) ) 计算快,解决梯度消失 隐藏层(最常用)
Leaky ReLU ( \max(0.01z, z) ) 避免神经元"死亡" 替代ReLU
Softmax ( \frac{e^{z_i}}{\sum e^{z_j}}} ) 多分类概率归一化 多分类输出层

5. 反向传播(Backpropagation)

通过链式法则计算损失函数对每个参数的梯度,从输出层反向传递误差并更新权重:

  1. 计算损失 (如交叉熵、均方误差)。

6. 代码实现(Python)

(1) 使用TensorFlow/Keras

python 复制代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 创建模型
model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),  # 隐藏层(128个神经元)
    Dense(64, activation='relu'),                      # 隐藏层
    Dense(10, activation='softmax')                    # 输出层(10分类)
])

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

# 训练
model.fit(X_train, y_train, epochs=10, batch_size=32)

(2) 手动实现(NumPy)

python 复制代码
import numpy as np

def relu(z):
    return np.maximum(0, z)

def softmax(z):
    exp_z = np.exp(z - np.max(z, axis=1, keepdims=True))
    return exp_z / np.sum(exp_z, axis=1, keepdims=True)

# 初始化参数
W1 = np.random.randn(input_size, hidden_size) * 0.01
b1 = np.zeros((1, hidden_size))
# ...(其他层初始化)

# 前向传播
z1 = X.dot(W1) + b1
a1 = relu(z1)
z2 = a1.dot(W2) + b2
y_pred = softmax(z2)

# 反向传播(略)

7. 神经网络类型

类型 特点 应用场景
前馈神经网络(FNN) 信息单向传播(输入→输出) 图像分类、回归
卷积神经网络(CNN) 局部连接、权重共享 计算机视觉
循环神经网络(RNN) 处理序列数据(时间/文本) 语音识别、机器翻译
Transformer 自注意力机制(并行处理长序列) GPT、BERT等大模型

8. 关键挑战与解决方案

问题 原因 解决方案
梯度消失/爆炸 深层网络链式求导的连乘效应 ReLU、BatchNorm、残差连接
过拟合 模型复杂度过高 Dropout、L2正则化、早停
计算成本高 参数量大 GPU加速、模型剪枝

9. 总结

  • 神经网络 = 多层非线性变换 + 梯度下降优化。
  • 核心步骤:前向传播 → 计算损失 → 反向传播 → 更新参数。
  • 设计要点 :
    1. 选择网络深度和宽度(如层数、每层神经元数)。
    2. 选择激活函数(隐藏层用ReLU,输出层按任务定)。
    3. 优化器(如Adam)、损失函数(如交叉熵)、正则化。

神经网络通过堆叠简单的神经元实现了强大的表达能力,是解决复杂模式识别任务的利器!

相关推荐
FakeOccupational2 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
明志数科2 小时前
机器人训练数据采集中的任务拆解与原子动作清单SOP
人工智能·机器学习·机器人
xailorliu5 小时前
SLIC_超像素算法
c++·opencv·目标检测·机器学习·计算机视觉
Horn Still Sounds5 小时前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
有范先生8 小时前
这次户外断粮危机后,我更在意主食能不能扛住极端环境了
笔记
喜欢打篮球的普通人8 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
会议咨询9 小时前
2026年计算机技术、信息工程与机器学习国际会议(CIML 2026)
机器学习·计算机技术·信息工程
梦帮科技10 小时前
LoRA / QLoRA 低秩矩阵流形更新:SVD 分解、秩与缩放因子 α 的物理意义与梯度稳定性保障
网络·深度学习·神经网络·线性代数·矩阵·架构·数据挖掘
坤坤子吖10 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
Answer1st11 小时前
【HAL库】嵌入式思路(一)
笔记