推荐学习视频: www.bilibili.com/video/BV1Vx…
干货满满,一起学习😀
阅读笔记 ① —— 第1章 深度学习概念简介
1. 机器学习基本概念
机器学习的主要任务
在给定现实中获取一系列数据来构建一个模型,用于描述数据的具体分布(数据出现的可能性)
数据
- 数据形式各种各样,比如:
- 图片(计算机使用像素的排列来表示图片)每个像素可以表示为RGB(红绿蓝,3个数值),也可以RGBA(四个数值,增加的A为alpha)
- 文本(字符串)
- 音频(16bit(65536个值)表示声音的振幅,按照一定的采样频率44.1kHz来组成一段音频)
- 能处理的数据类型: 有标签的(e.g.电影评论的文本和文本对应的评价),无标签的(e.g.只是一段文本)。
有标签的👉监督学习(Supervised Learning)
拥有具体的数据+预测目标(即标签)
从数据出发构造具体的模型预测这些目标
- Main Task:
- 回归(预测连续的值,e.g.根据历史的气温预测未来的气温)
- 分类(预测离散的值,e.g.根据图片预测图片描述的具体物体类型)
无标签的👉无监督学习(Unsupervised Learning)
只有数据,没有预测目标,需要构造具体的模型->找出数据的具体规律
- Main Task: 聚类(找出相似的多组数据,并归类)
- 其实还有介于supervised和unsupervised之间的半监督学习(semi-supervised Learning)
模型
用于描述给定的数据,得到这个模型的过程称为机器学习模型的训练过程。
- 从概率论的角度来说,机器学习模型就是一个概率分布(具体如下图所示)
损失函数
监督学习分为两类问题
- 回归Regression
回归模型的极大估计->求出最优的参数θ,使得模型的预测值与目标值的差值对于训练数据的平方和最小
其中最小的argmin函数中需要优化的函数即损失函数,这个损失函数称为L2模损失函数(L2-norm Loss Function) or 方均误差损失函数(Mean Square Error,MSE)——与正态分布有关
- 如果误差服从其它的分布,e.g.拉普拉斯分布,即得到的损失函数为L1模损失函数(L1-norm Loss Function)
- 分类
分类问题的损失函数称之为交叉熵(Cross Entropy)
在训练的过程中,一般把数据集分为:①训练集(Training Set),②验证集(Validation Set),③测试集(Test Set)
- 选定了一种模型,可以调节超参数(hyper-parameter)——在模型初始化时选定且随训练过程不断变化的参数 【比如神经网络的层数】
在深度学习中,由于训练集越大越好,即可以考虑90%(训练),5%(验证),5%(测试)的划分
在机器学习中,可以考虑70%(训练)、20%(验证)、10%(测试)
模型的拟合
如果一个模型已经完全偏向于训练集,失去了一定的泛化性(指模型经过训练后,应用到新数据并做出准确预测的能力)——过拟合(Over-fitting)
解决方法:
给参数一个特定的分布,即先验分布 其中参数的平方和要*一个常数 α(正则化系数——正则化系数越小,即越偏向于过拟合)
减小参数的变化空间(缩小模型的表示范围) 有1.提前停止(Early Stopping),即可以观察验证集的损失函数是否停止下降并开始上升来判断模型 2.优化器的权重衰减(Weight Decay)
2. 深度学习基本概念
深度学习是基于神经网络的机器学习
张量
向量可以看成一维张量, 矩阵可以看成二维张量, 三维张量可以看作数字排列的长方体
深度学习的神经网络构造中,线性变换主要分为两类:
张量(包括向量和矩阵)的线性变换【比如卷积层,线性层等可通过线性变换和矩阵乘法来计算】
张量的逐点(Point-wise)变换【输入的张量的每一个分量(数字)进行相同的运算】 比如:都乘以一个数(或者形状相同的张量的对应分量);或者都应用一个(非线性)函数,最后输出一个与输入张量形状相同的新张量——张量应用激活函数(Activation Function)的过程
神经网络的构建中,都是一系列线性变换和非线性的激活函数运算交错叠加,最后构造一个含有很多参数的非线性模型【其中:可训练的参数是线性变换的系数】
神经元
在实际应用中,深度学习的神经网络多种多样但最终都能表示成神经元之间的相互连接的形式
- 唯一的区别:神经元的数目和 神经元之间的相互连接方式 不同 我们可以把
- 神经元的输入和输出排列成矩阵的形式
- 神经网络的weight进行线性变换——矩阵的乘法
- 激活函数的计算——对于矩阵每个元素的逐点计算
神经网络本身即不断调整bias和weight的过程,达到最优的预测情况
3. 输入数据的表示方式——数据的预处理
张量(向量和矩阵)的形式来表示神经网络中的数据
- 神经网络的神经元之间的数据传递是以浮点数形式来表示
- 但日常生活中的图像(Ch1 P19-20),文本(Ch1 P21-22),语音(Ch1 P23-25)都不是以浮点数的形式存储,所以需要转换
关于图像
- 黑白图片看作一个二维矩阵——其中两个维度为:图片的高h和图片的宽w
- 彩色图片:RGB(红绿蓝)三个通道——h×w×c(c是图片通道数目)
我们可以把多个三维张量堆叠在一起形成四维张量
增加一个维度:迷你批次的大小(mini-batch) 认为是每次输入神经网络的图片的数目,根据四维张量的四个维度排列方式可以分为:
- NCHW: 输入网络的张量大小=迷你批次×通道数目×图片高×宽
- NHWC: 输入网络的张量大小=迷你批次×图片高×宽×通道数目
图像数据的表示方式
图像数据可以表示为像素的集合
- 每个像素点都有: 一个灰度(Grayscale)+ 三个RGB +四个RGBA 通道
- 单个像素点的通道取值范围决定了像素可以表示的对比度的大小,一般在最亮和最暗的值之间离散地取256个分立值,即0~255之间的整数,分别代表不同的对比度 所以一张图片:h×w×c
- 其中如果是灰度图片:c=1
- 红绿蓝,c=3
- 红绿蓝以及透明度,c=4
4. 线性变换
全连接线性变换(具体实例:多层感知机)
1. 权重(Weight)
每一层都是全连接层,即如果是一个n大小输入的相量,需要变换成m大小的相量,需要一个m×n大小的矩阵——这种线性变换即连接的权重(Weight)
2. 偏置(Bias)
一般还会给线性变换之后的输出统一加一个训练参数,此参数为标量——一个实数
卷积线性变换(具体实例:CNN)
卷积操作:
5. 激活函数
激活函数:一类非线性函数的统称,对线性变换中输出结果的每个分量都应用激活函数,结果即非线性的。
- 输入层和隐藏层之间——主要使用的是:激活函数是ReLU(首选),还有Sigmoid,Tanh=2×Sigmoid-1
- 输入层和隐藏层之间——主要根据场景来划分:
6. 损失函数
- 分类的损失函数
- 二分类神经网络(输出的激活函数Sigmoid,损失函数:二分类的交叉熵)
- 多分类(输出的激活函数:Softmax,损失函数:多分类交叉熵(Cross Entropy))
- 回归 如果需要预测连续的值,即回归的问题,需要的是平方损失函数(Square Loss 或称为 Mean Square Error,MSE)
损失函数设计目标:让神经网络预测的值尽可能和训练集的值接近
7. 基于梯度的优化器
如何对深度学习模型进行优化?
一般采用的方式是:基于迷你批次(Mini-batch)的数据来估算神经网络的权重梯度 之后使用估算得到的权重梯度对模型进行梯度下降优化。
一般流程为:📕
- 对所有数据进行随机排列(Shuffle)
- 从随机排列的数据中,抽取一定数目的数据——这个数目就称为迷你批次
- 计算出每个数据的损失函数,并对损失函数求平均(or 求和,depends on 模型的架构)
- 用平均后的损失函数,进行反向传播,计算对应的权重梯度
我们常称当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch(迭代期)。
8. 学习率衰减和权重衰减
- 一般来说在优化的时候,损失函数会逐渐下降,然后停止到一个平台就不下降了
解决方案: 尝试降低学习率(将学习率降低为初始的0.1倍or0.5倍)
正常情况下:可以尝试降低学习率2-3次
- 优化器,除了能够优化神经网络,还能对神经网络做一定的正则化 具体方法为:权重衰减(Weight Decay)
第一章小结
-
张量是深度学习中的基本运算单元
-
构建深度学习模型要点1——如何从训练数据中提取特征并输入神经网络进行训练
-
构建深度学习模型要点2——如何选择激活函数和线性变换的结构
-
为了能够在给定训练数据的情况下,对深度学习模型的权重进行训练,需要获得模型相对于权重的梯度。
- 如何得到权重的梯度?
使用反向传播算法,使得梯度从损失函数层传播到输入层
- 给定了权重梯度后,要选择一个合适的优化器
附录——B站学习(P1-5)
- P4 神经网络入门(黑盒并不黑)——讲解生动👍🏻