百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

一开始报名参与这个课程还是信心满满,然而最终没有顺利结课,也是备受打击,课程学习博客更新到第二节,也不会有后续的几节直播课的笔记,这篇就是对前一段深度学习的总结;

今天这篇文章,完全手码的,无他,仅为对前一阶段的AI学习划个句号,分享自己的收获和心得;

课程回顾

如果算上后来的大作业讲解,应该有连续8天的直播课,内容的质量对不同人群的表现也不尽相同;对于我个人而言,受益良多;虽然前文只书了两节,但是所书内容还是很值得一看的(类似内容我之前学的时候,基于TensorFlow的我读了3遍,要结合来看吧,只读这两节可能很多概念的理解会有问题);

接下来回顾下过往的学习;

预习内容:

重点:

  • 深度学习基础概念;
  • 深度学习的数学基础;

这是在正式直播课开始之前,在课程页面提供的基础性内容,对于没有任何基础的同学,很值得细细阅读,主要内容包括了深度学习的简介、深度学习的数学基础、Python基础、Notebook的基础操作、PaddlePaddle的快速入门;一般的,我们在学习一门编程语言的时候,接触的第一行代码就是打印一个hello world,在深度学习中,也存在一个类似的,就是基于MNIST数据集手写数字识别;预习内容中也给出了相应的代码实现;这一过程中也能感受到,飞桨团队对授课前内容的不断调整,一开始应该是基于1.0版本的实现,最后调整为基于2.0高层API的版本,代码实现简洁直观;

我在之前曾对TensorFlow2.0进行过简单入门,公司有一小部分业务需要使用深度学习处理一个简单的二分类问题,基于音频的音乐段/非音乐段识别,一开始入门也是通过训练MINIST数据集来完成手写数字识别的任务开始的,结合自己的实践经验来看,PaddlePaddle在预习阶段给了我很好的感官体验,至少在代码层面表现良好,同时由AI Studio提供的免费算力,也为没有GPU资源的同学提供了一个高效的计算环境;

第一天直播课:

重点:

  • pillow图片处理包;
  • 深度学习的实践场景;
  • 深度学习的一般过程;
  • 手写数字识别案例中PaddlePaddle2.0高层API的使用;
  • 静态图和静态图的区别:
    • 动态图是为了微调的
    • 静态图是为了部署的
    • 动态图模型:边构图 边计算 很灵活的调试运行(training=True)
    • 静态图模型:部署的使用使用的(training=False)
    • 一般用于部署的模型,保存时可指定trainning参数为False,即保存为静态图模型,运算更快;

第一天的直播课内容就确定了基于框架的分析处理实际问题的“万能公式”,这是一种以“雨哥”为首的老师一再强调的可作为标准的开发流程:问题定义、数据准备、模型选择和开发、模型训练和调优、模型评估测试、模型部署上线;

同时这一节也介绍了常用的业务场景、讲了大量的基础概念,由于之前实践过分类问题,因而这一部分内容让我对之前的许多概念细节有了更加深刻的理解,毕竟是直播课,还可以互动,有的从一开始就不理解的地方,直接就向老师请教了,收获颇丰;

最后介绍了主角PaddlePaddle,相关教程我们在第一节的学习博客已经附上了相关链接;并基于PaddlePaddle2.0,按照万能公式,演示了手写数字识别的模型训练;

第二天直播课:

重点:

  • 图像的预处理,可以对数据进行增强,有利于模型的训练;
  • 数据的归一化处理,可以使梯度图更加规整,梯度下降更快;
  • 卷积层计算之后的shape宽高计算:
    • 参数:Xw是输入的数据矩阵宽,Pw是宽向填充大小,Fw是卷积核宽,Sw是宽向步长;
    • W = (Xw + 2Pw - Fw)/Sw + 1/W = (Xw + Pw1 + Pw2 - Fw)/Sw + 1
    • H = (Xh + 2Ph - Fh)/Sh + 1/H = (Xh + Ph1 + Ph2 - Fh)/Sh + 1
    • 在矩阵外围做0填充,并不会影响特征的提取
  • 平均池化 和 最大池化:
    • 现在一般都用最大池化,因为它能更好的反应特征;
    • 池化并不会改变已提取特征的通道数
    • 池化步长 和 卷积核大小有关 一般用2
    • 池化的作用:下采样,减少计算量
  • 激活函数的作用:
    • 非线性变换,可以进行更好的梯度变换;
    • sigmoid 右侧曲线的梯度越来越平缓 最终消失
    • relu 小于0时 梯度会消失

有了前两节课对深度学习的背景、概念、HelloWorld,这一节直播课的案例是十二生肖分类;

本质上这个案例和手写数字识别是同类型的,都是分类问题,手写数字识别是10分类问题,这个是12分类问题;区别在于,这里输入的图片是多通道的,而MNIST数据集中的图片都是灰度图,是单通道;

作为第二节要演示的分类问题,“雨哥”选用的案例,还是相对简单的,比多分类更复杂如多标签识别;对比手写数字识别,很大一点不同是在数据准备时,对输入图片的处理要更加多元,如随机剪裁、随机调整角度,主要目的还是增加训练数据的多样性;(训练集越丰富,训练得到的模型往往泛化能力更好)

卷积神经网络(CNN)是这节重点知识,他在图片分类问题、边缘检测、图形分割等研究方向应用广泛;

基于卷积层构建的卷积神经网络有很多,构建上有关注网络加深的、也有关注增强卷积模块功能,结合两者的如ResNet,它可以有效解决梯度传播过程中的退化问题,ResNet50+的模型,残差模块会有变化,主要是为了减少参数,又不减弱效果;

