一、深度学习

1. 深度学习是什么

深度学习(Deep Learning)是机器学习(Machine Learning)的一个研究方向,而机器学习属于人工智能(AI, Artificial Intelligence)的范畴,人工智能是研究开发用于模拟延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

三者的关系可以参考https://www.geeksforgeeks.org/getting-started-machine-learning/提供的一张图如下。

  • 人工智能(AI)是指将机器或计算机程序赋予类似于人类智能的能力,即可以像人一样感知、理解、学习、推理和创造。
  • 机器学习(Machine Learning,简称ML)是人工智能中的一种方法和技术,通过让计算机从数据中学习模式和规律,从而不需要人类明确地编写特定的程序来完成任务。
  • 深度学习(Deep Learning)是一种基于人工神经网络的机器学习技术,通过模拟人脑神经元之间的联系和活动方式,来实现对输入数据进行分析、抽象和处理的能力。

深度学习--- 深度学习基础_机器学习

2. 机器学习划分

机器学习按照学习方式又可以划分为无监督学习、半监督学习、监督学习以及强化学习。深度学习中既有无监督学习算法(如GAN)、也有有监督学习算法(如CNN),由于近年来数据、算法、算力的快速发展,已单独形成一个研究分支。

深度学习--- 深度学习基础_ai_02

2.1 无监督学习

数据没有标签,算法自行学习数据规则

如:聚类(K-Means),降维方法(PCA),深度学习(GAN)

深度学习--- 深度学习基础_深度学习_03

2.2 半监督学习

数据部分有标签,算法包括一些对常用监督式学习算法的延伸,通过对已标记数据建模,在此基础上,对未标记数据进行预测。

分为归纳式和直推式,区别在于有无测试集

深度学习--- 深度学习基础_深度学习_04


深度学习--- 深度学习基础_深度学习_05

如:图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM)

2.3 监督学习

数据都有标签

如:KNN SVM 贝叶斯 决策树 XGBoost 随机森林 人工神经网络 深度学习(CNN)

深度学习--- 深度学习基础_机器学习_06

2.4 强化学习

特点:智能体通过不断和环境交互,获得相应的奖惩,进而不断学习

如:Q_learning, Action-Critic

深度学习--- 深度学习基础_人工智能_07

二、深度学习发展

深度学习本质上是神经网络的一种。神经网络技术起源于上世纪五六十年代,当时叫感知机(perceptron),包含有输入层、输出层和隐藏层。含多个隐藏层的多层感知器就是一种深度学习结构,深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示

深度学习--- 深度学习基础_语言模型_08

1. 发展历程

深度学习的发展历程可以参考下图,由单层感知机逐渐发展出RNN, CNN等。

深度学习--- 深度学习基础_ai_09

2. 主流研究框架

研究框架如下图有很多,目前主流的是Google的TensorFlow,FaceBook的Pytorch,TensorFlow是一种非常强大和成熟的深度学习库,对生产部署方面比较友好,Pytorch由于其类python代码及动态图及强大的社区,支持快速和动态训练,不过随着版本的迭代,两者功能也都越来越完善,更多内容可以参考:TensorFlow与PyTorch之争,哪个框架最适合深度学习

深度学习--- 深度学习基础_深度学习_10

3. 解决什么问题

深度学习主要解决两大类问题:分类和回归

深度学习--- 深度学习基础_机器学习_11

如:

  • 房价预测问题(回归)

深度学习--- 深度学习基础_ai_12

  • 目标检测(分类+回归)

深度学习--- 深度学习基础_语言模型_13

4. 实际应用

深度学习现如今在我们生活中的应用随处可见,已经融入到了我们生活各个方面,如:

  • 手机人脸解锁、以及人脸安全验证中用到的人脸识别技术, 车牌识别系统等(计算机视觉);
  • 智能音箱的语言识别功能,自动翻译等(自然语言处理)
  • 各种软件的自动推荐功能,如商品、视频等自动推荐(推荐系统)
  • 自动驾驶、智能机器人、工业自动检测、医学图像辅助检测、量化金融等等

最近微软推出的的ChatGPT,以及FaceBook推出的SAM(Segement anything)更是对我们的生活工作带来了更大的变化。

三、基本概念

这里参考课程中一个例子,对各深度学习中涉及的一些基本概念有个初步认识(3.3—3.7)。

课程地址:https://www.coursera.org/learn/neural-networks-deep-learning/lecture/A0tBd/gradient-descent

3.1 问题

给定一张64*64大小的RGB图,判断图中是否有猫?

深度学习--- 深度学习基础_机器学习_14

3.2 数据转换

这里输入是一张图片,为了运算,我们需要进行如下数值转换:

深度学习--- 深度学习基础_人工智能_15

输入:将RGB各通道像素值按顺序排列成一个向量\(x_n\) 这里展开维度\(n = 12288\),

输出:\(y\)为1表示有猫,为0表示无猫

所以问题变成一个求\(x_n\)到\(y\)的一个映射。要求这个映射,我们需要更多的数据样本来学习(训练集)。


进一步,假设我们有\(m\)张训练图片,每张图片都有一个对应的标签,即0表示无猫,1表示有猫,数据整合后用矩阵表示如下图。

深度学习--- 深度学习基础_机器学习_16

3.3 激活函数

我们这里构建一个简单的网络,求出权重\(w_1, w_2, …w_m\)后就可以得到一个从输入\(X\)到输出\(Y\)的映射关系\(f\) 。

深度学习--- 深度学习基础_人工智能_17

每个样本作为输入通过神经元后得到\(z = w^Tx + b\),这里得到的\(z\)是一个回归后的值,但我们给的标签是0或1,因此需要引入一个函数将数值\(z\)转换为0到1之间的一个数\(z’\),即\(g(z) \in [0, 1]\),在预测过程中给定一个阈值如0.5,如果\(z’>0.5\)则预测值\(\hat y\)记为1,否则记为0,进一步我们就可以将预测值变为0/1值。这里的函数采用\(g(z)=\frac{1}{1+e^{-z}}\),可以将任意数转换到0到1之间,称为sigmoid函数。

深度学习--- 深度学习基础_语言模型_18

以上的转换函数(sigmoid)称为激活函数,激活函数是向神经网络中引入非线性因素,通过激活函数神经网络就可以拟合各种曲线。

深度学习--- 深度学习基础_深度学习_19

常见的激活函数有以下

  • sigmoid 激活函数

函数的定义为:$ f(x) = \frac{1}{1 + e^{-x}} $,其值域为 $ (0,1) $。

深度学习--- 深度学习基础_机器学习_20

  • tanh激活函数

函数的定义为:\(f(x) = tanh(x) = \frac{e^x - e{-x}}{ex + e^{-x}}\),值域为 $ (-1,1) $。

深度学习--- 深度学习基础_深度学习_21

  • Relu激活函数

函数的定义为:$ f(x) = max(0, x) $ ,值域为 $ [0,+∞) $。

深度学习--- 深度学习基础_ai_22

  • Leak Relu 激活函数

函数定义为:

