1. 线性代数

1.1 向量空间

向量空间是一个向量的集合。我们可以把向量空间想象成一个多维空间:

  • 在二维空间中,向量可以表示为平面上的箭头
  • 在三维空间中,向量可以表示为空间中的箭头
  • 更高维的向量空间虽然难以直观想象,但仍然遵循相同的数学规则

原理:

  • 向量可以相加,结果仍在该空间内
  • 向量可以与标量相乘,结果仍在该空间内

向量的概念在深度学习中有很多应用,比如:

  • 特征向量:用来表示输入数据的特征
  • 权重向量:表示神经网络中的连接强度
  • 激活向量:表示神经元的输出状态

1.2 矩阵

矩阵是一个二维数组,包含多行多列的数字。

矩阵运算为我们提供了一种简洁、高效地处理高维数据的方法, 而且可以高度并行化,非常适合在GPU上进行加速。这是深度学习能够处理大规模数据的关键。

  1. 矩阵基础

矩阵是一个二维数组,由行和列组成。例如:

A = [1 2 3]
[4 5 6]

这是一个2x3的矩阵,有2行3列。

  1. 矩阵乘法

矩阵乘法是最基本也最重要的矩阵运算。两个矩阵相乘的条件是:第一个矩阵的列数必须等于第二个矩阵的行数。

例如:
A = [1 2] B = [5 6]
[3 4] [7 8]

A x B = [15+27 16+28] = [19 22]
[35+47 36+48] [43 50]

1.3 线性代数在深度学习中的应用

1.3.1 矩阵乘法的应用

可以将矩阵乘法想象成一种"信息重组"的过程,每次矩阵乘法都是在寻找输入的一种特定组合方式,以最好地表达或预测我们感兴趣的内容。

  • 在线性回归中,它将输入特征重新组合,得到预测输出。
  • 在神经网络中,它将上一层的激活重新组合,形成下一层的输入。

在深度学习中,每一层的计算本质上是矩阵乘法,一个简单的神经网络层可以表示为:
y = Wx + b

1.3.2 特征提取

特征提取是从原始数据中提取出最有用、最能代表数据本质特征的过程。

想象你是一个侦探,要从一大堆杂乱的证据中找出关键线索。特征提取就是这样一个过程 - 从复杂的原始数据中提取出最重要、最有价值的信息。

举个例子:

假设你要从一张人脸照片中识别这个人是谁。原始数据是整张照片的所有像素点。但实际上,我们并不需要所有像素信息,只需要提取出一些关键特征,比如:

  • 眼睛的形状和位置
  • 鼻子的大小和形状
  • 嘴巴的轮廓
  • 脸型的整体轮廓
  • 等等

这些就是从原始图像中提取出来的"特征"。它们能够最大程度地代表这张脸的特点,而且数据量大大减少,便于后续处理。

特征提取的方法有很多,比如:

  • 手动设计特征:根据领域知识人为定义一些特征
  • 主成分分析(PCA):找出数据中方差最大的方向作为主要特征
  • 卷积神经网络:通过多层卷积自动学习图像的特征表示

1.3.3 矩阵乘法和特征提取的关系

神经网络通过多层非线性变换,逐步将原始数据映射到一个更有意义的特征空间,这个过程就是特征提取。

  1. 数据表示

首先,我们需要用数字来表示数据。比如一张图片可以表示为一个大矩阵,矩阵中的每个数字代表一个像素的亮度。

  1. 线性变换

神经网络的核心操作是线性变换,用矩阵乘法表示:

y = Wx + b

这里x是输入数据,W是权重矩阵,b是偏置项,y是输出。

可以把这个过程想象成用不同的滤镜观察数据,每个滤镜(W的一行)关注数据的不同方面。

  1. 非线性激活

线性变换后,我们会用一个非线性函数f对结果进行处理:

a = f(Wx + b)

这相当于对观察结果进行进一步加工,突出某些特征,抑制其他特征。

  1. 多层堆叠

将上面的过程多次重复:

a1 = f(W1x + b1)
a2 = f(W2a1 + b2)

这就形成了深度神经网络。每一层都在前一层的基础上提取更高级的特征。

  1. 反向传播

网络通过不断调整W和b来学习提取最有用的特征。这个过程叫反向传播,本质是链式求导。

1.3.4 降维和升维

降维:

  • 这就像把一幅复杂的3D立体画,压缩成一幅2D平面画。
  • 在深度学习中,降维通常用于压缩数据,去除冗余信息,突出主要特征。

