关闭

卷积神经网络(cnn)学习笔记1:入门

762人阅读 评论(0) 收藏 举报
分类:

卷积神经网络


       卷积神经网络(Convolutional Neural Network,CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN 的。CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的前期预处理过程(提取人工特征等),可以直接输入原始图像。
       图像处理中,往往会将图像看成是一个或多个的二维向量(黑白图片,只有一个颜色通道;如果是RGB表示的彩色图片则有三个颜色通道,可表示为三张二维向量)。传统的神经网络都是采用全连接的方式,即输入层到隐藏层的神经元都是全部连接的,这样做将导致参数巨大,使得网络训练耗时甚至难以训练,而CNN则通过局部连接,权值共享等方法避免这一困难,有趣的是这些方法都是受到现代生物神经网络相关研究的启发(感兴趣可以阅读以下部分)


下面重点介绍下CNN中的局部连接(Sparse Connectivity)和权值共享(Shared Weights)方法,理解它们很重要。

局部连接与权值共享

下图是一个很经典的图示,左边是全连接,右边是局部连接。














    对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。

      尽管减少了几个数量级,但参数数量依然较多。能不能再进一步减少呢?能!方法就是权值共享。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小),如下图。


      这大概就是CNN的一个神奇之处,尽管只有这么少的参数,依旧有出色的性能。但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,可以增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为Feature Map。如果有100个卷积核,最终的权值参数也仅为100(每个卷积核需要的参数数目) × 100 (卷积核数)= 10^4个而已。另外,偏置参数也是共享的,同一种滤波器共享一个。

      此外,隐藏层的参数个数和隐藏层的神经元个数无关,只和滤波器的大小和滤波器种类的的多少有关。那么隐藏层的神经元个数怎么确定呢?它和原图像,也就是输入的大小,滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是1000*1000像素,而滤波器的大小是10*10,假设滤波器没有重叠,也就是补偿为10,这样隐藏层的神经元个数就是(1000*1000)/(10*10)=100*100个神经元。

    需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1 。这个也是同一种滤波器共享的。

      卷积神经网络的核心思想是:局部感受野(local field),权值共享以及时间或空间亚采样这三种思想结合起来,获得了某种程度的位移、尺度、形变不变性。

转载来源:http://www.jeyzhang.com/cnn-learning-notes-1.html


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21631次
    • 积分:655
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:6篇
    • 译文:4篇
    • 评论:1条
    最新评论