\[ f(x) = \left\{\begin{aligned} ax, \quad x<0 \\ x, \quad x>0 \end{aligned} \right. \]

值域为 $ (-∞,+∞) $。

图像如下($ a = 0.5 $)

深度学习--- 深度学习基础_ai_23

  • softmax 函数

函数定义为:

\[\sigma(z)_j = \frac{e{z_j}}{\sum_{k=1}K e^{z_k}} \]

Softmax 多用于多分类神经网络输出。

更多激活函数介绍可参考:https://cloud.tencent.com/developer/article/1800954

3.4 损失函数(代价函数)

经过以上转换后预测值变为0到1的一个概率值,在训练过程中为了评估预测值和真实值的差距,因此我们需要一个函数来进行衡量,在这个例子中,我们可以引用预测值和真实值的二次误差来进行衡量,即:

\[L(\hat y, y) = \frac{1}{2}(\hat y - y)^2 \]

这里的衡量函数就称为损失函数。当然这里当预测值接近0或者1时,损失会非常小,在训练过程中收敛会变慢,因此可以采用交叉熵损失,即:

\[L(\hat y, y) = -(ylog \hat y + (1-y)log(1 - \hat y)) \]

深度学习--- 深度学习基础_人工智能_24

二次代价函数适合输出神经元是线性的情况,交叉熵代价函数适合输出神经元是S型函数的情况。上述问题中经过sigmoid函数后在0和1时采用二次代价函数值非常小,收敛会变慢。

更多的损失函数介绍可参考:https://zhuanlan.zhihu.com/p/58883095

3.5 梯度下降

经过上述步骤,我们现在的问题变成如何调整权重\(w\)和偏置\(b\),使得损失函数能够达到最小值损失函数通常都存在一个下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。 只要设计的目标函数有下界,基本上都可以,损失函数非负更为方便,损失函数会比参数高一个维度。

深度学习--- 深度学习基础_ai_25

在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。当然这也和初始参数选择有些关系,如下图所示,不同的初始点,最终下降求得的结果可能不一致。

深度学习--- 深度学习基础_人工智能_26

动图演示: https://alphafan.github.io/img/blogs/grad_desc/p1.gif

更多梯度下降方法及可视化可参考:https://zhuanlan.zhihu.com/p/64882877

3.6 反向传播

经过上面步骤我们知道,要使得损失函数最小,我们需要对参数更新,那如何更新呢?这里引入反向传播,就是从损失函数开始,依次对每个参数求偏导,然后按照链式法则逐步往回更新,其中每次按照梯度方向更新的步长称为学习率

  • 学习率:参数迭代更新的步长
    如下图所示,其中\(\alpha\)即为学习率

深度学习--- 深度学习基础_人工智能_27

  • 链式法则:这个属于高等代数里面偏导数相关内容,用于反向计算相应参数的偏导数 。
    由下图所示,从损失函数\(J\)逐步反推可以得到其对\(a, b, c\)的偏导数。

深度学习--- 深度学习基础_语言模型_28

经过以上步骤反复迭代,直到损失函数的误差满足要求或者迭代次数达到设定上限,那么参数就完成了更新,那相应的从\(x\)到\(y\)的映射也就可以写出来,有了这个映射关系,后续有新得数据来,通过映射关系即可得到一个预测值。

3.7 卷积

上述例子中采用的是全连接网络,但实际应用中通常会涉及到卷积神经网络,其中一个重要点就是卷积操作,卷积操作有局部连接和权值共享的特点。依据下图可以理解成一个卷积核在图片上不同位置做卷积会提取到相应的特征。

示例

  • 卷积 + padding + bias(局部连接 + 权值共享)
    其中padding是边缘填充的意思,有些时候为了和图像边缘进行卷积,需要对图像边缘填充一些像素(如0)。
    卷积动图参考:

下图显示了两组卷积核对RGB通道卷积的例子。

深度学习--- 深度学习基础_语言模型_29

3.8 池化

池化操作通常有最大池化、平均池化。更多内容可参考:https://zhuanlan.zhihu.com/p/78760534

下图展示的是一个2*2大小的最大池化,即每4个相邻像素选择最大的作为该区域像素值,步长为2,所以这里特征图大小缩减为原来的1/2。

深度学习--- 深度学习基础_语言模型_30

3.9 欠拟合 过拟合

我们在训练过程中,如果数据量少或者迭代次数过多,就容易造成过拟合,反之数据量多或者迭代次数不够就容易欠拟合。如下图所示二分类过程中,欠拟合通常具有高偏差,而过拟合通常具有高方差,我们可以依据测试集和训练集的损失来进行判断。

深度学习--- 深度学习基础_语言模型_31


深度学习--- 深度学习基础_深度学习_32

防止过拟合可以采用以下方式

  • 增加数据量
  • DropOut 正则化
    即在训练过程中随机去除部分节点,通俗理解就是不要依赖于任何一个特征,因为该单元的输入可能随时被清除,因此训练后的参数不会偏重于某一个节点进而造成过拟合。


深度学习--- 深度学习基础_人工智能_33