升维:

  • 这就像把一幅简单的2D素描,扩展成一幅丰富的3D立体画。
  • 在深度学习中,升维常用于增加模型的表达能力,使其能够处理更复杂的问题。 例如:在神经网络中增加隐藏层的宽度,就是一种升维操作。

在神经网络中:

  • 输入层到第一个隐藏层通常是升维,增加网络的表达能力。
  • 中间的隐藏层可能涉及升维或降维,取决于具体设计。
  • 最后到输出层通常是降维,将高维特征映射到所需的输出维度。

1.3.5 非线性激活函数

举个简单的例子来理解非线性激活函数的作用:

想象你在玩一个电子游戏,你的角色需要跳过一些障碍物。如果没有激活函数,你的角色只能沿直线移动,但有了激活函数,就像给你的角色增加了跳跃能力,可以越过障碍物,达到原本无法到达的地方。这就是激活函数增强网络表达能力的直观体现。

总的来说,激活函数就像是神经网络的"开关"和"变压器",它决定了信息如何在网络中流动和转换,是深度学习模型能够学习复杂模式的关键所在。

ReLU计算效率高且可以缓解梯度消失,是目前最常用的激活函数,我们通常在隐藏层使用ReLU,在输出层根据任务需求选择合适的激活函数。

2. 概率论与统计学

2.1 概率分布

2.1.1 概率分布的基本概念

概率分布是用来描述随机变量可能取值及其概率的函数。它告诉我们某个事件发生的可能性有多大。

想象你有一个六面骰子:每个面出现的概率是1/6,这就构成了一个简单的概率分布,这就是一个离散均匀分布,每个结果的概率都相等。

再举一个例子,一群人的身高分布。我们可能会发现大多数人的身高集中在170cm左右,比较高和比较矮的人相对较少。这种钟形的分布就是著名的正态分布(高斯分布)。

概率分布的类型:

  1. 离散分布:随机变量只能取有限个或可数无限多个值。如二项分布、泊松分布等。

  2. 连续分布:随机变量可以取连续区间内的任意值。如正态分布、指数分布等。

2.1.2 概率分布在深度神经网络中的应用

概率分布在深度神经网络中的应用,就像是在教网络如何更好地"理解"和"预测"这个充满不确定性的世界。
通过这些技术,我们让神经网络不仅能给出答案,还能告诉我们对这个答案有多确定。

  1. 输出层激活函数

想象你是一个天气预报员,需要预测明天是晴天、阴天还是雨天的概率。

  • Softmax函数就像是你的"概率计算器"。你输入一些原始数据(比如温度、湿度等),Softmax会帮你计算出每种天气的概率。比如:晴天60%,阴天30%,雨天10%。这些概率加起来总是100%,就像在分一个大蛋糕。

  • Sigmoid函数则更像是一个"是否下雨概率计算器"。你输入天气数据,它会告诉你下雨的概率。比如:下雨的概率是70%。这个概率永远在0%到100%之间。

  1. 损失函数

想象你在玩飞镖游戏,目标是让飞镖尽可能靠近靶心。

  • 交叉熵损失函数就像是测量你的飞镖离靶心有多远的工具。它比较你的预测(飞镖落点)和真实情况(靶心)有多接近。

  • 如果你的预测总是很准(飞镖经常命中靶心附近),损失值就会很小。如果预测经常出错(飞镖总是偏离靶心很远),损失值就会很大。

  • 神经网络的目标就是通过不断练习(训练),让这个损失值越来越小,就像你通过练习让飞镖越投越准一样。

  1. Dropout正则化

想象你是一个足球教练,在训练球队。

  • 常规训练就像是让所有球员一起训练,可能会导致球员之间过度依赖。

  • Dropout就像是在训练中随机让一些球员休息。这样做有几个好处:

    1. 其他球员被迫要更加独立,学会在缺少某些队友的情况下也能表现好。
    2. 球队整体变得更加灵活,不会过度依赖某几个球星。
    3. 你实际上是在同时训练多个不同的"小队",最后比赛时所有球员一起上场,效果会更好。
  • 在神经网络中,Dropout通过随机"休息"一些神经元,让网络变得更加鲁棒和通用,不容易过拟合。

假设我们有一个神经网络层,y = f(Wx + b)
应用Dropout后:y = f(r * (Wx + b))
r是一个与x同形状的随机二元掩码向量,其中的元素服从伯努利分布(0或1),1的概率为p(通常是0.5)。

2.2 假设检验

2.2.1 假设检验的基本概念

