深度神经网络总结

感知机的模型是一个有若干输入和一个输出的模型,如下图:

输出和输入之间学习到一个线性关系,得到中间输出结果:

这个模型只能用于二元分类,且无法学习比较复杂的非线性模型,因此在工业界无法使用。

而神经网络则在感知机的模型上做了扩展,总结下主要有三点:

按不同层的位置划分,DNN内部的神经网络层可以分为:输入层,隐藏层和输出层,一般第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。层与层之间是全连接的,即第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。

假设选择的激活函数是σ(z),隐藏层和输出层的输出值为a。

DNN的前向传播算法是利用若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,利用上一层的输出计算下一层的输出,一层层的向后计算,一直到运算到输出层,得到输出结果为值。

使用前向传播计算训练样本的输出,使用损失函数,来度量训练样本计算出的输出和真实的训练样本标签之间的损失。DNN的反向传播算法(BackPropagation,BP)通过对损失函数用梯度下降法进行迭代优化求极小值,找到合适的隐藏层和输出层对应的线性系数矩阵W,偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或接近样本标签。

使用均方差来度量损失进行推导。即对于每个样本,期望最小化下式:

梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。不过区别仅仅在于迭代时训练样本的选择而已。

Sigmoid激活函数的表达式和图像:

对于Sigmoid,当z的取值越来越大(或z的取值越来越小时),函数曲线变得越来越平缓,导数σ′(z)也越来越小。仅仅在z取值为0附近时,导数σ′(z)的取值较大。在使用均方差+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,梯度变化值很小,导致W,b更新到极值的速度较慢,算法收敛速度较慢。

每个样本的交叉熵损失函数的形式:

对数似然函数与softmax的组合和交叉熵与sigmoid函数的组合相似,对数似然代价函数在二分类时可以化简为交叉熵代价函数的形式。

将DNN用于分类问题,在输出层用softmax激活函数非常常见。DNN分类模型要求是输出层神经元输出的值在0到1之间,同时所有输出值之和为1。普通DNN是无法满足这个要求。对现有的全连接DNN稍作改良,将输出层的激活函数从Sigmoid之类的函数转变为上式的softmax激活函数,即可用于解决分类问题。在现有的DNN模型中,将输出层第i个神经元的激活函数定义为如下形式:

softmax激活函数在前向传播算法时的使用:假设输出层为三个神经元,而未激活的输出为3,1和-3,求出各自的指数表达式为:20,2.7和0.05,归一化因子即为22.75,则三个类别的概率输出分布为0.88,0.12和0。

在反向传播算法中,由于使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。对于梯度爆炸,则一般可以通过调整DNN模型中的初始化参数得以解决。

反向传播算法中δ的计算:

甚至接近于0,导致梯度几乎消失,进而导致前面隐藏层的W,b参数随着迭代的进行几乎没有大的改变,收敛速度较慢。

一个可能部分解决梯度消失问题的办法是使用ReLU(RectifiedLinearUnit)激活函数:σ(z)=max(0,z),ReLU在卷积神经网络CNN中得到了广泛的应用。

1)如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好。2)如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数。3)ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。

DNN常用的激活函数:

tanh激活函数和sigmoid激活函数的关系为:

它的导数就是sigmoid函数。softplus的函数图像和ReLU有些类似。它出现的比ReLU早,可以视为ReLU的鼻祖。

L1正则化和L2正则化原理类似,重点讲述DNN的L2正则化。DNN的L2正则化通常只针对与线性系数矩阵W,而不针对偏倚系数b。

假如每个样本的损失函数是均方差损失函数,则所有的m个样本的损失函数为:

则加上了L2正则化后的损失函数是:

其中,λ即正则化超参数,实际使用时需要调参。而w为所有权重矩阵W的所有列向量。

如果使用上式的损失函数,进行反向传播算法时,流程和没有正则化的反向传播算法完全一样,区别仅仅在于进行梯度下降法时,W的更新公式。反向传播算法中,W的梯度下降更新公式为:

加入L2正则化以后,迭代更新公式变成:

除了常见的L1&L2正则化,DNN可以用Bagging的思路来正则化。常用的机器学习Bagging算法中,随机森林是最流行的。它通过随机采样构建若干个相互独立的弱决策树学习器,最后采用加权平均法或者投票法决定集成的输出。在DNN中同样可以使用Bagging的思路。不过和随机森林不同的是,这里不是若干个决策树,而是若干个DNN的网络。

首先对原始的m个训练样本进行有放回随机采样,构建N组m个样本的数据集,然后分别用这N组数据集训练DNN。即采用前向传播算法和反向传播算法得到N个DNN模型的W,b参数组合,最后对N个DNN模型的输出用加权平均法或者投票法决定最终输出。

Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。在对训练集中的一批数据进行训练时,随机去掉一部分隐藏层的神经元,并用去掉隐藏层的神经元的网络来拟合一批训练数据。如下图,去掉了一半的隐藏层神经元:

然后用这个去掉隐藏层的神经元的网络来进行一轮迭代,更新所有的W,b。

dropout并不意味着这些神经元永远的消失了。在下一批数据迭代前,会把DNN模型恢复成最初的全连接模型,然后再用随机的方法去掉部分隐藏层的神经元,接着去迭代更新W,b。当然,这次用随机的方法去掉部分隐藏层后的残缺DNN网络和上次的残缺DNN网络并不相同。

总结下dropout的方法:每轮梯度下降迭代时,它需要将训练数据分成若干批,然后分批进行迭代,每批数据迭代时,需要将原始的DNN模型随机去掉部分隐藏层的神经元,用残缺的DNN模型来迭代更新W,b。每批数据迭代更新完毕后,要将残缺的DNN模型恢复成原始的DNN模型。

dropout和Bagging的正则化思路不同,dropout模型中的W,b是共享的,所有的残缺DNN迭代时,更新的是同一组W,b;而Bagging正则化时每个DNN模型有自己独有的一套W,b参数,相互之间是独立的。相同点是:每次使用基于原始数据集得到的分批的数据集来训练模型。

使用基于dropout的正则化比基于bagging的正则化简单,当然天下没有免费的午餐,由于dropout会将原始数据分批迭代,因此原始数据集最好较大,否则模型可能会欠拟合。

增强模型泛化能力最好的办法是有更多的训练数据,但是在实际应用中,更多的训练数据往往很难得到。有时候我们不得不去自己想办法无中生有,来增加训练数据集,进而得到让模型泛化能力更强的目的。

从感知机到神经网络

感知机是二分类的线性模型,假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集正负样本点正确分开的超平面,使误分类的样本点到超平面的距离之和最小。这个模型只能用于二元分类,且无法学习比较复杂的非线性模型,因此在工业界无法使用。

将单个神经元的激活函数设为sign可以得到感知机;激活函数设为sigmoid,即可得到二分类的LR;将激活函数设为softmax可以得到多分类的LR,但需要注意的是:它们需要优化的损失函数并不相同,所以LR和感知机的不同体现在两点:激活函数和损失函数。

神经网络在感知机的模型上做了扩展,主要有三点:

深度神经网络(DeepNeuralNetworks,DNN)的基本结构

DNN可以分为:输入层,隐藏层和输出层,一般第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。层与层之间是全连接的,即第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。

DNN前向传播算法

从输入层开始,利用输入向量x,若干个权重系数矩阵W和偏置向量b,进行一系列线性运算和激活运算,利用上一层的输出计算下一层的输出,一层层的向后计算,一直到运算到输出层得到输出结果。

DNN反向传播算法(BackPropagation,BP)

反向传播算法的学习过程由正向传播和反向传播组成。在正向传播过程中,输入信息通过输入层,经隐藏层逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出结果与样本标签误差的平方和作为目标函数,转入反向传播,通过对损失函数用梯度下降法进行迭代优化求极小值,找到合适的输出层和隐藏层对应的线性系数矩阵W,偏置向量b,网络的学习在权值修改过程中完成,误差达到所期望值时,网络学习结束。

DNN激活函数

为什么引入非线性激活函数

不用激活函数时,每一层输出都是上层输出的线性函数,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,引入激活函数相当于加入非线性因素,可以有效避免多层网络等效于单层线性函数,提高模型表达力,使模型更有区分度。激活函数通常有如下一些性质:非线性(提高模型表达力),可微性(方便求梯度),单调性(损失函数为凸函数)

DNN常用的激活函数

梯度消失与梯度爆炸

在反向传播算法中,由于使用了矩阵求导的链式法则,后层的梯度以连乘方式叠加到前层,当神经网络中的激活函数为S型激活函数时,由于其饱和特性,在输入达到一定值的情况下,输出就不会发生明显变化,其导数逐渐趋近于0。使用梯度进行参数更新时,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,误差梯度反传到前层时几乎会衰减为0,因此无法对前层的参数进行有效的更新学习,这就会导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。梯度消失会导致隐层的W,b参数随着迭代的进行几乎没有大的改变,甚至不会收敛,因此无法通过加深网络层次来改善神经网络的预测效果。梯度爆炸会导致网络权重的大幅更新,引起网络不稳定,在极端情况下,权重的值变得非常大,以至于溢出,导致NaN值。

