2.卷积神经网络基础

卷积神经网络概论(Convolutional Neural Network,CNN)

卷积神经网络基础

​ 与普通神经网络相比,卷积神经网络有一些特殊的层,也有一些卷积神经网络中特有的专有名词,本文将会逐一介绍。

全连接层(Fully Connected Layer)

​ 全连接层可以理解为神经网络基础中的“隐藏层”。(同样的,包含权重向量

W

W

W和激活(激励)函数)

​ 对于全连接层的作用,举个例子:

  1. 有一张32 x 32 x 3的图片(宽和高为32px,有RGB三个通道,因此可以理解为32 x 32 x 3的矩阵)

  2. 先将其拉伸为3072 x 1的向量作为神经网络的输入,然后和权重向量

    W

    W

    W做点乘,再通过激活函数(Sigmoid 或 Tanh)

  3. 输出结果,这个就是全连接层的最终结果

特征层(Feature map) & 特征向量

  • 特征向量:
  • 特征层:
    • 当激活后的结果为二维向量时,我们称之为特征层(有时也叫激活层,activation map)

卷积层(Convolution Layer)

​ 和全连接层不同,卷积层保留了图像的空间特征。(即图片不需要Like全连接层,不做图片的“拉伸”)

​ 为了了解卷积层的过程,先来了解相关名词:

卷积核(Kernel)

​ 卷积核,常常简称为**“卷积”,有时也称为滤波器**(filter)

​ 卷积的大小通常是自定义的长和宽(常常设置为1 x 1,3 x 3,5 x 5等),但是高应该与输入图片的通道数目一致

步长(Stride)

​ 步长是指卷积在输入图片上移动时,需要移动的像素(px)数。

  • s

    t

    r

    i

    d

    e

    =

    1

    stride=1

    stride=1,每次移动1px,则计算过程不会跳过任何像素

  • s

    t

    r

    i

    d

    e

    =

    2

    stride=2

    stride=2,每次移动2px……

感受野

​ 卷积每次滑动所覆盖的范围,在图像处理中叫“感受野”。

​ 下面来了解具体的卷积过程:

  1. 一维卷积:

    例子1
    • 条件:

      S

      t

      r

      i

      d

      e

      =

      1

      ,

      K

      e

      r

      n

      e

      l

      =

      1

      3

      I

      n

      p

      u

      t

      =

      1

      7

      Stride=1,Kernel=1*3,Input=1*7

      Stride=1,Kernel=13Input=17

    • 过程:

在这里插入图片描述
卷积计算:

A

=

i

=

1

3

I

n

p

u

t

i

K

e

r

n

e

l

i

=

5

10

+

2

5

+

6

11

=

126

A=\sum_{i=1}^{3}{Input_i*Kernel_i}=5*10+2*5+6*11=126

A=i=13InputiKerneli=510+25+611=126

B

=

.

.

.

B=…

B=...

​ 以此类推

最终获得一个

1

5

O

u

t

p

u

t

1*5的Output

15Output

例子2
  • 条件:

    S

    t

    r

    i

    d

    e

    =

    2

    ,

    K

    e

    r

    n

    e

    l

    =

    1

    3

    I

    n

    p

    u

    t

    =

    1

    7

    Stride=2,Kernel=1*3,Input=1*7

    Stride=2,Kernel=13Input=17

  • 过程:

在这里插入图片描述
卷积计算同例子1

最终获得一个

1

3

O

u

t

p

u

t

1*3的Output

13Output

  1. 二维卷积

    例子3(一个正常的例子)
    • 条件:

      S

      t

      r

      i

      d

      e

      =

      1

      ,

      K

      e

      r

      n

      e

      l

      =

      3

      3

      I

      n

      p

      u

      t

      =

      7

      7

      Stride=1,Kernel=3*3,Input=7*7

      Stride=1,Kernel=33Input=77

    • 过程:

在这里插入图片描述
卷积计算同例子1(自行举一反三)

最终会获得一个

5

5

O

u

t

p

u

t

5*5的Output

55Output

例子4(一个错误的例子)
  • 条件:

    S

    t

    r

    i

    d

    e

    =

    3

    ,

    K

    e

    r

    n

    e

    l

    =

    3

    3

    I

    n

    p

    u

    t

    =

    7

    7

    Stride=3,Kernel=3*3,Input=7*7

    Stride=3,Kernel=33Input=77

  • 过程:

    由于行列性质一样,这里只观察列:

    计算过程中,卷积覆盖到的列:

    (

    1

    ,

    2

    ,

    3

    )

    (

    4

    ,

    5

    ,

    6

    )

    (

    7

    ,

    ?

    ,

    ?

    )

    (1,2,3)-(4,5,6)-(7,?,?)

    (1,2,3)(4,5,6)(7,?,?)

    此时很明显,第三次卷积计算的时候,有两列不存在(不存在8,9列)。

    因此这个卷积是有错误的,在最后缺少输入——没法计算。

  1. 三维卷积(多了一个卷积堆叠)

    例子5

    • 条件:

      S

      t

      r

      i

      d

      e

      =

      1

      ,

      K

      e

      r

      n

      e

      l

      =

      5

      5

      3

      I

      n

      p

      u

      t

      =

      32

      32

      3

      Stride=1,Kernel=5*5*3,Input=32*32*3

      Stride=1,Kernel=553Input=32323

    • 过程:

在这里插入图片描述
还是做点乘,且每一次滑动都将带来

5

5

3

=

75

5*5*3=75

553=75的计算量。

最终生成了一个

28

28

1

28*28*1

28281

O

u

t

p

u

t

Output

Output,即前面所讲的特征层(feature map)。

但是!!!一个卷积是远远不够的

我们再定义多个不同的卷积(分别完成不同的任务),进行卷积计算。

