深度学习基于人脸的常见表情识别实战task1

简介: 天池龙珠计划深度学习训练营学习笔记

天池龙珠计划深度学习训练营学习笔记


神经网络

1. 感知机

感知机(Perceptron)是 Frank Rosenblatt 在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络,以区别于多层感知机(Multilayer Perceptron)。尽管感知机结构简单,但能够学习并解决较复杂问题。

单层感知器类似一个逻辑回归模型,可以做线性分类任务,但是不能做更复杂的任务。第二次AI浪潮中马文·明斯基在其著作中证明了感知机本质上是一种线性模型,只能处理线性分类问题,就连最简单的 XOR(异或)问题都无法正确解决。作为人工智能领域的开创者之一,这一声明也直接或间接促使神经网络的研究陷入了近 20 年的停滞。

2. 多层感知机与反向传播

不过就算在低谷期,1974 年哈佛大学的 Paul Werbos 仍然证明增加一个网络层,利用反向传播算法可以搞定 XOR 问题。到了后来 Rummelhart,McClelland 以及 Hinton 在 1986 年正式在多层感知器 (MLP) 中使用 BP 算法,采用 Sigmoid 进行非线性映射,有效解决了非线性分类和学习的问题。

多层感知机(Multi-Layer Perceptron)是由单层感知机推广而来,最主要的特点是有多个神经元层。一般将 MLP 的第一层称为输入层,中间的层为隐藏层,最后一层为输出层。MLP 并没有规定隐藏层的数量,因此可以根据实际处理需求选择合适的隐藏层层数,且对于隐藏层和输出层中每层神经元的个数也没有限制。

多层感知机的关键问题在于如何训练其中各层间的连接权值,方法有一些不过大家最熟知的就是反向传播BP算法了。

反向传播算法的具体推导涉及大量的公式,因此我们就不写了,大家随便找一本书都能找到资料,勤快的可以自己推导一遍。

反向传播算法让多层感知机,或者说传统的全连接神经网络有了训练的手段,引发了神经网络的第二次热潮,虽然为期不长,毕竟当时算力和数据都很有限,但是全连接神经网络总算是正式起来了。

卷积神经网络

1. 全连接神经网络的2大缺陷

传统的BP神经网络在20世纪80年代左右流行,但是很快因为SVM等核方法的诞生而黯然失色。这是因为传统的BP神经网络有几个重大的缺陷。

  1. 首先是原理上的缺陷:BP神经网络仍然是有监督的传统机器学习方法,遵循着以下思路。

也就是说,不过是在最后面将SVM或者其他分类器换成神经网络,在大部分情况下其实没有什么优势,甚至增加了问题的复杂度。

提取的特征虽然是研究者们经过反复实验证明有效的特征,但仍然会一定程度上丢失了图像中的结构信息,从而丢失了一些对旋转扭曲等的不变性。而且要求输入的大小是固定的。为了学习到如偏移等微小的变化,需要有足够多的参数和足够多丰富的样本,最终学习到的权重,很可能在不同的位置处还会有非常相似的权重。

有人可能会说,直接把图像作为输入而不提取特征行不行?请接着往下看。

  1. 再一个就是结构上的缺陷:参数巨多,丢失空间信息。

全连接神经网络从BP算法提出开始,发展于90年代,那时候的计算机属于CPU时代,根本就无法撑起海量参数的计算。

如果一个隐藏层特征图像大小为100×100,输入层的特征图像大小为100×100,这意味着学习这一层需要100×100×100×100=108108的参数。如果以32位的浮点数进行存储,就需要4×1084×108的字节的存储量,约等于400MB的参数量。仅仅这样的一个网络层,其模型参数量已经超过了AlexNet网络的参数量,而100×100的特征图像分辨率,已经低于很多任务能够成功解决的下限。除了计算过程中需要存储的海量的参数,还有海量的计算,这些都超过了当时硬件的能力,因此大大限制了网络的大小,尤其是对于一些大的图像输入。

2. 卷积神经网络的崛起

不管是历史局限性也好,还是神经网络有种种毛病,总之80年代后的20年间它不是主流。

不过在上个世纪90年代研究神经网络的学者们没有停止,经典的诸如LeNet5这样的网络被提出。

LeNet5,1999年由深度学习三巨头中LeCun, Bengi的提出,成功用于银行支票上的手写数字识别,最重要的两个概念(局部连接+池化)

下面这个视频记录了1993年Yann LeCun展示的,用于文本识别的世界上第一个卷积网络,所有人都可以通过当时的视频,亲自深刻感受到,当今经典又伟大的CNN,是如何诞生的。

为什么是卷积神经网络呢?首先自然是要知道什么是卷积神经网络。

卷积神经网络的基本网络层

卷积神经网络:英文全称:Convolutional Neural Networks、简称:CNN

CNN 主要包含卷积层、池化层和全连接层

  • 卷积层:用于对图像进行特征提取操作,其卷积核权重是共享权值的,对应的相关概念还包括步长,填充。
  • 池化层:用于降低特征图大小,降低后续操作的计算量和参数量
  • 全连接层:最终进行分类输出使用,本质就是多层感知机

1. 什么是卷积?

卷积在工程和数学上有非常多的应用,在信号处理领域中,任意一个线性系统的输出,就是输入信号和系统激励函数的卷积。放到数字图像处理领域,卷积操作一般指图像领域的二维卷积。

一个二维卷积的案例如上,在图像上滑动,取与卷积核大小相等的区域,逐像素做乘法然后相加。 例如原始图像大小是5×5,卷积核大小是3×3。首先卷积核与原始图像左上角3×3对应位置的元素相乘求和,得到的数值作为结果矩阵第一行第一列的元素值,然后卷积核向右移动一个单位(即步长stride为1),与原始图像前三行第2、3、4列所对应位置的元素分别相乘并求和,得到的数值作为结果矩阵第一行第二列的元素值,以此类推。

故卷积就是:一个核矩阵在一个原始矩阵上从上往下、从左往右扫描,每次扫描都得到一个结果,将所有结果组合到一起得到一个新的结果矩阵。 注意这里我们不区分卷积和互相关,它们的区别只在于权重算子是否进行了翻转。之所以不重视,是因为在机器学习中,卷积核是否翻转,并不影响算法学习。


2. 填充(Padding)

  1. 使卷积后图像分辨率不变,方便计算特征图尺寸的变化
  2. 弥补边界信息“丢失”

填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。下图阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×0+0×1+0×2+0×3=0。


3. 步长(Stride)

卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。我们将每次滑动的行数和列数称为步幅或步长(stride)。

下图展示了在高上步幅为3、在宽上步幅为2的卷积运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。下图阴影部分为输出元素及其计算所使用的输入和核数组元素:0×0+0×1+1×2+2×3=8、0×0+6×1+0×2+0×3=6。


4. 池化

对图像进行下采样,降低图像分辨率。

池化层的作用:使特征图变小,简化网络计算复杂度;压缩特征,提取主要特征

常见的池化操作可以分为:最大池化(Max Pool)、平均池化(Avg Pool)


为什么要用卷积来学习呢?

图像都是用方形矩阵来表达的,学习的本质就是要抽象出特征,以边缘检测为例。它就是识别数字图像中亮度变化明显的点,这些点连接起来往往是物体的边缘。

传统的边缘检测常用的方法包括一阶和二阶导数法,本质上都是利用一个卷积核在原图上进行滑动,只是其中各个位置的系数不同,比如3×3的sobel算子计算x方向的梯度幅度,使用的就是下面的卷积核算子。

如果要用sobel算子完成一次完整的边缘检测,就要同时检测x方向和y方向,然后进行融合。这就是两个通道的卷积,先用两个卷积核进行通道内的信息提取,再进行通道间的信息融合。 这就是卷积提取特征的本质,而所有基于卷积神经网络来学习的图像算法,都是通过不断的卷积来进行特征的抽象,直到实现网络的目标。

卷积神经网络的优势在哪?

前面说了全连接神经网络的原理和结构上的缺陷,而这正好是卷积的优势。

  1. 学习原理上的改进。

卷积神经网络不再是有监督学习了,不需要从图像中提取特征,而是直接从原始图像数据进行学习,这样可以最大程度的防止信息在还没有进入网络之前就丢失。

  1. 学习方式的改进。

前面说了全连接神经网络一层的结果是与上一层的节点全部连接的,100×100的图像,如果隐藏层也是同样大小(100×100个)的神经元,光是一层网络,就已经有 10^8 个参数。要优化和存储这样的参数量,是无法想象的,所以经典的神经网络,基本上隐藏层在一两层左右。而卷积神经网络某一层的结点,只与上一层的一个图像块相连。

用于产生同一个图像中各个空间位置像素的卷积核是同一个,这就是所谓的权值共享。对于与全连接层同样多的隐藏层,假如每个神经元只和输入10×10的局部patch相连接,且卷积核移动步长为10,则参数为:100×100×10×10,降低了2个数量级。 又能更好的学习,参数又低,卷积神经网络当然是可以成功了。

相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
74 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
64 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从基础到实战
【9月更文挑战第19天】本文将带你走进深度学习的世界,从基础概念入手,逐步深入到实战应用。我们将通过简单易懂的语言和生动的比喻,让你轻松理解深度学习的原理和应用场景。同时,我们还为你准备了一些实用的代码示例,帮助你快速入门深度学习,开启你的AI之旅。
61 10
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从基础到实战
【9月更文挑战第23天】本文将带你走进深度学习的世界,从基本概念到实际应用,一步步揭示深度学习的神秘面纱。我们将通过实例和代码示例,帮助你理解和掌握深度学习的核心技术和方法。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起探索深度学习的奥秘吧!
44 0
|
8天前
|
机器学习/深度学习 人工智能 算法
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,重点分析了卷积神经网络(CNN)的工作原理及其在处理图像数据方面的优势。通过案例研究,展示了深度学习如何提高图像识别的准确性和效率。同时,文章也讨论了当前面临的主要挑战,包括数据不足、过拟合问题以及计算资源的需求,并提出了相应的解决策略。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
本文旨在通过深入浅出的方式,为读者揭示卷积神经网络(CNN)的神秘面纱,并展示其在图像识别领域的实际应用。我们将从CNN的基本概念出发,逐步深入到网络结构、工作原理以及训练过程,最后通过一个实际的代码示例,带领读者体验CNN的强大功能。无论你是深度学习的初学者,还是希望进一步了解CNN的专业人士,这篇文章都将为你提供有价值的信息和启发。
|
3天前
|
机器学习/深度学习 数据采集 测试技术
深度学习在图像识别中的应用
本篇文章将探讨深度学习在图像识别中的应用。我们将介绍深度学习的基本原理,以及如何使用深度学习进行图像识别。我们将通过一个简单的代码示例来演示如何使用深度学习进行图像识别。这篇文章的目的是帮助读者理解深度学习在图像识别中的作用,并学习如何使用深度学习进行图像识别。
|
4天前
|
机器学习/深度学习 算法框架/工具 Python
深度学习在图像识别中的应用
本文将探讨深度学习技术在图像识别领域的应用。我们将介绍深度学习的基本原理,以及如何使用深度学习进行图像识别。我们还将通过一个简单的代码示例来演示如何使用深度学习进行图像识别。
|
3天前
|
机器学习/深度学习 数据采集 边缘计算
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习在图像识别领域的应用,并分析了当前面临的主要挑战。通过具体案例和数据分析,展示了深度学习技术如何推动图像识别的边界,同时指出了数据质量、模型泛化能力及计算资源等方面的限制因素。文章旨在为研究人员和从业者提供一个关于深度学习在图像识别中应用现状与未来发展方向的全面视角。
|
6天前
|
机器学习/深度学习 算法 大数据
深度学习在医疗影像诊断中的应用
本文探讨了深度学习技术在医疗影像诊断领域的应用,分析了其如何通过提高图像识别精度来辅助医生做出更准确的诊断。文章首先介绍了深度学习的基本概念和关键技术,随后详细阐述了这些技术在处理复杂医疗影像数据时的优势,并通过案例分析展示了深度学习在实际应用中取得的成果。此外,还讨论了当前面临的挑战以及未来的发展趋势。

热门文章

最新文章

下一篇
无影云桌面