【人工智能】神经网络、卷积神经网络、自然语言处理、一些机器学习扩展

本篇博客记录博主学习神经网络的过程。如果对博主的其他文章感兴趣,可以看这篇文章【CSDN文章】博客文章索引

一、神经网格概览

  深度学习的主要应用场景:90%的情况下是应用在计算机视觉自然语言处理当中。深度学习是算法,更可以具体抽象为一种特征提取方法(例如什么特征适合当下的场景)。深度学习的核心就是特征工程。

在这里插入图片描述

  特征工程的作用:

  • 数据特征决定了模型的上限
  • 预处理和特征提取是最核心的
  • 算法与参数选择决定了如何逼近这个上限

  深度学习的应用场景:人脸识别。缺点:复杂度高,计算量大。

在这里插入图片描述

  线性分类任务中,得分函数 f ( W , x ) = W x + b f(W, x) = Wx+b f(W,x)=Wx+b就是将像素点转化为离散数值的一个函数(其中,x是输入像素点,b是偏置,W为权重矩阵,得分函数会输出一个多维矩阵或者多维向量,取决于做几分类的任务),然后分类器根据得分对图片进行分类,然后利用损失函数对权重参数进行修正。我们通常使用随机策略来进行权重参数矩阵的初始化。例如: W = 0.01 ∗ n p . r a n d o m . r a n d n ( D , H ) W = 0.01*np.random.randn(D,H) W=0.01np.random.randn(D,H)

在这里插入图片描述

  损失函数的值相同不代表两个模型一样,例如下面的模型A和模型B,很明显,模型A只考虑到了输入向量中的第一个元素,而模型B则是均匀的考虑到所有的元素。

  我们知道,神经网格的优点是强大,缺点是容易过于强大,即过拟合现象。为了防止模型过拟合,一般会在损失函数中加入一个正则化惩罚项或者是“早停”策略。 λ \lambda λ是正则化参数,如果取的很大,则更多的会考虑正则化惩罚项,取得小则对损失函数影响不大。“早停”策略是将数据进一步分为训练集、验证集和测试集。其中训练集正常用来训练,验证集用来估计误差,如果训练集误差降低而验证集误差升高,则停止训练,同时返回具有最小验证集误差的权重矩阵。下图的正则化惩罚项是权重矩阵W的每个元素的平方和。

在这里插入图片描述

  下图展示的是一个模型对不同正则化参数的分类结果(二分类任务:划分出红绿区域)。可以看到 λ = 0.001 \lambda=0.001 λ=0.001是模型正确区分出了所有的点,但是,这也有可能是过拟合的结果(区分效果好的过头了)。如果图中的那三个尖端的红点是异常值(本应该是绿色,不知什么原因变成红色)。当新的点在附近出现时,极有可能是绿色而不是红色,模型会把它判断成红色。这就会造成误判,导致测试集的效果不好。当然,具体的正则化参数取多少取决于实际工程情况

在这里插入图片描述

  以softmax分类器为例,我们将前面得到的得分函数值做一个指数 e x p exp exp的映射,然后做归一化。然后计算损失值。损失函数的意义是让分类器分类的结果更加准确。例如下图正确的分类是car,那么0.13就作为损失函数的输入。

在这里插入图片描述

  从输入数据开始,到得到损失函数结束,就完成了前向传播的过程。前向传播的目标就是计算损失函数。前向传播的总体流程图如下:

在这里插入图片描述

  方向传播是从损失函数开始,通过链式法则,一步一步传递梯度,然后更新权重参数矩阵。简言之,前向传播计算损失函数,反向传播利用损失函数更新权重

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  input layer的大小和输入数据的大小有关(向量的维度)。output layer的大小和所做的分类任务分类类别数量有关。隐层1和隐层2得到的是一个个数值(有时候也叫特征值,特征,像隐层1中就把输入层的三个特征展开式四个特征),根据输入向量和权重矩阵计算得出的特征值。这个特征值对人类来说没有具体含义,但是对计算机来说更容易分辨输入的特征。因为这一特性,我们也把深度学习的模型成为黑盒,即给输入,得到输出,中间发生了什么是未知的。输入层的每一个特征都和隐层1的特征连接起来了,因此也把输入层称为全连接层。同理,输出层也是一个全连接层。

  如果说都是 下一层的输入 = 上一层输出 ∗ 权重矩阵 下一层的输入=上一层输出*权重矩阵 下一层的输入=上一层输出权重矩阵这种线性变换,那么完全可以把两个隐层的权重矩阵合并成一个。可惜,实际上神经网络不是这样工作的。隐层1到隐层2,隐层2到输出都是非线性变换的。隐层1在输出之前经过了激活函数(常见的比如Sigmoid函数)。

  神经网络的参数几百万界别都算少的,千万甚至上亿的参数很正常。现在提到的亿万参数模型本质上是大力出奇迹。神经元越多,神经网络越强大,但过拟合的可能越大。ConvNetJS提供了Javascript库,可以在浏览器中训练深度学习模型。直接打开一个标签页就可以看是训练了,不需要下载软件,不需要编译器,也不需要安装,不需要GPU,但它只能用于简单的模型训练,用作示例(它包含了手写字识别、CIFAR-10数据集图像识别)。

  关于激活函数,常用的有Sigmoid函数和Relu函数。因为Sigmoid函数在得分值较大的区间是梯度近乎为0,产生梯度消失现象,不利于神经网格的传播。目前神经网络的算法,90%都在用Relu激活函数,剩下是使用Relu激活函数的变体或其他函数。