这里我们直接定义6个不同的卷积(

K

e

r

n

e

l

/

F

i

l

t

e

r

Kernel/Filter

Kernel/Filter),进行卷积计算。

最终的特征层将是一个

28

28

6

28*28*6

28286的新Output
在这里插入图片描述

卷积神经网络

所有应该学的基础知识你都学到了,那么现在,可以正式介绍卷积神经网络了。

卷积神经网络是由一系列卷积层经过激活来得到的。

接下来要介绍一种更加通用的卷积形式:

  • 先介绍一个常用方法——填充(Pad),如:在

    7

    7

    7*7

    77

    I

    n

    p

    u

    t

    Input

    Input周围做一个像素的填充,变成

    8

    8

    8*8

    88

  • 这里给出通用卷积层的计算公式:

    • 条件:

      • 输入图像

        I

        n

        p

        u

        t

        =

        W

        1

        H

        1

        D

        1

        Input=W_1*H_1*D_1

        Input=W1H1D1(代表宽+高+通道[channel])

      • $Kernel=F*F

        ,个数为

        K$

      • P

        a

        d

        Pad

        Pad大小为

        P

        P

        P

    • 那么经过卷积后的第二层,

      O

      u

      t

      p

      u

      t

      Output

      Output的宽+高+通道[channel]为:

      W

      2

      =

      W

      1

      F

      +

      2

      P

      S

      +

      1

      W_2=\frac{W_1-F+2P}{S}+1

      W2=SW1F+2P+1

      H

      2

      =

      H

      1

      F

      +

      2

      P

      S

      +

      1

      H_2=\frac{H_1-F+2P}{S}+1

      H2=SH1F+2P+1

      D

      2

      =

      K

      D_2=K

      D2=K

  • 例子6

    • 条件:

      S

      t

      r

      i

      d

      e

      =

      1

      ,

      K

      e

      r

      n

      e

      l

      =

      5

      5

      3

      K

      =

      10

      P

      a

      d

      =

      2

      I

      n

      p

      u

      t

      =

      32

      32

      3

      Stride=1,Kernel=5*5*3,K=10,Pad=2,Input=32*32*3

      Stride=1,Kernel=553K=10Pad=2Input=32323

    • 通过以上条件可以计算出,特征层(feature map)的大小为

      32

      32

      10

      32*32*10

      323210,同时每个Kernel的参数个数是

      5

      5

      3

      +

      1

      =

      76

      5*5*3+1=76

      553+1=76(

      +

      1

      +1

      +1表示

      b

      i

      a

      s

      bias

      bias)。

    • 因此这一层需要学习的参数个数为

      76

      10

      =

      760

      76*10=760

      7610=760

在这里插入图片描述

通过一层层的卷积运算(包括点乘+激活(激励)函数),就得到了一个卷积的神经网络。


与传统的神经网络不同的是,卷积层的计算是包含了空间信息的。

池化层

池化(

p

o

o

l

i

n

g

pooling

pooling)——是对图片进行压缩(也叫“降采样”)的一种方法。

​ 池化的方法有很多,如:

  • M

    a

    x

     

    p

    o

    o

    l

    i

    n

    g

    Max\space pooling

    Max pooling:选”感受野“中权值最大的作为池化层的参数。

  • A

    v

    e

    r

    a

    g

    e

     

    p

    o

    o

    l

    i

    n

    g

    Average\space pooling

    Average pooling:计算”感受野“中的平均权值作为池化层的参数。

同样的,这里给出通用池化层的计算公式:

  • 条件:

    S

    t

    r

    i

    d

    e

    =

    S

    Stride=S

    Stride=S,池化

    K

    e

    r

    n

    e

    l

    =

    F

    F

    I

    n

    p

    u

    t

    =

    W

    1

    H

    1

    D

    1

    Kernel=F*F,Input=W_1*H_1*D_1

    Kernel=FFInput=W1H1D1(代表宽+高+通道[channel])​

  • 那么经过池化操作之后,

    O

    u

    t

    p

    u

    t

    Output

    Output的宽+高+通道[channel]为:

    W

    2

    =

    W

    1

    F

    S

    +

    1

    W_2=\frac{W_1-F}{S}+1

    W2=SW1F+1

    H

    2

    =

    H

    1

    F

    S

    +

    1

    H_2=\frac{H_1-F}{S}+1

    H2=SH1F+1

    D

    2

    =

    D

    1

    D_2=D_1

    D2=D1

  • 例子7

    一个

    4

    4

    4*4

    44的特征层,经过池化

    K

    e

    r

    n

    e

    l

    =

    2

    2

    ,

    S

    t

    r

    i

    d

    e

    =

    2

    Kernel=2*2,Stride=2

    Kernel=22,Stride=2

    M

    a

    x

     

    p

    o

    o

    l

    i

    n

    g

    Max \space pooling

    Max pooling池化操作后,可以得到一个2*2的特征层。如图:

在这里插入图片描述

在绝大多数情况下,卷积层+池化层+激活层,几乎是一个整体般共同出现

批规范化层(BatchNorm Layer)

​ 批规范化层——是为了加速神经网络的收敛过程以及提高训练中的稳定性。

​ Batch——几张图片同时传入网络前向计算,误差为 batch 中所有图片的误差累计。

​ BatchNorm方法——对一个batch 中的数据根据公式作归一化:

x

p

r

e

d

i

c

t

(

k

)

=

x

k

E

[

k

]

V

a

r

(

x

k

)

x_{predict(k)}=\frac{x_k-E[k]}{\sqrt{Var(x_k)}}

xpredict(k)=Var(xk)
xkE[k]
(说实话,我tm也不是很懂)


版权声明:本文为qq_44932672原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。