我在公司的分类问题上用的就是ResNet18;值得一提的是,网络的构建方式对模型的训练结果影响很大,目前一般都是基于较为成功的网络进行模型的训练,完全自行构建的效果往往不太好;这里说下对PaddlePaddle使用的一点体会,首先是AI Studio平台提供的算力、PaddlePaddle提供的可视化的功能、更便捷的API,都很优秀,但是对于之前音乐段/非音乐段分类问题我成功构建的模型,想在PaddlePaddle2.0框架进行实现,却遇到了层层阻力,最终大作业也被坑到了,具体的我们在大作业一节再说;

案例的最终结果是可以完成一组十二生肖图片的准确预测;

总的来说,第二节直播课,老师带我们演示了一个实际分类问题的使用卷积神经网络是如何解决的;

第三天直播课:

重点:

  • 归一化层:单独的对层次中的参数,进行归一化处理;
  • 分类VS回归:
    • 分类是定性问题(属于那一分类,离散),回归是定量问题(计算特征,连续);
    • 图像分类问题的损失函数:CrossEntropyLoss 信息熵的计算
    • 人脸关键点检测的损失函数:SmoothL1Loss 距离的计算
  • NME评估指标的计算:IPN表示两眼瞳孔间举例、ION表示两眼外眼角间的距离,二者选一作为NME评估指标的计算参数;

本节演示的案例是 人脸关键点检测,列举了一些现在直播、短视频领域的常见的面部贴纸、美颜的应用场景,任务的本质是找到一个最优算法,让机器能够找出每个人脸照片的关键点,是一个基于图像的回归任务;

无论是人脸关键点检测还是回归任务,其实只要理解了卷积神经网络就很容易理解;模型就好像是一个参数特别多的大函数,我们目前接触的深度学习都是有监督的,所谓有监督就是,数据集中,一个输入对应的标准输出,都要送入模型进行训练;一个输入信号在进行数据转换之后,对应的就是这个大函数的很多个自变量,这个大函数的输出,就是因变量;模型训练的过程,实际就是在为所有的自变量和函数本身寻找一组参数,这组参数可以使训练集中的一个输入经计算得到的输出,与训练集的监督标签之间误差最小;训练结束之后,我们得到的模型就可以为我们提取任意类似场景输入的有效特征,在手写数字识别中,这个有效特征表征了分类,在本节的人脸关键点检测,这个特征表征的就是一张图中一些有效的特征点坐标(如鼻子、眼睛、嘴巴);

训练集举例:一张人像图,对应的标签就是这张图上人五官的一些坐标点,目前常用的人脸关键点标注点数有5、21、68、98等;图像的预处理包括:图像大小统一、格式统一、数据量较小时进行有效的数据增强,具体的包括灰度化、归一化(加快收敛)、重新设置尺寸、随机剪裁、修改通道格式(对应模型的输入结构);如果标注不到位,预处理阶段除了处理image,有时也需要处理label;

案例的最终结果完成一张人像面部的特征关键点坐标提取;

第四天直播课:

重点:

  • 词汇表的使用
  • 可训练的Embedding
  • LSTM 序列建模法
    • 谷歌-预训练模型

按照课程安排,接下来就要介绍RNN了,即循环神经网络,其实听课的时候我也挺惊讶的,我之前用了1个月入门的东西,3天就讲完了…完了…了;

本节接触的第一个概念就是NLP,即情感识别,属于自然语言处理的一种;

关于NLP,我又要自行理解,开启白话:所谓情感识别,说白了就是提取语义特征,一个句子是一组有序文字/单词的连续的组合,这个组合表征了一个语义,比如说表现了喜悦、悲伤等情感;或者一段文本中我们要提取数字,其实就是在提取语义相关的特定内容;一般在文章、视频推荐应用广泛;

那具体要怎么做呢,我们先不管神经网络的部分,依旧是把它看成是一个大函数,输入呢,可以是一个字、词、句子、篇章等,这里以句子分类任务为例,标签为这个句子提现的语义:积极、消极;

一个句子,再输入到循环神经网络前,还需要进行分词、并转换为词向量;这两步很重要,首先分词是提现句子语义的基本单位,一般会有一些公共的词汇表可以用,这些词汇表可以把词和一个数字进行对应,通过词汇表可以完成句子向一组数字的转换;转词向量就是把前面的一组数字,编码为一组词向量,这些词向量为了能够完整覆盖词向量空间,往往都有几百维;

转词向量可以直接使用Embedding层进行,得到的结果shape为 batch_size * token_num * dim_num,对应的就是 有几个句子,每个句子有多少个分词(句子长度不足的会被填充,长度多余的会被截取),每个分词被表示成多少维的向量;

值得注意的是,一个好的词向量空间,往往可以更好的提现语义信息(如 积极的词汇分布更集中),为了使输入句子中的分词,表现出来的词向量空间更好,Embedding层是可被训练的;

到这里,我们已经把一系列输入句子(一个训练集),经Embedding层,转化为了待训练的词向量数据;那么如何训练才能得到更能提取语义特征的模型呢?
一般有:

  • 词向量加和:速度快,但只能描述短句,不能刻画细致语义;
  • 词序建模:计算速度慢,并行计算能力差,但能提取更长句子的语义特征;
  • 谷歌预训练模型:如BERT:BERT 是第一个无监督、深度双向的自然语言处理模型预训练系统。它只使用纯文本语料库进行训练;

毫无疑问,谷歌的预训练模型模型更深、计算量更大,性能最佳;

但是对于不那么复杂、要求不太高的场景(预训练模型在某些场景已经超越人类),词序建模的方式依然是首选;

LSTM:一种序列建模法,即长短时记忆网络,是循环神经网络的一种

更新中…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值