神经网络的学习

核心结论:神经网络的 "学习" 本质是通过数据自动找到最优权重参数核心逻辑是用损失函数判断预测误差,用梯度下降法调整参数,最终让模型能精准完成任务

一、学习的核心目标

神经网络之所以能 "学习",关键是找到一组最优的权重参数(相当于模型的 "记忆")。

  • 权重就像 "调节旋钮":每个神经元之间的连接都有一个权重,权重大小决定信号传递的强弱。
  • 学习的目标:通过数据调整这些 "旋钮",让模型的预测结果尽可能接近真实答案。

二、判断误差的 "标尺":损失函数

要调整权重,首先得知道 "当前模型有多差",这就需要损失函数(相当于 "误差标尺")。

1. 常见的 "标尺" 类型

  • 均方误差(MSE) :适合预测连续值(比如房价、温度),计算预测值和真实值之间差的平方平均值。
    • 通俗理解:像用尺子量差距,差距越大,"惩罚" 越重(平方后放大误差)。

代码实现如下:

复制代码
def mean_square_error(y, t):  # y为预测值,t为真实值
    return 0.5 * np.sum((y-t)**2)
  • 交叉熵误差 :适合分类任务(比如识别手写数字、判断图片类别),重点惩罚 "预测对的概率太低" 的情况。
    • 通俗理解:比如模型把 "5" 误判为 "3" 且概率很高,交叉熵会给出很大的误差值,督促模型改进。

具体代码实现:

复制代码
def cross_entropy_error(y, t):
    #对于一条数据的情况,转换为二维结果
    if y.ndim == 1:
        t = t.reshape(1, -1)  #转换为二维
        y = y.reshape(1, -1)
    #如果t是独热编码,转换为解标签
    if t.size == y.size:
        t = t.argmax(axis=1)    #获取最大值的索引
    n = y.shape[0]
    return -np.sum(np.log(y[np.arange(n), t] + 1e-7)) / n

2. 不同任务选不同 "标尺"

  • 二分类(是 / 否、正 / 负):用二元交叉熵损失。
  • 多分类(识别 0-9 数字、多种水果):用多类交叉熵损失。
  • 回归(预测具体数值):用均方误差(MSE)或平均绝对误差(MAE)。

三、调整参数的 "方法":梯度下降

知道了误差,下一步就是调整权重减少误差,核心方法是梯度下降

1. 梯度:误差变化的 "方向标"

  • 梯度是损失函数的导数,告诉我们:"调整哪个权重、往哪个方向调,能让误差下降最快"。
  • 通俗理解:就像下山时,梯度指向 "最陡的下坡方向",跟着梯度走,能最快走到山底(误差最小)。

需要注意的是,梯度代表的其实是函数值增大最快的方向;在实际应用中,我们需要寻找损失函数的最小值,所以一般选择 负梯度向量

利用数值微分可简单实现梯度代码:

复制代码
#梯度
def _numerical_gradient(f, x):
    h = 1e-4 # 0.0001
    grad = np.zeros_like(x)   # 创建一个和x一样大小的零向量
    for idx in range(x.size):
        tmp_val = x[idx]        # 保存当前值
        x[idx] = float(tmp_val) + h     # 当前值加上微小值
        fxh1 = f(x)     # f(x+h)        # 计算f(x+h)
        x[idx] = tmp_val - h            # 还原当前值
        fxh2 = f(x)     # f(x-h)        # 计算f(x-h)
        grad[idx] =(fxh1 - fxh2) / (2*h)
        x[idx] = tmp_val  #
        #还原值
    return grad

2. 核心步骤(以随机梯度下降 SGD 为例)

  1. 随机选一批数据(mini-batch):不用全量数据,选一小部分计算误差,又快又准。
  2. 算梯度:针对这批数据,计算每个权重对应的梯度。
  3. 调权重:沿着梯度的反方向(下坡方向),按一定步长调整权重。
  4. 重复迭代:反复做 1-3 步,直到误差降到满意水平。

3. 关键概念(训练时必懂)

  • 学习率(η):调整权重的 "步长"。太大容易 "走过头",太小则学习太慢。
  • Epoch:模型完整看一遍所有训练数据的次数(比如训练 10 个 Epoch,就是把数据学 10 遍)。
  • Batch Size:每次选多少个样本计算梯度(比如 Batch Size=100,就是每次用 100 个样本)。
  • Iteration:每处理一个 Batch 并调整一次参数,就是一次迭代。

四、简单案例:手写数字识别的学习过程

  1. 初始状态:模型的权重是随机的,识别手写数字时误差很大(比如把 "8" 认成 "3")。
  2. 计算误差:用交叉熵损失函数,算出 "把 8 认成 3" 的误差值。
  3. 算梯度:找到 "调整哪些权重,能让模型下次更可能认出 8"。
  4. 调权重:按学习率沿着梯度反方向调整权重。
  5. 重复迭代:用大量手写数字样本反复训练,误差越来越小,模型识别准确率越来越高。

五、核心总结

神经网络的学习 ="误差标尺"(损失函数)+"调整方法"(梯度下降):

  1. 用损失函数量化 "预测有多差";
  2. 用梯度找到 "怎么调权重能变好";
  3. 反复迭代,直到模型能精准完成任务。
相关推荐
阿里巴巴与四十个小矮人2 小时前
国科大2025秋自然语言处理基础与大模型期末
人工智能·自然语言处理
Cathy Bryant2 小时前
softmax函数与logits
笔记·神经网络·机器学习·概率论·信息与通信
yumgpkpm2 小时前
在AI语言大模型时代 Cloudera CDP(华为CMP 鲲鹏版)对自有知识的保护
人工智能·hadoop·华为·zookeeper·spark·kafka
沃达德软件2 小时前
巡防勤务可视化管理
大数据·人工智能·数据挖掘·数据分析
小码hh2 小时前
【PonitNet++】2. 点云输入深度神经网络前的常见表示形式
人工智能·神经网络·dnn
sww_10262 小时前
Spring-AI MCP 源码浅析
java·人工智能·spring
HyperAI超神经2 小时前
在线教程丨微软开源3D生成模型TRELLIS.2,3秒生成高分辨率的全纹理资产
人工智能·深度学习·机器学习·3d
阿蒙Amon2 小时前
TypeScript学习-第2章:基础类型
javascript·学习·typescript
永霖光电_UVLED2 小时前
连续波 UV-B 激光二极管问世,实现全球首次
大数据·人工智能·uv