深度学习课堂笔记

第1章 深度学习简介

1.1 课程简介

本学期课程主要介绍:深度学习数学基础、线性回归、神经网络与BP算法,深度神经网络及其训练,卷积神经网络,循环神经网络,无监督深度学习;深度生成模型,深度学习前沿,深度学习部署。

1.2 人工智能和机器学习概述

人工智能:使一部机器人像人一样进行感知、认知、决策、执行的人工程序或系统。

图灵测试:需要理解语言、学习、记忆、推理、决策等能力。

类人思考方式:人工智能是那些与人的思维、决策、问题求解和学习等活动的自动化(通用问题求解器GPS)

1.2.1 人工智能的三个层面

计算智能(能存能算):快速计算记忆存储(深蓝,暴力穷举)

感知智能(听说看认):视觉听觉触觉感知能力(无人驾驶)

认知智能(理解思考):逻辑推理只是理解决策思考(游戏,alphago)

1.3 神经网络和深度学习概述

机器学习是头,深度学习是脑

1.3.1 一切的开始:感知机Perceptron

1943第一个具有自组织自学习能力的数学模型。

缺点:单层神经网络无法解决线性不可分问题:异或门。致命的问题:当时计算量不够。

1.3.2 传统神经网络

分布式表征和传统局部表征相比

存储效率高:线性增加的神经元数目可以表达指数级增加的概念

鲁棒性好:即使局部硬件故障,信息表达也不会收到根本性破坏

传统感知器用梯度下降算法纠错,耗费计算量和神经元数目的平方成正比。神经元数目增多时,庞大的计算量是当是硬件无法胜任的。但在1986.7,BP算法将纠错运算量下降到了与数目本身成正比。增加隐含层解决了XOR问题,硬件也有了很好的发展。

1.3.3 深度学习发展

97 LSTM如何将有效信息经过多层循环神经网络传递后依旧能输送到需要的地方去。

06 限制玻尔兹曼机RBM,深度置信网络DBN就是将几层RBM叠加在一起。

07 Nvida推出CUDA的GPU软件接口。GPU时钟速度比CPU慢,但是擅长大规模并行处理。

11 修正线性单元,稀疏表征能力。

12 ILSVRC竞赛CNN夺冠

1.4 深度学习应用

目标检测、识别、分类,图像分割,目标跟踪,图像检索,特征识别,人脸识别,行人检测等。

1.5 机器学习的基本概念

分类回归聚类,强化学习监督无监督

学习过程:就是在所有假设组成的空间中进行搜索的过程,最终找到一个函数。

第2章 线性模型

2.1 线性回归

一元线性回归使用均方和误差,利用最小二乘法求解wb两个参数,使均方误差最小化。

多元线性回归使用多元最小二乘法,在XtX可逆时有闭式解。

此外还有对数线性回归和广义线性回归。

2.2 logistic回归

使用sigmoid函数族,利用极大似然估计法进行参数求解。具体看机器学习笔记。

2.3 正则化

正则化的目的在于限制参数范围,从而限制过拟合。

因为过拟合和参数范围是息息相关的,如下图:

所以如果我在固定参数数量时限制了参数的范围,那就不至于出现这种情况了。

第3章 深度神经网络及训练

本章我们将描述深度学习中的基本过程以及我们可以关注的8个部分,

深度神经网络和训练可以大致分为3步:1、定义网络 2、损失函数 3、优化。

而我们可以关注的部分主要有八点,接下来我们将一一对他们进行简单描述。

3.1 数据预处理

CV领域提出了数据的各种图片问题所导致的训练难点,我们引入数据增广:

通过对图像进行变换or引入噪音的方式来增加数据的多样性。

常见的方法有:旋转,翻转,缩放,平移,加噪音,聚焦等方法。

pytorch里面的train_transfrom函数提供了大量的变换函数供我们使用。

3.1.1 数据归一化

我们可以把一个偏离中心点的簇通过减掉mean移到中心,然后除以他们的标准差使该数据满足方差为1的分布。

一旦我们进行了数据归一化,在进行梯度下降时可以更快地到达最优点。

3.2 网络结构

一般而言有三种经典的网络结构:FCN CNN RNN

3.2.1 全连接神经网络

该网络具有这样的特点:权重矩阵的参数量巨大(所有行列相乘的矩阵),具有某种局部不变性特征(尺度缩放,平移旋转等),这导致全连接神经网络很难提取局部不变特征(每张图都有不同的特征矩阵w,太多了根本处理不了)

3.2.2 卷积神经网络

受到59年生物学提出的上感受野机制而被提出,主要的特征是局部连接,权重共享,拥有平移不变的特点。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_15,color_FFFFFF,t_70,g_se,x_16

使用卷积神经网络,可以让空间中不同位置的特征都提取出相似的特征 ,从而使响应变得简单。

3.2.3 循环神经网络

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

 自带自反馈神经元,可以处理人以长度的时序数据

比前馈神经网络更加符合生物神经网络的结构

网络具有自适应记忆能力

3.3 参数初始化

首先参数不可以初始化为0,根据对称权重问题,如果所有层权重都是0,那么输入数据得到的输出结果都一样。更新的梯度也一样,这样没有意义。(如果都是1的话,无法向局部最低收敛也是不行的。)

3.3.1 预训练初始化

利用在其他数据集上预训练的模型权重初始化目标模型

这样模型的收敛速度更快,更有可能得到泛化误差更好的模型,也能很好的改善初始化不当造成的梯度消失或者爆炸问题。

3.3.2 随机初始化

一般有三种,基于固定方差的参数初始化;基于方差缩放的参数初始化;正交初始化。

1、基于固定方差的参数初始化

参数从一个固定均值(通常是0)和固定方差delta^2的分布中采样生成init。

高斯分布初始化

均匀分布初始化 [-r,r] r=sqrt(3*delta^2) (均匀分布的方差推导)

注意如果r取值过小,比如激活函数sigmoid,在一段很小的区间内呈线性,线性模型叠加就没有意思了,非线性能力下降表示能力下降。

r取值过大,参数取值范围大,使得sigmoid函数的输出饱和,老是取到最左和最右的平行位置,导致梯度消失。

2、基于方差缩放的参数初始化

有人认为我们应该根据神经元的性质差异化设计w,如果input连接多,那么每个上面的权重应该小一点儿避免输出过大或过饱和。所以我们尽可能保持每个神经元的输入和输出的方差一致,通过神经元连接数量自适应调整初始化分布的方差。这叫做方差缩放。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

3、正交初始化

 主要是基于范数保持性来解决梯度消失或者梯度爆炸问题。

这个数学知识要去补一下

3.4 损失函数

太多了损失函数,一个个看一下把

3.4.1 0-1损失函数

预测值和目标值不相等损失为1,否则为0

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

非凸函数不实用,直接判断分类判断错误还是可以的。或者还有以下这种放宽条件的版本:

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

3.4.2 绝对值损失函数

计算预测值和目标值的差的绝对值

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_11,color_FFFFFF,t_70,g_se,x_16

可以用于回归任务,损失函数在训练中大小不稳定,对于底层视觉任务比较有效。

3.4.3 对数损失函数

对数损失函数是对预测得分取对数 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

对数损失函数能非常好表现概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度那么他非常合适。

但是鲁棒性不强,对于噪声敏感

(logistic回归用的就是这个对数损失函数) 

3.4.4 平方损失函数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_12,color_FFFFFF,t_70,g_se,x_16

 对于一些稀疏问题,用MSE不好做的情况下,平方损失函数非常好用。

回归问题经常用到,鲁棒性不强,对于噪声很敏感。

而且通过最小二乘法处理是有闭式解的。

3.4.5 指数损失函数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

对于离群点,噪声非常敏感,经常用在Adaboost算法

3.4.6 合页损失函数 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

 用到再分析

3.4.7 感知损失函数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

合页损失函数的一个变种 

3.4.8 交叉熵损失函数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_11,color_FFFFFF,t_70,g_se,x_16

本质上也是一种对数似然函数,可以用于二分类和多分类任务中。二分类问题中损失函数(输入数据是softmax or sigmoid函数的输出)

3.4.9 聚焦损失函数

在交叉熵损失函数的基础上进行修改:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_13,color_FFFFFF,t_70,g_se,x_16

解决目标检测问题中训练集正负样本极度不平衡的问题。且能自适应样本加权,容易分类的样本权重降低,促进分类器更加关注于困难的样本。

3.5 模型优化

机器学习问题最终是转化成了一个最优化问题。所谓神经网络的学习问题,归根结底是高阶非凸优化问题。

对于优化问题有很多的难点:

参数过多,非凸优化问题,梯度消失问题,参数解释困难watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_19,color_FFFFFF,t_70,g_se,x_16

梯度消失: watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

而且对于计算资源要求大,数据要多,算法的收敛要快。

针对这个问题,人类发明了迭代算法来解决问题。下面介绍几种典型的迭代算法:

3.5.1 批次梯度下降

梯度下降的步长也称作:学习率。

批次梯度下降采用整个训练集的样本来进行梯度计算。也是我们在最优化理论里面学的。

因为一次更新中要对整个数据集计算梯度,所以计算起来超级慢,也不能实时更新新数据。对于非凸函数大概率只能收敛到局部极小值。

3.5.2 随机梯度下降

采用训练集中一个样本计算梯度

计算非常快,也能实时更新,噪声比较多所以收敛震荡,准确度也有下降并不一定全局最优。但是这种跳跃性有可能会跳到更好的局部极小值处。

3.5.3 小批次梯度下降

针对前两种梯度下降的缺点改进:每次参数更新,采用训练集中的一个小批次样本来计算梯度。

降低参数更新时方差,收敛更稳定。可以充分利用高度优化的矩阵操作来进行更有效的梯度计算。不能保证很好的收敛性,学习率太小or太大都不利于学习。

但是选择learningrate有困难,因为对于所有的参数更新都要使用同样的learning rate。容易困于鞍点。

3.5.4 Momentum+SGD动量策略梯度下降

下降初期使用上一次参数更新,下降方向一致可以更快;下降中后期在局部最小值来回震荡的时候梯度趋近于0,更新幅度变大,跳出陷阱。

梯度改变方向时u减少更新,抑制震荡,加速收敛。

3.5.5 N下降

先按照动量更新方法走到未来的位置,然后在未来位置计算梯度后更新。

3.5.6 AdaGrad

Ada方法会自适应学习率,根据参数的重要性而对不同的参数进行不同程度的更新。

如果初始学习率较大,那么使用快速梯度下降;如果已经下降很多的变量,减缓学习率;对于还没有怎么下降的变量,保持一个较大的学习率。

训练前期的梯度较小,正则项较大,放大梯度;后期梯度较大,缩小梯度。

优点:

不需要手动设置学习率更新过程

坟墓不断累积,学习率会收缩

超参数n设定值

缺点:

仍然依赖于人工设置的一个全局学习率

n过大的话正则化项会过于敏感,导致梯度的调节太大。

中后期梯度趋近于0使得训练提前结束。

3.5.7 AdaDelta & RMSprop

对于Adagrad的简化

特点:

不依赖全局学习率;训练初期中期加速效果不错,训练后期反复在局部最小值抖动。

3.5.8 Adam自适应动量估计

本质上是带有动量项的RMSprop。

Adam的梯度和动量同时更新,他的适应性是最好的

结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点

对于内存的需求小;为不用的参数计算不同的自适应学习率

适用于大多数非凸优化——适用于大数据集和高维空间

3.5.9 优化方法总结

如果数据稀疏,使用自适应方法,Adagrad Adadelta RMSprop Adam

如果需要更快收敛或者训练更深更复杂的神经网络,需要用一种自适应算法

整体来讲Adam是最好的选择。

3.6 超参技巧

神经网络中常见的超参数有:层数,神经元个数,激活函数,学习率,正则化系数,批次大小,迭代次数,动量参数。

在方法的选择上有:网格搜索,随机搜索,贝叶斯优化,动态资源分配,神经架构搜索。

重点关注学习率,正则化系数。

3.6-1 超参数搜索方法

3.6.1 网格搜索

将取值连续的参数离散化然后进行组合

3.6.2 随机搜索

对比网格搜素随机搜索随机进行取值。

3.6.3 贝叶斯优化

用先验点去预测后验知识

通过已构建的函数曲线,找到曲线上升的防线,从而在这个方向上继续探索,大概率可以得到更好的结果。

3.6.4 动态资源分配

可以通过一组超参数的学习曲线来预估这组超参数是否有希望得到比较好的结果。

如果一组超参数配置的学习曲线不收敛或者收敛差,可以应用停止策略终止当前训练。

逐次减半是一种有效的方法。

3.6.5 神经架构搜索

前面几种都是在固定的超参数进行最优配置搜索

NAS通过神经网络来自动实现网络架构的设计。

3.6-2 超参数详解

3.6.6 学习率

学习率可以说是最重要的超参数watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

 我们希望学习率适应当前的学习状态,自动调整学习率。逆时衰减,指数衰减,自然指数衰减是几种常见的学习率。周期性学习率调整也是一种常用的方法。

3.6.7 正则化系数

正则化系数可以确保模型不发生过拟合

比如说岭回归的正则化系数越大越不容易过拟合watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

一般我们设置正则项系数为0,先确定好的学习率。然后选择一个正则化系数以后确定他的数量级,接着再进一步微调。

3.6.8 归一化

希望获得更好的尺度不变性,处理内部协变量偏移,更平滑的优化曲面

归一化有很多种方法:批量归一化,层归一化,组归一化,实例归一化

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

C是通道,HW面每一列都是一个图像,每一个小块是他的第几个像素,一共有N个图像 

3.7 模型微调

我们为什么要进行模型微调?什么情况下使用微调?

比如我们已经花了3天训练了一个识别动物的网络,然后现在我们想要识别pokemon。我们能不能用识别动物的网络模型作为init直接去训练pokemon呢?这样能缩短训练的时间,节省资源,提高准确率。

3.7.1 预训练模型

与现在相关数据集上训练得到一个模型(ImageNet)

正常情况下不需要改变其他网络结构

3.7.2 模型微调的两种情况

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3ludGhlc2lzX1VNUg==,size_20,color_FFFFFF,t_70,g_se,x_16

 如果迁移问题是一个小数据集的话不需要改变网络内容,只是最后的映射部分需要改变。如果是一个巨大的数据集那么就需要对其中的后几层进行改进了。

卷积神经网络的核心:

浅层卷积层提取基础特征(边缘轮廓)深层卷积层提取抽象特征(整个脸型)全连接层根据特征组合进行分类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值