目录
本文旨在一文整理输出深度学习相关的知识暨笔记,以供深度学习入门同学快速取阅。部分内容基于视频教程整理,同时在此感谢原作者分享。
一、 什么是机器学习和深度学习
机器学习(Machine Learning)和深度学习(Deep Learning)是人工智能领域的核心技术,以下是它们的核心概念和区别:
机器学习(Machine Learning)
-
定义:
机器学习是一种通过数据训练模型,使计算机系统自动学习规律并做出预测或决策的技术。它不依赖明确的编程指令,而是通过算法从数据中提取模式。 -
核心特点:
- 算法多样性:包括线性回归、决策树、支持向量机(SVM)、随机森林等。
- 数据驱动:依赖结构化数据(如表格数据)进行训练。
- 应用场景:
- 分类(如垃圾邮件识别)
- 预测(如股票价格趋势)
- 推荐系统(如电商推荐商品)
-
典型方法:
- 监督学习(有标签数据,如分类、回归)
- 无监督学习(无标签数据,如聚类)
- 强化学习(通过反馈优化决策,如游戏AI)
-
局限性:
- 处理复杂非线性问题(如图像识别)时效果有限。
- 依赖人工特征工程(需手动提取数据特征)。
深度学习(Deep Learning)
-
定义:
深度学习是机器学习的一个子领域,核心是使用多层神经网络(Deep Neural Networks)自动学习复杂特征。它模仿人脑的分层信息处理机制。 -
核心特点:
- 神经网络结构:包含输入层、隐藏层(多层)、输出层,通过神经元连接传递信息。
- 自动特征提取:无需人工设计特征,模型直接从原始数据(如图像像素)学习高阶特征。
- 应用场景:
- 图像识别(如人脸检测、自动驾驶、视觉任务)
- 自然语言处理(如机器翻译、文本理解)
- 语音识别(如智能助手)
-
典型模型:
- 卷积神经网络(CNN):专用于图像处理,通过卷积层提取空间特征。
- 循环神经网络(RNN):处理时序数据(如文本、语音)。
- Transformer:基于注意力机制,用于自然语言处理(如GPT模型)。
-
优势与挑战:
- 优势:处理高维度、非结构化数据(如视频)效果显著。
- 挑战:
- 需大量数据训练(如百万级图像数据集)。
- 计算资源消耗高(依赖GPU集群)。
- 模型解释性差(“黑箱”问题)。
关键区别
维度 | 机器学习 | 深度学习 |
---|---|---|
数据需求 | 中小规模结构化数据 | 大规模非结构化数据 |
特征工程 | 依赖人工设计特征 | 自动提取特征 |
模型复杂度 | 相对简单(如线性模型) | 高度复杂(多层网络) |
计算资源 | 普通CPU即可 | 需GPU加速计算 |
适用问题 | 简单模式识别、预测 | 复杂模式(如图像、语言) |
深度学习和机器学习主要的区别还是在特征工程。神经网络可以认为是黑盒子,可以自己学习数据特征,提取特征。深度学习之所以称为深度学习是因为作为机器学习的子领域其核心是多层的神经网络。很明显的缺点是计算量参数大,千万或亿级别,计算速度慢。
传统机器学习,如K近邻算法,就不能用来处理图像分类,效果很不理想。(典型场景如,如果图片含背景会被参与到主体的识别计算,那么最终分类结果会受背景影响,但其实我们只需要关注图片主体来判断即可)
我们来感受下传统机器学习对图片的分类识别例子。
假设三维矩阵表示一张图片。
假设用传统机器学习K邻近算法分类。
训练数据样例。
开始处理分类。
是通过距离算出来的比较像的图片来进行分类。(分类别)
关系总结
- 深度学习是机器学习的进阶分支,专用于解决传统机器学习难以处理的复杂问题。
- 机器学习更侧重“广义的数据建模”,而深度学习聚焦“多层神经网络的自动化学习”。
示例:
- 用机器学习预测房价:线性回归分析历史数据中的面积、位置等因素。
- 用深度学习识别人脸:CNN模型自动从像素中学习眼睛、鼻子等特征组合。
二、 神经网络基础
神经网络(Neural Network)是模仿生物神经系统结构和功能的计算模型,核心思想是通过分层连接的计算单元处理信息。以下是其基础概念的详解:
1. 基本结构
神经网络由以下关键组件构成:
-
神经元(Neuron):
模拟生物神经元,接收输入信号,通过激活函数(如Sigmoid、ReLU)处理后输出信号。
公式示例:
(输出 = f(权重 \cdot 输入 + 偏置))
其中 (f) 为激活函数。 -
层(Layer):
- 输入层:直接接收原始数据(如图像像素、文本词向量)。
- 隐藏层:进行特征转换和抽象(多层结构形成“深度”网络)。
- 输出层:生成最终结果(如分类标签、预测值)。
-
连接权重(Weights):
神经元之间的连接强度,决定信号传递的权重,通过训练不断调整。
2. 工作原理
神经网络通过前向传播(Forward Propagation)和反向传播(Back Propagation)实现学习和优化:
-
前向传播:
- 输入数据逐层传递,每层神经元计算加权和并应用激活函数。
- 最终输出层产生预测结果。
示例:图像输入 → 隐藏层提取边缘特征 → 输出层识别为“猫”。
-
反向传播:
- 计算预测结果与真实标签的误差(如均方误差、交叉熵)。
- 利用梯度下降算法,从输出层反向逐层调整权重和偏置,最小化误差。
核心公式:
(权重更新 = 权重 - 学习率 \times 误差梯度)
3. 关键类型
根据结构和用途,主要分为:
-
前馈神经网络(Feedforward NN):
信号单向流动(输入→输出),无反馈循环,适用于静态数据处理(如分类、回归)。 -
卷积神经网络(CNN):
引入卷积层和池化层,专用于图像处理:- 卷积层:提取局部空间特征(如边缘、纹理)。
- 池化层:压缩数据,减少计算量(如最大池化保留显著特征)。
-
循环神经网络(RNN):
包含时间维度反馈(如LSTM、GRU),处理序列数据(如文本、语音):- 记忆单元保存历史信息,解决长期依赖问题。
4. 训练流程
神经网络的典型训练步骤:
-
数据准备:
- 收集并预处理数据(如归一化、分词)。
- 划分训练集、验证集、测试集。
-
模型初始化:
- 随机设置初始权重和偏置。
- 选择网络结构(如层数、神经元数量)。
-
迭代优化:
- 前向传播计算输出。
- 反向传播更新权重。
- 重复直至误差收敛或达到预设迭代次数。
-
评估与调优:
- 使用验证集防止过拟合。
- 调整超参数(如学习率、层数)。
5. 核心优势与挑战
-
优势:
- 自动学习复杂非线性关系。
- 处理高维度数据(如视频、三维图像)。
- 灵活适配多种任务(分类、生成、预测)。
-
挑战:
- 计算成本高:深度网络需GPU加速。
- 过拟合风险:数据不足时模型泛化能力差。
- 解释性弱:决策过程难以直观理解(“黑箱”问题)。
示例:
- 简单分类任务:
输入:手写数字图像 → 神经网络提取特征 → 输出:数字0-9的分类。 - 自然语言处理:
RNN处理句子:“今天天气晴朗” → 输出情感分析结果为“积极”。
神经网络是深度学习的基础,其分层抽象机制使其成为处理复杂现实问题的核心工具。
6. 神经网络基础理解例子
以下内容部分参考了教程《深度学习保姆级教学》。
先从计算机如何识别图片开始。
假设得分函数f(),得出属于每个类别的得分,每个像素点的权重参数W是不一样的。
假设有10个分类,f=Wx+b可以得出图片数据在10个类别下的得分,不同类别不同的权重W。因此通过矩阵得到不同类别下的得分。
10 代表10个不同类别。
W权重参数, b偏置参数(微调)。
各自类别是各自的b值,b不是固定值。
假设图片分为4个像素,通过得分函数计算在3个类别下的分数。
3类别下的权重W(4个像素都有W值) 与3个类别下的b。
W中,狗这个行的第三个像素权重是2.1,说明狗类别中第三个像素对识别是比较重要。
W这个矩阵是哪来的?优化而来的。一开始可能就是随机的矩阵(如下面这个矩阵权重参数对猫的识别就是很一般),后来经过训练得到最好的W矩阵。神经网络就是在找W的过程,就是做这个事。
神经网络,一般是网络结构不变,不同的任务损失函数的定义不一样而已。但loss值都是越大说明越偏离越不好。
比如下面的一个损失函数定义,所有的其他类别得分减去正确类别的得分。1值为容忍程度。
并不一样。模型A的参数只关注了数据样本中的第一个点,后面都是0,说明只关注局部,所以A是过拟合。B的权重说明是0.25均匀分布到样本中的每一个点。
所以加正则化惩罚项R(W)来解决参数 权重参数变异(入是惩罚系数,干掉削弱那些变异的地方 入值大,不变异的地方 入值小)。
模型越复杂,过拟合风险越大。
刚开始可能W权重是随机初始化的,但是如何更新W呢???
求loss。
回归任务是得分值计算损失,分类任务由概率值来计算损失。
得分值转成概率值来分类。
ex 放大区别。norm归一化,得到概率值P。
L函数求损失(对数函数log):X=得出的概率值P是0-1之间,概率值越接近1的说明越接近类别。所以用对数函数log。 X=P越接近0代表损失越大。
前向传播: Wx->L =loss
Wx算出loss 完成属于前向过程。若得出的损失高时需要调整W了,更新W那就需要反向传播了。
求出W。
源数据 有可能经过得分函数中 ABC好几个 W参数矩阵 变换。如果1次变换的话就是与线性回归和逻辑回归没多大区别。神经网络就是 由原来的 一个W权重 变更多个W权重来完成这个事情。
神经网络本质在优化求解,可使用梯度下降。
对f和z求偏导,就知道z对结果的影响有多大。
对X求偏导需要做两步。Y类似。
反过来,分别求 w3 w2 w1对 f的影响多大。其实也会涉及对 X Y Z求偏导。
所以神经网络的 反向传播并不是像梯度下降中可以直接计算得出,而是有层次或顺序的(从后往前逐层计算),反向传梯度值(来做梯度相乘)。
正向得到loss后用loss反向求导,得到新的W。再反复直到得到最优解W。
下面红色0.2是算出的梯度,实际场景上都是对矩阵偏导的。
答案是:不行。
7. 神经网络整体架构理解
神经元 = 列数 = 一个样本有 3个 输入特征 x1 x2 x3 年龄 体重 身高。
层1 层2 则是对应 xw1 (xw1)w2
层1将3个特征(神经元)x1 x2 x3 转成4个特征(比如1 圆圈 = 0.1 * x1 + 0.2x2 +0.3x3,2 圆圈 = 0.4 * x1 + 0.5x2 +0.6x3,)–至于为什么计算要这么分 这就不管了。如下:
非线性函数max( ) 做非线性变换
神经元越多理论上效果越好,但越多过拟合的问题出现的概率和风险越大?是的。神经元 64 、28是属于常见的值。
正则化的作用
激活函数
上者会出现梯度消失的现象出现。
DROP-OUT
三、卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network,CNN)是专用于处理图像、视频等空间数据的深度学习模型,其核心通过卷积操作提取局部特征。以下是CNN的基础详解:
1. 核心组件
CNN的关键结构包括:
-
卷积层(Convolution Layer):
通过卷积核(滤波器)扫描输入数据,提取局部特征(如边缘、纹理)。
操作示例:
输入图像(5x5像素)与3x3卷积核逐区域相乘,生成特征图。
公式:
(输出[i,j] = \sum_{m,n} 输入[i+m,j+n] \times 卷积核[m,n]) -
池化层(Pooling Layer):
压缩特征图尺寸,减少计算量并保留显著特征。- 最大池化(Max Pooling):取区域内的最大值。
- 平均池化(Average Pooling):取区域内的平均值。
-
激活函数:
引入非线性,常见ReLU(Rectified Linear Unit):
(ReLU(x) = max(0, x))
2. 工作原理
CNN通过多层卷积和池化逐步抽象特征:
-
低级特征提取:
- 第一层卷积捕获边缘、颜色块等基础特征。
示例:输入人脸图像 → 卷积层提取眼睛轮廓。
- 第一层卷积捕获边缘、颜色块等基础特征。
-
中级特征组合:
- 后续层将低级特征组合为复杂结构(如眼睛、鼻子)。
-
高级特征识别:
- 最终层输出可分类的特征(如“人脸”)。
3. 典型结构
CNN的常见架构模式:
- 输入层:接收原始图像(如RGB三通道矩阵)。
- 卷积层堆叠:
每层卷积核尺寸可逐渐减小(如从5x5到3x3),聚焦更精细特征。 - 全连接层(Fully Connected Layer):
在末尾将特征映射转换为分类结果(如输出10类标签)。
经典模型示例:
- LeNet-5:早期CNN,用于手写数字识别。
- ResNet:引入残差连接,解决深度网络训练难题。
4. 优势与挑战
-
优势:
- 局部特征提取:卷积核专注小区域,适应图像的空间相关性。
- 平移不变性:同一特征在不同位置可被识别。
- 计算高效:池化减少数据量,卷积共享计算。
-
挑战:
- 深度依赖:过深网络可能导致梯度消失。
- 参数调整复杂:卷积核尺寸、层数需大量实验优化。
应用示例:
- 图像分类:输入动物图片 → CNN识别为“猫”或“狗”。
- 目标检测:在视频中框定并识别车辆、行人。
CNN通过其独特的空间特征提取机制,成为计算机视觉领域的基石模型。
右下角是权重,得到特征图 33
f是不同特征提取方法。
更正:卷积核
卷积核 filter
可以多个卷积核进行特征提取,得到多个对应特征图。
0 边缘填充 主要解决被计算的节点的公平性,弥补边界特征被提取的缺失。中间的数据被计算的多。也可以加多圈,也可以用来补充长度对齐。
步长 1 核尺寸 33
64张特征图(池化时 图的数量不改变)
用于特征压缩
每个2*2区域中 取出特征图中最大的值。(值大权重比较重要)
平均池化
两次卷积(卷积层CONV + 非线性变换 RELU 即激活层), 一次池化。
带参数(参数变化)计算的才算为一层。
一般自己训练模型的话全用经典网络就可以够用了,不用自己设计网络结构。
四、循环神经网络(RNN)
循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络模型。与传统的神经网络不同,RNN 具有记忆能力,能够处理时间序列数据,如文本、语音、时间序列等。
1. 基本结构
RNN 的基本结构包括输入层、隐藏层和输出层。其核心思想是在隐藏层中引入循环连接,使得网络能够记住之前的信息。
假设输入序列为 (x_1, x_2, \dots, x_T),隐藏状态为 (h_t),输出为 (y_t),则 RNN 的基本公式如下:
h t = f ( W h h t − 1 + W x x t + b h ) h_t = f(W_h h_{t-1} + W_x x_t + b_h) ht=f(Whht−1+Wxxt+bh)
y t = g ( W y h t + b y ) y_t = g(W_y h_t + b_y) yt=g(Wyht+by)
其中:
- (W_h) 是隐藏状态的权重矩阵
- (W_x) 是输入状态的权重矩阵
- (W_y) 是输出状态的权重矩阵
- (b_h) 和 (b_y) 是偏置项
- (f) 和 (g) 是激活函数,通常为 sigmoid 或 tanh 函数
2. 训练过程
RNN 的训练通常使用反向传播算法(Backpropagation Through Time, BPTT)。由于 RNN 具有时间依赖性,反向传播需要在时间维度上进行展开,计算梯度并更新权重。
3. 变体
由于 RNN 在处理长序列时容易出现梯度消失或梯度爆炸的问题,研究者提出了多种变体,如:
- LSTM(Long Short-Term Memory):引入了记忆单元,能够更好地处理长序列。
- GRU(Gated Recurrent Unit):简化了 LSTM 的结构,减少了计算复杂度。
4. 应用
RNN 及其变体广泛应用于自然语言处理、语音识别、时间序列预测等领域。
5. 代码示例
以下是一个简单的 RNN 实现(使用 Python 和 TensorFlow):
import tensorflow as tf
# 定义 RNN 模型
model = tf.keras.Sequential([
tf.keras.layers.SimpleRNN(units=64, activation='tanh'),
tf.keras.layers.Dense(units=10, activation='softmax')
])
# 训练模型
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(x_train, y_train, epochs=10)
总结
RNN 是一种强大的序列数据处理工具,但其训练和优化需要特别注意梯度问题。通过引入 LSTM 和 GRU 等变体,可以更好地处理长序列数据。
二次会把第一次隐层的 特征和之前的原始参数 两个参数再次传到 隐层中 计算。(因此RNN适合NLP,有上下文的理解; CNN适合图像处理。)
要先对英文向量化,然后进行计算。
LSTM是对RNN的改进,或者说是变体。
维度一般50-300维来表示,理论上越大越精准,但计算量越大。
向量 词库大表
窗口滑动
构建数据的模型。
五、对抗生成网络(GAN)
对抗生成网络(Generative Adversarial Networks,简称GANs)是一种深度学习模型,由Ian Goodfellow于2014年提出。GANs由两个神经网络组成:生成器(Generator)和判别器(Discriminator),它们在训练过程中相互竞争、相互对抗。
基本原理
-
生成器(Generator):
- 生成器的任务是生成尽可能逼真的数据。
- 它接收一个随机噪声向量作为输入,并输出一个数据样本。
- 目标是让生成的数据看起来像是从真实数据分布中采样出来的。
-
判别器(Discriminator):
- 判别器的任务是区分生成的数据和真实数据。
- 它接收一个数据样本作为输入,并输出该样本是真实的概率。
- 目标是最大化正确分类真实数据和生成数据的概率。
-
对抗过程:
- 在训练过程中,生成器和判别器交替进行优化。
- 首先,固定其中一个网络的参数,更新另一个网络的参数以最大化其损失函数。
- 然后,交换角色,继续优化。
- 这个过程不断重复,直到两个网络达到一种动态平衡状态,此时生成器能够生成非常逼真的数据,而判别器难以区分真实数据和生成数据。
损失函数
-
生成器的损失函数:通常使用交叉熵损失,目标是让判别器将生成的数据误判为真实数据的概率最大化。
L G = − E z ∼ p z ( z ) [ log D ( G ( z ) ) ] \mathcal{L}_G = -\mathbb{E}_{z \sim p_z(z)}[\log D(G(z))] LG=−Ez∼pz(z)[logD(G(z))]
-
判别器的损失函数:同样采用交叉熵损失,但需要同时考虑真实数据和生成数据的分类准确性。
L D = − E x ∼ p d a t a ( x ) [ log D ( x ) ] − E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \mathcal{L}_D = -\mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] - \mathbb{E}_{z \sim p_z(z)}[\log (1 - D(G(z)))] LD=−Ex∼pdata(x)[logD(x)]−Ez∼pz(z)[log(1−D(G(z)))]
应用领域
GANs在多个领域有着广泛的应用,包括但不限于:
- 图像生成与合成
- 数据增强
- 超分辨率重建
- 风格迁移
- 文本到图像的转换等
矛与盾
生成器网络 判别网络 二分类
应用场景:
六、Keras实战
以下是教程《深度学习保姆级教学》的一些实战笔记,包含上面理论内容的实操,作为记录,不感兴趣的同学也可以直接绕开即可。
标签:熊猫
标签转换成 0 0 1等
最后得到3个值。
梯度下降的优化器SGD 损失函数=
过拟合现象 主要还是学习率 过大造成的,一般学习率对训练结果影响最大。
可以杀死一些过多的神经元,可以防止过拟合。
初始化权重参数的方法可以自己设置,不设置就是默认的。
加正则化,
正则化惩罚,惩罚W,不容忍较大的W,过拟合。
测试数据与训练数据的规格要是一样的。
卷积层
拉长操作。FC层
直接使用 经典网络代码 参数即可,细节参数 128等不用自己抠代码。
学习率衰减 策略(每个epoch)
归一化(数据格式规范)。与卷积层的 一个道理
FC层 = 全连接层
LSTM模型 相当于 RNN的变形体
数据预处理: 加载,分集,…
GAN代码。
- 彩蛋不能少~