DeepLearning神经网络学习笔记(一)

第一部分 机械学习基础

1.基本概念

首先需要明确的一个概念,深度学习是一个机器学习问题。

我们要想学习系统的深度学习,就必定需要一些机械学习的基础。那么它到底是啥呢?

1.1定义

机器学习(Machine Learning)
是指从有限的数据中学习出具有一般性的规律,并利用这些规律对未知数据进行推测的方法。

再具体一点

我们用一个D维向量 x = [ x 1 , x 2 , . . . , x D ] T x=[x_1,x_2,...,x_D]^T x=[x1​,x2​,...,xD​]T来表示数据的特征,也称为特征向量。
标签通常用 y y y来表示。
标记特征标签的数据叫做样本,一组样本构成的集合叫做数据集(训练集和测试集).

x , y x,y x,y都有了,那不就可以通过函数来求标签y的值了嘛。
我们可以通过函数来预测,也可以通过条件概率来预测。现在思路有了,只要找到一个最好的函数就能分类了。于是前仆后继的大佬们开始开发算法了。

1.2流程

我们先对机械学习的大体流程有一个了解。使用机器学习模型一般包含几个步骤:

数据预处理 特征提取 特征转换 预测
  • 数据预处理
    • 初步对数据进行清洗(如去掉一些缺失特征的样本或多余的数据特征)
    • 加工(对数值特征进行缩放和归一化).
  • 特征提取
    • 从原始特征中提取高质量特征(如文本分类中去除停用词)
    • 尺度不变特征变换(Scale Invariant Feature Transform)特征
  • 特征转换
    对特征进一步加工,如升维,降维。
    降维途径
    • 特征抽取(Feature Extraction)
    • 特征选择(Fearture Selection)
  • 预测
    机器学习的核心部分,学习一个函数并进行预测.

2.三个要素

对于数据的处理以后再说,先把机械学习的原理给整明白它.
机器学习方法可以粗略的分为三个基本要素:模型,学习准则,优化算法.

2.1模型

  • 线性模型

假设空间为一个参数化的线性函数族,那么有

f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b

其中,w为权重向量,b为偏置。

  • 非线性模型

广义的非线性模型可以写为多个非线性基函数 ϕ ( x ) \phi(x) ϕ(x)的线性组合,那么有

f ( x ) = w T ϕ ( x ) + b f(x)=w^T\phi(x)+b f(x)=wTϕ(x)+b

其中,

ϕ ( X ) = [ ϕ 1 ( x ) , ϕ 2 ( x ) , . . . , ϕ i ( x ) , . . . , ϕ k ( x ) ] \phi(X)=[\phi_1(x),\phi_2(x),...,\phi_i(x),...,\phi_k(x)] ϕ(X)=[ϕ1​(x),ϕ2​(x),...,ϕi​(x),...,ϕk​(x)],
k k k表示 ϕ ( x ) \phi(x) ϕ(x)组成向量的个数

2.2学习准则

当我们知道有办法可以根据变量预测结果后,那么怎么来评价这个办法好不好合不合适呢,这里先引入一个概念叫损失函数(Loss Function)

2.2.1损失函数

损失函数是一个非负实数函数,用来量化模型预测与真实标签之间的差异。
通常写做 L ( y ^ , f ( x ) ) L(\hat{y},f(x)) L(y^​,f(x))

  • 0-1损失函数

最直观的损失函数是模型在训练集上的错误率。

