专栏首页鸿的学习笔记Understanding Convolution in Deep Learning(一)

Understanding Convolution in Deep Learning(一)

2015-03-26by TimDettmers

卷积可能是目前深度学习中最重要的概念了。卷积和卷积网络是引发深度学习去完成几乎任何机器学习任务的最前沿地概念。但是什么使卷积这么强大?它是如何工作的?在这篇博客中,我将解释卷积,帮助你彻底了解卷积。这篇博客文章也会有很多数学细节,但我会从概念的角度来解释,这里面的基础数学每个人都应该能够理解。本博文的第一部分针对任何想要了解深度学习里卷积和卷积网络的一般概念的人。本博文的第二部分是高级概念,旨在进一步增强对深度学习研究人员和专家的卷积的理解。

What is convolution?

整个博客的建立就是为了回答这个问题,首先了解什么是卷积是非常有帮助的?你可以想象卷积是一种信息的混合。 想象两个桶装满了信息,这些信息被倒入一个桶中,然后根据特定规则混合。每个信息桶具有其自己的配方,用以描述一个桶中的信息如何与另一个桶混合。 所以卷积是一个两个信息源交织在一起的有序过程。

卷积也可以用数学描述,事实上,它就是一个数学运算,像加法,乘法或导数一样,虽然这个操作本身是复杂的,但是它可以简化更复杂的方程。卷积在物理和工程中大量使用以简化复杂方程,在第二部分中 ,在卷积获得短暂的数学发展之后,我们将在这些科学领域和深度学习之间联系和整合,以获得对卷积的更深的理解。但是现在我们从实际的角度来看卷积。

How do we apply convolution to images?

当我们对图像应用卷积时,我们将其应用在二维上 - 即图像的宽度和高度。 我们混合两个信息桶:第一个桶是输入图像,总共三个像素矩阵 - 每个用于红色,蓝色和绿色通道的矩阵; 像素由每个颜色通道中的0和255之间的整数值组成。 第二个桶是卷积核,浮点数的单个矩阵,其中数字的模式和大小可以被认为是在卷积运算中如何将输入图像与内核交织的方案。内核的输出是改变的图像,其在深度学习中通常被称为特征图。 每个颜色通道都有一个特征地图。

Convolution of an image with an edge detector convolutionkernel.

我们现在通过卷积来执行这两个信息的实际交织。应用卷积的一种方法是从内核大小的输入图像中获取图像块 - 这里我们有一个100×100的图像和一个3×3的内核,所以我们需要3×3的块 - 然后做与图像片和卷积核的元素的乘法。然后该乘法的和导致了特征映射的一个像素。 在已经计算了特征图的一个像素之后,图像块提取器的中心将一个像素滑动到另一个方向,并且重复该计算。 当以这种方式计算特征图的所有像素时,计算结束。此过程可以用以下gif中的一个图像补丁进行说明。

Convolution operation for one pixel of the resultingfeature map: One image patch (red) of theoriginal image (RAM) is multiplied by the kernel, and its sum is written to thefeature map pixel (Buffer RAM).

正如你看到的,还有一个规范化过程,其中输出值通过内核(9)的大小归一化; 这是为了确保图片和特征地图的总强度保持不变。

Why is convolution of images useful in machine learning?

在图像中可能有很多令人分心的信息与我们试图实现的目标不相关。一个很好的例子是我和JannekThomas在Burda Bootcamp合作的项目。Burda Bootcamp是一个快速原型实验室,学生在一个黑客马拉松风格的环境中工作,在非常短的时间内创造技术风险的产品。与我的9个同事一起,我们在2个月内创建了11个产品。在一个项目中,我想用深度自动编码器构建时尚图像搜索:您上传时尚图像,自动编码器应该找到包含类似风格的衣服的图像。

现在如果你想区分衣服的样式,衣服的颜色不会那么有用;还有微小的细节,像品牌的标志将变得不重要。最重要的可能是衣服的形状。通常,衬衫的形状与衬衫,夹克或裤子的形状非常不同。因此,如果我们可以从图像中过滤掉不必要的信息,那么我们的算法不会被诸如颜色和品牌标志等不必要的细节分心。我们可以通过与内核卷积图像轻松实现。

我的同事Jannek Thomas预处理了数据并应用了一个Sobel边缘检测器(类似于上面的内核)来过滤图像中除了对象形状轮廓之外的所有东西 - 这就是为什么卷积的应用通常被称为过滤,内核通常被称为过滤器(这个过滤过程的更精确的定义将在下面描述)。 如果要区分不同类型的衣服,则来自边缘检测器内核的结果特征图将是非常有帮助的,因为仅有与形状相关的信息保留了。