ReLU系列相对于Sigmoid和Tanh激活函数的优点是什么?它的缺点以及如何改进?

优点

缺点的改进

为解决练过程中会导致神经元死亡的问题,人们设计了ReLU的变种LReLU(LeakyReLU),其形式表示为:

LReLU与ReLU的区别在于:当z<=0时,其值不为0,而是一个斜率为a的线性函数,一般a为一个很小的正常数,这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但a值的选择增加了问题难度,需要较强的先验知识或多次重复训练以确定合适的参数值。

DNN损失函数

常用的损失函数有:平方误差损失函数,交叉熵损失函数,对数似然损失函数

对数似然损失函数在二分类时可以化简为交叉熵损失函数。交叉熵表示两个概率分布之间的距离,交叉熵越大,两个概率分布距离越远,概率分布越相异;交叉熵越小,两个概率分布距离越近,概率分布越相似,通过交叉熵可以判断哪个预测结果与标准答案更接近。

交叉熵损失函数的计算公式为:

对数损失在多分类问题中的计算公式为:

平方误差损失函数和交叉熵损失函数分别适合什么场景?

一般来说,平方误差损失函数更适合输出为连续,并且最后一层不含Sigmoid或Softmax激活函数的神经网络;如果是使用Sigmoid或Softmax激活函数进行二分类或多分类的神经网络,使用交叉熵损失或对数似然损失会有更快的收敛速度。

将输出层的激活函数从Sigmoid之类的函数转变为Softmax激活函数可以使输出层神经元输出的值在0到1之间,同时所有输出值之和为1,可用于解决多分类问题。

DNN激活函数和损失函数小结:

正则化(L1&L2,Bagging,Dropout,数据扩充)

1.DNN的L1&L2正则化

假如每个样本的损失函数是均方差损失函数,则加上了L2正则化后的损失函数是(L1正则化类似):

其中,λ即正则化超参数,实际使用时需要调参。

2.DNN通过Bagging正则化

3.DNN通过Dropout正则化

Dropout(随机失活)是指在深度网络的训练中,将训练数据分成若干批,使用一批数据进行梯度下降迭代时,以一定的概率随机地“临时丢弃”一部分神经元节点,然后用这个去掉隐藏层神经元的网络来拟合一批训练数据,并更新所有的权重和偏置(W,b)。在下一批数据迭代前,会把DNN模型恢复成最初的全连接模型,然后再用随机去掉部分隐藏层的神经元,迭代更新权重和偏置。

由于其随机丢弃部分神经元的机制,每次dropout都相当于训练了原始网络的子网络,它们共享部分权值,并且具有相同的网络层数,而模型整体的参数数目不变,这就大大简化了运算,而且这个过程会减弱神经元之间的依赖关系,减少过拟合,增强模型的泛化能力。(避免神经元相互连接,参数过多,将结果记住)

Dropout和Bagging的正则化的异同

Dropout和L1,L2的正则化的异同

二者的目的都是用来减少overfitting(过拟合)。但L1,L2正则化是针对损失函数进行优化,Dropout是改变神经网络本身的结构。

4.DNN通过扩充数据集正则化

减少模型过拟合,增强模型泛化能力最好的办法是有更多的训练数据。如:计算机视觉中可以使用图像数据增强技术。

深度学习输入数据归一化的原因(使数据处于同一数量级,具有相同的数据分布)