L ( y ^ , f ( x ) ) = { 0 y = f ( x ) 1 y ≠ f ( x ) L(\hat{y},f(x))= \begin{cases} 0& \text{$y=f(x)$}\\ 1& \text{$y\not=f(x)$} \end{cases} L(y^​,f(x))={01​y=f(x)y​=f(x)​

0-1损失函数可以客观直接的反映出模型预测结果与真实标签的关系,但是缺点为不连续且导数为0,难以优化。

  • 平方损失函数(Quadratic Loss Function)

L ( y ^ , f ( x ) ) = 1 2 ( y − f ( x ) ) 2 L(\hat{y},f(x))=\frac12(y-f(x))^2 L(y^​,f(x))=21​(y−f(x))2

平方损失函数常用于预测标签 y y y为实数的任务中,一般不适用于分类问题。

  • 交叉熵损失函数(Cross-Entropy Loss Function)

适用于分类问题的是交叉熵损失函数,假设标签 y y y有 C C C个,那么就可以理解为有 C C C维。
用一个 C C C维的one-hot向量 y y y来表示标签,举个简单的例子,我们让 C = 9 C=9 C=9,
[0 0 0 0 0 0 1 0 0 ]
1 2 3 4 5 6 7 8 9
那么当前向量 y y y除了第7维为1,其余都为0。换种说法,标签向量可以看作是样本标签的条件概率分布,即 y = P r ( y ∣ x ) y=P_r(y|x) y=Pr​(y∣x)。
假设样本类别为 k k k(在例子当中 k k k=7),那么属于第 k k k类的概率为1,属于其他类的概率为0。
对于两个概率分布,一般可以用交叉熵来衡量它们的差异,标签 y y y与模型预测 f ( x ) f(x) f(x)之间的交叉熵为

L ( y ^ , f ( x ) ) = − y T l o g f ( x ) = − ∑ c = 1 C y c l o g f c ( x ) L(\hat{y},f(x))=-y^Tlogf(x) =-\sum_{c=1}^C y_c log f_c(x) L(y^​,f(x))=−yTlogf(x)=−∑c=1C​yc​logfc​(x)

在这里, y c y_c yc​和 f c f_c fc​表示的是第 c c c维的输出向量。

前面我们说过了, y y y是一个one-hot向量,上述公式也可以写成

L ( y ^ , f ( x ) ) = − l o g f y ( x ) L(\hat{y},f(x))=-logf_y(x) L(y^​,f(x))=−logfy​(x)

是不是有点像对数似然?
是的,交叉熵损失函数也可以看作是负对数似然函数(Negative Log-likelihood)。

  • Hinge损失函数(Hinge Loss Function)

对于二值分类,假设 y y y的取值为-1和1,那么损失函数就可以写成

L ( y ^ , f ( x ) ) = m a x ( 0 , 1 − y f ( x ) ) L(\hat{y},f(x))=max(0,1-yf(x)) L(y^​,f(x))=max(0,1−yf(x))

支持向量机SVM的损失函数就是用的这个。

2.2.2 风险最小化准则

除了讨论损失函数,我们还需要适当大度一点给一个可容忍的犯错度,这个可容忍的度就是期望错误。
搁谁谁都希望期望错误为0,但实际上十有八九出来的结果也就是那么回事儿。所以在这里就得靠往常的经验来判断错几个算是正常。
经验错误也叫经验风险是可以计算的,即在训练集上的平均损失。

R D e m p = 1 N ∑ n = 1 N L ( y , f ( x ) ) R^{emp}_D=\frac1N\sum_{n=1}^N L(y,f(x)) RDemp​=N1​∑n=1N​L(y,f(x))

那么下一个目标就是找一个参数,让整体的经验风险变得最小,让我们随机挑选一个 θ \theta θ来作为参数(或一组参数)。

θ ∗ = a r g θ m i n R D e m p ( θ ) \theta^*=arg_\theta minR_D^{emp}(\theta) θ∗=argθ​minRDemp​(θ)

这也就是经验风险最小化准则(Empirical Risk Minimazation,ERM)。

2.3优化算法

​现在我们有了方法(函数或者概率),又想办法让风险降到最小,那么剩下的就是找到一个最优解 f ( x , θ ∗ ) f(x,\theta^*) f(x,θ∗)了。
说白了机械学习的训练过程就是最优化问题的求解过程。
优化问题(Optimization) 又可以分为参数优化超参数优化,参数我们都能理解,那么超参数它超在哪里呢?

除了可学习的参数之外,还有一类参数是用来定义模型结构或优化策略的,比如在贝叶斯方法中,超参数可以理解为参数的参数,控制模型参数分布的参数。

在警察里头就类似督察吧。明白了超参数是个什么东西以后,具体怎么优化它呢?常见的超参数包括聚类算法中的类别个数,梯度下降法中的步长,正则化项的系数,神经网络的层数,支持向量机中的核函数,主要写一下梯度下降这一个比较常用的算法。

2.3.1梯度下降法

在机器学习中,最常用的就是利用梯度下降来优化算法,根据上面的解释,就是初始化参数 θ 0 \theta_0 θ0​,然后迭代算出最小风险。

θ t + 1 = θ t − α ∂ R D ( θ ) ∂ θ \theta_{t+1}=\theta_t-\alpha\frac{\partial R_D(\theta)} {\partial\theta} θt+1​=θt​−α∂θ∂RD​(θ)​

其中, θ t \theta_{t} θt​表示的是第 t t t次的迭代参数。
将损失函数代入,得到

θ t + 1 = θ t − α 1 N ∑ n = 1 N ∂ L ( y , f ( x ; θ ) ) ∂ θ \theta_{t+1}=\theta_t-\alpha\frac1 N \sum_{n=1}^N\frac{\partial L(y,f(x;\theta))} {\partial\theta} θt+1​=θt​−αN1​∑n=1N​∂θ∂L(y,f(x;θ))​

这里, α \alpha α表示的是搜索步长,在机器学习中一般称为学习率(Learning Rate)
上述方法也叫批量梯度下降法,因为目标函数是整个训练集上的风险函数。这种方法在每次迭代时需要计算每个样本上损失函数的梯度并求和,当训练集中的样本数量很大时,空间复杂度比较高,每次迭代的计算开销也很大。

2.3.2随机梯度下降法

为了减少每次迭代的计算复杂度,我们也可以在每次迭代时只采集一个样本,计算这个样本损失函数的梯度并更新参数,即随机梯度下降法(Stochastic Gradient Descent,SGD)
随即梯度下降法与批量梯度下降的区别是每次迭代的优化目标是对所有样本的平均损失函数还是对单个样本的损失函数。随即梯度下降相当于在批量梯度下降的梯度上引入了随机噪声,在非凸优化问题中,更容易逃离局部最优点。

2.3.3小批量梯度下降法

随机梯度下降法的一个缺点在于无法充分利用计算机的并行计算能力。所以在这里我们引入小批量梯度下降法(Mini-Batch Gradient Descent)。我们可以理解为,小批量是批量和随机的折中。
每次迭代时,随机选取一个包含 K K K个样本的子集,计算在这个子集上每个样本损失函数的梯度并进行平均,然后在进行参数更新

θ t + 1 ← θ t − α 1 K ∑ x , y ∂ L ( y , f ( x ) ) ∂ θ \theta_{t+1}\leftarrow\theta_t-\alpha\frac1K\sum_{x,y} \frac{\partial L(y,f(x))} {\partial\theta} θt+1​←θt​−αK1​∑x,y​∂θ∂L(y,f(x))​

小批量梯度下降法计算开销小,因此逐渐成为大规模的机器学习中的主要优化算法。

上一篇:【CT】Filtered Backprojection原理(parallel-beam&fan-beam)


下一篇:Raspberry Pi Pico使用CricuitPython---(2)