Sobel filtered inputs to and results from the trainedautoencoder: The top-left image is thesearch query and the other images are the results which have an autoencodercode that is most similar to the search query as measured by cosine similarity.You see that the autoencoder really just looks at the shape of the search queryand not its color. However, you can also see that this procedure does not workwell for images of people wearing clothes (5th column) and that it is sensitiveto the shapes of clothes hangers (4th column).

我们可以进一步:有几十个不同的内核,产生许多不同的特征映射。例如,重塑形状(更多细节)或者模糊图像(更少的细节),每个特征图可以帮助我们的算法在其任务上做得更好(细节,例如你的外套上的3个按钮,而不是2个按钮可能是重要的)。

使用这种程序 - 获取输入,变换输入和将变换的输入馈送到算法 - 被称为特征工程。特征工程是非常困难的,只有有很少的资源可以帮助你学习这种技能。因此,很少有人能够将特征工程巧妙地应用于各种各样的任务。特征工程是在Kaggle比赛获得得分很好的最重要的技能。特征工程是如此困难,因为对于每种类型的数据和每种类型的问题,不同的特征做得很好:图像任务的特征工程的知识对于时间序列数据将是非常无用的;即使我们有两个相似的图像任务,也不容易设计好的特征,因为图像中的对象也决定了什么将工作和什么不会。它需要很多经验,使所有这一切正确。

Enter convolutional nets

卷积网络不是在我们的内核中有固定的数字,我们为这些内核分配参数,这些内核将在数据上进行训练。 当我们训练我们的卷积网络时,内核将在对给定图像(或给定特征图)过滤相关信息时变得更好。这个过程是自动的,被称之为特征学习。 特征学习自动推广到每个新任务:我们只需要简单地训练我们的网络来找到与新任务相关的新过滤器。 这就是为什么卷积网络如此强大 - 因为没有特征工程的困难!

通常我们不学习卷积网络中的单个内核,而是同时学习多个内核的层次结构。 例如,应用于256×256图像的32×16×16内核将产生尺寸为241×241的32个特征图(这是标准尺寸,尺寸可以根据实现而变化)。 因此,我们自动学习了32个新特征,其中有相关信息作为我们的任务。这些特性然后为下一个内核提供输入,该内核再次过滤输入。 一旦我们学习了我们的层次特征,我们简单地将它们传递到一个完全连接的,简单的神经网络,将它们组合在一起,以将输入图像分类。这是几乎所有的知道在概念层面的卷积网络。

本文分享自微信公众号 - 鸿的学习笔记(shujuxuexizhilu),作者:鸿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Understanding Convolution in Deep Learning(四)

    我们将在下面看到为何卷积内核会被称为过滤器以及卷积操作通常被描述为过滤操作的原因。

    哒呵呵
  • Understanding Convolution in Deep Learning(二)

    我们现在有一个非常好的直觉,卷积是什么,以及卷积网中发生了什么,为什么卷积网络是如此强大。 但我们可以深入了解卷积运算中真正发生的事情。我们将看到计算卷积的原始...

    哒呵呵
  • 瞎扯 Hadoop 的历史

    在大数据领域里,Hadoop 是谁都绕不开的话题,它基本上已经成为了事实上的标准,无论是什么企业或者是个人,闭源开始开源,都不得不兼容Hadoop生态圈,即使是...

    哒呵呵
  • 深度学习以及卷积基础

    作者:石文华 编辑:龚 赛 介 绍 ? 深度学习是机器学习的一个分支,是基于数据来学习表示数据的一组算法。下面我们列出最受欢迎的一些深度学习算法。 卷...

    机器学习算法工程师
  • ZFNet: Visualizing and Understanding Convolutional Networks (2013) 全文翻译

    作者:Matthew D. Zeiler and Rob Fergus (Dept. of Computer Science, New York Univer...

    魏晓蕾
  • numpy 数组操作

    语法:numpy.arange([start, ] stop, [step, ]dtype=None)

    foochane
  • Go web 开发框架 - Gin 简述

    Gin 的英文意思是 杜松子酒,在它的官方介绍中提到了它的API 风格是 和 martini 相像的( martini-like )。而 martini 也是一...

    zhangyunfeiVir
  • 基于面部照片的亲属关系预测的深度神经网络

    https://www.kaggle.com/c/recognizing-faces-in-the-wild/data

    代码医生工作室
  • HDFS ACL权限设置

    今天主要给大家说一下HDFS文件权限的问题。当一个普通用户去访问HDFS文件时,可能会报Permission denied的错误。那么你会怎么做呢?

    create17
  • 使用向导快速创建SpringBoot项目

    桑鱼

扫码关注云+社区

领取腾讯云代金券