Post

chap9 function_approximation

chap9 function_approximation

分层全连接神经网络


通俗例子:餐厅点餐系统
1)层级结构
  1. 输入层:顾客的基本信息(4个神经元)
    • 年龄(20岁、30岁、40岁…)
    • 性别(男/女)
    • 时间(早餐/午餐/晚餐)
    • 天气(晴天/雨天)
  2. 隐藏层1:顾客的可能喜好特征(6个神经元)
    • 喜欢辣食程度
    • 偏好甜食程度
    • 偏好健康食品程度
    • 饮食预算高低
    • 食物选择多样性
    • 是否赶时间
  3. 隐藏层2:菜品类别偏好(5个神经元)
    • 快餐可能性
    • 传统主食可能性
    • 甜点可能性
    • 饮料可能性
    • 健康食品可能性
  4. 输出层:具体推荐菜品(3个神经元)
    • 推荐菜品1(如牛肉面)
    • 推荐菜品2(如沙拉)
    • 推荐菜品3(如奶茶)
2)全连接特性

在这个例子中:

  • 输入层的每个特征(如年龄、性别)都会连接到隐藏层1的所有6个喜好特征
  • 隐藏层1的每个喜好特征都会连接到隐藏层2的所有5个菜品类别
  • 隐藏层2的每个菜品类别都会连接到输出层的所有3个具体推荐菜品
3)信息处理流程
  1. 输入:一位30岁女性,午餐时间,晴天
  2. 第一隐藏层处理后可能激活:”中等辣度偏好”、”较高甜食偏好”、”中等健康偏好”等特征
  3. 第二隐藏层基于这些特征,激活:”较高传统主食可能性”和”较高饮料可能性”
  4. 输出层根据上述激活,最终推荐:”牛肉面”、”水果沙拉”和”奶茶”
4)学习过程

当顾客反馈他们喜欢或不喜欢推荐菜品时,网络会调整各层之间的连接权重。例如,如果许多年轻女性在晴天午餐时间更喜欢轻食,网络会增强这些输入特征与”健康食品偏好”神经元之间的连接强度。

5)如何理解神经元

可以将其视为一个“加工厂”,接受上一层的输出,用自己的激励函数$\sigma$
和偏置量$b$来加工该信息,再经过一定的连接权重$\omega$处理后输出给下一层神经元。

什么叫“反向传播”?


让我通过一个简单的例子来解释反向传播。想象我们有一个非常小的神经网络,有一个输入层(2个输入节点),一个隐藏层(2个神经元),和一个输出层(1个神经元)。

一个简化的神经网络例子

假设我们的网络如下:

  • 输入: x₁ = 0.5, x₂ = 0.3
  • 目标输出: y = 0.7 (真实值)
  • 隐藏层神经元: h₁, h₂
  • 输出层神经元: o
  • 初始权重:
    • 输入到隐藏层: w₁₁ = 0.4, w₁₂ = 0.1, w₂₁ = 0.3, w₂₂ = 0.2
    • 隐藏层到输出: v₁ = 0.5, v₂ = 0.6
  • 使用sigmoid激活函数: f(x) = 1/(1+e^(-x))
  • 为简化,忽略偏置(bias)
1)前向传播过程
  1. 计算隐藏层:

    • h₁ = f(w₁₁×x₁ + w₂₁×x₂) = f(0.4×0.5 + 0.3×0.3) = f(0.29) = 0.572
    • h₂ = f(w₁₂×x₁ + w₂₂×x₂) = f(0.1×0.5 + 0.2×0.3) = f(0.11) = 0.527
  2. 计算输出:

    • o = f(v₁×h₁ + v₂×h₂) = f(0.5×0.572 + 0.6×0.527) = f(0.602) = 0.646
  3. 计算误差 (使用均方差):

    • 误差 = 0.5×(预测值 - 真实值)² = 0.5×(0.646 - 0.7)² = 0.0029
2)反向传播过程