假设检验是统计学中用来判断样本数据是否足以支持某个假设的方法。

它的基本步骤是:

  1. 提出一个原假设(H0)和备择假设(H1)
  2. 选择显著性水平(通常为0.05)
  3. 计算检验统计量
  4. 根据统计量的p值决定是否拒绝原假设

比如,我们想检验一个硬币是否公平。原假设H0是硬币公平(正面朝上概率为0.5),备择假设H1是硬币不公平。我们可以抛掷100次,记录正面朝上的次数,计算p值。如果p值小于0.05,我们就拒绝原假设,认为硬币不公平。

2.2.2 假设检验在深度学习中的应用

在训练神经网络时,我们常常会对模型做出一些假设,比如:

  • 某个参数是否对模型性能有显著影响
  • 两种不同的模型架构是否有显著差异
  • 某种新的训练方法是否能显著提高模型性能

我们可以通过假设检验来验证这些假设是否成立。

以验证新方法是否能提高模型性能为例:

(1) 提出原假设:新方法和原方法没有显著差异
(2) 设定显著性水平,如0.05
(3) 多次训练模型,收集性能数据
(4) 进行统计检验,如t检验
(5) 根据p值判断是否拒绝原假设

通过假设检验,我们可以用更严谨的方式来验证深度学习中的各种想法,从而推动模型的持续改进。

3. 微积分

3.1 微积分基本概念

  • 导数:函数在某一点的变化率,即切线斜率。它告诉我们函数在该点变化的方向和速率。

  • 偏导数:多变量函数对某一变量的导数,保持其他变量不变。类似于站在山上,观察向东走一小步的高度变化。

  • 梯度:由所有偏导数组成的向量,指向函数增长最快的方向。就像是站在山上感受最陡的方向。

  • 链式法则:复合函数求导的法则。反向传播本质上就是应用链式法则,逐层计算梯度。

3.2 微积分在神经网络中的应用

可以把训练神经网络想象成下山:

  • 损失函数就是山的地形
  • 当前参数就是你所在的位置
  • 梯度就是最陡的下坡方向
  • 优化过程就是一步步往山下走,直到到达山谷(局部最小值)

通过这种方式,我们利用微积分的基本概念,指导神经网络的参数优化,最终得到一个性能良好的模型。

  1. 损失函数

之前的概率分布概念说到过,损失函数可以理解为对模型预测结果好坏的度量。想象你在玩飞镖游戏,每次投掷后都会测量飞镖与靶心的距离,这个距离就类似损失函数。距离越小,表示投得越准,相应地损失函数值越小表示模型预测越准确。

常见的损失函数有:

  • 均方误差:预测值与真实值之差的平方
  • 交叉熵:用于分类问题,衡量预测概率分布与真实分布的差异
  1. 梯度下降

梯度下降可以比喻成下山的过程。想象你站在一座雾蒙蒙的山上,目标是要到达山底。虽然看不清整个山的形状,但你可以感受脚下的斜率。

每一步你都选择向着最陡的方向前进一小步,这个最陡的方向就是梯度的反方向。通过不断重复这个过程,最终你会到达山底(局部最小值)。

学习率就像是你的步幅,太大容易错过最低点,太小则下山过慢。

  1. 反向传播

反向传播本质上是一种高效计算梯度的方法。它的核心思想是从网络的输出层开始,逐层向后计算每个参数对最终损失的影响程度(即梯度)。

想象一条生产线,最后生产出了一个有缺陷的产品:

  • 首先,质检部门(输出层)发现问题,计算出产品的缺陷程度。
  • 然后,他们将责任"反向传递"给上游的装配部门(隐藏层)。
  • 装配部门分析后,又将部分责任传给更上游的零件制造部门(输入层)。
  • 每个部门都计算自己的"责任占比"(梯度),为改进做准备。

反向传播的数学基础是链式法则。对于一个复合函数 f(g(x)),它的导数可以表示为:

f’(g(x)) = f’(g(x)) * g’(x)

在神经网络中,我们将这个规则扩展到多层,从而能够逐层计算梯度。

3.3 训练一个简单的三层网络

a) 前向传播:

  • 输入数据通过网络,得到预测结果
  • 计算损失函数值

b) 反向传播:

  • 输出层: 计算损失函数对输出层的梯度
  • 隐藏层: 利用输出层的梯度,计算损失函数对隐藏层的梯度
  • 输入层: 利用隐藏层的梯度,计算损失函数对输入层的梯度

c) 参数更新:

  • 使用计算得到的梯度,更新每一层的权重和偏置
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