【深度学习(deep learning)】花书第12章 应用 读书笔记

【深度学习(deep learning)】花书第12章 应用 读书笔记


前言

打基础,阅读花书,感觉一次性啃不动。看一点算一点,写一点笔记留作纪念。以便日后查看与回顾。最后一部分啦~蓦然回首,发现前面的也没记住啥。。。2020.12.7-2020.12.9

以下是正式内容。图片默认情况下全部来花书。

一、大规模深度学习

要体现出足够的只能,神经元的数目要足够的。因此深度学习必须获得高性能硬件设施和软件实现的支持。

1.快速的CPU实现

普通CPU是不可行的。要使用连接的CPU或者特殊设计的CPU。比如进行特殊设计的数值运算,如定点/浮点运算的选择,其他策略如优化数据结构避免高速缓存缺失,使用向量指令等。

2.GPU实现

进行 并行的,矩阵的,数值的,简单重复的计算,且配备有大量的内存缓冲,具有高度并行特性和很高的内存带宽。这种特性是非常适合深度模型的计算的。

3.分布式实现

将一个任务部署到多个机器上。

  • 数据并行:将不同样本分配到不同机器相同模型)上运算。
  • 模型并行不同机器负责同一样本模型不同部分的运算。
  • 异步随机梯度下降:多个处理器共用保存参数的内存,在无锁的情况下,读取、更新参数,可以提高梯度的更新速度,近似实现梯度计算在代间的并行。

4.模型压缩

一个训练好的模型,部署在小型终端上只是使用,那么实现开销小的推断更为有用。减少推断开销的一个关键策略是模型压缩。基本思想是用一个更小的模型替代原始耗时的模型。

5.动态结构

在给定一个输入的情况中,数据处理系统可以动态地决定运行神经网络系统的哪一部分。 单个神经网络内部同样也存在动态结构,给定输入信息,决定特征(隐藏单元)哪一部分用于计算。 这种神经网络中的动态结构有时被称为条件计算。应用于神经网络最简单的动态结构基于决定神经网络中的哪些子集需要应用于特定的输入。
级联的分类器,决策树,开关都是动态结构。
动态结构会使并行度降低。

6.深度网络的专用硬件实现

现场可编程门控阵列 FPGA
扩展到低精度数字的设备上完成推断。

二、计算机视觉

计算机视觉任务:

  • 图片分类:输入一张图片,给出类别
  • 物体识别:分类+定位
  • 目标检测:给图像中的每个对象周围添加注释性的边框
  • 图像分割:按照像素,进行对象标识
  • 图像转译:给定图片,转录出其他符号序列
  • 图像恢复:修复图像中的缺陷或者从图像中移除对象。

1.预处理

预处理相对比较少。

  • 标准化,使得像素都在合理的范围内,如[0,1],[-1,1],使图片拥有相同的比例。唯一必须的预处理。
  • 格式化:得到标准尺寸的图像,可以进行缩放或者裁剪,但这一步不是必须的,因为好多卷积网络接受大小可变的输入。
  • 数据集增强:只针对训练集的预处理。

2.对比度归一化

