深度学习概述
1.神经网络基础概念
1.1神经元
生物神经元<-->人工神经元
树突<-->输入信号
突触<-->突触权重
细胞体<-->求和节点
轴突<-->输出信号
兴奋性<-->激活函数
传导性<-->突触权重
感觉神经元<-->输入神经元
运动神经元<-->输出神经元
联络神经元<-->中间神经元
人工神经网络
生物神经细胞功能比较简单,需要通过很多神经元一起协作完成复杂功能,通过一定的连接方式或信息
传递方式进行协作的神经元可以看做是一个网络,就是人工神经网络,简称神经网络(ANN)。人工神经
网络包括输入层、隐藏层和输出层。
根据不同神经元之间的连接关系,我们可以将神经网络分为:前馈网络,反馈网络,图网络
1.2感知机
1.3激活函数
常见的激活函数:Sigmoid函数,Tanh函数,Softsign函数,ReLU函数,Softplus函数
如何选择激活函数
非线性、连续可微性、有界性、单调性、平滑性
1.4前向传播及损失函数
前向传播
输入信号从输入层传输到输出层
对于每个神经元:计算上层输入的加权平均值,计算激活函数值
最后输出:模型预测值
损失函数定义
损失函数是用来估量你模型的预测值与真实值的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。
常用损失函数
均方误差和交叉熵误差
一般均方误差更多得用于回归问题,而交叉熵误差更多的用于分类问题。交叉熵误差刻画了两个概率分布之间的距离,是
分类问题中使用较多的一种损失函数。
损失函数的极值
目的:损失函数是定义在权值空间上的函数,我们的目的是搜索使得损失函数最小的权值向量。
解决思路:负梯度方向是函数下降最快的方向,那么我们可以从某个点开始,沿着负梯度方向一路前行,期望最终可以
找到损失函数的极值点,这就是梯度下降法的核心思想。
梯度下降定义
在曲面的任何一点,我们都能够定义一个与其相切的平面。在更高维度,我们总能够定义一个超平面,在这个平面上有无限个方向。
其中,准确来说只有一个使函数上升最快的方向,这个方向由梯度给出,与之相反的方向就是下降最快的方向。我们沿着梯度的方向
进行下降,所以就叫做梯度下降。
梯度下降方法
全局梯度下降算法:收敛过程非常慢,因为每次更新权值都需要计算所有的训练样例。
随机梯度下降算法:难以收敛到极值
小批量梯度下降:兼顾了效率和梯度的稳定性,容易冲过局部极小值,是实际工作中最常用的梯度下降算法。
1.5反向传播
反向传播算法
误差反向传播算法是神经网络的重要算法。它使用链式求导法则将输出层的误差反向传回给网络,使神经网络的权重
有了较简单的梯度计算实现方法。
步骤:从最后一层开始,计算误差对于该层节点参数的梯度
基于上一层的梯度值,对当前层参数的梯度值进行计算,重复该步骤,将参数传播至第一层。
1.6卷积神经网络
卷积神经网路是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于图像处理有出色表现。CNN避免了
对图像的复杂前期预处理而可以直接输入原始图像,因而得到了更为广泛的应用。
它包括卷积层,池化层和全连接层。
CNN核心思想--局部感知
一般认为人对外界的的认知是从局部到全局的,图像像素点的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。
在CNN中,每个神经元只需要收集局部信息。
实现方式:使kernel的尺寸远小于输入图像的尺寸。
优点:减少内存需求,模拟视觉皮层中的神经元,每个神经元一次只收集局部信息。
CNN核心思想--参数共享
统一图像在不同位置、不同角度的旋转、不同大小、不同光照等条件下,都会被识别为同一物体,这一特点就是不变性。
实现方式:用参数相同的kernel去扫描整副图像
优点:解决图像位置不变性的问题,减少计算和内存需求。
多核卷积层:通过不同的卷积核提取图像的局部特征信息。
池化层
池化一般分为最大池化和平均池化。
池化的作用:降低特征图参数量、保留图像显著特征、降低过拟合、扩大感知野和解决图像不变性。
全连接层
全连接层可以用来将最后得到的特征映射到线性可分的空间,在整个卷积神经网络中起到“分类器”的作用。
1.7循环卷积神经网络
循环卷积网络是一种通过隐藏层节点周期性的连接,来捕捉序列化数据中动态信息的神经网络,可以对序列化的数据进行分类。
2.数据集处理
2.1数据集
人工智能的四要素为:数据、算法、算力、场景。
数据集划分
训练集:用来构建机器学习模型,从数据中确定模型参数的过程称为学习(训练)。
验证集:辅助构建模型,用于在构建过程中评估模型,进而调整模型超参数。
测试集:用来评估训练好的最终模型的性能。
2.2数据集分割
训练集和测试集是同分布的。
留出法
直接将数据集拆分为互斥的训练集、验证集和测试集。划分比例推荐70%,15%,15%
注意事项:1.单次使用留出法会导致模型不稳定。2.保证三种数据集中样本比例的相似性。3.适合大数据集。
K折交叉验证法
将数据集划分为K个子集,重复K次,取平均测试结果作为最后的输出。
训练集和测试集是不同分布的。
尽可能使训练集和测试集的数据分布的属性一致。
找到更多与测试集样本相更匹配的训练集数据。
2.3偏差与方差
偏差=训练集预测值-真实值(算法的拟合程度,训练集误差)
方差=同样大小的训练集的变动所导致的学习性能的变化(验证集误差-训练集误差)
高偏差(训练集误差,验证集误差,测试集误差较大):
1.尝试用更大的模型
2.延长训练时间
3.尝试用新的模型架构。
4.减少正则化
高方差处理(训练集误差较小但验证集误差,测试集误差较大):
1.获取更多数据(包括数据合成和数据增强)
2.添加正则化
3.尝试提早停止训练(early stopping)
4.尝试用新的模型架构。
训练测试集失配(训练集误差较小,验证集误差较小但测试集误差较大):获取更多和测试集相似的数据
3.网络构建
3.1网络模型构建
3.2超参数设置
为何有的模型错误率居高不下?
模型实现中的bug
超参数选择不合适
数据模型不适配
数据集构造
如何解决错误率偏高问题?
从最简单模型入手,对症下药;
成功搭建模型,重现结果;
分解偏差各项,逐步拟合数据;
用由粗到细随机搜索优化超参数;
如果欠拟合,就增大模型;如果过拟合,就添加数据或者调整。
参数VS超参数
学习模型中一般有两种参数,一种参数是可以从学习中得到,还有一种无法靠数据里面得到,只能靠人的经验
来设定,这类参数就叫做超参数。比如算法中的学习率、梯度下降法循环的数量、隐藏层数目、隐藏层单元数目、
激活函数的选择都需要你来设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。
如何寻找超参数的最优值?
Code --> Experiment --> Idea --> Code
超参数重要程度:
最重要:学习率;
其次重要:动量衰减参数;各隐藏层神经元个数;mini-batch的大小;
再次重要:(如果是Adam优化算法,超参数β1,β2,ε常设为0.9,0.999,10-8);神经网络层数;学习衰减率;
调参策略:
网络调参方向:更深的网络;更加复杂的结构;
目的:
提高泛化能力:正则化;增加神经网络层数;使用正确的代价函数;使用好的权重初始化技术;人为拓展训练集;弃权技术。
提升CNN泛化能力
使用更多数据
使用更大批次
调整数据分布
调整目标函数
调整网络结构
数据增强
权值正则化
3.3激活函数及损失函数选择
CNN激活函数:ReLU,Leaky ReLU函数,Maxout
CNN损失函数
分类:交叉熵损失函数
回归:L1,L2损失函数
作用:逐像素比较差异,避免正负值相互抵消,可对像素之差取绝对值或平方。
RNN损失函数
交叉熵损失函数
4.正则化
正则化是机器学习中非常重要并且非常有效的减少泛化误差的技术,特别是在深度学习模型中,由于其模型参数
非常多非常容易产生过拟合。因此研究者也提出很多有效的技术防止过拟合,比较常用的技术包括:
数据增强,参数范数惩罚,Dropout,提前终止,随机池化等等。
4.1过拟合
欠拟合与过拟合的概念
误差:学习到的模型在样本上的预测结果与样本的真实结果之间的差。
训练误差(经验误差):模型在训练集上的误差。
泛化误差(测试误差):在新样本上的误差。显然,我们更希望得到泛化误差小的模型。
欠拟合:如果训练误差很大的现象。
过拟合:如果学得的模型的训练误差很小,而泛化能力较弱即泛化误差较大的现象。
欠拟合与过拟合的区别:欠拟合在训练集和测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,
而在测试集上的性能较差。在神经网络训练的过程中,欠拟合主要表现为输出结果的高偏差,而过拟合主要表现为
输出结果的高方差。
机器学习的目标:是使学得的模型能够很好的适用于新的样本,而不是仅仅在训练样本上工作的很好,学得的模型
适用于新样本的能力称为泛化能力,也称为鲁棒性。
产生欠拟合与过拟合的根本原因
模型的容量:指其拟合各种函数的能力。当机器学习算法的容量适合于执行任务的复杂度和所提供训练数据的数量时,
算法效果通常会最佳;容量不足的模型不能解决复杂任务,可能出现欠拟合;容量高的模型能够解决复杂的任务,但是
其容量高于任务所需时,有可能会过拟合。
产生欠拟合与过拟合的根本原因:模型学习能力(模型容量)与数据复杂度之间失配。
产生欠拟合的具体原因与解决方法
产生欠拟合的原因:特征量过少;模型复杂度过低,不能学习到数据的“一般规律”。
解决欠拟合的方法:
增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间;
添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强;
减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数;
使用非线性模型,比如核SVM、决策树、深度学习等模型;
调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力;
容量低的模型可能很难拟合训练;使用集成学习方法,如Bagging,将多个弱学习器Bagging。
产生过拟合的具体原因
数据噪声干扰过大;
训练样本太少,无法描述问题的真实分布;
模型复杂度过高。
防止过拟合的方法
减少特征维度;
正则化:数据增强、参数范数惩罚、Dropout、提前终止等。
4.2数据增强
数据增强:即增加训练数据样本。防止过拟合最有效的方法是增加训练样本,足够多的数据可以让模型看见尽可能多的例外
情况并不断修正自己,从而效果更好。数据集合扩充是一个省时有效的方法,但是在不同领域有不同的方法。
在目标识别领域常用的方法是将图片进行旋转、平移、缩放等(图片变换的前提是通过变换不能改变图片所属类别,
例如手写数字识别,类别6和9进行旋转后容易改变类目)。
语音识别中对输入数据添加随机噪声。
NLP中常用思路是进行近义词替换。
噪声注入
模型容易产生过拟合的原因之一就是没有太好的抗噪能力,因此最简单的提高网络抗噪能力的方法,就是在训练过程中加入
随机噪声一起训练。我们可以在网络的不同位置加入噪声:输入层,隐藏层,输出层。
在输入层加入噪声:数据集增强。
在隐藏层加入噪声:Dropout。
在输出层加入噪声:标签平滑(交叉熵损失函数,softmax)。
4.3L1与L2正则
参数惩罚:通过对目标函数添加一个参数惩罚,限制模型的学习能力。
L1与L2的主要区别如下
L1相对于L2能够产生更加稀疏的模型,即当L1正则在参数w比较小的情况下,能够直接缩减至0,因此可以起到特征选择的作用。
如果从概率角度进行分析,很多范数约束相当于对参数添加先验分布,其中L2范数相当于参数服从高斯先验分布;L1范数相当于拉普拉斯分布。
4.4Dropout
Dropout是一类通用并且计算简洁的正则化方法,在2014年被提出后广泛的的使用。简单的说,Dropout在训练过程中,随机的
丢弃一部分输入,此时丢弃部分对应的参数不会更新。Dropout类似于是一个集成方法,将所有子网络结果进行合并,通过随机
丢弃输入可以得到各种子网络。
Dropout的作用
取平均的的作用;
减少神经元之间复杂的共适应关系;
Dropout类似于性别在生物进化中的角色。
4.5提前终止
在训练过程中,插入对验证集数据的测试。当发现验证集数据的Loss上升时,提前停止训练。
4.6随机池化
池化的意义
既对数据进行降采样操作,又可以用P范数作非线性映射的“卷积”
具体作用为:
特征不变性:使模型更关注包含一定的自由度,能容忍特征微小的位移;
特征降维:降采样使后续操作的计算量得到减少;
一定程度防止过拟合。
池化层的常见操作:最大值池化,均值池化,随机池化,中值池化,组合池化等
最大池化与均值池化
最大值池化的优点在于它能学习到图像的边缘和纹理结构。
均值池化的优点在于可以减少估计均值的偏移,提升模型的鲁棒性。
随机池化
按一定概率随机选取其中一个元素,介于平均池化和最大池化之间,并且受Dropout启发,具有更好的正则化效果;可以看作是,在输入
图片的许多副本(有一些小的局部变形)上进行标准的最大池化操作。
5.优化器
- 点赞
- 收藏
- 关注作者
评论(0)