现在我们要更新权重,需要计算误差对各个权重的梯度:

  1. 输出层权重梯度:

    • 误差对输出的导数: ∂E/∂o = (o - y) = (0.646 - 0.7) = -0.054
    • sigmoid的导数: f’(x) = f(x)×(1-f(x)),所以f’(0.602) = 0.646×(1-0.646) = 0.229
    • 使用链式法则:
      • ∂E/∂v₁ = ∂E/∂o × ∂o/∂v₁ = -0.054 × 0.229 × h₁ = -0.054 × 0.229 × 0.572 = -0.0071
      • ∂E/∂v₂ = ∂E/∂o × ∂o/∂v₂ = -0.054 × 0.229 × h₂ = -0.054 × 0.229 × 0.527 = -0.0065
  2. 反向传递误差到隐藏层:

    • 对h₁的误差影响: δh₁ = ∂E/∂o × ∂o/∂h₁ × f’(输入到h₁) = -0.054 × 0.229 × v₁ × h₁(1-h₁) = -0.054 × 0.229 × 0.5 × 0.572(1-0.572) = -0.0015
    • 类似地计算δh₂
  3. 计算输入层到隐藏层的权重梯度:

    • ∂E/∂w₁₁ = δh₁ × x₁ = -0.0015 × 0.5 = -0.00075
    • ∂E/∂w₂₁ = δh₁ × x₂ = -0.0015 × 0.3 = -0.00045
    • (类似地计算w₁₂和w₂₂的梯度)
  4. 更新所有权重 (假设学习率α = 0.1):

    • v₁_new = v₁ - α×∂E/∂v₁ = 0.5 - 0.1×(-0.0071) = 0.5007
    • v₂_new = v₂ - α×∂E/∂v₂ = 0.6 - 0.1×(-0.0065) = 0.6007
    • w₁₁_new = w₁₁ - α×∂E/∂w₁₁ = 0.4 - 0.1×(-0.00075) = 0.40008
    • (以此类推更新其他权重)

梯度下降算法


1)基本概念

“下降”指的是沿着损失函数的斜率(梯度)方向,逐步减小损失值的过程。想象你在一座山上,想要找到山谷的最低点:

  1. 损失函数:可以想象成一个山地地形,高度表示模型的误差
  2. 参数空间:代表你可以移动的方向(如前后左右)
  3. 梯度:在每个位置,指向”上坡”最陡的方向
  4. 下降:你选择沿着与梯度相反的方向行走,即”下坡”方向

2)算法步骤

  1. 随机初始化模型参数(相当于在山上随机选择一个起点)
  2. 计算当前位置的梯度(判断哪个方向是最陡的上坡)
  3. 沿着梯度的反方向更新参数(朝着下坡方向迈出一步)
  4. 重复步骤2和3,直到达到停止条件

卷积神经网络的工作原理


1)基本概念解析

1. 分层结构

CNN也是分层结构,但其隐藏层由三种主要类型组成:

  • 卷积层
  • 池化层
  • 全连接层(通常在网络末端)
2. 通道(Channel)
  • 输入层:彩色图像有3个通道(红、绿、蓝)
  • 隐藏层:每个卷积层可以有多个通道,每个通道检测不同特征
  • 每个通道:可以看作是一个特征图(Feature Map)
3. 局部连接

传统神经网络中,每个神经元连接到上一层的所有神经元。而在CNN中:

  • 每个神经元只连接到上一层的一个小区域(感受野)
  • 这种连接方式大大减少了参数数量
  • 同时保留了图像的空间结构信息
4. 权重共享
  • 同一通道内的所有神经元使用相同的权重集(卷积核/滤波器)
  • 进一步减少了需要学习的参数
  • 使网络能够在图像的任何位置检测相同的特征

2)图像识别例子

想象我们正在构建一个手写数字识别CNN:

输入层
  • 28×28像素的灰度图像(单通道)
第一卷积层
  • 有16个不同的通道(特征图)
  • 每个通道使用一个5×5的卷积核
  • 每个卷积核专注于检测特定特征(如边缘、角落等)
局部连接细节

假设我们考虑第一卷积层中的某个神经元:

  • 它只连接到输入图像中5×5的小区域(25个输入神经元)
  • 如果输入有多个通道,它会连接到所有通道的相同位置
  • 例如:对RGB图像,这个神经元会连接到红、绿、蓝三个通道中对应的5×5区域(共75个连接)
第二卷积层
  • 可能有32个通道
  • 每个通道中的神经元连接到第一层所有16个通道的对应局部区域
  • 如果使用3×3卷积核,每个神经元有16×3×3=144个连接

3)直观理解

想象你是一位艺术鉴赏师,要判断一幅画是否是莫奈的作品:

  1. 第一层(低级特征)

    • 你先用16个不同的放大镜(通道)
    • 每个放大镜只看画的一小部分区域(局部连接)
    • 一个放大镜找直线,一个找曲线,一个找色彩过渡…
    • 你在画的各个部位用相同的标准判断(权重共享)
  2. 第二层(中级特征)

    • 基于第一层找到的基本元素(线条、形状)
    • 32个新放大镜,每个现在寻找更复杂的特征
    • 如草地纹理、水面波纹、云朵形状等
    • 每个放大镜看的都是几个低级特征的组合
  3. 第三层(高级特征)

    • 检测更抽象的图案:睡莲、日落、桥梁等
  4. 全连接层

    • 综合所有发现的特征,做出”这是/不是莫奈的画”的判断
This post is licensed under CC BY 4.0 by the author.