在这里插入图片描述
在这里插入图片描述

二、卷积神经网络概览

  数据预处理比较常见的是中心化数据(减去平均值)和正则化数据(归一化):

在这里插入图片描述
  为了避免过拟合,训练阶段每次迭代过程会使部分神经元失效(失效的神经元是随机选择的),避免数据对某个神经元过依赖导致过拟合。例如有下图展示的是某次迭代过程中随机使部分神经元失效(仅仅是某一轮迭代过程中失效)。
在这里插入图片描述
在这里插入图片描述

  下图展示的是一个卷积神经网络计算的示意图,其中w0,w1是卷积核,移动步长为2。输入向量经过两个333的卷积核后的三个通道值求和,再加上偏置以后得到两个输出向量。
在这里插入图片描述

  图片处理的滑动窗口步长一般为1(2也有),卷积核尺寸一般为3*3。显然,在卷积神经网络中,它的计算规则使得边缘点被卷积利用的次数很少,而中间的点在小步长下被卷积的次数多。因此,会在图像的最外层添加扩充。以上图为例,三个通道都在最外层添加了1圈零填充(zero-padding),记为边界填充为1。边界填充的零的目的是为了防止添加的值产生不必要的影响。而卷积核个数的选择则是取决于需要多少个特征图。例如,下一层需要10个特征图,则卷积核个数为10。

在这里插入图片描述
  在这里插入图片描述

  池化层做的是一个下采样(down-sample)的操作(即通常意义下的采样),对特征进行压缩。下图是一个最大池化操作的示意图,取最大值相当于取了最好、最显著、最突出的特征。除了最大池化以外,还有平均池化,但是目前基本上都是最大池化。池化层没有任何矩阵操作,只是做了筛选,做了压缩

在这里插入图片描述

  卷积神经网络中,卷积层和池化层做特征提取,产生三维特征图 长 ∗ 宽 ∗ 通道数 长*宽*通道数 通道数。然后将三维特征图拉成特征向量。在全连接层,令 特征向量 ∗ 权重矩阵 = 概率值向量 特征向量*权重矩阵=概率值向量 特征向量权重矩阵=概率值向量,得到最终的分类结果。
  几层神经网络的层数是如何划分的:带参数计算的层才能被称为一层神经网络。其中,卷积层和全连接层带参数计算,激活函数、池化层都不带参数计算。因此,下图的神经网络一共有7层。

在这里插入图片描述
在这里插入图片描述

  AlexNet是由Alex等人在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络,并取得了优异的成绩,论文为《ImageNet Classification with Deep Convolutional Neural Networks》。下图展示的是AlexNet的网络架构。显然可以看出Alexnet网络第一层卷积层取的卷积核较大,步长也较大,并且没有进行边界零填充,会损失边界信息,同时特征提取的不够细致

  2014年,Oxford的Visual Geometry Group的组提出了VGG网络,论文为《Very Deep Convolutional Networks for Large-Scale Image Recognition》。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样。下图是VGG16网络的架构。VGG卷积核大小都是3*3,对图像进行细粒度的特征提取。因为图像特征经过最大池化以后会损失一些特征信息,所以VGG在经过下一层卷积层以后使得特征图翻倍。

