跳过正文

深度学习-基础知识

·1488 字·
深度学习
EZ
作者
EZ
Take it EZ!
目录
深度学习 - 这篇文章属于一个选集。
§ 1: 本文

【本文将持续更新深度学习的一些基础知识】

1. 深度学习介绍
#

深度学习(Deep Learning)是机器学习的一个分支,它利用多层神经网络来自动地从数据中提取特征和进行预测。

1.1. 多层感知机
#

  • 感知机是最简单的神经网络单元,它包括输入层、权重和偏置,通过一个激活函数输出结果。
Perceptron
  • 多层感知机(MLP, Multi-Layer Perceptron)由多个感知机层组成,包括输入层、隐藏层和输出层。 每一层中的节点与下一层中的每个节点相连。
Perceptron

1.2. 激活函数
#

  • 激活函数用于引入非线性,使神经网络能够学习和表示复杂的关系。

  • 常用激活函数包括ReLU(Rectified Linear Unit)、Sigmoid和Tanh等。

  • 公式:

    $$ \text{ReLU}(x) = \max(0, x) $$

    $$ \text{sigmoid}(x) = \sigma(x) = \frac{1}{1 + e^{-x}} $$

    $$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$

2. 损失函数
#

2.1. 均方误差
#

  • 均方误差(Mean Squared Error, MSE)通常用于回归问题,它计算预测值与真实值之间的平均平方差。
  • 公式如下: $$ \text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 $$
    • 其中:
      • \( n \) 是样本的数量
      • \( y_i \) 是第 \( i \) 个样本的真实值
      • \( \hat{y}_i \) 是第 \( i \) 个样本的预测值
  • MSE 的优点是简单直观,缺点是对异常值比较敏感,因为平方项会放大异常值的影响。

2.2. 交叉熵损失
#

  • 交叉熵损失(Cross-Entropy Loss)通常用于分类问题,特别是多分类问题。它衡量的是预测的概率分布与真实分布之间的差异。
  • 公式如下:
    • 二分类问题: $$ \text{Cross-Entropy Loss} = -\frac{1}{n} \sum_{i=1}^n [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] $$
      • 其中:
        • \( n \) 是样本的数量
        • \( y_i \) 是第 \( i \) 个样本的真实标签(0 或 1)
        • \( \hat{y}_i \) 是第 \( i \) 个样本预测为正类的概率
    • 多分类问题: $$ \text{Cross-Entropy Loss} = -\frac{1}{n} \sum_{i=1}^n \sum_{c=1}^C y_{i,c} \log(\hat{y}_{i,c}) $$
      • 其中:
        • \( n \) 是样本的数量
        • \( C \) 是类别的数量
        • \( y_{i,c} \) 是第 \( i \) 个样本在类别 \( c \) 上的真实标签(one-hot 编码)
        • \( \hat{y}_{i,c} \) 是第 \( i \) 个样本预测为类别 \( c \) 的概率

3. 反向传播
#

反向传播(Backpropagation)是训练神经网络的核心算法,用于计算每个参数的梯度,以更新模型参数,使损失函数最小化。反向传播通过链式法则逐层传播误差,调整每一层的权重和偏置。

假设激活函数是 sigmoid,损失函数是均方误差(MSE),并且是一个简单的三层神经网络,包括输入层、隐藏层和输出层。我们来详细推导反向传播的全过程。

3.1. 前向传播
#

  • 我们定义以下变量:

    • 输入:\( \mathbf{x} \)
    • 隐藏层权重:\( \mathbf{W}_1 \)
    • 隐藏层偏置:\( \mathbf{b}_1 \)
    • 输出层权重:\( \mathbf{W}_2 \)
    • 输出层偏置:\( \mathbf{b}_2 \)
  • 隐藏层

    • 计算隐藏层的输入(未激活值): $$ \mathbf{z}_1 = \mathbf{W}_1 \mathbf{x} + \mathbf{b}_1 $$
    • 应用激活函数(sigmoid): $$ \mathbf{a}_1 = \sigma(\mathbf{z}_1) = \frac{1}{1 + e^{-\mathbf{z}_1}} $$
  • 输出层

    • 计算输出层的输入(未激活值): $$ \mathbf{z}_2 = \mathbf{W}_2 \mathbf{a}_1 + \mathbf{b}_2 $$
    • 应用激活函数(sigmoid): $$ \hat{\mathbf{y}} = \mathbf{a}_2 = \sigma(\mathbf{z}_2) = \frac{1}{1 + e^{-\mathbf{z}_2}} $$
  • 损失函数

    • 使用均方误差(MSE)作为损失函数: $$ L = \frac{1}{2} \sum_{i=1}^n (\hat{y}_i - y_i)^2 $$

