神经网络

前面线性分类器中得分函数s=Wxs=Wxxx是输入图像的像素值,如在CIFAR-10中,是3024×13024 \times 1的列向量,W是10×302410 \times 3024的矩阵,得到的ss10×110 \times 1的列向量,是10个类别的得分。

  • 2层神经网络:s=W2max(0,W1x)s=W_{2}\max (0,W_{1}x)

    CS231n学习笔记五

  • 3层神经网络:s=W3max(0,W2max(0,W1x))s=W_{3}\max (0, W_{2}\max (0,W_{1}x))

通常中间层是非线性函数,除了max(0,-)函数,也可以是其他非线性函数,如果不是非线性函数,W1,W2W_{1},W_{2}就可以合成一个矩阵了。W1,W2W_{1},W_{2}可以通过随机梯度法学习得到。

上述网络层就是全连接层,神经元与前一层中的所有**元(前一层的输出)都有完全的连接,因此,它们的**可以通过矩阵乘法和偏置偏移来计算。

神经网络的历史

  1. 1957年Frank Rosenblatt 发明了第一代线性感知机也就是感知算法,输出只的值只有0和1,权重更新方式与反向传播类似。但是此时反向传播算法并未发明。
  2. 1960年widerow和hoff发明了adaline和madaline首次尝试多层感知器网络,此时反向传播算法仍然未出现。
  3. 1986年rumeelhart提出了反向传播算法,出现了链式法则,出现了让网络工作的核心算法。 之后的一大阵时期神经网络无人问津,因为算力和数据的限制。
  4. 2006年hinton发表了一篇论文表明神经网络不仅可以训练而且可以很高效的训练,此时的神经网络与现在还是有所不同,权重需要使用限制玻尔兹曼机来预训练。

实际上在2012年神经网络才第一次取得了惊人的效果,神经网络狂潮爆发了,第一个被贡献的领域就是声音领域。hinton用神经网络对声音建模和语音识别。然后就是图像领域Alex首次使用卷积神经网络取得了图像分类比赛的惊人成绩。 从此之后神经网络就开始被人们广泛应用。

卷积神经网络历史

  1. Hubel与Wisel在1956-1968年对猫的大脑做实验发现,使用不同的形状让猫看然后测试神经元的反应。
  2. 1998年 严乐春使用神经网络识别邮政编码效果极好,被广泛应用在手写体识别上但是没有办法应用在更具有挑战更复杂的数据上。
  3. 2012年Alex提出了现在常用的卷积神经网络Alexnet,充分发挥了imagenet与Gpu的优势从此以后神经网络被用在各个任务上,如图像分类、图像检索:使用NN提取特征然后进行匹配、图像检测、图像分割 、人脸识别 、姿态识别 、游戏中、医疗诊断 、星系分类等。

卷积层

卷积层与全连接层的区别:不像全连接层那样把图像像素值拉成一个一维向量,卷积层仍然保持图像的三维结构,权重是一些小的卷积核(如下图是5×5×35 \times 5 \times 3的filter),将该卷积核在整个图像上滑动,计算出每一个空间点的点积
CS231n学习笔记五
每一个卷积核都能得到一个**映射,如下图,假设有6个不同的filter,最后得到6个**映射。

CS231n学习笔记五

输出图像尺寸大小的计算

卷积核的深度(第三个维度)是与图像深度(通道数)一致,假设输入图像是W1×H1×D1W_{1} \times H_{1} \times D_{1},卷积核大小是F×F×D1F \times F \times D_{1},假设有K个卷积核,滑动步长为stride。

  1. 在没有对边缘进行零填补(zero-padding)时:

W2=W1Fstride+1H2=H1Fstride+1 W_{2}=\frac{W_{1}-F}{stride}+1\\ H_{2}=\frac{H_{1}-F}{stride}+1

​ 所以输出大小为W2×H2×KW_{2} \times H_{2} \times K

  1. 有zero-padding时:

    假设对图像的每个边缘填补P个像素边框,如下图所示,这里P等于1

CS231n学习笔记五

W2=W1+2×PFstride+1H2=H1+2×PFstride+1 W_{2}=\frac{W_{1}+2\times P-F}{stride}+1\\ H_{2}=\frac{H_{1}+2\times P-F}{stride}+1

​ 所以输出大小为W2×H2×KW_{2} \times H_{2} \times K

  • 填充的目的保持输入图像的尺寸,如果有多个网络层,不进行填充,输出图像的尺寸会迅速减小,因此会损失一些信息。

  • 卷积核的个数K通常为2的次幂。

参数计算

对于K个F×F×MF \times F \times M卷积核,每个卷积核的参数为F×F×MF \times F \times M,还需要加上一个偏差参数,所以最后需要(F×F×M+1)×K(F\times F\times M+1)\times K个参数。

卷积层通常的设置

K为2的次幂,如32,64,128等。

  1. F = 3,stride = 1,P = 1
  2. F = 5,stride = 1,P = 2
  3. F = 1,stride = 1,P = 0

池化层

为了让生成的表示更小更容易控制,这样最后的参数会更少。
CS231n学习笔记五
池化只是在平面上降采样,深度不会改变。

最大池化

CS231n学习笔记五

在池化时,通常希望滑动窗口不会重叠,而且不会进行填充。

输出尺寸计算和卷积层中计算方式一样

filter是F×FF\times F
W2=W1Fstride+1H2=H1Fstride+1 W_{2}=\frac{W_{1}-F}{stride}+1\\ H_{2}=\frac{H_{1}-F}{stride}+1
输出大小为W2×H2×D1W_{2} \times H_{2} \times D_{1}

通常的设置:

  1. F = 2,stride = 2

  2. F = 3,stride = 3

    整个网络的大概结构

CS231n学习笔记五

  • 在最后是一个全连接层,将前面得到的权重矩阵再拉成一个向量。

  • 中间层中,RELU和POOL没有参数,CONV和FC有参数

相关文章: