深度学习笔记之卷积神经网络(一)卷积函数与图像卷积操作

news/2024/11/16 21:55:34/

深度学习笔记之卷积神经网络——卷积函数

  • 引言
    • 什么是卷积
    • 图像卷积操作

引言

从本节开始,将介绍卷积神经网络。本节将介绍卷积函数

什么是卷积

卷积,是一种通过两个函数 f ( ⋅ ) 和 f(\cdot)和 f() g ( ⋅ ) g(\cdot) g()生成第三个函数 h ( ⋅ ) h(\cdot) h()数学运算。而这个数学运算本质上是一种积分变换

这里选择两个例子:

  • 此时我们手中有 2 2 2组牌,每组牌中包含 5 5 5张牌,并且牌中的数字分别是 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5
    两组牌堆
    假设各 CardPile \text{CardPile} CardPile中每张牌选择的概率是相同的,我们的任务是: CardPile1 \text{CardPile1} CardPile1中随机选择一张牌,再从 CardPile2 \text{CardPile2} CardPile2中随机选择一张牌,两张牌中数字之和等于 6 6 6概率是多少 ? ? ?
    我们可以通过概率的方式进行求解:
    每个 CardPile \text{CardPile} CardPile中,每张牌被选择的概率均是 1 5 \begin{aligned}\frac{1}{5}\end{aligned} 51,我们令变量 C 1 \mathcal C_1 C1表示 CArdPile1 \text{CArdPile1} CArdPile1中选择牌的数字;令 C 2 \mathcal C_2 C2表示 CardPile2 \text{CardPile2} CardPile2中选择牌的数字。那么上述任务的概率结果可表示为如下形式:
    P ( C 1 + C 2 = 6 ) = P ( C 1 = 1 ) ⋅ P ( C 2 = 5 ) + P ( C 1 = 2 ) ⋅ P ( C 2 = 4 ) + ⋯ + P ( C 1 = 5 ) ⋅ P ( C 2 = 1 ) ⏟ 5 项 = ∑ i = 1 5 P ( C 1 = i ) ⋅ P ( C 2 = 6 − i ) = 5 ⋅ 1 5 ⋅ 1 5 = 1 5 \begin{aligned} \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) & = \underbrace{\mathcal P(\mathcal C_1 = 1) \cdot \mathcal P(\mathcal C_2 = 5) + \mathcal P(\mathcal C_1 = 2) \cdot \mathcal P(\mathcal C_2 = 4) + \cdots + \mathcal P(\mathcal C_1 = 5) \cdot \mathcal P(\mathcal C_2 = 1)}_{5项} \\ & = \sum_{i=1}^5\mathcal P(\mathcal C_1 = i) \cdot \mathcal P(\mathcal C_2 = 6-i) \\ & = 5 \cdot \frac{1}{5} \cdot \frac{1}{5} \\ & = \frac{1}{5} \end{aligned} P(C1+C2=6)=5 P(C1=1)P(C2=5)+P(C1=2)P(C2=4)++P(C1=5)P(C2=1)=i=15P(C1=i)P(C2=6i)=55151=51
    基于该示例,我们可以将任务看做是目标值的一个函数:
    P ( C 1 + C 2 = 6 ) ⇒ h ( x = 6 ) \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) \Rightarrow h(x = 6) P(C1+C2=6)h(x=6)
    而对应选择各 CardPile \text{CardPile} CardPile概率结果分别对应不同的函数:
    P ( C 1 = i ) ⇒ f ( i ) P ( C 2 = 6 − i ) = g ( x − i ) ( x = 6 ) \mathcal P(\mathcal C_1 = i) \Rightarrow f(i)\quad \mathcal P(\mathcal C_2 = 6-i) = g(x -i) \quad (x=6) P(C1=i)f(i)P(C2=6i)=g(xi)(x=6)
    最终将上述任务转化为如下形式:
    h ( x = 6 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( x ) ∗ g ( x ) \begin{aligned} h(x = 6) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = f(x) *g(x) \end{aligned} h(x=6)=i=15f(i)g(xi)=f(x)g(x)
    而上式中的 ∗ * 就表示卷积( Convolution \text{Convolution} Convolution)。这个卷积结果函数 h ( x ) h(x) h(x)可被描述为:函数 f ( ⋅ ) f(\cdot) f() g ( ⋅ ) g(\cdot) g()经过翻转、平移重叠部分函数值乘积对重叠长度的积分。
    上述例子当 x = 6 x = 6 x=6时, f ( ⋅ ) f(\cdot) f() g ( ⋅ ) g(\cdot) g()重叠部分有哪些 ? ? ?
    x = 6 x=6 x=6任务目标下,每一个函数 f ( i ) f(i) f(i)在范围内都能找到对应的‘重叠部分’ g ( x − i ) g(x-i) g(xi).
    重叠部分
    如果是 x = 7 x=7 x=7 ? ? ?
    很明显,重叠部分小了。因为 f ( 1 ) f(1) f(1)在任务 x = 7 x=7 x=7中范围内没有与其构成的重叠部分 g ( 6 ) g(6) g(6).
    x=7重叠部分
    对应的卷积结果表示如下:
    h ( x = 7 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( 1 ) ⋅ g ( 6 ) ⏟ g ( 6 ) = P ( C 2 = 6 ) = 0 + ∑ i = 2 5 f ( i ) ⋅ g ( x − i ) = 4 25 \begin{aligned} h(x = 7) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = \underbrace{f(1) \cdot g(6)}_{g(6)=\mathcal P(\mathcal C_2 = 6) =0} + \sum_{i=2}^5 f(i) \cdot g(x-i) \\ & = \frac{4}{25} \end{aligned} h(x=7)=i=15f(i)g(xi)=g(6)=P(C2=6)=0 f(1)g(6)+i=25f(i)g(xi)=254

  • 假设某个人一天的进食情况表示如下。其中横坐标表示时间;纵坐标表示进食的量(这里使用摄入的能量表示,单位是 Kcal \text{Kcal} Kcal):
    图像来源见下方链接,侵删,下同。
    某人一天的进食情况
    很明显,这个人摄入的能量和时间长度 t t t之间构成了一个复杂函数 f ( t ) f(t) f(t)。其中的三个波峰可以理解为正餐(三餐所在时刻)他的能量摄入情况;其余的时间他也没闲着,也在吃一些零食来摄入能量,只不过要低于正餐时能量的摄入。

    当然,人在摄入能量的同时,也在消耗能量。这里以最简单的食物消化为例,不包含如跑步等其他消耗能量的方式,随着时间推移,他的能量消耗情况表示为如下形式:
    需要注意的是,‘能量消耗’图像中的横坐标 t t t和‘摄入能量’图像中的横坐标 t t t不是相同的参考系。一个是‘时刻’,一个是时间跨度。
    某人的能量消耗情况
    其中横坐标表示时长,纵坐标表示能量消耗的比率。例如,在刚吃完食物那一刻,还没有来得及消耗,此时的比率为 1 1 1。随着时间的推移,能量的消耗,比率值逐渐降低,能量越来越少。

    至此,具体任务描述:下午两点时,这个人剩余多少能量 ? ? ?

    • 如果只看他的摄入,对应的能量就是一个从开始到下午两点之间的能量摄入的积分
      摄入能量的积分
    • 但是他在摄入能量的时候,也在消耗之前摄入的能量。 例如中午 12 12 12,他吃了一碗米饭。到下午两点已经过去 2 2 2个小时,这个米饭的能量自然存在因消化产生的能量消耗
      吃饭时,消化产生的能量消耗
      那么具体消化了多少呢?需要从消化函数 g ( t ) g(t) g(t)中寻找 2 2 2个小时对应的消化比率
      消化比率计算
      至此,可以知道:中午 12 12 12点摄入的能量在 14 14 14点时的剩余能量 f ( 12 ) ⋅ g ( 14 − 12 ) f(12) \cdot g(14 - 12) f(12)g(1412)
      但这仅仅是一个时刻的摄入。其他时刻也在摄入能量。因而我们需要将所有时刻摄入的能量,经过消化比率对能量进行调整(加权),最终得到 14 14 14点时实际剩余的能量:
      由于时刻是一个连续变量,从而使用积分的形式描述。而 x x x则表示该示例中定积分 0 → t 0\to t 0t之间的任意一个时刻。
      ∫ 0 t = 14 f ( x ) ⋅ g ( t − x ) d x \int_0^{t=14} f(x) \cdot g(t-x) dx 0t=14f(x)g(tx)dx

根据上述两个例子,我们可以发现它们的共性根据任务的描述,基于函数 f ( x ) f(x) f(x)中的某个值 x x x,需要在 g ( ⋅ ) g(\cdot) g()中找到对应的结果对 f ( x ) f(x) f(x)进行修饰/描述,最终将这些被修饰的结果相加。

图像卷积操作

关于图像的描述,我们可以将其视作一个三维矩阵。它的维度具体表示为 ( H , W , C ) (\mathcal H,\mathcal W,\mathcal C) (H,W,C),其中 H \mathcal H H表示图片的 ( Height ) (\text{Height}) (Height),也就是矩阵的行数; W \mathcal W W表示图片的 ( Width ) (\text{Width}) (Width),表示矩阵的列数。 C \mathcal C C表示图片的通道数

  • 如果图像是黑白图像,那么图片通道数 C = 1 \mathcal C = 1 C=1,该随机变量可选取(0-255)的整数结果表示基于黑白颜色之间的颜色信息;
  • 如果图像是彩色图像,那么图片的通道数 C = 3 \mathcal C = 3 C=3,每个通道表示图片的一种颜色 ( RGB ) (\text{RGB}) (RGB),每个颜色同样选取(0-255)的整数结果表示对应颜色的信息。而三个通道确定的数值结果就是像素点的颜色信息。

图像卷积操作是使用一个点阵(这里以 H , W \mathcal H,\mathcal W H,W均为3的矩阵为例)与图像矩阵进行操作,这个点阵也被称作卷积核 ( Convolution Kernel ) (\text{Convolution Kernel}) (Convolution Kernel)

  • 将卷积核在原始图像上,卷积核上的元素与原图像所映射的元素对应位置相乘,再将所有位置的乘积结果相加。而计算结果作为一个新的像素值,作为卷积结果的输出。
    图像卷积操作
  • 很明显,这种相乘再相加的操作就是卷积计算的思想。同理,将当前卷积结果计算完成后,继续向其他位置平移,从而得到新的像素结果。最终能够得到由新的像素结果构成的新的图像。

不可否认,这个操作看起来是简单的。并且也能从中观察到卷积操作的影子,但问题在于:为什么要用卷积去处理这个事情,这种操作背后的物理意义是什么 ? ? ?

回顾上面吃饭的例子,可通过观察发现:描述食物消化的函数是稳定的,人的消化函数不会发生剧烈的变化胖子和瘦子他们的消化函数可能存在差别,但不会出现一天一种结果;相反,人摄入能量的函数相比于消化函数存在更大的波动。

因而上面的卷积函数可以理解为:从时间角度观察,某一时刻的卷积结果可看做之前时刻对该时刻结果影响的叠加,而每一个叠加的项是由当前时刻的状态 f ( x ) f(x) f(x)与描述其规律 g ( t − x ) g(t -x) g(tx)加权结果

如果从空间角度观察呢 ? ? ? 很明显图像数据就可看作摄入能量函数,各个图像某位置的像素点的差异是较大的;但是我们的卷积核是确定的,我们可以根据不同的卷积核描述不同的任务,但相同任务下对卷积核的描述是稳定的

而将卷积核与被卷积核覆盖的像素点做卷积最终生成一个像素点这个过程可以描述为这个生成的新像素点包含了该位置周围的像素点信息,也就是说,卷积核规定了周围像素点如何对该像素点产生影响的
即该位置各个方向的像素点信息通过‘某种规律加权的方式’映射在了该位置上。

一个明显的例子就是平滑操作。它的卷积核可表示为如下形式(示例):平滑操作
这个卷积核对应的卷积操作就是将被卷积核覆盖的像素点取均值。最终卷积后产生的新图像的结果会存在一种模糊的效果。

相关参考:
卷积——百度百科
从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变


http://www.ppmy.cn/news/60660.html

相关文章

出海的中国企业,为什么有80%都选择了这家云服务商?

对于想要出海的中国企业来说,什么样的云服务才是他们的最佳选择? 中国企业出海驶入快车道 中国企业的出海大潮,多年来一直方兴未艾,并且得到了政府部门的大力支持。这股“走出去”的热潮,一方面对内有利于推动产业升级…

销售数据分析怎么做?这篇文章说清楚了

如何分析销售数据?分析销售数据有哪些指标?销售数据分析有什么作用? 销售数据是不是得通过数据分析软件啊? 本文将为您解答疑惑—— 一、分析销售数据的指标 从两个层面上来讲,一个是对销售情况的整体把控&#xf…

I.MX6Q-SDB开发板移植ubuntu

I.MX6Q-SDB开发板移植ubuntu 0.前言一、准备工作二、ubuntu移植1.下载ubuntu发布的根文件系统2.根文件系统的简单修改3.板卡适配设置4.打包根文件系统 三、烧写镜像1.dd命令2.uuu工具3.mfgtool工具4.i.mx6q-sdb的拨码设置: 四、大无语事件 0.前言 这两天收拾杂货堆&…

【Python入门知识】NumPy 数组搜索,案例+理论讲解

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 搜索数组 可以在数组中搜索(检索)某个值,然后返回获得匹配的索引。 要搜索数组,请使用 where() 方法。 实例 查找值为 4 的索引: import numpy as nparr np.…

第三代移动通信技术(3G)

第三代移动通信采用码分多址(CDMA)技术,现已基本形成了三大主流技术,包括有:W-CDMA、CDMA-2000和TD-SCDMA。这三种技术都属于宽带CDMA技术,都能在静止状态下提供2Mbius的数据传输速率。但这三种技术在工作模…

Spring事务隔离级别详解

Spring有五大隔离级别: 1、ISOLATION_DEFAULT 2、ISOLATION_READ_UNCOMMITTED 3、ISOLATION_READ_COMMITTED 4、ISOLATION_REPEATABLE_READ 5、ISOLATION_SERIALIZABLE ISOLATION_DEFAULT 用底层数据库的设置隔离级别。 ISOLATION_READ_UNCOMMITTED 一个事…

Linux内核结构体“file_operations“ 初始化以及内存占用分析

01🙆‍♂️起因 在学习字符设备驱动的时候,看到Linux内核中的结构体的指定初始化方式(designated initializer)使用方式,之前没有见过这种初始化形式,做一点探索。 /* 字符设备操作集 */ static struct f…

【单目标优化算法】海鸥优化算法(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …