#DataWhale夏令营 #ai夏令营
1. 深度学习的定义
1.1 深度学习&图神经网络
首先,我们需要明确深度学习的定义。深度学习是构建多层的神经网络,从而构建起一个大的模型,通过这个模型去学习复杂的特征表示。简单地说,这些层包含输入层、隐含层和输出层(特别像是LSTM),然而像是DCN这样的网络,实际的深度学习模型的层设可能更富创造性。
我认为深度学习可以概括为这样的一个流程:输入就像是神经信号(外部刺激),通过中间的神经元和通路进行加工和处理,最终化为模型(人体)的反应。深度学习正是借鉴了人体神经元处理信号的过程。
在数学意义上,深度学习的全流程至少涉及了所有的大一公共数学课。您需要通过处理权重矩阵和数据向量(线性代数)、梯度下降法计算(微积分)、不确定性计算(概率论)。通常它是这样一个流程:通过确定阈值,将输入加权求和,计算激活函数值,送入多层神经网络;前向传播,多层神经网络继续加权(和偏置)计算;计算损失函数,在输出层,比如通过均方误差(MSE)、交叉熵损失来计算;反向传播,在输出层,基于链式法则计算梯度,送还多层神经网络来调整权重(类似于控制系统的反馈),以便获得更好的结果;对优化器(优化算法)进行改进,比如Baseline用到的Adam优化器;进行正则化,防止过拟合;批处理和迭代,每一批被称为一个epoch;进行超参数调优,比如贝叶斯超参数优化。当然,实际的深度学习模型改进是一个更有趣的过程,也涉及更多的数学过程。
1.2 机器学习和深度学习的关系
机器学习包含深度学习,深度学习是机器学习的一个子方向。它涉及使用神经网络,特别是深度神经网络(即具有多层隐藏层的神经网络)来进行学习和预测。这个子方向处理大量数据和复杂模式识别方面表现出色,尤其在图像识别、自然语言处理和语音识别等领域取得了显著的成果。
2. 深度学习的训练流程
2.1 数学基础
2.1.1 梯度下降法
基本原理
梯度下降法的核心思想是沿着函数的梯度(即函数在各点的方向导数)的反方向,以求找到函数的局部极小值。在机器学习中,我们通常用它来最小化损失函数。
数学表达
假设我们有一个目标函数 J(θ),其中 θ 是参数向量。梯度下降的更新规则可以表示为:
θ = θ - α∇J(θ)
其中 α 是学习率,∇J(θ) 是 J(θ) 的梯度。
步骤
a) 初始化参数 θ
b) 计算当前参数下的梯度 ∇J(θ)
c) 更新参数: θ = θ - α∇J(θ)
d) 重复步骤 b 和 c,直到收敛或达到预定的迭代次数
学习率 α
学习率决定了每次参数更新的步长。太大可能会导致算法发散,太小则会导致收敛速度过慢。选择合适的学习率是一个重要的超参数调整过程。
梯度下降的变体
a) 批量梯度下降(Batch Gradient Descent): 使用所有训练数据来计算梯度。
b) 随机梯度下降(Stochastic Gradient Descent, SGD): 每次只使用一个样本来计算梯度。
c) 小批量梯度下降(Mini-batch Gradient Descent): 每次使用一小批样本来计算梯度,是前两者的折中。
2.1.2 神经网络与矩阵
网络结构表示
每一层神经元的权重可以表示为一个矩阵。
例如,如果第一层有m个神经元,第二层有n个神经元,那么连接它们的权重可以表示为一个 n × m 的矩阵。
前向传播
使用矩阵乘法可以高效地计算每一层的输出。
如果输入是 X,权重矩阵是 W,偏置是 b,那么输出 Y 可以表示为:Y = WX + b
激活函数
激活函数通常是按元素操作的,可以直接应用于矩阵的每个元素。
反向传播
误差的反向传播也可以用矩阵运算来表示。
梯度的计算涉及到矩阵的转置和矩阵乘法。
批处理
通过将多个输入样本组合成一个矩阵,可以同时处理一批数据。
这大大提高了计算效率,尤其是在GPU上。
卷积操作
在卷积神经网络中,卷积操作可以表示为特殊的矩阵乘法。
参数更新
权重和偏置的更新可以表示为矩阵加法和减法。
优化算法
许多优化算法,如Adam、RMSprop等,都涉及到矩阵操作。
正则化
L1、L2正则化等可以表示为对权重矩阵的操作。
初始化
权重初始化方法(如Xavier、He初始化)通常涉及到对矩阵的操作。
2.2 激活函数
Sigmoid 函数:
公式:f(x) = 1 / (1 + e^(-x))
特点:将输入压缩到 (0, 1) 的范围内,适用于二分类问题,但在深度神经网络中容易出现梯度消失问题。
Tanh 函数:
公式:f(x) = (e^(2x) - 1) / (e^(2x) + 1)
特点:将输入压缩到 (-1, 1) 的范围内,解决了 Sigmoid 函数的零中心问题,但仍存在梯度消失问题。
ReLU 函数 (Rectified Linear Unit):
公式:f(x) = max(0, x)
特点:简单有效,在正区间上是线性函数,在负区间上输出为0,解决了梯度消失问题。但存在神经元死亡问题(输出为0时,梯度为0,权重无法更新)。
Leaky ReLU 函数:
公式:f(x) = max(ax, x),其中 a 是小于1的常数。
特点:解决了 ReLU 函数的神经元死亡问题,允许小的负值通过,但需要额外调整 a 的值。
ELU 函数 (Exponential Linear Unit):
公式:f(x) = x, x >= 0;f(x) = α(e^x - 1), x < 0,其中 α 是大于零的常数。
特点:引入了指数函数,允许负值,解决了 ReLU 的一些问题,但计算量稍大。
Softmax 函数:
公式:f(x_i) = e^(x_i) / Σ(e^(x_k)),其中 i 表示输出层的第 i 个神经元,k 表示所有输出神经元。
特点:通常用于多分类问题,将输出转化为概率分布。
Swish 函数:
公式:f(x) = x · sigmoid(x)
特点:由Google提出,表现良好且易计算。
GELU 函数:
公式:f(x) = x · sigmoid(1.702x)
特点:用于深度神经网络,具有更强的拟合性。
2.3 权重与误差
计算误差
神经网络的目标是通过调整权重来最小化误差。网络的预测输出与真实标签之间的差距通过损失函数计算出来。
误差反向传播:
梯度下降算法利用误差反向传播算法来更新权重:
计算梯度:
误差的梯度是指误差相对于网络中每个权重的变化率。反向传播算法通过链式法则计算每层误差对权重的梯度:
∂ L ∂ w i j \frac{\partial L}{\partial w_{ij}} ∂wij∂L
更新权重:
使用梯度下降法来调整权重,以最小化损失函数。权重更新公式为:
w i j ( n e w ) = w i j ( o l d ) − α ∂ L ∂ w i j w_{ij}^{(new)} = w_{ij}^{(old)} - \alpha \frac{\partial L}{\partial w_{ij}} wij(new)