深度学习基础
前言
机器学习流程:
- 数据获取
- 特征工程
- 建立模型
- 评估与应用
特征工程的作用:
- 数据特征决定了模型的上限
- 预处理和特征提取是最核心的
- 算法与参数选择决定了如何逼近中共上限
深度学习解决的问题:怎么样提特征,计算机学习什么样的特征是最合适的
深度学习应用
深度学习在各个领域中有广泛的应用,其用途包括但不限于以下几个方面:
- 计算机视觉:
- 图像分类:将图像分为不同的类别,如猫、狗、汽车等。
- 物体检测:识别图像中的特定物体,并标出其位置.
- 人脸识别:识别图像或视频中的人脸。
- 图像生成:生成具有艺术性或创造性的图像,如风格迁移和GAN(生成对抗网络)生成的图像。
- 自然语言处理:
- 机器翻译:将一种语言的文本翻译成另一种语言。
- 文本分类:将文本数据分为不同的类别,如垃圾邮件检测和情感分析。
- 文本生成:生成自然语言文本,如文本摘要、对话生成和故事创作。
- 语音识别:
- 语音转文本:将语音信号转换为可读的文本。
- 语音生成:生成自然流畅的语音,如虚拟助手和有声读物。
- 医学和生物信息学:
- 医学影像分析:诊断和检测医学图像中的疾病,如X射线和MRI。
- 基因组学分析:分析基因和蛋白质序列以了解基因组学和药物研究。
- 自动驾驶:
- 深度学习在自动驾驶汽车中用于感知环境、决策和控制车辆,以实现安全的自动驾驶。
计算机视觉
计算机眼中的图像:一张图片被表示成三维数组的形式,每个像素的值从0到255,例如:300 x 100 x 3(矩阵长 x 矩阵宽 x 颜色通道RGB)
计算机视觉面临的挑战:
-
照射角度
-
形状改变
-
部分遮蔽
-
背景混入
k近邻不能用来图像分类的原因:背景主导是一个最大的问题,但图像分类关注的是主体(主要成分)
神经网络基础
得分函数 f(x,W)
得分函数的定义:
得分函数是神经网络对输入数据进行预测和表达的关键工具。在神经网络的输出层,得分函数将网络的内部表示转化为具体的预测值或分类结果。对于不同的任务和数据类型,得分函数的形式和计算方式也会有所不同。
参数解释:
(1)x:所有像素点排成一列所形成的矩阵
(2)W:权重参数矩阵,不同类别对应权重参数不同(每一行代表一种类别的权重参数)
(3)b:偏重参数,微调作用,不同类别对应微调值不同
举例详细解释:
多组权重参数构成了决策边界
损失函数
损失函数的概念:
损失函数用于量化模型预测与真实值之间的差异。它是预测值与真实值之间差距的计算方法,并通过深度学习框架(如PyTorch、TensorFlow)进行封装。
损失函数的重要性:
在机器学习中,目标是使预测值尽可能接近真实值,因此需要通过最小化预测值和真实值之间的差异来实现。损失函数的选择对于模型的训练速度和效果至关重要,因为不同的损失函数会导致不同的梯度下降速度。
简单举例:
提问:损失函数的值相同,意味着两个模型效果一样吗?
答案是不一样的。举例:
由于得分函数中权重参数会产生损失,故而损失函数需加上正则化惩罚项(权重参数产生的损失)
Softmax分类器
通过得分函数所得结果是一个输入值的得分值,针对分类任务,若将类别的得分转换成概率的形式,结果会更加直观。
- 归一化
- 计算损失值
简单举例:
前向传播
前向传播是指从输入层开始,经过一系列的隐藏层后,将结果输出到输出层的过程。前向传播的过程将每层的输出作为下一层的输入,最终得到网络的输出。
前向传播整体流程:
反向传播
反向传播是一种用于训练神经网络的优化算法,其基本思想是利用链式法则计算损失函数对每个参数的导数,从而更新参数。反向传播中的计算可以通过计算图来表示,其中每个节点代表一个运算,每个边表示数据的传递。
反向传播的主要思想是从输出层开始,计算每一层的梯度,然后根据链式法则将梯度向前传播,最终计算出每个参数的梯度。具体来说,对于每个参数,反向传播算法会计算其对损失函数的梯度,然后使用梯度下降等优化算法来更新参数。
简单的栗子:f(x,y,z) = (x+y)z
正向传播:
链式法则:梯度是一步一步传的
复杂的例子:
常见门单元:
- 加法门单元:均等分配
- MAX门单元:给最大的
- 乘法门单元:互换的感觉
举例:
神经网络整体架构
架构特点:全连接、非线性(一步一步进行);
神经网络的强大之处在于,用更多的参数来拟合复杂的数据。
神经元个数对结果的影响:
理论上来说,神经元个数越多,分类回归效果越好,但是神经元过多可能会造成过拟合现象。神经元越多,过拟合的风险越大。
过拟合的解决办法
不同的数据预处理结果会使得模型的效果产生很大的差异。
数据标准化:
参数初始化:通常使用随机策略进行
解决过拟合的办法
- 正则化+LR
- DROP-OUT(每一层训练过程中随机的选择一部分神经元进行训练)
激活函数
激活函数在神经网络中主要作用是给神经网络提供非线性建模能力。
(1)sigmoid函数:将输入变换为(0,1)上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中的某个值。
当我们想要将输出视作⼆元分类问题的概率时, sigmoid仍然被⼴泛⽤作输出单元上的激活函数。然而, sigmoid在隐藏层中已经较少使⽤,因为一旦数值较大或较小时会出现梯度消失现象。
(2)ReLU函数:线性整流单元,ReLU提供了一种非常简单的非线性变换。给定元素x,ReLU函数被定义为该元素与0的最大值。
ReLU函数的求导表现的很好:要么让参数消失,要么让参数通过。ReLU减轻了神经网络的梯度消失问题。