对比度:图像中亮像素和暗像素之间差异的大小。在许多任务中,对比度是能够安全移除的最为明显的变化源之一。 在深度学习中,对比度通常指的是图像或图像区域中像素的标准差。张量形式的图片X(i,j,3)通道1,2,3分别是红、绿、蓝色的强度。则整个图像的对比度:
1 3 r c ∑ i = 1 r ∑ j = 1 c ∑ k = 1 3 ( X i , j , k − X ˉ ) 2 \sqrt{\frac{1}{3rc}\sum_{i=1}^r{\sum_{j=1}^c{\sum_{k=1}^3{\left( X_{i,j,k}-\mathbf{\bar{X}} \right) ^2}}}} 3rc1i=1rj=1ck=13(Xi,j,kXˉ)2 X ˉ = 1 3 r c ∑ i = 1 r ∑ j = 1 c ∑ k = 1 3 X i , j , k \mathbf{\bar{X}}=\frac{1}{3rc}\sum_{i=1}^r{\sum_{j=1}^c{\sum_{k=1}^3{\text{X}_{i,j,k}}}} Xˉ=3rc1i=1rj=1ck=13Xi,j,k

  • 全局对比度归一化 GCN:从每个图像中减去其平均值,然后重新放缩,使其像素上的标准差等于某个常数s,防止图像具有变化的对比度。但是要注意0均值的图像,或者小均值的图像,会有除0的风险或者放大噪声的风险,要加一些防爆因子。 X i , j , k ′    =    s X i , j , k − X ˉ max ⁡ { ϵ , λ + 1 3 r c ∑ i = 1 r ∑ j = 1 c ∑ k = 1 3 ( X i , j , k − X ˉ ) 2 } X_{i,j,k}^{'}\,\,=\,\,s\frac{X_{i,j,k}-\mathbf{ \bar{X} } }{\max \left\{ \epsilon , \sqrt{ \lambda + \frac{1}{3rc}\sum_{i=1}^r{\sum_{j=1}^c{\sum_{k=1}^3{\left( X_{i,j,k}-\mathbf{\bar{X}} \right) ^2}}}}\right\}} Xi,j,k=smax{ϵ,λ+3rc1i=1rj=1ck=13(Xi,j,kXˉ)2 }Xi,j,kXˉ正则化系数λ,平衡标准差;ε ,防止分母过小;尺度参数s,可以设置为1,或接近1.
    如果是大图像,对比度为0的概率很小,因此把 λ=0,ϵ=10−8 是可行的。
    如果是裁剪的非常小的图像,对比度为0的概率就比较高。因此,需要采用更激进的正则化,比如,λ=10,ϵ=0。
    可以把GCN理解为到球壳的一种映射,样本之间的区别体现在方向性,为不是具体位置。
  • 局部对比度归一化 LCN:对比度在每一个小窗口上被归一化而不是整体图像上。有多种方法:
    1.减去近邻像素的平均值并除以近邻像素的标准差。
    2.计算以当前像素为中心的矩形窗口的平均值与标准差。
    3.以像素为中心的高斯权重的加权平均与加权标准差。
    4.彩色图像中,一些颜色通道单独处理。
    可以使用可分离卷积来计算特征映射的局部平均值和局部标准差,然后在不同的特征映射上使用逐元素的减法和除法。局部对比度归一化可作为一种非线性作用应用于网络层。
    局部对比度归一化更需要正则化。

GCN可以区分大的亮区与暗区,在暗区内部的边缘难以区分。LCN去除具有相同强度的部分,只关注于边缘。(图来自花书)对比度

三、自然语言处理 NLP

目的:让计算机能过使用人类语言,即某种自然语言,比如英语。先行计算机使用某种特化的语言,形式化的,规则化的。而自然语言是模糊的。
NLP应用程序都是基于语言模型的,语言模型定义了关于自然语言中的字/字符/字节的标记序列的概率分布

3.1 n-gram

基于固定长度序列的标记模型,一个n-gram就是一个包含n个标记的序列。
n-gram最显著的特点是它考虑词语之间的顺序相关性,这是区别于词袋模型的一点,词袋模型强调这个词出不出现/有没有,而不考虑顺序。
因此,n-gram定义一个条件概率,给定前n-1个标记后的第n个标记的条件概率,也就是说每次考虑n个词之间的顺序相关性 P ( x 1 , . . . , x τ ) = P ( x 1 , . . . , x n − 1 ) ∏ t = n τ P ( x t ∣ x t − n + 1 , . . . , x t − 1 ) P\left( x_1,...,x_{\tau} \right) =P\left( x_1,...,x_{n-1} \right) \prod_{t=n}^{\tau}{P\left( x_t|x_{t-n+1},...,x_{t-1} \right)} P(x1,...,xτ)=P(x1,...,xn1)t=nτP(xtxtn+1,...,xt1)初始序列 P ( x 1 , … , x n − 1 ) 的概率分布可以通过带有较小n值的不同模型建模。n = 1 称为一元语法(unigram),n = 2称为二元语法(bigram),n = 3 称为三元语法(trigram)

训练n-gram:最大似然估计,统计每个可能的n-gram在训练集中的出现的次数。可以同时训练n与n-1两个模型,这样可以快速的查表进行推断,得到: P ( x t ∣ x t − n + 1 , . . . , x t − 1 ) = P n ( x t − n + 1 , . . . , x t ) P n − 1 ( x t − n + 1 , . . . , x t − 1 ) P\left( x_t|x_{t-n+1},...,x_{t-1} \right) =\frac{P_n\left( x_{t-n+1},...,x_t \right)}{P_{n-1}\left( x_{t-n+1},...,x_{t-1} \right)} P(xtxtn+1,...,xt1)=Pn1(xtn+1,...,xt1)Pn(xtn+1,...,xt)句子的开头(不满足n大小的部分)不能利用上述的公式推断,只能计算边缘概率。

n-gram的缺陷
1.某些组合在训练集中出现的频率为0,要进行平滑。如拉普拉斯平滑,或者使用高阶和低阶的n-gram混合模型(如果上下文不支持高阶的频率,回退方法就查找低阶的n-gram替代。)。

在西瓜书,朴素贝叶斯部分提到过拉普拉斯平滑。

2.容易造成维数灾难。可以使用基于类的语言模型,对词先聚类,同类别的词共享统计强度。
3.模型对于数据集是特化的,不同场景中词的相关性是不同的,n-gram只能学习特定语言场景中的相关关系。

3.2 神经语言模型 NLM

用来克服维数灾难,使用词的分布式表示对自然语言序列建模。神经语言模型能够识别两个相似的词,并且不丧失将每个词编码为彼此不同的能力。

如果词dog和词cat映射到具有许多属性的表示,则包含词cat的句子可以告知模型对包含词dog的句子做出预测,反之亦然。因为这样的属性很多,所以存在许多泛化的方式,可以将信息从每个训练语句传递到指数数量的语义相关语句。维数灾难需要模型泛化到指数多的句子(指数相对句子长度而言)。该模型通过将每个训练句子与指数数量的类似句子相关联克服这个问题。

词嵌入:词的表示,将一个 词(one-hot编码) 映射到 一个低维空间向量上。在独热编码中,每个词的距离是一样的,而嵌入空间,相似的词(具有相似的上下文等)具有更近的距离。

3.3 高维输出

有时候模型是为了输出单词,我们需要将表示再次映射回到词,由于词典维数是特别大,这就涉及高维输出。如果使用仿射变换再加一个sotfmax的话,需要进行大规模的矩阵运算和存储。

1.使用短列表

将词汇量限制在10000或20000减轻大词汇表上softmax的高成本。
在此基础上,可以将词汇表分为最常见词汇的短列表(神经网络处理),和稀有词汇的尾列表(n-gram模型维护)。添加一个sigmoid单元,预测上下文C之后出现的词位于尾列表的概率。

2.分层softmax

分层地分解概率,|V|降到log|V|级别。
将词之间的关系,维护成一棵,即词的类别,词的类别的类别,……,等等,在平衡树中,树的深度是log|V|。每个词(叶结点)的概率,由路径上的概率乘积给出。每个中间结点,可以分别使用一个逻辑回归模型,接受相同的上下文输入。
可以增加树的宽度,减小树的深度,可以降低整体的计算复杂度,树的分枝可以定义维一组互斥的概念。
在分层的情况下,定义一个好的层次结构依旧是很重要的工作。
分层的效果并不理想。

3.重要性采样

加速神经语言模型训练的一种方式是,避免明确地计算所有未出现在下一位置的词对梯度的贡献。每个不正确的词在此模型下具有低概率。枚举所有这些词的计算成本可能会很高。相反,我们可以仅采样词的子集。
重要性采样,实现从另一个分布(提议分布)中采样,避免从原始语言模型中采样。

4.噪声对比估计与损失排名

其他基于采样的方法。

3.4 结合 n-gram 与 NLM

n-gram优点:模型容量大,计算量低。如果使用哈希表或树,甚至计算量与容量无关。
但是,将神经网络的参数数目加倍通常也大致加倍计算时间。

增加容量的最简单办法是将二者集成

3.5 机器翻译

编码器-解码器思想。

基于MLP的方法:给定输入标识序列和输出序列,计算条件概率。使用MLP给目标语言的序列评分。要求序列都是定长的。

使用RNN的方法:可变的序列长度,一个读取输入产生上下文的网络(RNN或卷积网络),一个读取上下文产生输出的网络(RNN)。在这里插入图片描述

注意力机制

用固定大小的表示,概括任意长的句子的所有语义细节是非常困难的。
更高效的方法是,先读取整个句子或段落(获得表达的上下文与焦点),然后一次翻译一个词,每次聚焦句子的不同部分来收集产生下一个输出词所需的语义细节。
注意力机制的图示:本质是加权平均注意力机制
可以认为注意力机制的系统有三个组件:
1.读取器:读取原始数据,并将其转化为分布式表示(进行词嵌入),其中一个特征向量与每个词的位置相关联。
2.存储器:存储读取器的输出向量序列,将词转化成语义事实列表,用于检索。列表不一定按照原来的顺序,检索也不用访问全部。
3.翻译器:利用存储器的内容,顺序地产生结果,每个时间步聚焦于某个存储器元素的内容(或者几个,带有权重)

四、其他应用

4.1 语音识别

自动语音识别ARS:输入语音信号序列X,输出最有可能对应的文字序列y。

传统的语音识别 使用 HMM(隐马尔可夫模型) 与 GMM (高斯混合模型)。GMM对声学特征和音素之间的关系建模,HMM对音素序列建模。

后来使用无监督的深度网络受限玻尔兹曼机代替GMM,将声学特征转换为音素。

卷积可以应用进来,卷积网络在时域与频域上复用了权重,改进了之前的仅在时域上使用重复权值的时延神经网络。这种新的二维的卷积模型并不是将输入的频谱当作一个长的向量,而是当成是一个图像,其中一个轴对应着时间,另一个轴对应的是谱分量的频率。

完全抛弃HMM 并转向研究端到端的深度学习语音识别系统:使用RNN。

4.2 推荐系统

目的:向潜在用户或客户推荐项目。
本质是一个有监督地学习,预测预期增益(回归),或者某种行为的概率(分类)。
协同过滤:基于用户之间的相似性。用户1,2都喜欢a,b,c,如果用户1喜欢d,那么就认为用户2也喜欢d,就给用户2推荐d。

  • 非参数方法:基于估计相似性距离的最近邻方法。
  • 参数化方法:为用户与表示学习一个表示(进行嵌入),再进行目标变量的双线性预测。设R是预测目标矩阵(如评级),A是用户嵌入,B是目标嵌入,使用用户嵌入与目标嵌入的点积,再利用一些用户与目标自身信息的偏置项进行矫正。获得这些嵌入的一种方式是对实际目标(例如评级)的矩阵R 进行奇异值分解。这对应于将R = UDV′(或归一化的变体)分解为两个因子的乘积,低秩矩阵A = UD 和B = V′。
    在这里插入图片描述

基于内容的推荐系统:解决协同过滤无法评估新项目/新用户的相似性的问题,引入单个用户与项目的额外信息,如用户的简要信息或每个项目的特征。
深度学习可以用于学习用户特征或项目特征的表示。

推荐系统得到是一个不完整的用户偏好模型,当推送未知反应的产品与用户时,进入了强化学习的范畴。
探索:不知道用户会不会买,推一推试试看。
利用:直到用户可能买,推给他,让他买。
探索和利用是冲突的,不探索就不知道用户还会买什么,不利用就无法实现推荐系统的目标。
策略:上下文到动作的映射。什么时候推荐,推荐什么。

4.3 知识表示、推理、回答

词嵌入:为单个词、概念,学习一个表示
知识表示:为了给词与词之间的关系学习一个表示,为词与事实之间的关系学习一个表示。

为什么是知识?
自然语言处理,词嵌入,能让计算机独一无二地认识“狗”和“猫”两个词,但是计算机仍然不明白什么是狗什么是猫
知识,就是建立狗这个词,到某个代表狗这个概念/事实的实体之间的关系,让计算机知道什么是狗(但是,依然也只是通过各种关系定义的狗的概念,比如具有长毛/哺乳动物等特性的是狗,某类图片对应的是狗等)

关系,可以起到AI语言中的动词的作用。关系的两个参数是主体与客体。句子以三元组的形式出现。关系
属性:类似于关系,只有一个参数属性
使用知识库存贮这种定义 关系的结构化数据,得到了训练数据。
模型族,一种常见的方法是将神经语言模型扩展到模型实体和关系,应用是连接预测(预测知识图谱中缺失的弧,由旧知识推广到新知识的一种形式),另一个应用是词义消歧(某些语境中,哪个词的意义是恰当的)。
知识 + 推理 + 自然语言处理,可以建立一个问答系统。

参考资料

1.机器学习,周志华
2.统计学习方法,第二版,李航
3.https://zhuanlan.zhihu.com/p/38431213
4.https://github.com/MingchaoZhu/DeepLearning
5.https://www.bilibili.com/video/BV1kE4119726?p=5&t=1340
6.https://blog.csdn.net/weixin_42555985/article/details/104587896
7.https://blog.csdn.net/songbinxu/article/details/80209197
8.https://blog.csdn.net/weixin_42555985/article/details/104613510

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值