THE END
1.大模型保姆级教程:从入门到实战(非常详细)大模型最强学习教程,收藏这一在人工智能领域,大语言模型(Large Language Models, LLMs)正迅速成为一个热点话题。 本学习路线旨在为有基本Python编程和深度学习基础的学习者提供一个清晰、系统的大模型学习指南,帮助你在这一领域快速成长。 本学习路线更新至2024年02月,后期部分内容或工具可能需要更新。 https://blog.csdn.net/z551646/article/details/144393730
2.深度学习基础案例2案例解释在下面模型构建流程中 3、模型构建流程 本文构建的CNN神经网络,有三层卷积层和三层池化层,分类类别为10类。 Model的构建函数,作用是分别构建卷积层、池化层和全连接层 Model中forward()函数,作用是构建CNN神经网络, 卷积层的计算:以卷积层一nn.Conv2d(3, 64, kernel_size=3)为例 参数解释:输入通道https://www.ctyun.cn/zhishi/p-440740
3.深度学习算法介绍及简单实现mb6757d9e881a2b的技术博客对深度学习有了一定的了解之后,我们会知道深度学习离不开神经网络,可以从多层感知器(Multilayer Perceptron,简称 MLP)神经网络入手。 MLP是最基本的神经网络模型之一,它的结构比较简单,涉及的很多算法是我们学习更复杂的模型的基础,易于理解和实现,同时又有很好的可扩展性和通用性,可以应用于分类、回归等多种任务。学习https://blog.51cto.com/u_17183045/12791354
4.BAT机器学习面试1000题系列(二)122.怎么理解决策树、xgboost能处理缺失值?而有的模型(svm)对缺失值比较敏感? 知乎解答 123.为什么引入非线性激励函数? @Begin Again,来源: 知乎解答 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性https://www.jianshu.com/p/4a7f7127eef1
5.深度学习高手笔记卷1:基础算法本书通过扎实、详细的内容和清晰的结构,从算法理论、算法源码、实验结果等方面对深度学习算法进行分析和介绍。本书共三篇,第一篇主要介绍深度学习在计算机视觉方向的一些卷积神经网络,从基础骨干网络、轻量级 CNN、模型架构搜索 3 个方向展开,介绍计算机视觉方向的里程碑算法;第二篇主要介绍深度学习在自然语言处理方向的https://www.epubit.com/bookDetails?id=UB7d8623610d375
6.机器学习实战从零开始深度学习(通过GPU服务器进行深度学习)3.3 训练模型 3.4 采用不同的loss函数 3.5 使用更复杂的卷积神经网络 《之一》 0 写在前面 0.1. 利用GPU加速深度学习疫情期间没有办法用实验室的电脑来跑模型,用领取的腾讯云实例来弄刚刚好。发现如果没有GPU来跑的话真的是太慢了,非常推荐利用GPU加速深度学习的训练速度。 如果采用GPU的话,训练函数train_modelhttps://cloud.tencent.com/developer/article/1990845
7.数据酷客,中国领先的大数据教育云平台机器学习研究人员撰写的有用教科书如Christopher Bishop的标准教科书(Bishop,2006),以及(Goodfellow等人,2016)的《深度学习》,该书侧重于深度学习的理论和基础,并涵盖了当今研究的许多方面。各种在线教程和讲座对于获得基本概述和开始该主题很有用。 要了解1980年代至1990年代在神经网络统计物理学方面取得的理论进展,我们http://static.cookdata.cn/community/detail/107/
8.多层感知器实战:从入门到实践的深度学习之旅多层感知器(MLP)是深度学习领域的基础神经网络结构,通过多层节点的前馈计算,实现复杂任务的非线性分类与回归。学习MLP实战对深度学习新手至关重要,它不仅加深理解神经网络原理,还提供模型训练、调试与优化的关键技能铺垫,为深入研究其他深度学习模型打下坚实基础。 https://www.imooc.com/article/356464
9.神经网络与深度学习应用实战.docx神经网络与深度学习应用实战目录 h 基础篇 h 第1章 时代崛起 h 1.1 概要 h 1.1.1 基本概念 h 1.1.2 深度学习与机器学习的关系 h 1.1.3 深度学习与人工智能的关系 h 1.2 历史发展 h 1.2.1 神经网络https://www.renrendoc.com/paper/303114899.html
10.详情项目公示基于深度学习的唇语识别算法的发展标志着该领域的一次重大进步。这一阶段的研究摆脱了传统方法基于先验知识的限制,通过自动学习唇部特征,显著提升了识别准确性和鲁棒性。在深度卷积神经网络(DCNN)应用于唇部视觉特征提取的研究中,根据卷积核的维度,这一领域的方法可被细分为四种主要类型[6]:基于二维卷积神经网络(2D https://sjjx.hhu.edu.cn/hhu/CXCY/HHU/Item/Detail/e804030f-2c21-4bdc-bb35-e27cee49ec6d
11.JACS扩大药物化学家在药物发现中的作用范围,提高药物开发效率第二天 上午 同源建模 1.同源建模原理介绍 1.1同源建模的功能及使用场景 1.2同源建模的方法 2.Swiss-Model同源建模; 2.1同源蛋白的搜索(blast等方法) 2.2蛋白序列比对 2.3蛋白模板选择 2.4蛋白模型搭建 2.5模型评价(蛋白拉曼图) 2.6蛋白模型优化 实例讲解与练习:用2019-nCoVspike蛋白序列建模,根据相应参数和方法评价https://news.yaozh.com/archive/40954