在这里插入图片描述

  从理论上来说,卷积神经网络的层数越多(重复的加卷积、加池化),它的效果越好。但是VGG只加到了16层,因为实验结果表明,16层的效果要比30层的效果要好。经过卷积池化以后,网络特征学习可能存在信息损失,所以下一层的卷积层学习的特征不一定会比上一层的效果要好。

  针对这个问题,微软研究院的何恺明(大佬)等人在2015年提出残差神经网络(ResNet),论文为《Deep Residual Learning for Image Recognition》。ResNet 在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军。残差神经网络的主要贡献是发现了“退化现象(Degradation)”,并针对退化现象发明了 “快捷连接(Shortcut connection)”,极大的消除了深度过大的神经网络训练困难问题。神经网络的“深度”首次突破了100层、最大的神经网络甚至超过了1000层。目前的研究界普遍使用的是Resnet及其变体。

在这里插入图片描述

  感受野代表的是当前特征值对应输入的大小。例如,第一个卷积层中的每一个值的感受野为33,而第二层卷积层的感受野就是55。

在这里插入图片描述
在这里插入图片描述

三、自然语言处理NLP

  普通的神经网络对于一个输入是即时输出的,不同时刻之间的输出没有关系。递归神经网络(Recurrent Neural Networks, RNN)特征和输出在时序上呈现出某种相关性。RNN主要应用在自然语言处理(Natural language processing, NLP)中,例如语音识别、定位,文本识别分析。

在这里插入图片描述

  RNN的缺点是把之前序列的数据全部记录下来,而之前的数据并非都是重要的。然后就有学者提出了长短时记忆(LSTM)网络,LSTM会有选择的保留之前时序的信息。

在这里插入图片描述

  在自然语言处理当中,通过词向量模型(Word2Vec)将自然语言(文本,语音等)向量化。只要有了向量,就可以用不同的方法来计算相似度。通常,向量化之后的数据维度越高,能提供的信息就越多,从而计算的结果可靠性就更值得信赖。

  以文本为例,每个单词有对应的单词向量表(look up embeddings)。这个表格的生成方式类似于权重矩阵W,采用随机数生成。然后神经网络才学习过程中不断更新词向量表,模型会“想”什么样的词向量表使得预测下一个词更加准确。
在这里插入图片描述

  训练数据:以下面的文本预测模型为例,前两个单词作为输入(例如 thou shalt),第三个单词作为模型预测输出(not)。采取滑动窗口(sliding window)的形式,刚才是thou shalt, 现在就是shalt not。在反向传播当中是和神经网络类似,需要根据损失函数更新权重矩阵和输入数据(即更新词向量表)

在这里插入图片描述

  输出数据得到的是一个概率向量,表示下一个词在词库表中的概率(如下图所示)。而词库表如果非常庞大,那么对最后一层的softmax层的计算量非常大。

在这里插入图片描述

  本来我们是将A单词输入得到输出单词B。现在我们将单词A和单词B都作为输入,然后标签我们自己定义。例如,单词A后面的单词B在训练集中,那么标签为1;反之,则标签为0。这就是一个二分类任务。但是现有的词向量表只能做已在词向量表中的估计,也就是说,这个二分类任务标签全部为1,无法进行较好的训练。

在这里插入图片描述

  针对训练集标签全为0的情况,我们加入一些负样本(负采样模型)。默认的负采样参数为5。

在这里插入图片描述

  综合以上论述,自然语言处理首先经过初始化词向量矩阵。然后通过神经网络反向传播计算更新,此时不仅更新权重参数矩阵W,也会更新输入数据。

  深度学习框架:TensorFlow、PyTorch和Keras等等。截止至2023年底,PyTorch用的最多,TensorFlow基本不用。

在这里插入图片描述

四、扩展

4.1 知识蒸馏与模型轻量化

  现实世界当中,上亿数量的移动设备和物联网设备在持续不断地产生数据,这些数据也驱动着更好的产品、更优质的模型和更好的用户体验。因为机器学习就是数据+算力+模型。由于在移动设备上应用的需要,具有紧凑的模型大小、低计算成本和高性能的神经网络受到广泛关注,模型轻量化可以极大的扩展AI的应用范围。

  随着深度学习技术在多个领域的快速应用,具体包括计算机视觉-CV、自然语言处理-NLP、语音等,出现了大量的基于深度学习的网络模型。这些模型都有一个特点,即大而复杂、适合在N卡上面进行推理,并不适合应用在手机等嵌入式设备中,而客户们通常需要将这些复杂的模型部署在一些低成本的嵌入式设备中,因而这就产生了一个矛盾。为了很好的解决这个矛盾,模型量化应运而生,它可以在损失少量精度的前提下对模型进行压缩,使得将这些复杂的模型应用到手机、机器人等嵌入式终端中变成了可能。

  随着模型预测越来越准确,网络越来越深,神经网络消耗的内存大小成为一个核心的问题,尤其是在移动设备上。通常情况下,目前的手机一般配备 4GB 内存来支持多个应用程序的同时运行,而三个模型运行一次通常就要占用1GB内存。模型大小不仅是内存容量问题,也是内存带宽问题。模型在每次预测时都会使用模型的权重,图像相关的应用程序通常需要实时处理数据,这意味着至少 30 FPS。因此,如果部署相对较小的 ResNet-50 网络来分类,运行网络模型就需要 3GB/s 的内存带宽。网络运行时,内存,CPU 和电池会都在飞速消耗,我们无法为了让设备变得智能一点点就负担如此昂贵的代价。

在这里插入图片描述

  在探讨这个话题之前,我们需要先明确端侧的定义。端侧其实是相对于云中心侧来讲的。云中心侧其实是一种集中式服务,所有采集和感知到的视频、图像数据都通过网络传输到云中心侧进行后续处理。云侧的资源高度集中并且具有很高的通用性,但是随着IoT设备和数据的指数爆发式增长,云侧的集中式计算模型慢慢暴露出了很多不足,比如数据处理的实时性,网络条件制约,数据安全等

  AI技术用于端侧也就是我们常说的边缘计算,张志强说,这种模式可以更好的支持AIoT场景,具有如下优点:一是AI技术用于端侧可以第一时间对收集的数据进行处理,不需要通过网络上传到云侧的处理中心,极大加快了系统响应也减少了系统处理延迟,5G技术的普及也为端侧处理提供了保证;二是端侧计算可以更高效的处理有价值的关键数据(大约20%),其余的数据(大约80%)只是临时性的,在端侧结合AI能力,不仅可以更及时处理数据,而且减轻网络带宽的限制和缓解对中心侧数据存储的压力;三是在端侧的AI技术可以高效地对用户的源数据进行处理,将一些敏感的数据进行清洗和保护,端侧设备只将AI处理后的结果进行上报。

  总的来说,AI在边缘侧的执行可以实时进行数据处理,实时响应,有效降低因数据传送到云计算中心而导致的延迟。目前,主要的应用是物联网的边缘计算,京东对内、对外都有一些落地案例,例如:无人售货机和智能结算台上使用了AI的商品检测技术,包括顾客所选取的商品SKU(Stock Keeping Unit, SKU)等,主要采用的是端侧的AI能力;以及在智慧园区里进行基本的人脸结构化、人体结构化、车辆结构化,还有基于视频分析的周界安全检测、物体遗留等场景。某些场景不仅结合了边缘计算的AI能力,同时也使用了云端的AI能力进行二次分析,采用的形式是云端协同。在一些更复杂的场景,比如智慧园区,智慧社区,智慧城市的项目落地中,大多都是采用的端云协同的应用形式。

  为满足模型部署需要,需对模型进行轻量化设计,满足网络参数减少的同时,减少网络性能,同时尽可能的降低模型的复杂度以及运算量。常见模型性能及其FLOPS:

在这里插入图片描述

  根据理论依据和处理过程不同,可以分为四类:

  • 模型剪枝
  • 参数量化
  • 轻量化设计
  • 知识蒸馏
      模型压缩与优化是专门针对模型进行精简的技术,这是模型能够在各类嵌入式平台使用的关键技术,包括紧凑模型设计,模型剪枝,模型量化,模型蒸馏,自动化模型 设计等内容。

在这里插入图片描述
在这里插入图片描述

  模型量化就是将训练好的深度神经网络的权值,激活值等从高精度转化成低精度的操作过程,例如将32位浮点数转化成8位整型数int8,同时我们期望转换后的模型准确率与转化前相近。

在这里插入图片描述

4.2 联邦学习

  联邦学习(Federated Learning)的目的就是让多个客户端设备协同训练一个模型,训练时保持数据是分散,去中心化的。通过一个中心服务器来协调各方的协作。联合学习实际上是一种加密的分布式机器学习技术,参与者可以在不公开底层数据的情况下构建模型,从而使每个企业的自有数据不离开本地。通过加密机制下的参数交换,建立了虚拟公共模型。在这样一个机制下,所有参与方都可以成功地连接数据孤岛,走向共同发展。

4.3 图神经网络

  图数据(Graph Data)可以根据是否具有平移不变的性质分为以下两种:
在这里插入图片描述
在这里插入图片描述

未完待续

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值