3.2. 反向传播
#

反向传播的目标是计算损失函数对每个参数的梯度。我们从输出层开始,逐层向后计算。

  • 输出层

    • 计算损失函数对输出层激活值的梯度: $$ \frac{\partial L}{\partial \mathbf{a}_2} = \frac{\partial}{\partial \mathbf{a}_2} \left( \frac{1}{2} (\hat{\mathbf{y}} - \mathbf{y})^2 \right) = \hat{\mathbf{y}} - \mathbf{y} $$
    • 计算损失函数对输出层未激活值的梯度
      • (利用 sigmoid 的导数 \( \sigma{\prime}(z) = \sigma(z) (1 - \sigma(z)) \)): $$ \frac{\partial L}{\partial \mathbf{z}_2} = \frac{\partial L}{\partial \mathbf{a}_2} \cdot \frac{\partial \mathbf{a}_2}{\partial \mathbf{z}_2} = (\hat{\mathbf{y}} - \mathbf{y}) \odot (\mathbf{a}_2 (1 - \mathbf{a}_2)) $$
    • 计算损失函数对输出层权重的梯度: $$ \frac{\partial L}{\partial \mathbf{W}_2} = \frac{\partial L}{\partial \mathbf{z}_2} \cdot \mathbf{a}_1^T $$
    • 计算损失函数对输出层偏置的梯度: $$ \frac{\partial L}{\partial \mathbf{b}_2} = \frac{\partial L}{\partial \mathbf{z}_2} $$
  • 隐藏层

    • 计算损失函数对隐藏层激活值的梯度(传播回去): $$ \frac{\partial L}{\partial \mathbf{a}_1} = \mathbf{W}_2^T \cdot \frac{\partial L}{\partial \mathbf{z}_2} $$
    • 计算损失函数对隐藏层未激活值的梯度(利用 sigmoid 的导数): $$ \frac{\partial L}{\partial \mathbf{z}_1} = \frac{\partial L}{\partial \mathbf{a}_1} \odot (\mathbf{a}_1 (1 - \mathbf{a}_1)) $$
      • 其中,\( \odot \) 表示逐元素相乘
    • 计算损失函数对隐藏层权重的梯度: $$ \frac{\partial L}{\partial \mathbf{W}_1} = \frac{\partial L}{\partial \mathbf{z}_1} \cdot \mathbf{x}^T $$
    • 计算损失函数对隐藏层偏置的梯度: $$ \frac{\partial L}{\partial \mathbf{b}_1} = \frac{\partial L}{\partial \mathbf{z}_1} $$

3.3. 参数更新
#

使用梯度下降算法更新参数:

  • 更新输出层参数: $$ \mathbf{W}_2 := \mathbf{W}_2 - \eta \frac{\partial L}{\partial \mathbf{W}_2} $$ $$ \mathbf{b}_2 := \mathbf{b}_2 - \eta \frac{\partial L}{\partial \mathbf{b}_2} $$
  • 更新隐藏层参数: $$ \mathbf{W}_1 := \mathbf{W}_1 - \eta \frac{\partial L}{\partial \mathbf{W}_1} $$ $$ \mathbf{b}_1 := \mathbf{b}_1 - \eta \frac{\partial L}{\partial \mathbf{b}_1} $$

其中,\( \eta \) 是学习率。

深度学习 - 这篇文章属于一个选集。
§ 1: 本文

相关文章

PyTorch系列 - 环境配置
··864 字
深度学习 PyTorch
本文介绍如何在 Mac 上安装 PyTorch,并利用 Apple 芯片的 Metal 框架进行加速。
XGBoost
··4566 字
机器学习 XGBoost GBDT
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升(Gradient Boosting)的机器学习算法。
随机森林
·3325 字
机器学习 随机森林
随机森林(Random Forest)是一种常用的集成学习方法。
线性回归与逻辑回归
·3406 字
机器学习 统计学习 线性回归 逻辑回归
本文详细介绍了线性回归和逻辑回归的基本概念、假设、目标、模型评价指标、多重共线性问题以及评估指标。
Spark系列 - 数据合并
·2309 字
大数据 Spark DataFrame
本文介绍了 Spark 中的几种常见 Join 操作,包括 Inner Join、Outer Join、Left Join 和 Right Join,以及它们的具体实现和优化方法。
Spark系列 - 数据聚合
·1170 字
大数据 Spark DataFrame 聚合
探索Spark中的聚合与窗口函数,涵盖简单聚合、分组聚合、窗口聚合等操作。